特定部分的特殊功能

时间:2015-02-05 03:03:57

标签: linux-kernel

我想在特定部分中加入一些功能

我补充说 包括/ 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)

错过警告,我猜我的部分定义不好。

感谢

1 个答案:

答案 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

请注意,某些编译选项最终可能会重新组合部分。