当前位置: 技术问答>linux和unix
请教高人:下面一段代码中的__ret_gu语句做何用途,还有switch语句的default分支:__get_user_x()中的第一个参数“X”好像未声明,如何编
来源: 互联网 发布时间:2015-09-16
本文导语: #define get_user(x,ptr) ({ int __ret_gu,__val_gu; switch(sizeof (*(ptr))) { case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; ...
#define get_user(x,ptr)
({ int __ret_gu,__val_gu;
switch(sizeof (*(ptr))) {
case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break;
case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break;
case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break;
default: __get_user_x(X,__ret_gu,__val_gu,ptr); break;
}
(x) = (__typeof__(*(ptr)))__val_gu;
__ret_gu;
})
调用上下文:
static int count(char ** argv, int max)
{
int i = 0;
if (argv != NULL) {
for (;;) {
char * p;
int error;
error = get_user(p,argv);
if (error)
return error;
if (!p)
break;
argv++;
if(++i > max)
return -E2BIG;
}
}
return i;
}
({ int __ret_gu,__val_gu;
switch(sizeof (*(ptr))) {
case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break;
case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break;
case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break;
default: __get_user_x(X,__ret_gu,__val_gu,ptr); break;
}
(x) = (__typeof__(*(ptr)))__val_gu;
__ret_gu;
})
调用上下文:
static int count(char ** argv, int max)
{
int i = 0;
if (argv != NULL) {
for (;;) {
char * p;
int error;
error = get_user(p,argv);
if (error)
return error;
if (!p)
break;
argv++;
if(++i > max)
return -E2BIG;
}
}
return i;
}
|
up!也是一个宏
|
猜测是将函数的返回值放到寄存器里。因为汇编可以这样作为返回值。
也许用“被调函数清栈”的编译方式,可以这样作为函数返回的方式吧。
也许用“被调函数清栈”的编译方式,可以这样作为函数返回的方式吧。