66 Commits

Author SHA1 Message Date
Simon Pilgrim
3f5a6f992c Fix MSVC "not all control paths return a value" warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375214 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-18 09:59:40 +00:00
Jordan Rupprecht
c86b9d718d [llvm-objcopy] Add support for shell wildcards
Summary: GNU objcopy accepts the --wildcard flag to allow wildcard matching on symbol-related flags. (Note: it's implicitly true for section flags).

The basic syntax is to allow *, ?, \, and [] which work similarly to how they work in a shell. Additionally, starting a wildcard with ! causes that wildcard to prevent it from matching a flag.

Use an updated GlobPattern in libSupport to handle these patterns. It does not fully match the `fnmatch` used by GNU objcopy since named character classes (e.g. `[[:digit:]]`) are not supported, but this should support most existing use cases (mostly just `*` is what's used anyway).

Reviewers: jhenderson, MaskRay, evgeny777, espindola, alexshap

Reviewed By: MaskRay

Subscribers: nickdesaulniers, emaste, arichardson, hiraditya, jakehehrlich, abrachet, seiya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66613

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375169 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-17 20:51:00 +00:00
Hans Wennborg
db4d724079 Unify the two CRC implementations
David added the JamCRC implementation in r246590. More recently, Eugene
added a CRC-32 implementation in r357901, which falls back to zlib's
crc32 function if present.

These checksums are essentially the same, so having multiple
implementations seems unnecessary. This replaces the CRC-32
implementation with the simpler one from JamCRC, and implements the
JamCRC interface in terms of CRC-32 since this means it can use zlib's
implementation when available, saving a few bytes and potentially making
it faster.

JamCRC took an ArrayRef<char> argument, and CRC-32 took a StringRef.
This patch changes it to ArrayRef<uint8_t> which I think is the best
choice, and simplifies a few of the callers nicely.

Differential revision: https://reviews.llvm.org/D68570

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374148 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-09 09:06:30 +00:00
Fangrui Song
72b55d49c0 [llvm-objcopy] Add --set-section-alignment
Fixes PR43181. This option was recently added to GNU objcopy (binutils
PR24942).

`llvm-objcopy -I binary -O elf64-x86-64 --set-section-alignment .data=8` can set the alignment of .data.

Reviewed By: grimar, jhenderson, rupprecht

Differential Revision: https://reviews.llvm.org/D67656

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373461 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-02 12:41:25 +00:00
Michael Liao
92129a5b4f [llvm-objcopy] Fix a warningon unused variable. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372745 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-24 12:43:44 +00:00
Seiya Nuta
82b8c93df3 [llvm-objcopy] Refactor ELF-specific config out to ELFCopyConfig. NFC.
Summary:
This patch splits the command-line parsing into two phases:

First, parse cross-platform options and leave ELF-specific options unparsed.

Second, in the ELF implementation, parse ELF-specific options and construct ELFCopyConfig.

Reviewers: espindola, alexshap, rupprecht, jhenderson, jakehehrlich, MaskRay

Reviewed By: alexshap, jhenderson, jakehehrlich, MaskRay

Subscribers: mgorny, emaste, arichardson, jakehehrlich, MaskRay, abrachet, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67139

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372712 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-24 09:38:23 +00:00
Fangrui Song
f6dc13fa4d [llvm-objcopy] Ignore -B --binary-architecture=
GNU objcopy documents that -B is only useful with architecture-less
input (i.e. "binary" or "ihex"). After D67144, -O defaults to -I, and
-B is essentially a NOP.

* If -O is binary/ihex, GNU objcopy ignores -B.
* If -O is elf*, -B provides the e_machine field in GNU objcopy.

So to convert a blob to an ELF, `-I binary -B i386:x86-64 -O elf64-x86-64` has to be specified.

`-I binary -B i386:x86-64 -O elf64-x86-64` creates an ELF with its
e_machine field set to EM_NONE in GNU objcopy, but a regular x86_64 ELF
in elftoolchain elfcopy. Follow the elftoolchain approach (ignoring -B)
to simplify code. Users that expect their command line portable should
specify -B.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D67215

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371914 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-14 01:36:31 +00:00
Fangrui Song
9c01fe0563 [llvm-objcopy] Default --output-target to --input-target when unspecified
Fixes PR42171.

In GNU objcopy, if -O (--output-target) is not specified, the value is
copied from -I (--input-target).

```
objcopy -I binary -B i386:x86-64 a.txt b       # b is copied from a.txt
llvm-objcopy -I binary -B i386:x86-64 a.txt b  # b is an x86-64 object file
```

This patch changes our behavior to match GNU. With this change, we can
delete code related to -B handling (D67215).

Reviewed By: jakehehrlich

Differential Revision: https://reviews.llvm.org/D67144

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371913 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-14 01:36:16 +00:00
Michael Pozulp
78308f70b2 [llvm-objcopy] Add support for response files in llvm-strip and llvm-objcopy
Summary: Addresses https://bugs.llvm.org/show_bug.cgi?id=42671

Reviewers: jhenderson, espindola, alexshap, rupprecht

Reviewed By: jhenderson

Subscribers: seiya, emaste, arichardson, jakehehrlich, MaskRay, abrachet, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65372

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371911 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-14 01:14:43 +00:00
Simon Pilgrim
43264f371c Fix "enumeral and non-enumeral type in conditional expression" warnings. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370892 91177308-0d34-0410-b5e6-96231b3b80d8
2019-09-04 12:51:40 +00:00
Chris Jackson
61fef394df [llvm-objcopy] Allow the visibility of symbols created by --binary and
--add-symbol to be specified with --new-symbol-visibility

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370458 91177308-0d34-0410-b5e6-96231b3b80d8
2019-08-30 10:17:16 +00:00
Jordan Rupprecht
b795783d27 [llvm-objcopy][NFC] Refactor symbol/section matching
Summary:
The matchers for section/symbol related flags (e.g. `--keep-symbol=Name` or `--regex --keep-symbol=foo.*`) are currently just vectors that are matched linearlly. However, adding wildcard support would require negative matching too, e.g. a symbol should be removed if it matches a wildcard *but* doesn't match some other wildcard.

To make the next patch simpler, consolidate matching logic to a class defined in CopyConfig that takes care of matching.

Reviewers: jhenderson, seiya, MaskRay, espindola, alexshap

Reviewed By: jhenderson, MaskRay

Subscribers: emaste, arichardson, jakehehrlich, abrachet, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66432

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369689 91177308-0d34-0410-b5e6-96231b3b80d8
2019-08-22 19:17:50 +00:00
Chris Jackson
dbd9cc38a9 [llvm-objcopy] Allow 'protected' visibility to be set when using
add-symbol

Reviewers: Maskray, rupprecht

Differential Revision: https://reviews.llvm.org/D65891

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368982 91177308-0d34-0410-b5e6-96231b3b80d8
2019-08-15 09:45:09 +00:00
Wolfgang Pieb
89d7ab0430 [llvm-strip] Support --strip-sections
llvm-objcopy already supports --strip-sections. It is a good fit for its alias llvm-strip
to support it as well.

Reviewers: rupprecht, jhenderson

Differential Revision: https://reviews.llvm.org/D65787


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368241 91177308-0d34-0410-b5e6-96231b3b80d8
2019-08-08 00:35:16 +00:00
Sergey Dmitriev
510b3b6b24 [llvm-objcopy] Improve --add-section argument string parsing
Differential Revision: https://reviews.llvm.org/D65346

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367236 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-29 16:22:40 +00:00
Seiya Nuta
1025e4c956 [llvm-objcopy][NFC] Refactor output target parsing v2
Summary:
Use an enum instead of string to hold the output file format in Config.InputFormat and Config.OutputFormat. It's essential to support other output file formats other than ELF.

This patch originally has been submitted as D63239. However, there was an use-of-uninitialized-value bug and reverted in r364379 (git commit 4ee933c).

This patch includes the fix for the bug by setting Config.InputFormat/Config.OutputFormat in parseStripOptions.

Reviewers: espindola, alexshap, rupprecht, jhenderson

Reviewed By: jhenderson

Subscribers: emaste, arichardson, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D64170

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@365173 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-05 05:28:38 +00:00
Rumeet Dhindsa
8af0cf9929 Revert [llvm-objcopy][NFC] Refactor output target parsing
This reverts r364254 (git commit 545f001d1b9a7b58a68d75e70bfc36c841de8999)

This change causes some llvm-obcopy tests to fail with valgrind.

Following is the output for basic-keep.test
Command Output (stderr):
--

==107406== Conditional jump or move depends on uninitialised value(s)
==107406==    at 0x1A30DD: executeObjcopy(llvm::objcopy::CopyConfig const&) (llvm-objcopy.cpp:235)
==107406==    by 0x1A3935: main (llvm-objcopy.cpp:294)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364379 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-26 03:00:57 +00:00
Seiya Nuta
948b03b608 [llvm-objcopy][NFC] Refactor output target parsing
Summary:
Use an enum instead of string to hold the output file format in Config.InputFormat and Config.OutputFormat. It's essential to support other output file formats other than ELF.

Reviewers: espindola, alexshap, rupprecht, jhenderson

Reviewed By: rupprecht, jhenderson

Subscribers: jyknight, compnerd, emaste, arichardson, fedor.sergeev, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63239

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364254 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-25 00:02:04 +00:00
Alex Brachet
1a8c6875ab [llvm-strip] Error when using stdin twice
Summary: Implements bug [[ https://bugs.llvm.org/show_bug.cgi?id=42204 | 42204 ]]. llvm-strip now warns when the same input file is used more than once, and errors when stdin is used more than once.

Reviewers: jhenderson, rupprecht, espindola, alexshap

Reviewed By: jhenderson, rupprecht

Subscribers: emaste, arichardson, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63122

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363638 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-18 00:39:10 +00:00
Seiya Nuta
fef0e8cd35 [llvm-objcopy] Add elf32-sparc and elf32-sparcel target
Summary:
The "sparc"/"sparcel" architectures appears in ArchMap (used by -B option) but not in OutputFormatMap (used by -I/-O option). Add their targets into OutputFormatMap for consistency.

Note that AFAIK there're no targets for 32-bit little-endian SPARC ("elf32-sparcel") in GNU binutils.

Reviewers: espindola, alexshap, rupprecht, jhenderson, compnerd, jakehehrlich

Reviewed By: jhenderson, compnerd, jakehehrlich

Subscribers: jyknight, emaste, arichardson, fedor.sergeev, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63238

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363524 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-17 02:03:45 +00:00
Alex Brachet
1f1f241e16 [objcopy] Error when --preserve-dates is specified with standard streams
Summary: llvm-objcopy/strip now error when -p is specified when reading from stdin or writing to stdout

Reviewers: jhenderson, rupprecht, espindola, alexshap

Reviewed By: jhenderson, rupprecht

Subscribers: emaste, arichardson, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63090

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363485 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-15 05:32:23 +00:00
Alex Brachet
d8baf47f54 [llvm-objcopy] Changed command line parsing errors
Summary: Tidied up errors during command line parsing to be more consistent with the rest of llvm-objcopy errors.

Reviewers: jhenderson, rupprecht, espindola, alexshap

Reviewed By: jhenderson, rupprecht

Subscribers: emaste, arichardson, MaskRay, llvm-commits, jakehehrlich

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D62973

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363350 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-14 02:04:02 +00:00
Seiya Nuta
bfbea497c9 [llvm-objcopy] Fix sparc target endianness
Summary: AFAIK, the "sparc" target is big endian and the target for 32-bit little-endian SPARC is denoted as "sparcel". This patch fixes the endianness of "sparc" target and adds "sparcel" target for 32-bit little-endian SPARC.

Reviewers: espindola, alexshap, rupprecht, jhenderson

Reviewed By: jhenderson

Subscribers: jyknight, emaste, arichardson, fedor.sergeev, jakehehrlich, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63251

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363336 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-13 23:24:12 +00:00
Peter Collingbourne
f208621845 llvm-objcopy: Implement --extract-partition and --extract-main-partition.
This implements the functionality described in
https://lld.llvm.org/Partitions.html. It works as follows:

- Reads the section headers using the ELF header at file offset 0;
- If extracting a loadable partition:
  - Finds the section containing the required partition ELF header by looking it up in the section table;
  - Reads the ELF and program headers from the section.
- If extracting the main partition:
  - Reads the ELF and program headers from file offset 0.
- Filters the section table according to which sections are in the program headers that it read:
  - If ParentSegment != nullptr or section is not SHF_ALLOC, then it goes in.
  - Sections containing partition ELF headers or program headers are excluded as there are no headers for these in ordinary ELF files.

Differential Revision: https://reviews.llvm.org/D62364

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362818 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-07 17:57:48 +00:00
Eugene Leviant
6595d587b7 [llvm-objcopy] Implement IHEX writer
Differential revision: https://reviews.llvm.org/D60270


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361949 91177308-0d34-0410-b5e6-96231b3b80d8
2019-05-29 11:37:16 +00:00
James Henderson
9a1a8c8d8e [llvm-objcopy] Cache gnu_debuglink's target CRC
.gnu_debuglink section contains information regarding file with
debugging symbols, identified by its CRC32. This target file is not
intended to ever change or it would invalidate the stored checksum, yet
the checksum is calculated over and over again for each of the objects
inside the archive, usually hundreds of times.

This patch precomputes the CRC32 of the target once and then reuses the
value where required, saving lots of redundant I/O.

The error message reported should stay the same, although now it might
be reported earlier.

Reviewed by: jhenderson, jakehehrlich, MaskRay

Differential Revision: https://reviews.llvm.org/D61343

Patch by Michal Janiszewski


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360661 91177308-0d34-0410-b5e6-96231b3b80d8
2019-05-14 10:59:04 +00:00
James Henderson
da1e48a2f6 [llvm-objcopy] Add --prefix-alloc-sections
This patch adds support for --prefix-alloc-sections, which adds a prefix
to every allocated section names.

It adds a prefix after renaming section names by --rename-section as GNU
objcopy does.

Fixes PR41266: https://bugs.llvm.org/show_bug.cgi?id=41266

Differential Revision: https://reviews.llvm.org/D60042

Patch by Seiya Nuta.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360233 91177308-0d34-0410-b5e6-96231b3b80d8
2019-05-08 09:49:35 +00:00
Sid Manning
cd541eae98 Let --discard-all imply --strip-debug.
This will match gnu strip's behavior.

Differential Revision: https://reviews.llvm.org/D61092

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359887 91177308-0d34-0410-b5e6-96231b3b80d8
2019-05-03 14:14:01 +00:00
James Henderson
efbb95e52b [llvm-strip]Add --no-strip-all to disable --strip-all behaviour (including default stripping)
If certain switches are not specified, llvm-strip behaves as if
--strip-all were specified. This means that for testing, when we don't
want the stripping behaviour, we have to specify one of these switches,
which can be confusing. This change adds --no-strip-all to allow an
alternative way of suppressing the default stripping, in a less
confusing manner.

Reviewed by: jakehehrlich, MaskRay

Differential Revision: https://reviews.llvm.org/D61377


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359781 91177308-0d34-0410-b5e6-96231b3b80d8
2019-05-02 11:53:02 +00:00
Jordan Rupprecht
b1f70e7598 [llvm-objcopy] Add RISC-V support for -B/-O
Reviewers: jorgbrown, espindola, alexshap, jhenderson

Subscribers: emaste, arichardson, fedor.sergeev, jakehehrlich, kito-cheng, shiva0217, MaskRay, rogfer01, rkruppe, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D61272

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359568 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-30 15:21:36 +00:00
Jordan Rupprecht
3de573b1c7 [llvm-objcopy] Add -B mips
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358667 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-18 14:22:37 +00:00
James Henderson
9bb70eb681 [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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358649 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-18 09:13:30 +00:00
Jordan Rupprecht
6963206b33 [llvm-objcopy] Support full list of bfd targets that lld uses.
Summary:
This change takes the full list of bfd targets that lld supports (see `ScriptParser.cpp`), including generic handling for `*-freebsd` targets (which uses the same settings but with a FreeBSD OSABI). In particular this adds mips support for `--output-target` (but not yet via `--binary-architecture`).

lld and llvm-objcopy use their own different custom data structures, so I'd prefer to check this in as-is (add support directly in llvm-objcopy, including all the test coverage) and do a separate NFC patch(s) that consolidate the two by putting this mapping into libobject.

See [[ https://bugs.llvm.org/show_bug.cgi?id=41462 | PR41462 ]].

Reviewers: jhenderson, jakehehrlich, espindola, alexshap, arichardson

Reviewed By: arichardson

Subscribers: fedor.sergeev, emaste, sdardis, krytarowski, atanasyan, llvm-commits, MaskRay, arichardson

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D60773

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358562 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-17 07:42:31 +00:00
James Henderson
4e6b00fa2c [llvm-objcopy] Make section rename/set flags case-insensitive
This fixes https://bugs.llvm.org/show_bug.cgi?id=41305. GNU objcopy
--set-section-flags/--rename-section flags are case-insensitive, so this
patch updates llvm-objcopy to match.

Reviewed by: grimar

Differential Revision: https://reviews.llvm.org/D60200


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357590 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 14:40:27 +00:00
Yi Kong
7177f4e661 [llvm-objcopy] Add --keep-symbols option
Differential Revision: https://reviews.llvm.org/D60054

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357418 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-01 18:12:43 +00:00
Jordan Rupprecht
d7f746ca03 [llvm-objcopy][NFC] Move ELF-specific logic into /ELF/ directory
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357199 91177308-0d34-0410-b5e6-96231b3b80d8
2019-03-28 18:27:00 +00:00
James Henderson
3c1091398e [llvm-objcopy]Add support for *-freebsd output formats
GNU objcopy can support output formats like elf32-i386-freebsd and
elf64-x86-64-freebsd. The only difference from their regular non-freebsd
counterparts that I have observed is that the freebsd versions set the
OS/ABI field to ELFOSABI_FREEBSD. This patch sets the OS/ABI field
according based on the format whenever --output-format is specified.

Reviewed by: rupprecht, grimar

Differential Revision: https://reviews.llvm.org/D59645


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356737 91177308-0d34-0410-b5e6-96231b3b80d8
2019-03-22 10:21:09 +00:00
Jordan Rupprecht
30e91d46e1 [llvm-strip] Hook up (unimplemented) --only-keep-debug
For ELF, we accept but ignore --only-keep-debug. Do the same for llvm-strip.

COFF does implement this, so update the test that it is supported.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356207 91177308-0d34-0410-b5e6-96231b3b80d8
2019-03-14 21:51:42 +00:00
Jordan Rupprecht
86c9a48802 [llvm-objcopy] Cleanup errors from CopyConfig and remove llvm-objcopy.h dependency
error() was previously cleaned up from CopyConfig, but new uses were introduced.

This also tweaks the error message for --add-symbol to report all invalid flags.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356105 91177308-0d34-0410-b5e6-96231b3b80d8
2019-03-13 22:26:01 +00:00
George Rimar
de9aea9530 [llvm-objcopy] - Report "no zlib available" error properly when --compress-debug-sections is used.
If zlib is not available, and --compress-debug-sections is passed, 
we want to report an error. Currently, it is only reported for
--compress_debug_sections= form of the option.

Fixes the https://bugs.llvm.org/show_bug.cgi?id=40886.

I do not think there is a way to write a test for this.

Differential revision: https://reviews.llvm.org/D58909

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355391 91177308-0d34-0410-b5e6-96231b3b80d8
2019-03-05 11:32:14 +00:00
Eugene Leviant
1f205834bb [llvm-objcopy] Add --set-start, --change-start and --adjust-start
Differential revision: https://reviews.llvm.org/D58173


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354854 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-26 09:24:22 +00:00
Eugene Leviant
b5395dc0fc [llvm-objcopy] Add --add-symbol
Differential revision: https://reviews.llvm.org/D58234


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354787 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-25 14:12:41 +00:00
Jordan Rupprecht
7f352a421a [llvm-objcopy][NFC] Add std::move() to fix older BB
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354603 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-21 17:24:55 +00:00
Jordan Rupprecht
794244932b [llvm-objcopy][NFC] More error cleanup
Summary:
This removes calls to `error()`/`reportError()` in the main driver (llvm-objcopy.cpp) as well as the associated argv-parsing (CopyConfig.cpp). `logAllUnhandledErrors()` is now the main way to print errors.

There are still a few uses from within the per-arch drivers, so we can't delete them yet... but almost!

Reviewers: jhenderson, alexshap, espindola

Reviewed By: jhenderson

Subscribers: emaste, arichardson, jakehehrlich, jdoerfert, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D58316

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354600 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-21 17:05:19 +00:00
Eugene Leviant
cb9edfda6c [llvm-objcopy] Add --strip-unneeded-symbol(s)
Differential revision: https://reviews.llvm.org/D58027


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353919 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-13 07:34:54 +00:00
Eugene Leviant
aed0779715 Small refactoring of FileError. NFC.
Differential revision: https://reviews.llvm.org/D57945


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353679 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-11 09:49:37 +00:00
Eugene Leviant
e436b1687a [llvm-objcopy] Add few file processing directives
Differential revision: https://reviews.llvm.org/D57877


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353521 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-08 14:37:54 +00:00
Eugene Leviant
5f86a06337 [llvm-objcopy] Add --redefine-syms
Differential revision: https://reviews.llvm.org/D57738


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353509 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-08 10:33:16 +00:00
Eugene Leviant
e9f465a6a8 [llvm-objcopy] Allow regular expressions in name comparison
Differential revision: https://reviews.llvm.org/D57517


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353289 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-06 11:00:07 +00:00
Jordan Rupprecht
aab380fa40 [llvm-objcopy][NFC] Use StringSaver for --keep-global-symbols
Summary: Use StringSaver/BumpPtrAlloc when parsing lines from --keep-global-symbols files. This allows us to consistently use StringRef for driver options, which avoids copying the full strings for each object copied, as well as simplifies part of D57517.

Reviewers: jhenderson, evgeny777, alexshap

Subscribers: jakehehrlich

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D57617

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353068 91177308-0d34-0410-b5e6-96231b3b80d8
2019-02-04 18:38:00 +00:00