动态加载库的对齐部分

时间:2013-08-25 06:37:40

标签: assembly ld

GNU汇编程序支持将节对齐到边界。在此示例程序中可以看到此功能的使用:

// test.S
    .section foo,"aw"
    .p2align 20
    .global foo_start
foo_start:
    .ascii "A"

// main.c
#include 
extern char foo_start;
int main(void) {
    printf("%c\n", foo_start); // force libtest.so to be loaded
    printf("%p\n", &foo_start);
}

当此程序静态链接时,我们会看到该部分已正确对齐:

ezyang@javelin:~/Dev/labs/reloc$ gcc test.S main.c -g && ./a.out
A
0x700000

但是,当动态加载库时,这不起作用:

ezyang@javelin:~/Dev/labs/reloc$ gcc test.S  -shared -o libtest.so -fPIC
ezyang@javelin:~/Dev/labs/reloc$ gcc -Wl,-R`pwd` -L. main.c -ltest -g -O0
-fPIC && ./a.out
/usr/bin/ld: warning: type and size of dynamic symbol `foo_start' are not
defined
A
0x7f012f9e7000

有没有办法让动态链接器尊重对齐请求大于页面?也许使用大页面?

0 个答案:

没有答案