diff options
author | Fangrui Song <maskray@google.com> | 2019-11-01 13:49:42 -0700 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-11-05 08:40:39 -0800 |
commit | ade55d07871040d0e75b94e3d3a1eaecbd704d36 (patch) | |
tree | 6543054d707ef3d5a01cd306f01f99714059347c /llvm/tools/llvm-objcopy/ELF/Object.cpp | |
parent | 03bf229bd44df4bbbc02c3512a095f5ed075f9da (diff) | |
download | llvm-ade55d07871040d0e75b94e3d3a1eaecbd704d36.zip llvm-ade55d07871040d0e75b94e3d3a1eaecbd704d36.tar.gz llvm-ade55d07871040d0e75b94e3d3a1eaecbd704d36.tar.bz2 |
[llvm-objcopy][ELF] Add OriginalType & OriginalFlags
`llvm::objcopy::elf::*Section::classof` matches Type and Flags, yet Type
and Flags are mutable (by setSectionFlagsAndTypes and upcoming
--only-keep-debug feature). Add OriginalType & OriginalFlags to be used
in classof, to prevent classof results from changing.
Reviewed By: jakehehrlich, jhenderson, alexshap
Differential Revision: https://reviews.llvm.org/D69739
Diffstat (limited to 'llvm/tools/llvm-objcopy/ELF/Object.cpp')
-rw-r--r-- | llvm/tools/llvm-objcopy/ELF/Object.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/tools/llvm-objcopy/ELF/Object.cpp b/llvm/tools/llvm-objcopy/ELF/Object.cpp index bbf7ff3..4798c8f 100644 --- a/llvm/tools/llvm-objcopy/ELF/Object.cpp +++ b/llvm/tools/llvm-objcopy/ELF/Object.cpp @@ -1009,7 +1009,7 @@ void GnuDebugLinkSection::init(StringRef File) { Size = alignTo(FileName.size() + 1, 4) + 4; // The CRC32 will only be aligned if we align the whole section. Align = 4; - Type = ELF::SHT_PROGBITS; + Type = OriginalType = ELF::SHT_PROGBITS; Name = ".gnu_debuglink"; // For sections not found in segments, OriginalOffset is only used to // establish the order that sections should go in. By using the maximum @@ -1521,8 +1521,8 @@ template <class ELFT> void ELFBuilder<ELFT>::readSectionHeaders() { } auto &Sec = makeSection(Shdr); Sec.Name = unwrapOrError(ElfFile.getSectionName(&Shdr)); - Sec.Type = Shdr.sh_type; - Sec.Flags = Shdr.sh_flags; + Sec.Type = Sec.OriginalType = Shdr.sh_type; + Sec.Flags = Sec.OriginalFlags = Shdr.sh_flags; Sec.Addr = Shdr.sh_addr; Sec.Offset = Shdr.sh_offset; Sec.OriginalOffset = Shdr.sh_offset; |