[llvm-objcopy] Implement support for section groups
authorAlexander Shaposhnikov <shal1t712@gmail.com>
Wed, 21 Mar 2018 19:53:44 +0000 (19:53 +0000)
committerAlexander Shaposhnikov <shal1t712@gmail.com>
Wed, 21 Mar 2018 19:53:44 +0000 (19:53 +0000)
commit6ecc6e62c1742ccf6e0d0e8f4f055c53e21d0141
tree25fe902d7d7369289fe7cd8b8d9d1585fe2c1a59
parent989d94ddde604503b29098e7e9430bfe7baa588a
[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
llvm/test/tools/llvm-objcopy/Inputs/groups.o [new file with mode: 0644]
llvm/test/tools/llvm-objcopy/group-big-endian.test [new file with mode: 0644]
llvm/test/tools/llvm-objcopy/group-unchanged.test [new file with mode: 0644]
llvm/test/tools/llvm-objcopy/group.test [new file with mode: 0644]
llvm/test/tools/llvm-objcopy/strip-dwo-groups.test [new file with mode: 0644]
llvm/tools/llvm-objcopy/Object.cpp
llvm/tools/llvm-objcopy/Object.h