@@ -83,39 +83,25 @@ static int regwindow32_set(struct task_struct *target,
83
83
84
84
static int genregs32_get (struct task_struct * target ,
85
85
const struct user_regset * regset ,
86
- unsigned int pos , unsigned int count ,
87
- void * kbuf , void __user * ubuf )
86
+ struct membuf to )
88
87
{
89
88
const struct pt_regs * regs = target -> thread .kregs ;
90
89
u32 uregs [16 ];
91
- int ret ;
92
90
93
91
if (target == current )
94
92
flush_user_windows ();
95
93
96
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
97
- regs -> u_regs ,
98
- 0 , 16 * sizeof (u32 ));
99
- if (ret || !count )
100
- return ret ;
101
-
94
+ membuf_write (& to , regs -> u_regs , 16 * sizeof (u32 ));
95
+ if (!to .left )
96
+ return 0 ;
102
97
if (regwindow32_get (target , regs , uregs ))
103
98
return - EFAULT ;
104
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
105
- uregs ,
106
- 16 * sizeof (u32 ), 32 * sizeof (u32 ));
107
- if (ret )
108
- return ret ;
109
-
110
- uregs [0 ] = regs -> psr ;
111
- uregs [1 ] = regs -> pc ;
112
- uregs [2 ] = regs -> npc ;
113
- uregs [3 ] = regs -> y ;
114
- uregs [4 ] = 0 ; /* WIM */
115
- uregs [5 ] = 0 ; /* TBR */
116
- return user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
117
- uregs ,
118
- 32 * sizeof (u32 ), 38 * sizeof (u32 ));
99
+ membuf_write (& to , uregs , 16 * sizeof (u32 ));
100
+ membuf_store (& to , regs -> psr );
101
+ membuf_store (& to , regs -> pc );
102
+ membuf_store (& to , regs -> npc );
103
+ membuf_store (& to , regs -> y );
104
+ return membuf_zero (& to , 2 * sizeof (u32 ));
119
105
}
120
106
121
107
static int genregs32_set (struct task_struct * target ,
@@ -179,46 +165,18 @@ static int genregs32_set(struct task_struct *target,
179
165
180
166
static int fpregs32_get (struct task_struct * target ,
181
167
const struct user_regset * regset ,
182
- unsigned int pos , unsigned int count ,
183
- void * kbuf , void __user * ubuf )
168
+ struct membuf to )
184
169
{
185
- const unsigned long * fpregs = target -> thread .float_regs ;
186
- int ret = 0 ;
187
-
188
170
#if 0
189
171
if (target == current )
190
172
save_and_clear_fpu ();
191
173
#endif
192
174
193
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
194
- fpregs ,
195
- 0 , 32 * sizeof (u32 ));
196
-
197
- if (!ret )
198
- ret = user_regset_copyout_zero (& pos , & count , & kbuf , & ubuf ,
199
- 32 * sizeof (u32 ),
200
- 33 * sizeof (u32 ));
201
- if (!ret )
202
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
203
- & target -> thread .fsr ,
204
- 33 * sizeof (u32 ),
205
- 34 * sizeof (u32 ));
206
-
207
- if (!ret ) {
208
- unsigned long val ;
209
-
210
- val = (1 << 8 ) | (8 << 16 );
211
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
212
- & val ,
213
- 34 * sizeof (u32 ),
214
- 35 * sizeof (u32 ));
215
- }
216
-
217
- if (!ret )
218
- ret = user_regset_copyout_zero (& pos , & count , & kbuf , & ubuf ,
219
- 35 * sizeof (u32 ), -1 );
220
-
221
- return ret ;
175
+ membuf_write (& to , target -> thread .float_regs , 32 * sizeof (u32 ));
176
+ membuf_zero (& to , sizeof (u32 ));
177
+ membuf_write (& to , & target -> thread .fsr , sizeof (u32 ));
178
+ membuf_store (& to , (u32 )((1 << 8 ) | (8 << 16 )));
179
+ return membuf_zero (& to , 64 * sizeof (u32 ));
222
180
}
223
181
224
182
static int fpregs32_set (struct task_struct * target ,
@@ -263,7 +221,7 @@ static const struct user_regset sparc32_regsets[] = {
263
221
.core_note_type = NT_PRSTATUS ,
264
222
.n = 38 ,
265
223
.size = sizeof (u32 ), .align = sizeof (u32 ),
266
- .get = genregs32_get , .set = genregs32_set
224
+ .regset_get = genregs32_get , .set = genregs32_set
267
225
},
268
226
/* Format is:
269
227
* F0 --> F31
@@ -279,35 +237,24 @@ static const struct user_regset sparc32_regsets[] = {
279
237
.core_note_type = NT_PRFPREG ,
280
238
.n = 99 ,
281
239
.size = sizeof (u32 ), .align = sizeof (u32 ),
282
- .get = fpregs32_get , .set = fpregs32_set
240
+ .regset_get = fpregs32_get , .set = fpregs32_set
283
241
},
284
242
};
285
243
286
244
static int getregs_get (struct task_struct * target ,
287
245
const struct user_regset * regset ,
288
- unsigned int pos , unsigned int count ,
289
- void * kbuf , void __user * ubuf )
246
+ struct membuf to )
290
247
{
291
248
const struct pt_regs * regs = target -> thread .kregs ;
292
- u32 v [4 ];
293
- int ret ;
294
249
295
250
if (target == current )
296
251
flush_user_windows ();
297
252
298
- v [0 ] = regs -> psr ;
299
- v [1 ] = regs -> pc ;
300
- v [2 ] = regs -> npc ;
301
- v [3 ] = regs -> y ;
302
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
303
- v ,
304
- 0 * sizeof (u32 ), 4 * sizeof (u32 ));
305
- if (ret )
306
- return ret ;
307
-
308
- return user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
309
- regs -> u_regs + 1 ,
310
- 4 * sizeof (u32 ), 19 * sizeof (u32 ));
253
+ membuf_store (& to , regs -> psr );
254
+ membuf_store (& to , regs -> pc );
255
+ membuf_store (& to , regs -> npc );
256
+ membuf_store (& to , regs -> y );
257
+ return membuf_write (& to , regs -> u_regs + 1 , 15 * sizeof (u32 ));
311
258
}
312
259
313
260
static int setregs_set (struct task_struct * target ,
@@ -339,29 +286,15 @@ static int setregs_set(struct task_struct *target,
339
286
340
287
static int getfpregs_get (struct task_struct * target ,
341
288
const struct user_regset * regset ,
342
- unsigned int pos , unsigned int count ,
343
- void * kbuf , void __user * ubuf )
289
+ struct membuf to )
344
290
{
345
- const unsigned long * fpregs = target -> thread .float_regs ;
346
- int ret = 0 ;
347
-
348
291
#if 0
349
292
if (target == current )
350
293
save_and_clear_fpu ();
351
294
#endif
352
-
353
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
354
- fpregs ,
355
- 0 , 32 * sizeof (u32 ));
356
- if (ret )
357
- return ret ;
358
- ret = user_regset_copyout (& pos , & count , & kbuf , & ubuf ,
359
- & target -> thread .fsr ,
360
- 32 * sizeof (u32 ), 33 * sizeof (u32 ));
361
- if (ret )
362
- return ret ;
363
- return user_regset_copyout_zero (& pos , & count , & kbuf , & ubuf ,
364
- 33 * sizeof (u32 ), 68 * sizeof (u32 ));
295
+ membuf_write (& to , & target -> thread .float_regs , 32 * sizeof (u32 ));
296
+ membuf_write (& to , & target -> thread .fsr , sizeof (u32 ));
297
+ return membuf_zero (& to , 35 * sizeof (u32 ));
365
298
}
366
299
367
300
static int setfpregs_set (struct task_struct * target ,
@@ -390,11 +323,11 @@ static int setfpregs_set(struct task_struct *target,
390
323
static const struct user_regset ptrace32_regsets [] = {
391
324
[REGSET_GENERAL ] = {
392
325
.n = 19 , .size = sizeof (u32 ),
393
- .get = getregs_get , .set = setregs_set ,
326
+ .regset_get = getregs_get , .set = setregs_set ,
394
327
},
395
328
[REGSET_FP ] = {
396
329
.n = 68 , .size = sizeof (u32 ),
397
- .get = getfpregs_get , .set = setfpregs_set ,
330
+ .regset_get = getfpregs_get , .set = setfpregs_set ,
398
331
},
399
332
};
400
333
0 commit comments