diff options
author | Fangrui Song <maskray@google.com> | 2019-10-24 15:48:32 -0700 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-11-05 08:56:15 -0800 |
commit | 5ad0103d8a04cb066dfae4fc20b0dfcd9413f4d4 (patch) | |
tree | 65dcbcfccb35bf5353a1bfac0b665bbf7421e1e4 /llvm/docs/CommandGuide | |
parent | ade55d07871040d0e75b94e3d3a1eaecbd704d36 (diff) | |
download | bcm5719-llvm-5ad0103d8a04cb066dfae4fc20b0dfcd9413f4d4.tar.gz bcm5719-llvm-5ad0103d8a04cb066dfae4fc20b0dfcd9413f4d4.zip |
[llvm-objcopy][ELF] Implement --only-keep-debug
--only-keep-debug produces a debug file as the output that only
preserves contents of sections useful for debugging purposes (the
binutils implementation preserves SHT_NOTE and non-SHF_ALLOC sections),
by changing their section types to SHT_NOBITS and rewritting file
offsets.
See https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
The intended use case is:
```
llvm-objcopy --only-keep-debug a a.dbg
llvm-objcopy --strip-debug a b
llvm-objcopy --add-gnu-debuglink=a.dbg b
```
The current layout algorithm is incapable of deleting contents and
shrinking segments, so it is not suitable for implementing the
functionality.
This patch adds a new algorithm which assigns sh_offset to sections
first, then modifies p_offset/p_filesz of program headers. It bears a
resemblance to lld/ELF/Writer.cpp.
Reviewed By: jhenderson, jakehehrlich
Differential Revision: https://reviews.llvm.org/D67137
Diffstat (limited to 'llvm/docs/CommandGuide')
-rw-r--r-- | llvm/docs/CommandGuide/llvm-objcopy.rst | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/docs/CommandGuide/llvm-objcopy.rst b/llvm/docs/CommandGuide/llvm-objcopy.rst index f4211069fd8..e9b58d245e7 100644 --- a/llvm/docs/CommandGuide/llvm-objcopy.rst +++ b/llvm/docs/CommandGuide/llvm-objcopy.rst @@ -67,6 +67,15 @@ multiple file formats. Print a summary of command line options. +.. option:: --only-keep-debug + + Produce a debug file as the output that only preserves contents of sections + useful for debugging purposes. + + For ELF objects, this removes the contents of `SHF_ALLOC` sections that are not + `SHT_NOTE` by making them `SHT_NOBITS` and shrinking the program headers where + possible. + .. option:: --only-section <section>, -j Remove all sections from the output, except for sections named ``<section>``. @@ -177,11 +186,6 @@ The following options are implemented only for COFF objects. If used with other objects, :program:`llvm-objcopy` will either emit an error or silently ignore them. -.. option:: --only-keep-debug - - Remove the contents of non-debug sections from the output, but keep the section - headers. - ELF-SPECIFIC OPTIONS -------------------- |