diff options
author | Alexander Shaposhnikov <shal1t712@gmail.com> | 2018-03-21 19:53:44 +0000 |
---|---|---|
committer | Alexander Shaposhnikov <shal1t712@gmail.com> | 2018-03-21 19:53:44 +0000 |
commit | 6ecc6e62c1742ccf6e0d0e8f4f055c53e21d0141 (patch) | |
tree | 25fe902d7d7369289fe7cd8b8d9d1585fe2c1a59 /llvm/test/tools/llvm-objcopy/group-big-endian.test | |
parent | 989d94ddde604503b29098e7e9430bfe7baa588a (diff) | |
download | bcm5719-llvm-6ecc6e62c1742ccf6e0d0e8f4f055c53e21d0141.tar.gz bcm5719-llvm-6ecc6e62c1742ccf6e0d0e8f4f055c53e21d0141.zip |
[llvm-objcopy] Implement support for section groups
This diff adds support for SHT_GROUP sections to llvm-objcopy.
Some sections are interrelated and comprise a group.
For example, a definition of an inline function might require,
in addition to the section containing its instructions,
a read-only data section containing literals referenced inside the function.
A section of the type SHT_GROUP contains the indices of the group members,
therefore, it needs to be updated whenever the indices change.
Similarly, the fields sh_link, sh_info should be recalculated as well.
[Resubmit r328012 with the proper handling of endianness]
Test plan: make check-all
Differential revision: https://reviews.llvm.org/D43996
llvm-svn: 328143
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/group-big-endian.test')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/group-big-endian.test | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/group-big-endian.test b/llvm/test/tools/llvm-objcopy/group-big-endian.test new file mode 100644 index 00000000000..d5a02607113 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/group-big-endian.test @@ -0,0 +1,56 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -remove-section=.text.bar %t %t2 +# RUN: llvm-readobj -elf-section-groups %t2 | FileCheck %s + +# In this test the section .text.bar is getting removed, as a result, +# the indices of the sections which go after .text.bar will change, +# thus the fields Link, Info and the content of .group should be updated. + +# CHECK: Name: .group +# CHECK-NEXT: Index: 1 +# CHECK-NEXT: Link: 3 +# CHECK-NEXT: Info: 2 +# CHECK-NEXT: Type: COMDAT (0x1) +# CHECK-NEXT: Signature: foo +# CHECK: .text.foo (2) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2MSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .group + Type: SHT_GROUP + Link: .symtab + AddressAlign: 0x0000000000000004 + Info: foo + Members: + - SectionOrType: GRP_COMDAT + - SectionOrType: .text.foo + - Name: .text.bar + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000000010 + - Name: .text.foo + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] + AddressAlign: 0x0000000000000010 +Symbols: + Local: + - Name: .text.bar + Type: STT_SECTION + Section: .text.bar + - Name: .text.foo + Type: STT_SECTION + Section: .text.foo + Weak: + - Name: bar + Type: STT_FUNC + Section: .text.bar + Size: 0x0000000000000000 + - Name: foo + Type: STT_FUNC + Section: .text.foo + Size: 0x0000000000000000 |