1
+ use core:: num:: NonZeroUsize ;
2
+
1
3
use gdbstub:: arch:: RegId ;
2
4
3
5
/// FPU register identifier.
@@ -115,10 +117,10 @@ pub enum X86CoreRegId {
115
117
}
116
118
117
119
impl RegId for X86CoreRegId {
118
- fn from_raw_id ( id : usize ) -> Option < ( Self , usize ) > {
120
+ fn from_raw_id ( id : usize ) -> Option < ( Self , Option < NonZeroUsize > ) > {
119
121
use self :: X86CoreRegId :: * ;
120
122
121
- let r = match id {
123
+ let ( r , sz ) : ( X86CoreRegId , usize ) = match id {
122
124
0 => ( Eax , 4 ) ,
123
125
1 => ( Ecx , 4 ) ,
124
126
2 => ( Edx , 4 ) ,
@@ -136,7 +138,8 @@ impl RegId for X86CoreRegId {
136
138
40 => ( Mxcsr , 4 ) ,
137
139
_ => return None ,
138
140
} ;
139
- Some ( r)
141
+
142
+ Some ( ( r, Some ( NonZeroUsize :: new ( sz) ?) ) )
140
143
}
141
144
}
142
145
@@ -167,10 +170,10 @@ pub enum X86_64CoreRegId {
167
170
}
168
171
169
172
impl RegId for X86_64CoreRegId {
170
- fn from_raw_id ( id : usize ) -> Option < ( Self , usize ) > {
173
+ fn from_raw_id ( id : usize ) -> Option < ( Self , Option < NonZeroUsize > ) > {
171
174
use self :: X86_64CoreRegId :: * ;
172
175
173
- let r = match id {
176
+ let ( r , sz ) : ( X86_64CoreRegId , usize ) = match id {
174
177
0 ..=15 => ( Gpr ( id as u8 ) , 8 ) ,
175
178
16 => ( Rip , 8 ) ,
176
179
17 => ( Eflags , 4 ) ,
@@ -181,7 +184,8 @@ impl RegId for X86_64CoreRegId {
181
184
56 => ( Mxcsr , 4 ) ,
182
185
_ => return None ,
183
186
} ;
184
- Some ( r)
187
+
188
+ Some ( ( r, Some ( NonZeroUsize :: new ( sz) ?) ) )
185
189
}
186
190
}
187
191
@@ -208,7 +212,7 @@ mod tests {
208
212
let mut i = 0 ;
209
213
let mut sum_reg_sizes = 0 ;
210
214
while let Some ( ( _, size) ) = RId :: from_raw_id ( i) {
211
- sum_reg_sizes += size;
215
+ sum_reg_sizes += size. unwrap ( ) . get ( ) ;
212
216
i += 1 ;
213
217
}
214
218
0 commit comments