diff options
| author | James Henderson <jh7370@my.bristol.ac.uk> | 2019-04-18 09:13:30 +0000 |
|---|---|---|
| committer | James Henderson <jh7370@my.bristol.ac.uk> | 2019-04-18 09:13:30 +0000 |
| commit | 66a9d0f8c6c90d4235d23d190be5494f06763c57 (patch) | |
| tree | 3fd82196841a8e8156164207e55f37e3ff56e412 /llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp | |
| parent | 4c994120c7cfeb011d4811b9bbe81235295f34e1 (diff) | |
| download | bcm5719-llvm-66a9d0f8c6c90d4235d23d190be5494f06763c57.tar.gz bcm5719-llvm-66a9d0f8c6c90d4235d23d190be5494f06763c57.zip | |
[llvm-objcopy][llvm-strip] Add switch to allow removing referenced sections
llvm-objcopy currently emits an error if a section to be removed is
referenced by another section. This is a reasonable thing to do, but is
different to GNU objcopy. We should allow users who know what they are
doing to have a way to produce the invalid ELF. This change adds a new
switch --allow-broken-links to both llvm-strip and llvm-objcopy to do
precisely that. The corresponding sh_link field is then set to 0 instead
of an error being emitted.
I cannot use llvm-readelf/readobj to test the link fields because they
emit an error if any sections, like the .dynsym, cannot be properly
loaded.
Reviewed by: rupprecht, grimar
Differential Revision: https://reviews.llvm.org/D60324
llvm-svn: 358649
Diffstat (limited to 'llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp')
| -rw-r--r-- | llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp index ca0507d5735..7e991169124 100644 --- a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp @@ -250,7 +250,8 @@ static Error splitDWOToFile(const CopyConfig &Config, const Reader &Reader, auto OnlyKeepDWOPred = [&DWOFile](const SectionBase &Sec) { return onlyKeepDWOPred(*DWOFile, Sec); }; - if (Error E = DWOFile->removeSections(OnlyKeepDWOPred)) + if (Error E = DWOFile->removeSections(Config.AllowBrokenLinks, + OnlyKeepDWOPred)) return E; if (Config.OutputArch) { DWOFile->Machine = Config.OutputArch.getValue().EMachine; @@ -547,7 +548,7 @@ static Error replaceAndRemoveSections(const CopyConfig &Config, Object &Obj) { return &Obj.addSection<DecompressedSection>(*CS); }); - return Obj.removeSections(RemovePred); + return Obj.removeSections(Config.AllowBrokenLinks, RemovePred); } // This function handles the high level operations of GNU objcopy including |

