Commit Graph

769 Commits

Author SHA1 Message Date
Craig Topper
e6bc7d1f0d Use make_range to reduce mentions of iterator type. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254872 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-06 05:08:07 +00:00
Mehdi Amini
d4c7e117aa Remove "ExportingModule" from ThinLTO Index (NFC)
There is no real reason the index has to have the concept of an
exporting Module. We should be able to have one single unique
instance of the Index, and it should be read-only after creation
for the whole ThinLTO processing.
The linker plugin should be able to process multiple modules (in
parallel or in sequence) with the same index.

The only reason the ExportingModule was present seems to be to
implement hasExportedFunctions() that is used by the Module linker
to decide what to do with the current Module.
For now I replaced it with a query to the map of Modules path to
see if this module was declared in the Index and consider that if
it is the case then it is probably exporting function.
On the long term the Linker interface needs to evolve and this
call should not be needed anymore.

From: Mehdi Amini <mehdi.amini@apple.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254581 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-03 02:37:23 +00:00
Teresa Johnson
846661215e [ThinLTO] Deduplicate function index loading into shared helper (NFC)
Add a shared helper routine to read the function index from a file
and create/return the function index object. Use it in llvm-link and
llvm-lto.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253903 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-23 19:19:11 +00:00
Mehdi Amini
0ab4d52b0a Do not require a Context to extract the FunctionIndex from Bitcode (NFC)
The LLVMContext was only used for Diagnostic. Pass a DiagnosticHandler
instead.

Differential Revision: http://reviews.llvm.org/D14794

From: Mehdi Amini <mehdi.amini@apple.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253540 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-19 05:52:29 +00:00
Kevin Enderby
7f0edadcaf Fix llvm-nm(1) printing of llvm-bitcode files for -format darwin to match darwin’s nm(1).
Also a small fix to match printing of Mach-O objects with -format posix.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252567 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-10 00:31:08 +00:00
Kevin Enderby
268709a810 Reapply r250906 with many suggested updates from Rafael Espindola.
The needed lld matching changes to be submitted immediately next,
but this revision will cause lld failures with this alone which is expected.

This removes the eating of the error in Archive::Child::getSize() when the characters
in the size field in the archive header for the member is not a number.  To do this we
have all of the needed methods return ErrorOr to push them up until we get out of lib.
Then the tools and can handle the error in whatever way is appropriate for that tool.

So the solution is to plumb all the ErrorOr stuff through everything that touches archives.
This include its iterators as one can create an Archive object but the first or any other
Child object may fail to be created due to a bad size field in its header.

Thanks to Lang Hames on the changes making child_iterator contain an
ErrorOr<Child> instead of a Child and the needed changes to ErrorOr.h to add
operator overloading for * and -> .

We don’t want to use llvm_unreachable() as it calls abort() and is produces a “crash”
and using report_fatal_error() to move the error checking will cause the program to
stop, neither of which are really correct in library code. There are still some uses of
these that should be cleaned up in this library code for other than the size field.

The test cases use archives with text files so one can see the non-digit character,
in this case a ‘%’, in the size field.

These changes will require corresponding changes to the lld project.  That will be
committed immediately after this change.  But this revision will cause lld failures
with this alone which is expected.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252192 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-05 19:24:56 +00:00
Michael Kuperstein
2c9435ef89 [ELF] elfiamcu triple should imply e_machine == EM_IAMCU
Differential Revision: http://reviews.llvm.org/D14109

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252043 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-04 11:21:50 +00:00
Rafael Espindola
2356f2b5d9 This never returns end(), simplify to use Child instead of iterator. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251876 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-03 01:20:44 +00:00
Teresa Johnson
0292f065c1 Restore "Support for ThinLTO function importing and symbol linking."
This restores commit r251837, with the new library dependence added to
llvm-link/Makefile to address bot failures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251866 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-03 00:14:15 +00:00
Teresa Johnson
3d95431a33 Revert "Support for ThinLTO function importing and symbol linking."
This reverts commit r251837, due to a number of bot failures of the form:

/home/grosser/buildslave/perf-x86_64-penryn-O3-polly-fast/llvm.obj/tools/llvm-link/Release+Asserts/llvm-link.o:llvm-link.cpp:function
loadIndex(llvm::LLVMContext&, llvm::Module const*): error: undefined
reference to
'llvm::object::FunctionIndexObjectFile::create(llvm::MemoryBufferRef,
llvm::LLVMContext&, llvm::Module const*, bool)'
/home/grosser/buildslave/perf-x86_64-penryn-O3-polly-fast/llvm.obj/tools/llvm-link/Release+Asserts/llvm-link.o:llvm-link.cpp:function
loadIndex(llvm::LLVMContext&, llvm::Module const*): error: undefined
reference to 'llvm::object::FunctionIndexObjectFile::takeIndex()'

I'm not sure why these are happening - I added Object to the requred
libraries in tools/llvm-link/LLVMBuild.txt and the LLVM_LINK_COMPONENTS
in tools/llvm-link/CMakeLists.txt. Confirmed for my build that these
symbols come out of libLLVMObject.a. What am I missing?

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251841 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-02 22:17:32 +00:00
Teresa Johnson
5aa157fab6 Support for ThinLTO function importing and symbol linking.
Summary:
Support for necessary linkage changes and symbol renaming during
ThinLTO function importing.

Also includes llvm-link support for manually importing functions
and associated llvm-link based tests.

Note that this does not include support for intelligently importing
metadata, which is currently imported duplicate times. That support will
be in the follow-on patch, and currently is ignored by the tests.

Reviewers: dexonsmith, joker.eph, davidxl

Subscribers: tobiasvk, tejohnson, llvm-commits

Differential Revision: http://reviews.llvm.org/D13515

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251837 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-02 21:39:10 +00:00
Teresa Johnson
9dd98c0eab Clang format a few prior patches (NFC)
I had clang formatted my earlier patches using the wrong style.
Reformatted with the LLVM style.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251812 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-02 18:02:11 +00:00
Rafael Espindola
25569fdcda Use Child instead of child_iterator in the archive writer.
We never need to pass end(). This will also remove some complication
once we start adding error checking.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251758 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-01 00:10:37 +00:00
Rafael Espindola
d3ca239fe8 Don't store a Child to the first regular member.
This is a bit ugly, but has a few advantages:
* Archive is now easy to copy since there is no Archive -> Child -> Archive
  loop.
* It makes it clear that we already checked for errors when finding the Child
  data.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251750 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-31 21:44:42 +00:00
Rafael Espindola
05a69d8e6c Delete dead code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251749 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-31 21:16:01 +00:00
Rafael Espindola
2825a23253 Simplify handling of archive Symbol tables.
We only need to store a StringRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251748 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-31 21:03:29 +00:00
Rafael Espindola
22258251b9 Simplify the handling of the archive string table.
We only need to store a StringRef

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251746 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-31 20:06:13 +00:00
Dylan McKay
bd1e97920a [AVR] Add ELF constants to headers
Also adds a 'trivial' ELF file. This was generated by assembling
and linking a file with the symbol main which contains a single
return instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251096 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-23 06:05:55 +00:00
Kevin Enderby
da785374d9 Backing out commit r250906 as it broke lld.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250908 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 17:13:20 +00:00
Kevin Enderby
e36c14fbed This removes the eating of the error in Archive::Child::getSize() when the characters
in the size field in the archive header for the member is not a number.  To do this we
have all of the needed methods return ErrorOr to push them up until we get out of lib.
Then the tools and can handle the error in whatever way is appropriate for that tool.

So the solution is to plumb all the ErrorOr stuff through everything that touches archives.
This include its iterators as one can create an Archive object but the first or any other
Child object may fail to be created due to a bad size field in its header.

Thanks to Lang Hames on the changes making child_iterator contain an
ErrorOr<Child> instead of a Child and the needed changes to ErrorOr.h to add
operator overloading for * and -> .

We don’t want to use llvm_unreachable() as it calls abort() and is produces a “crash”
and using report_fatal_error() to move the error checking will cause the program to
stop, neither of which are really correct in library code. There are still some uses of
these that should be cleaned up in this library code for other than the size field.

Also corrected the code where the size gets us to the “at the end of the archive”
which is OK but past the end of the archive will return object_error::parse_failed now.

The test cases use archives with text files so one can see the non-digit character,
in this case a ‘%’, in the size field.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250906 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 16:59:24 +00:00
Igor Kudrin
4598154b64 [llvm-readobj/ELF] Print GNU Hash section
Add a new command line switch, -gnu-hash-table, to print the content of that section.

Differential Revision: http://reviews.llvm.org/D13696


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250291 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-14 12:11:50 +00:00
Kevin Enderby
1cd4c56bf6 Tweak to r250117 and change to use ErrorOr and drop isSizeValid for
ArchiveMemberHeader, suggestion by Rafael Espíndola.

Also The clang-x86-win2008-selfhost bot still does not like the
malformed-machos 00000031.a test, so removing it for now.  All
the other bots are fine with it however.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250222 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-13 20:48:04 +00:00
Kevin Enderby
062054e5ca Fixed bugs in llvm-obdump while parsing Mach-O files from malformed archives
that caused aborts.  This was because of the characters of the ‘Size’ field in
the archive header did not contain decimal characters.

rdar://22983603


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250117 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-12 22:04:54 +00:00
Reid Kleckner
00fda73267 Address review comments, remove error case and return 0 instead as required by tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249785 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-09 00:15:08 +00:00
Reid Kleckner
27a9e1dbcf [llvm-symbolizer] Make --relative-address work with DWARF contexts
Summary:
Previously the relative address flag only affected PDB debug info.  Now
both DIContext implementations always expect to be passed virtual
addresses. llvm-symbolizer is now responsible for adding ImageBase to
module offsets when --relative-offset is passed.

Reviewers: zturner

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D12883

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249784 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-09 00:15:01 +00:00
Rafael Espindola
f53283b3ae Add a helper for getting a section's content as an array.
It will be used in lld shortly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249690 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-08 13:38:42 +00:00
NAKAMURA Takumi
b2700222ec Prune trailing whitespaces in comment lines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249285 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-05 04:43:57 +00:00
NAKAMURA Takumi
dc0de228e2 Reformat blank lines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249284 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-05 04:43:48 +00:00
Teresa Johnson
b97baa5fe5 Support for function summary index bitcode sections and files.
Summary:
The bitcode format is described in this document:
  https://drive.google.com/file/d/0B036uwnWM6RWdnBLakxmeDdOeXc/view
For more info on ThinLTO see:
  https://sites.google.com/site/llvmthinlto

The first customer is ThinLTO, however the data structures are designed
and named more generally based on prior feedback. There are a few
comments regarding how certain interfaces are used by ThinLTO, and the
options added here to gold currently have ThinLTO-specific names as the
behavior they provoke is currently ThinLTO-specific.

This patch includes support for generating per-module function indexes,
the combined index file via the gold plugin, and several tests
(more are included with the associated clang patch D11908).

Reviewers: dexonsmith, davidxl, joker.eph

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D13107

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249270 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-04 14:33:43 +00:00
Rafael Espindola
0af0b8d223 Use more strict types. NFC.
On 32 bit ELF these are 32 bit values.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249022 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-01 15:22:42 +00:00
Craig Topper
795a06a046 Use makeArrayRef or None to avoid unnecessarily mentioning the ArrayRef type extra times. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248140 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-21 05:32:41 +00:00
Rafael Espindola
26a99b2dc8 This code never uses r_addend, so it can just use Elf_Rel.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248040 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-18 21:12:38 +00:00
Davide Italiano
5310d9c491 [Object/ELF] Change comment to reflect reality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248032 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-18 20:41:15 +00:00
Rafael Espindola
3c4c9334b2 Pass a symbol table to getRelocationSymbol instead of returning one.
This removes a report_fatal_error from library and avoids checking a
section property for every section entry.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246656 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-02 15:07:39 +00:00
Rui Ueyama
5c1fa7fc49 Object: Fix COFF import file's symbols.
If a symbol is marked as "data", the symbol should be exported
with __imp_ prefix. Previously, the symbol was exported as-is.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246532 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-01 06:01:53 +00:00
Rui Ueyama
c2aa1793ed llvm-readobj: Dump more info for COFF import libraries.
This patch teaches llvm-readobj to print out COFF import file header fields.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246291 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-28 10:27:50 +00:00
Rui Ueyama
3bc806de10 Attempt to unbreak Win32 build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246284 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-28 07:48:41 +00:00
Rui Ueyama
40e22518fc Re-apply r246276 - Object: Teach llvm-ar to create symbol table for COFF short import files
This patch includes a fix for a llvm-readobj test. With this patch, 
the tool does no longer print out COFF headers for the short import
file, but that's probably desirable because the header for the short
import file is dummy.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246283 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-28 07:40:30 +00:00
Davide Italiano
37b18da3e3 [MachO] Move trivial accessors to header.
Requested by: Jim Grosbach.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245963 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-25 18:27:59 +00:00
Davide Italiano
39e2b39af7 [MachO] Introduce MinVersion API.
While introducing support for MinVersionLoadCommand in llvm-readobj I noticed there's
no API to extract Major/Minor/Update components conveniently. Currently consumers
do the bit twiddling on their own, but this will change from now on.

I'll convert llvm-objdump (and llvm-readobj) in a later commit.

Differential Revision:	 http://reviews.llvm.org/D12282
Reviewed by:	rafael


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245938 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-25 15:02:23 +00:00
Rafael Espindola
850ecaba66 Report an error if a SHT_SYMTAB_SHNDX section has the wrong size.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245873 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-24 21:09:41 +00:00
Rafael Espindola
0d34e64f73 Don't iterate over all sections in the ELFFile constructor.
With this we finally have an ELFFile that is O(1) to construct. This is helpful
for programs like lld which have to do their own section walk.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244510 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:29:35 +00:00
Rafael Espindola
bfbf462c0d Rename improperly named variable. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244507 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 21:25:44 +00:00
Rafael Espindola
4d79d2fcbf Delete getDotSymtabSec.
Another step in avoiding iterating over all sections in the ELFFile constructor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244496 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 20:25:04 +00:00
Rafael Espindola
47b7f78637 rename toELFShdrIter to getSection and move it closer to getSymbol. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244483 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:10:37 +00:00
Rafael Espindola
42f80af623 toELFSymIter and getSymbol are now the same thing. Merge them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244482 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-10 19:07:56 +00:00
Rafael Espindola
e32110a559 Return early on error. Should fix the asan bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244397 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-08 14:54:09 +00:00
Rafael Espindola
18f2a33eba Delete dead code. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244378 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-08 00:25:57 +00:00
Rafael Espindola
e84d8c12d5 Convert getSymbolSection to return an ErrorOr.
This function can actually fail since the symbol contains an index to the
section and that can be invalid.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244375 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-07 23:27:14 +00:00
Rafael Espindola
310e6c3606 Don't look for a SHT_DYNSYM in the ELFFile's constructor.
Yet another step in not having it scan every section.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244353 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-07 20:11:08 +00:00