Lang Hames
ce8287db09
[RuntimeDyld] Make LoadedObjectInfo::getLoadedSectionAddress take a SectionRef
...
rather than a string section name.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243456 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-28 17:52:11 +00:00
Rafael Espindola
826e95913b
Delete dead code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243015 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-23 13:42:16 +00:00
Rafael Espindola
a7616cd14c
Add a version of getSymbol with an explicit symbol table. Use it. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243011 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-23 12:49:40 +00:00
Rafael Espindola
a95022a4f3
Refactor duplicated code and check for invalid symbol table size.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242981 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-23 03:24:22 +00:00
Rafael Espindola
9db135a5f1
Fix fetching the symbol table of a thin archive.
...
We were trying to read it as an external file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242926 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-22 19:34:26 +00:00
Rafael Espindola
55b052ae66
Delete ELFEntityIterator. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242901 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-22 14:09:20 +00:00
Michael J. Spencer
3f6881efa5
[Object][ELF] Handle files with no section header string table.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242839 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 21:40:33 +00:00
Rafael Espindola
c22eb2bea6
Don't iterate over the program headers in the constructor of ELFFile.
...
Not every program needs this information.
In particular, it is necessary and sufficient for a static linker to scan the
section table.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242833 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 20:50:53 +00:00
Rafael Espindola
961b7c2b52
Remove always null argument.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242828 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 19:38:32 +00:00
Rafael Espindola
d8a62d931e
Remove getDynamicSymbolName.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242821 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 18:20:17 +00:00
Rafael Espindola
9ed0d629ce
Remove getStaticSymbolName.
...
Every user now keeps track of the correct string table to use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242818 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 18:04:29 +00:00
Rafael Espindola
746609067c
Remove dead code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242804 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 16:50:57 +00:00
Rafael Espindola
7eeb71ddc3
Replace the last uses of ELF::getSymbolName in llvm-readobj.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242798 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 16:26:21 +00:00
Rafael Espindola
fcadda639e
llvm-readobj: use the associated string table to print symbols. NFI.
...
This just removes some cases that require ELFFile to eagerly parse the ELF
file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242794 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 16:02:10 +00:00
Rafael Espindola
ab466de617
Remove unused variable.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242789 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 14:45:56 +00:00
Rafael Espindola
04d208815c
Don't do a walk over the dynamic table just to find DT_SONAME.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242752 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 01:01:29 +00:00
Rafael Espindola
bb418bc23b
Remove duplicated code.
...
Both ELFObjectFile and ELFFile had an implementation of getLoadName.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242725 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 22:41:44 +00:00
Rafael Espindola
0377a22491
Simplify now that we can iterate backwards. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242715 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 21:45:56 +00:00
Rafael Espindola
d94e17bde9
Simplify iterating over the dynamic section and report broken ones.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242712 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 21:23:29 +00:00
Rafael Espindola
1c12cc02fd
Remove Elf_Rela_Iter and Elf_Rel_Iter.
...
Use just the pointers and check for invalid relocation sections.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242700 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 20:07:50 +00:00
Rafael Espindola
96d9043a78
Report errors an invalid virtual addresses.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242676 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 14:45:03 +00:00
Rafael Espindola
3c7642e230
Remove unnecessary code.
...
We were locating the dynamic string table via both the section and segment
headers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242674 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 14:29:00 +00:00
Rafael Espindola
96a1f00376
Simplify the search for which segment has a virtual address. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242672 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 14:15:38 +00:00
Rafael Espindola
9a4133e1ee
Simplify iterating over program headers and detect corrupt ones.
...
We now use a simple pointer and have range loops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242669 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-20 13:35:33 +00:00
Rafael Espindola
ba7661d294
For new archive member we only need to store the full path.
...
We were storing both the path and the file name, which was redundant
and easy to get confused up with.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242347 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-15 22:46:53 +00:00
Rafael Espindola
8d1daf644b
Handle the error of trying to convert a regular archive to a thin one.
...
While at it, test that we can add to a thin archive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242330 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-15 20:45:56 +00:00
Rafael Espindola
4c9cd28947
Initial support for writing thin archives.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242269 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-15 05:47:46 +00:00
Rafael Espindola
7a6e3434ba
Add support for reading members out of thin archives.
...
For now the Archive owns the buffers of the thin archive members.
This makes for a simple API, but all the buffers are destructed
only when the archive is destructed. This should be fine since we
close the files after mmap so we should not hit an open file
limit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242215 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-14 22:18:43 +00:00
Rafael Espindola
6e9f427cb2
llvm-ar: Don't try to extract from thin archives.
...
This matches the gnu ar behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242162 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-14 16:55:13 +00:00
Hans Wennborg
a69b1311b2
Allocate the IntervalMap in ELF.h on the heap to work around MSVC alignment bug (PR24113)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242157 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-14 16:27:16 +00:00
Rafael Espindola
ec6cc055ce
Add a herper function. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242100 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-14 01:06:16 +00:00
Rafael Espindola
168b1bebf0
Add support deterministic output in llvm-ar and make it the default.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242061 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-13 20:38:09 +00:00
Michael J. Spencer
d37a9dfc0b
[Object][ELF] Handle the dynamic string table in files without a section table.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241937 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-10 20:11:57 +00:00
NAKAMURA Takumi
89a6fba75e
llvm/Object/ELF.h: Appease g++-4.7.2.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241895 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-10 08:43:41 +00:00
Michael J. Spencer
478d483d7e
Fix shadowing.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241870 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 22:42:21 +00:00
Michael J. Spencer
8109763d68
[Object][ELF] Support dumping hash-tables from files with no section table.
...
This time without breaking the bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241869 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 22:32:24 +00:00
Adrian Prantl
2efb9f7c3e
Temporarily reverting 241765, 241768, and 241772 to unbreak the build bots.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241781 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 02:14:49 +00:00
Davide Italiano
776151f085
Silence a warning, trying to unbreak the build after r241765.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241772 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 01:45:02 +00:00
Michael J. Spencer
43dce9c732
Fix typename issues.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241768 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 00:46:24 +00:00
Michael J. Spencer
7d0e4c73d4
[Object][ELF] Support dumping hash-tables from files with no section table.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241765 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-09 00:21:06 +00:00
Rafael Espindola
c155a415e8
Revert part of "Disallow Archive::child_iterator that don't point to an archive."
...
This reverts parts of commit r241747. MSVC doesn't like it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241753 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 22:41:41 +00:00
Rafael Espindola
bf4296f2c0
Disallow Archive::child_iterator that don't point to an archive.
...
NFC, just less error prone.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241747 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 22:15:07 +00:00
Rafael Espindola
b13e877e27
Start adding support for writing archives in BSD format.
...
No support for the symbol table yet (but will hopefully add it today).
We always use the long filename format so that we can align the member,
which is an advantage of the BSD format.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241721 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 20:47:32 +00:00
Rui Ueyama
c011edf224
Object/COFF: Fix import library's getNameType method.
...
This expression to extract bits were simply wrong.
I'm going to test this functionality from LLD.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241703 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 18:21:09 +00:00
Rafael Espindola
7b7c81cd35
Delete UnknownAddress. It is a perfectly valid symbol value.
...
getSymbolValue now returns a value that in convenient for most callers:
* 0 for undefined
* symbol size for common symbols
* offset/address for symbols the rest
Code that needs something more specific can check getSymbolFlags.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241605 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-07 17:12:59 +00:00
Rafael Espindola
078442e9d4
Inline function into single use. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241453 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 15:36:50 +00:00
Rafael Espindola
c2966a3ac7
Remove getRelocationAddress.
...
Originally added in r139314.
Back then it didn't actually get the address, it got whatever value the
relocation used: address or offset.
The values in different object formats are:
* MachO: Always an offset.
* COFF: Always an address, but when talking about the virtual address of
sections it says: "for simplicity, compilers should set this to zero".
* ELF: An offset for .o files and and address for .so files. In the case of the
.so, the relocation in not linked to any section (sh_info is 0). We can't
really compute an offset.
Some API mappings would be:
* Use getAddress for everything. It would be quite cumbersome. To compute the
address elf has to follow sh_info, which can be corrupted and therefore the
method has to return an ErrorOr. The address of the section is also the same
for every relocation in a section, so we shouldn't have to check the error
and fetch the value for every relocation.
* Use a getValue and make it up to the user to know what it is getting.
* Use a getOffset and:
* Assert for dynamic ELF objects. That is a very peculiar case and it is
probably fair to ask any tool that wants to support it to use ELF.h. The
only tool we have that reads those (llvm-readobj) already does that. The
only other use case I can think of is a dynamic linker.
* Check that COFF .obj files have sections with zero virtual address spaces. If
it turns out that some assembler/compiler produces these, we can change
COFFObjectFile::getRelocationOffset to subtract it. Given COFF format,
this can be done without the need for ErrorOr.
The getRelocationAddress method was never implemented for COFF. It also
had exactly one use in a very peculiar case: a shortcut for adding the
section value to a pcrel reloc on MachO.
Given that, I don't expect that there is any use out there of the C API. If
that is not the case, let me know and I will add it back with the implementation
inlined and do a proper deprecation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241450 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 14:55:37 +00:00
Rafael Espindola
a25ee390b5
Fix handling of ELF::R_MIPS_32 on Mips64.
...
Thanks to Aboud, Amjad for reporting the regression and providing the testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241440 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 12:18:44 +00:00
Simon Atanasyan
afc0340d96
[ELFYAML] Fix handling SHT_NOBITS sections by obj2yaml/yaml2obj tools
...
SHT_NOBITS sections do not have content in an object file. Now the yaml2obj
tool does not accept `Content` field for such sections, and the obj2yaml
tool does not attempt to read the section content from a file.
Restore r241350 and r241352.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241377 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-03 23:00:54 +00:00
Benjamin Kramer
c9a5964ea2
Delete dead code. NFC.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241367 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-03 19:10:09 +00:00