diff options
author | Fangrui Song <i@maskray.me> | 2024-04-15 00:48:51 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2024-04-15 00:48:51 -0700 |
commit | 07942987b58558a8bcb2cfb7d8bc3d46b1cb1d2b (patch) | |
tree | b41205fe9f6c4c67483344f8b4f4ab97f8612835 /llvm/docs/CommandGuide/llvm-objcopy.rst | |
parent | 302d0f3476c0fc68d796e7b8a0d4237121ec33fe (diff) | |
download | llvm-07942987b58558a8bcb2cfb7d8bc3d46b1cb1d2b.zip llvm-07942987b58558a8bcb2cfb7d8bc3d46b1cb1d2b.tar.gz llvm-07942987b58558a8bcb2cfb7d8bc3d46b1cb1d2b.tar.bz2 |
[llvm-objcopy] Add --compress-sections
--compress-sections is similar to --compress-debug-sections but applies
to arbitrary sections.
* `--compress-sections <section>=none`: decompress sections
* `--compress-sections <section>=[zlib|zstd]`: compress sections with zlib/zstd
Like `--remove-section`, the pattern is by default a glob, but a regex
when --regex is specified.
For `--remove-section` like options, `!` prevents matches and is not
dependent on ordering (see `ELF/wildcard-syntax.test`). Since
`--compress-sections a=zlib --compress-sections a=none` naturally allows
overriding, having an order-independent `!` would be confusing.
Therefore, `!` is disallowed.
Sections within a segment are effectively immutable. Report an error for
an attempt to (de)compress them. `SHF_ALLOC` sections in a relocatable
file can be compressed, but linkers usually reject them.
Note: Before this patch, a compressed relocation section is recognized
as a `RelocationSectionBase` as well and `removeSections` `!ToRemove(*ToRelSec)`
may incorrectly interpret a `CompressedSections` as `RelocationSectionBase`,
leading to ubsan failure for the new test. Fix this by setting
`OriginalFlags` in CompressedSection::CompressedSection.
Link: https://discourse.llvm.org/t/rfc-compress-arbitrary-sections-with-ld-lld-compress-sections/71674
Pull Request: https://github.com/llvm/llvm-project/pull/85036
Diffstat (limited to 'llvm/docs/CommandGuide/llvm-objcopy.rst')
-rw-r--r-- | llvm/docs/CommandGuide/llvm-objcopy.rst | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/docs/CommandGuide/llvm-objcopy.rst b/llvm/docs/CommandGuide/llvm-objcopy.rst index 985d16e..57d6280 100644 --- a/llvm/docs/CommandGuide/llvm-objcopy.rst +++ b/llvm/docs/CommandGuide/llvm-objcopy.rst @@ -309,6 +309,14 @@ them. Compress DWARF debug sections in the output, using the specified format. Supported formats are ``zlib`` and ``zstd``. Use ``zlib`` if ``<format>`` is omitted. +.. option:: --compress-sections <section>=<format> + + Compress or decompress sections matched by ``<section>`` using the specified + format. Supported formats are ``zlib`` and ``zstd``. Specify ``none`` for + decompression. When a section is matched by multiple options, the last one + wins. A wildcard ``<section>`` starting with '!' is disallowed. + Sections within a segment cannot be (de)compressed. + .. option:: --decompress-debug-sections Decompress any compressed DWARF debug sections in the output. |