1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00

1025 Commits

Author SHA1 Message Date
Peter Collingbourne
3a8f902dd8 Bitcode: Clean up error handling for certain bitcode query functions.
The functions getBitcodeTargetTriple(), isBitcodeContainingObjCCategory(),
getBitcodeProducerString() and hasGlobalValueSummary() now return errors
via their return value rather than via the diagnostic handler.

To make this work, re-implement these functions using non-member functions
so that they can be used without the LLVMContext required by BitcodeReader.

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

llvm-svn: 286623
2016-11-11 19:50:24 +00:00
Simon Atanasyan
02566c439c [mips] Add non-const getter for the Elf_Mips_Options class. NFC
llvm-svn: 286351
2016-11-09 10:14:55 +00:00
Rafael Espindola
210d44190b cleanup hashSysV a bit.
Don't pass a reference to a StringRef and use a range loop.

llvm-svn: 286232
2016-11-08 14:04:16 +00:00
Davide Italiano
87c346c044 [lib/Object] Rename elf_hash to hashSysV.
This is more clear, as we have also GNU hash these days..

llvm-svn: 286157
2016-11-07 21:56:04 +00:00
Rafael Espindola
eccb48cc88 Don't error in the ELFFile constructor.
All error checking now happens when the information is needed. The
only thing left is the minimum size of the buffer and that can be just
a precondition. I will add an ErrorOr create method in a followup
commit.

Also don't store a pointer to the Header, since it is just a trivial
cast.

llvm-svn: 285961
2016-11-03 20:16:53 +00:00
Rafael Espindola
9eb82ca1c3 Remove the last use of report_fatal_error from ELF.h.
llvm-svn: 285955
2016-11-03 19:07:15 +00:00
Rafael Espindola
e7e3d11779 Add error handling to getEntry.
Issue found by inspection.

llvm-svn: 285951
2016-11-03 18:05:33 +00:00
Rafael Espindola
ac4361fcf8 Replace another report_fatal_error with an ErrorOr.
llvm-svn: 285944
2016-11-03 17:37:28 +00:00
Rafael Espindola
b8e8535a52 Replace a report_fatal_error with an ErrorOr.
llvm-svn: 285942
2016-11-03 17:28:33 +00:00
Rafael Espindola
a184fd74fb Delete dead code.
llvm-svn: 285940
2016-11-03 17:18:31 +00:00
Rafael Espindola
7a5fe60024 Delete dead code.
llvm-svn: 285935
2016-11-03 16:58:27 +00:00
Rafael Espindola
b5148dbd40 Add lower level versions of some functions.
This adds versions of getSectionIndex, getSection and getSymbol that
instead of a Elf_Shdr take the content of that section.

llvm-svn: 285932
2016-11-03 16:51:44 +00:00
Rafael Espindola
c1b7f6717c Move function out of line. NFC.
llvm-svn: 285929
2016-11-03 16:24:35 +00:00
Rafael Espindola
f6d7022402 Inline function into only use.
llvm-svn: 285928
2016-11-03 16:10:39 +00:00
Rafael Espindola
5fad526ea2 Return existing error code.
Should fix the -Werror bots.

llvm-svn: 285921
2016-11-03 14:53:25 +00:00
Rafael Espindola
fc483a4565 Move a free function out of ELFFile.
llvm-svn: 285920
2016-11-03 14:41:17 +00:00
Rafael Espindola
64c82be50a Split out a getSectionIndex.
That code is currently duplicated in lld.

llvm-svn: 285915
2016-11-03 14:24:53 +00:00
Rafael Espindola
32863809b4 replace a report_fatal_error with a ErrorOr.
llvm-svn: 285910
2016-11-03 13:58:15 +00:00
Rafael Espindola
eedde2ef3c Replace a report_fatal_error with an ErrorOr.
llvm-svn: 285905
2016-11-03 13:43:30 +00:00
Rafael Espindola
b387b5e54a Split getStringTableForSymtab.
For use in cases where we already have the section table.

llvm-svn: 285903
2016-11-03 13:22:51 +00:00
Rafael Espindola
6f3e2cdb87 Split getSHNDXTable in two.
Some clients already have the section table available.

llvm-svn: 285898
2016-11-03 12:23:41 +00:00
George Rimar
7ce112a903 [Object/ELF] - Make getSymbol() return Error.
That is consistent with other methods around
and helps to handle error on a caller side.

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

llvm-svn: 285886
2016-11-03 08:40:55 +00:00
Rafael Espindola
d9667129b9 Split getSection in two.
This will allow avoiding repeated error checking in a few cases.

llvm-svn: 285874
2016-11-03 02:24:59 +00:00
Rafael Espindola
39b49356a1 Simplify some typedefs. NFC.
llvm-svn: 285863
2016-11-02 21:39:02 +00:00
Davide Italiano
aea53921fc [lli/COFF] Set the correct alignment for common symbols
Otherwise we set it always to zero, which is not correct,
and we assert inside alignTo (Assertion failed:
Align != 0u && "Align can't be 0.").

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

llvm-svn: 285841
2016-11-02 17:32:19 +00:00
Rafael Espindola
e5a7a54be7 Simplify typedefs. NFC.
llvm-svn: 285819
2016-11-02 15:33:59 +00:00
Rafael Espindola
67bbb02ec9 Inline a version of getSectionStringTable into the only use.
llvm-svn: 285817
2016-11-02 15:23:32 +00:00
Rafael Espindola
e509649666 Compute the section table lazily.
As a consequence this move a bunch of error checking out of the constructor.

llvm-svn: 285815
2016-11-02 15:15:59 +00:00
Rafael Espindola
9b9c4774a2 Inline getSectionStringTableIndex() into only caller. NFC.
llvm-svn: 285812
2016-11-02 14:52:50 +00:00
Rafael Espindola
036854fbd0 Avoid a report_fatal_error in sections().
Have it return a ErrorOr<Range> and delete section_begin and
section_end.

llvm-svn: 285807
2016-11-02 14:10:57 +00:00
Rafael Espindola
3b1d6f743f getNumSections should return a uintX_t. NFC.
llvm-svn: 285804
2016-11-02 13:07:38 +00:00
Rafael Espindola
993db8494b Simplify getSection. NFC.
llvm-svn: 285803
2016-11-02 12:49:55 +00:00
Rafael Espindola
8fa747aa78 Don't compute DotShstrtab eagerly.
This saves a field that is not always used. It also avoids failing a
program that doesn't need the section names.

llvm-svn: 285753
2016-11-01 21:33:55 +00:00
Rafael Espindola
333ba0caaa Simplify getStringTableIndex.
The description in the ELF spec is just

---------------------------
If the section name string table section index is greater than or
equal to SHN_LORESERVE (0xff00), this member has the value SHN_XINDEX
(0xffff) and the actual index of the section name string table section
is contained in the sh_link field of the section header at index 0.
---------------------------

So we only have to check for it being SHN_XINDEX. Also, sh_link is
always 32 bits, so don't return an uintX_t.

llvm-svn: 285747
2016-11-01 20:56:15 +00:00
Rafael Espindola
ccd8a108a8 Use the existing std::error_code out parameter.
This avoids calling exit with a partially constructed object.

llvm-svn: 285738
2016-11-01 20:24:22 +00:00
Alex Bradbury
3d909d1279 [RISCV] Add RISC-V ELF defines
Add the necessary definitions for RISC-V ELF files, including relocs. Also 
make necessary trivial change to ELFYaml, llvm-objdump, and llvm-readobj in 
order to work with RISC-V ELFs.

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

llvm-svn: 285708
2016-11-01 16:59:37 +00:00
George Rimar
4d041e3528 Recommit r285285 - [Object/ELF] - Fixed behavior when SectionHeaderTable->sh_size is too large.
with fix: edited invalid-section-index2.elf input to pass the new check and 
fail on the same place it was intended to fail.

Original commit message:
Elf.h already has code checking that section table does not go past end of file.
Problem is that this check may not work on values greater than UINT64_MAX / Header->e_shentsize
because of calculation overflow.

Parch fixes the issue.

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

llvm-svn: 285586
2016-10-31 15:33:00 +00:00
Eugene Leviant
b4d1e20702 Add getOffset to ELFSectionRef
Differential revision: https://reviews.llvm.org/D26074

llvm-svn: 285558
2016-10-31 11:03:01 +00:00
George Rimar
df30d629a9 Revert r285285 "[Object/ELF] - Fixed behavior when SectionHeaderTable->sh_size is too large."
It broke BB.

llvm-svn: 285288
2016-10-27 12:18:50 +00:00
George Rimar
2f2500e562 [Object/ELF] - Fixed behavior when SectionHeaderTable->sh_size is too large.
Elf.h already has code checking that section table does not go past end of file.
Problem is that this check may not work on values greater than UINT64_MAX / Header->e_shentsize
because of calculation overflow.

Parch fixes the issue.

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

llvm-svn: 285285
2016-10-27 11:50:04 +00:00
George Rimar
9ee5fd9330 [Object/ELF] - Do not allow overflow when checking section size/offset.
Overflow was the reason of incorrect passing the check,
patch fixes the case.

Differentail revision: https://reviews.llvm.org/D25514

llvm-svn: 285284
2016-10-27 11:44:56 +00:00
George Rimar
f764591abe [Object/ELF] - Do not crash if string table sh_size is equal to zero.
Revealed using "id_000038,sig_11,src_000015,op_havoc,rep_16" from PR30540,
when sh_size was 0, crash happened.

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

llvm-svn: 285282
2016-10-27 11:41:57 +00:00
Kevin Enderby
569d19c0b3 nother additional error check for an invalid Mach-O file
when contained in a Mach-O universal file and the
cputypes in both headers don’t match.

llvm-svn: 285026
2016-10-24 21:15:11 +00:00
Pavel Labath
2c41526fc8 [Object] Replace TimeValue with std::chrono
Summary:
Most of the changes are very straight-forward. The only choice I had to make was
to use second-precision time points in the Archive classes. I did this because
the archive files use that precision in the on-disk representation anyway.

Reviewers: rafael, zturner

Subscribers: llvm-commits

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

llvm-svn: 284974
2016-10-24 13:38:27 +00:00
Pavel Labath
6b2a0c490c Remove TimeValue usage from llvm/Support
Summary:
This is a follow-up to D25416. It removes all usages of TimeValue from
llvm/Support library (except for the actual TimeValue declaration), and replaces
them with appropriate usages of std::chrono. To facilitate this, I have added
small utility functions for converting time points and durations into appropriate
OS-specific types (FILETIME, struct timespec, ...).

Reviewers: zturner, mehdi_amini

Subscribers: llvm-commits

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

llvm-svn: 284966
2016-10-24 10:59:17 +00:00
Benjamin Kramer
7999e6045a Retire llvm::alignOf in favor of C++11 alignof.
No functionality change intended.

llvm-svn: 284733
2016-10-20 15:02:18 +00:00
Benjamin Kramer
c2de5980d3 Do a sweep over move ctors and remove those that are identical to the default.
All of these existed because MSVC 2013 was unable to synthesize default
move ctors. We recently dropped support for it so all that error-prone
boilerplate can go.

No functionality change intended.

llvm-svn: 284721
2016-10-20 12:20:28 +00:00
George Rimar
64f5482e1d [Object/ELF] - Check index argument in getSymbol().
Without this check LLD crashes when SHT_GROUP section has invalid symbol index
because of next code:

template <class ELFT>
StringRef elf::ObjectFile<ELFT>::getShtGroupSignature(const Elf_Shdr &Sec) {
..
  const Elf_Sym *Sym = Obj.getSymbol(Symtab, Sec.sh_info);
..
}
If sh_info is too large, &Symbols[Index] just asserts.

No testcases provided because llvm-objdump/llvm-readelf does 
not use getSymbol() function.

I`ll commit testcase for LLD separatelly.

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

llvm-svn: 284702
2016-10-20 08:03:10 +00:00
George Rimar
cd256ad4ac [Object/ELF] - Check Header->e_shoff value earlier and do not crash.
Patch checks that section pointer is aligned properly.
This should be done before getStringTable() call.

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

llvm-svn: 284387
2016-10-17 14:28:12 +00:00
George Rimar
c57ded4428 Recommit r284371 "[Object/ELF] - Check that e_shnum is null when e_shoff is."
With fix: hex edited the precompiled inputs from another testcases to pass new checks.

Original commit message:

[Object/ELF] - Check that e_shnum is null when e_shoff is.

Spec says (http://www.sco.com/developers/gabi/1998-04-29/ch4.eheader.html) :
e_shnum
This member holds the number of entries in the section header table. Thus the product of e_shentsize and e_shnum gives the section header table's size in bytes. If a file has no section header table, e_shnum holds the value zero.

Revealed using "id_000037,sig_11,src_000015,op_havoc,rep_8" from PR30540

That was the reason of crash in lld on incorrect input file.
Binary reduced using afl-min.

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

llvm-svn: 284374
2016-10-17 10:58:02 +00:00