GNU链接器-使用链接器在自定义部分中排序

时间:2018-07-01 20:55:10

标签: gnu linker-scripts

是否有一种方法可以在GNU链接器的手动部分中创建与常规部分相同的排序顺序?

这显然会生成一个紧凑的.data段: 从链接描述文件中提取:

    .data BLOCK(__section_alignment__) :
   {
      __data_start__ = . ;
      *(.data)
      *(SORT(.data$*))
      __data_end__ = . ;
    }

输出:从.map文件中提取:

    .data           0x96a63000    0xbb600
                    0x96a63000                __data_start__ = .
     *(.data)
     .data          0x96a63000        0x0 obj1.o
     .data          0x96a63000        0x4 obj2.o
     .data          0x96a63004        0x0 obj3.o
     ...

但是,如果通过分配对象的子集来使用自定义节(data.test),则将包括整个对象内容。

从链接描述文件中提取:

    .data.test BLOCK(__section_alignment__) :
   {
      __data_start__ = . ;
      obj1.o 
      obj2.o (.data)
      *(SORT(.data$*))
      __data_end__ = . ;
    }

从.map文件中提取:

    .data.test      0x64868000     0x342b0c00
     obj1.o()
     .data          0x64868000        0x0 obj1.o
     .bss           0x64868000        0x0 obj1.o
     .rdata$zzz     0x64868000      0x278 obj1.o
     .debug_info    0x64868278      0x180 obj1.o
     .debug_abbrev  0x648683f8       0x1e obj1.o
     .debug_aranges
                    0x64868416       0x18 obj1.o
     .debug_macro   0x6486842e    0x11eb4 obj1.o
     .debug_line    0x6487a2e2      0x1e1 obj1.o
     .debug_str     0x6487a4c3        0x0 obj1.o
     obj2.o()
     *fill*         0x6487a4c3        0x1 
     .data          0x6487a4c4        0x0 obj2.o
     .bss           0x6487a4c4        0x0 obj2.o
     .rdata$zzz     0x6487a4c4      0x278 obj2.o
     .debug_info    0x6487a73c      0x180 obj2.o
     .debug_abbrev  0x6487a8bc       0x1e obj2.o
     .debug_aranges
                    0x6487a8da       0x18 obj2.o
     .debug_macro   0x6487a8f2    0x11eb4 obj2.o
     .debug_line    0x6488c7a6      0x1e1 obj2.o
     .debug_str     0x6488c987        0x0 obj2.o

有什么办法可以避免这种情况?我想念什么?

0 个答案:

没有答案