免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2529 | 回复: 2
打印 上一主题 下一主题

请问在声明的结构变量前加__user是什么意思? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-07 09:51 |只看该作者 |倒序浏览
例如在
/usr/include/linux/netfilter_ipv4/ip_tables.h 里有:
struct xt_counters __user *counters;
导致我编译一些应用程序时此句总通不过.可以将__user去掉吗?

论坛徽章:
0
2 [报告]
发表于 2007-11-07 10:33 |只看该作者
是定义在linux/compiler.h里的宏,可据说新的版本内核不在有该头文件了

论坛徽章:
0
3 [报告]
发表于 2007-11-07 10:43 |只看该作者
解决问题了,没有删掉该宏,而是把compiler.h头文件加上了(相同内核版本的).
但它的用处我还是不太明白.
我从网上找了一篇文章:
以前在 MSDN 版曾提到过 Windows 的 Prefast,Linux 内核开发也有类似的东西,
叫做 sparse,编译内核的时候 make C=1 或者 make C=2,就会调用 sparse,同时
定义 __CHECKER__ 预处理宏。

检查的方式都很类似,就是加伪关键字,微软加在 __declspec__ 里,sparse 则
加在 __attribute__ 里,异曲同工啊。

include/linux/compiler.h
#ifdef __CHECKER__
7 # define __user         __attribute__((noderef, address_space(1)))
8 # define __kernel       /* default address space */
9 # define __safe         __attribute__((safe))
10 # define __force        __attribute__((force))
11 # define __nocast       __attribute__((nocast))
12 # define __iomem        __attribute__((noderef, address_space(2)))
13 # define __acquires(x)  __attribute__((context(0,1)))
14 # define __releases(x)  __attribute__((context(1,0)))
15 # define __acquire(x)   __context__(1)
16 # define __release(x)   __context__(-1)
17 # define __cond_lock(x) ((x) ? ({ __context__(1); 1; }) : 0)
18 extern void __chk_user_ptr(void __user *);
19 extern void __chk_io_ptr(void __iomem *);
20 #else
21 # define __user
22 # define __kernel
23 # define __safe
24 # define __force
25 # define __nocast
26 # define __iomem
27 # define __chk_user_ptr(x) (void)0
28 # define __chk_io_ptr(x) (void)0
29 # define __builtin_warning(x, y...) (1)
30 # define __acquires(x)
31 # define __releases(x)
32 # define __acquire(x) (void)0
33 # define __release(x) (void)0
34 # define __cond_lock(x) (x)
35 #endif

这些陌生的 __attribute__ 里的东西都是 gcc 文档理查不到的,这些就是 sparse
认识的东西了,程序员使用这些新的 __attribute__ 提供更多地语义,sparse 则为
程序员做更多的检查。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP