[PATCH] D23315: [ELF] - Separate common output sections factory from one that linkerscript uses.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 9 06:46:35 PDT 2016


grimar created this revision.
grimar added reviewers: ruiu, rafael.
grimar added subscribers: llvm-commits, grimar, davide, evgeny777.
Herald added a subscriber: emaste.

Currenly when linking FreeBSD kernel LLD produces 7 different .rodata sections because of difference
in attributes:

>   [ 6] .rodata           PROGBITS         ffffffff80c87c8c  00c86c8c
>        00000000000e6e4d  0000000000000001 AMS       0     0     1
>   [ 7] .rodata           PROGBITS         ffffffff80d6eae0  00d6dae0
>        0000000000246f00  0000000000000000   A       0     0     32
>   [ 8] .rodata           PROGBITS         ffffffff80fb59e0  00fb49e0
>        00000000000001f0  0000000000000010  AM       0     0     16
>   [ 9] .rodata           PROGBITS         ffffffff80fb5bd0  00fb4bd0
>        00000000000002a0  0000000000000004 AMS       0     0     16
>   [10] .rodata           PROGBITS         ffffffff80fb5e70  00fb4e70
>        0000000000000108  0000000000000008  AM       0     0     8
>   [11] .rodata           PROGBITS         ffffffff80fb5f78  00fb4f78
>        000000000000000c  0000000000000004 AMS       0     0     4
>   [12] .rodata           PROGBITS         ffffffff80fb5f88  00fb4f88
>        0000000000001158  0000000000000001 AMS       0     0     8

At the same time ld produce only one. That probably means we need to use different logic for
creating output sections when do scripted layout.

Patch stops exporting regular output sections factory and introduces new one for using from
linker script side. That allowed to implement combining of output sections with different attributes.

Currently implemention does not support combine of SHT_MERGE sections with non-SHT_MERGE. But I believe
it should be not hard to implement basing on these new changes. One of possible way probably would be
to do scan of input sections to find out if there is a mix of "aM" vs "a" for example, and if so - do not create
megreable output section, but create regular one that should support adding mergeable input sections
as regular ones.

https://reviews.llvm.org/D23315

Files:
  ELF/Driver.cpp
  ELF/LinkerScript.cpp
  ELF/LinkerScript.h
  ELF/OutputSections.cpp
  ELF/OutputSections.h
  ELF/Writer.cpp
  test/ELF/linkerscript/linkerscript-merge-sections.s
  test/ELF/linkerscript/linkerscript-repsection-va.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23315.67329.patch
Type: text/x-patch
Size: 17294 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160809/df2c51a6/attachment.bin>


More information about the llvm-commits mailing list