Linux kernel 宏展开竟然如此方便,惊了

在我看Per CPU 变量的过程中偶遇一个方法,记录一下。
原文:微信文章

我观察到,我看的那部分代码里有如下定义
static DEFINE_PER_CPU(struct cpuhp_cpu_state, cpuhp_state) = {
.fail = CPUHP_INVALID,
};

然后我一点点展开。。。(Five years later…)

#define DEFINE_PER_CPU(type, name)					\
	DEFINE_PER_CPU_SECTION(type, name, "")

#define DEFINE_PER_CPU_SECTION(type, name, sec)		\
	__PCPU_ATTRS(sec) __typeof__(type) name

#define __PCPU_ATTRS(sec)						\
	__percpu __attribute__((section(PER_CPU_BASE_SECTION sec)))	\
	PER_CPU_ATTRIBUTES

#define PER_CPU_BASE_SECTION ".data..percpu"

太多了,尼玛有完没完了到底 😊. 遂立即使用新方法。步骤如下:

  1. 找到该文件对应的.o.cmd后缀的文件
  2. 打开该文件,在该文件中找到以gcc编译命令开头的一大串编译命令
gcc -巴拉巴拉一大堆
  1. 在gcc命令后增加 -save-temps=obj 选项
gcc -save-temps=obj -巴拉巴拉一大堆
  1. 新的命令拿到kernel中去运行,会发现与.c同一目录出现一后缀为.i的同名新文件,即可在该文件找到对应宏展开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值