我想在特定部分中加入一些功能
我补充说 包括/ ASM-通用/ vmlinux.lds.h:
#define MY_TEXT \
ALIGN_FUNCTION(); \
VMLINUX_SYMBOL(__my_text_start) = .; \
*(.my.text) \
VMLINUX_SYMBOL(__my_text_end) = .;
拱/臂/内核/ vmlinux.lds.S:
...
TEXT_TEXT
MY_TEXT
SCHED_TEXT
...
我的代码:
#define __my __attribute__((section(".my.text")))
int __my my_test(int i)
{
...
...
}
但编译器显示:
/tmp/ccp1mtiA.s:汇编程序消息:
/tmp/ccp1mtiA.s:13:警告:为.my.text设置错误的部分类型
/tmp/ccp1mtiA.s:13:警告:为.my.text设置不正确的部分属性
如何修复警告? 我改为
int __sche my_test(int i)
错过警告,我猜我的部分定义不好。
感谢
答案 0 :(得分:0)
您可以使用section
属性控制代码的各个部分(几乎逐字地从gcc docs获取):
#include <stdio.h>
extern void foobar (void) __attribute__ ((section (.bar.text)));
void foobar()
{
printf("asdf");
}
int main()
{
foobar();
}
使用gcc -o sec.exe sec.cpp
构建。检查objdump -h sec.exe
的输出,我们看到一个名为.bar.text的部分:
sec.exe: file format pei-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00001d10 0000000000401000 0000000000401000 00000400 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bar.text 0000001c 0000000000403000 0000000000403000 00002200 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .data 000000a0 0000000000404000 0000000000404000 00002400 2**4
CONTENTS, ALLOC, LOAD, DATA
3 .rdata 00000978 0000000000405000 0000000000405000 00002600 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .pdata 00000240 0000000000406000 0000000000406000 00003000 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .xdata 0000020c 0000000000407000 0000000000407000 00003400 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .bss 000009b0 0000000000408000 0000000000408000 00000000 2**5
ALLOC
7 .idata 000007c8 0000000000409000 0000000000409000 00003800 2**2
CONTENTS, ALLOC, LOAD, DATA
8 .CRT 00000068 000000000040a000 000000000040a000 00004000 2**3
CONTENTS, ALLOC, LOAD, DATA
9 .tls 00000068 000000000040b000 000000000040b000 00004200 2**5
CONTENTS, ALLOC, LOAD, DATA
10 .debug_aranges 00000050 000000000040c000 000000000040c000 00004400 2**4
CONTENTS, READONLY, DEBUGGING
11 .debug_info 00000df5 000000000040d000 000000000040d000 00004600 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_abbrev 00000087 000000000040e000 000000000040e000 00005400 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_line 00000119 000000000040f000 000000000040f000 00005600 2**0
CONTENTS, READONLY, DEBUGGING
14 .debug_frame 00000048 0000000000410000 0000000000410000 00005800 2**3
CONTENTS, READONLY, DEBUGGING
请注意,某些编译选项最终可能会重新组合部分。