aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/MachOObjectFile.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-01-24Make ObjectFile ownership of the MemoryBuffer optional.Rafael Espindola1-9/+10
This allows llvm-ar to mmap the input files only once. llvm-svn: 200040
2014-01-21Be a bit more consistent about using ErrorOr when constructing Binary objects.Rafael Espindola1-10/+10
The constructors of classes deriving from Binary normally take an error_code as an argument to the constructor. My original intent was to change them to have a trivial constructor and move the initial parsing logic to a static method returning an ErrorOr. I changed my mind because: * A constructor with an error_code out parameter is extremely convenient from the implementation side. We can incrementally construct the object and give up when we find an error. * It is very efficient when constructing on the stack or when there is no error. The only inefficient case is where heap allocating and an error is found (we have to free the memory). The result is that this is a much smaller patch. It just standardizes the create* helpers to return an ErrorOr. Almost no functionality change: The only difference is that this found that we were trying to read past the end of COFF import library but ignoring the error. llvm-svn: 199770
2013-12-06Fix a pair of array index checks.Eric Christopher1-2/+5
Patch by Marius Wachtler. llvm-svn: 196560
2013-11-02move getSymbolNMTypeChar to the one program that needs it: nm.Rafael Espindola1-37/+0
llvm-svn: 193933
2013-11-02Fix llvm-nm to mach OS X's nm on some tests.Rafael Espindola1-6/+17
There is still a long way to go for llvm-nm, but at least we now match nm's letter output in the cases we test for. llvm-svn: 193912
2013-09-27Object/COFF: Rename getXXX{Begin,End} -> xxx_{begin,end}.Rui Ueyama1-6/+6
It is mentioned in the LLVM coding standard that _begin() and _end() suffixes should be used. llvm-svn: 191569
2013-09-01Move everything depending on Object/MachOFormat.h over to Support/MachO.h.Charles Davis1-366/+372
llvm-svn: 189728
2013-08-27Revert "Fix the build broken by r189315." and "Move everything depending on ↵Charles Davis1-374/+368
Object/MachOFormat.h over to Support/MachO.h." This reverts commits r189319 and r189315. r189315 broke some tests on what I believe are big-endian platforms. llvm-svn: 189321
2013-08-27Move everything depending on Object/MachOFormat.h over to Support/MachO.h.Charles Davis1-368/+374
llvm-svn: 189315
2013-08-27Support/MachO: Add a bunch of defines.Charles Davis1-26/+26
Right now we have two headers for the Mach-O format. I'd like to get rid of one. Since the other object formats are all in Support, I chose to keep the Mach-O header in Support, and discard the other one. llvm-svn: 189314
2013-08-21Move #includes from .h to .cpp file.Jakub Staszak1-0/+2
llvm-svn: 188852
2013-08-08initial draft of PPCMachObjectWriter.cppDavid Fang1-3/+4
this records relocation entries in the mach-o object file for PIC code generation. tested on powerpc-darwin8, validated against darwin otool -rvV llvm-svn: 188004
2013-08-03MachObjectFile: Don't leak on error.Benjamin Kramer1-7/+9
llvm-svn: 187698
2013-07-22Typo.Eric Christopher1-1/+1
llvm-svn: 186886
2013-07-2280-column tidying. Formatting choices by clang-format.Eric Christopher1-14/+16
llvm-svn: 186885
2013-06-18Basic support for parsing Mach-O universal binaries in LLVMObject libraryAlexey Samsonov1-2/+6
llvm-svn: 184191
2013-06-06Teach llvm-objdump with the -macho parser how to use the data in code tableKevin Enderby1-1/+45
from the LC_DATA_IN_CODE load command. And when disassembling print the data in code formatted for the kind of data it and not disassemble those bytes. I added the format specific functionality to the derived class MachOObjectFile since these tables only appears in Mach-O object files. This is my first attempt to modify the libObject stuff so if folks have better suggestions how to fit this in or suggestions on the implementation please let me know. rdar://11791371 llvm-svn: 183424
2013-06-05Handle relocations that don't point to symbols.Rafael Espindola1-8/+5
In ELF (as in MachO), not all relocations point to symbols. Represent this properly by using a symbol_iterator instead of a SymbolRef. Update llvm-readobj ELF's dumper to handle relocatios without symbols. llvm-svn: 183284
2013-05-14Object: Fix Mach-O relocation printing.Ahmed Bougacha1-2/+3
There were two problems that made llvm-objdump -r crash: - for non-scattered relocations, the symbol/section index is actually in the (aptly named) symbolnum field. - sections are 1-indexed. llvm-svn: 181843
2013-05-09Change getRelocationAdditionalInfo to be ELF only.Rafael Espindola1-6/+0
It was only implemented for ELF where it collected the Addend, so this patch also renames it to getRelocationAddend. llvm-svn: 181502
2013-04-30Fix Addend computation for non external relocations on Macho.Rafael Espindola1-0/+10
llvm-svn: 180790
2013-04-29Add getSymbolAlignment to the ObjectFile interface.Rafael Espindola1-2/+19
For regular object files this is only meaningful for common symbols. An object file format with direct support for atoms should be able to provide alignment information for all symbols. This replaces getCommonSymbolAlignment and fixes test-common-symbols-alignment.ll on darwin. This also includes a fix to MachOObjectFile::getSymbolFlags. It was marking undefined symbols as common (already tested by existing mcjit tests now that it is used). llvm-svn: 180736
2013-04-26Use llvm/Object/MachO.h in macho-dumper. Drop the old macho parser.Rafael Espindola1-29/+132
For Mach-O there were 2 implementations for parsing object files. A standalone llvm/Object/MachOObject.h and llvm/Object/MachO.h which implements the generic interface in llvm/Object/ObjectFile.h. This patch adds the missing features to MachO.h, moves macho-dump to use MachO.h and removes ObjectFile.h. In addition to making sure that check-all is clean, I checked that the new version produces exactly the same output in all Mach-O files in a llvm+clang build directory (including executables and shared libraries). To test the performance, I ran macho-dump over all the files in a llvm+clang build directory again, but this time redirecting the output to /dev/null. Both the old and new versions take about 4.6 seconds (2.5 user) to finish. llvm-svn: 180624
2013-04-25Use a pointer as the relocation iterator.Rafael Espindola1-24/+29
Since the relocation iterator walks only the relocations in one section, we can just use a pointer and avoid fetching information about the section at every reference. llvm-svn: 180262
2013-04-25Clarify getRelocationAddress x getRelocationOffset a bit.Rafael Espindola1-15/+1
getRelocationAddress is for dynamic libraries and executables, getRelocationOffset for relocatable objects. Mark the getRelocationAddress of COFF and MachO as not implemented yet. Add a test of ELF's. llvm-readobj -r now prints the same values as readelf -r. llvm-svn: 180259
2013-04-24Use pointers to iterate over symbols.Rafael Espindola1-30/+36
While here, don't report a dummy symbol for relocations that don't have symbols. We used to says such relocations were for the first defined symbol, but now we return end_symbols(). The llvm-readobj output change agrees with otool. llvm-svn: 180214
2013-04-24Revert r180189.Rafael Espindola1-29/+24
This should bring the ppc bots back. I will try to write a test that would have found the problem on a little endian system too. llvm-svn: 180194
2013-04-24Formatting fixes.Rafael Espindola1-31/+20
llvm-svn: 180190
2013-04-24Use a pointer as the relocation iterator.Rafael Espindola1-23/+28
Since the relocation iterator walks only the relocations in one section, we can just use a pointer and avoid fetching information about the section at every reference. llvm-svn: 180189
2013-04-19refactor the struct byte swapping to a helper function.Rafael Espindola1-70/+20
llvm-svn: 179851
2013-04-19Don't read one command past the end.Rafael Espindola1-2/+6
Thanks to Evgeniy Stepanov for reporting this. It might be a good idea to add a command iterator abstraction to MachO.h, but this fixes the bug for now. llvm-svn: 179848
2013-04-18At Jim Grosbach's request detemplate Object/MachO.h.Rafael Espindola1-82/+1379
We are still able to handle mixed endian objects by swapping one struct at a time. llvm-svn: 179778
2013-04-13Finish templating MachObjectFile over endianness.Rafael Espindola1-417/+15
We are now able to handle big endian macho files in llvm-readobject. Thanks to David Fang for providing the object files. llvm-svn: 179440
2013-04-12Add 179294 back, but don't use bit fields so that it works on big endian hosts.Rafael Espindola1-8/+44
Original message: Print more information about relocations. With this patch llvm-readobj now prints if a relocation is pcrel, its length, if it is extern and if it is scattered. It also refactors the code a bit to use bit fields instead of shifts and masks all over the place. llvm-svn: 179345
2013-04-11Revert my last two commits while I debug what is wrong in a big endian host.Rafael Espindola1-44/+8
llvm-svn: 179303
2013-04-11Print more information about relocations.Rafael Espindola1-8/+44
With this patch llvm-readobj now prints if a relocation is pcrel, its length, if it is extern and if it is scattered. It also refactors the code a bit to use bit fields instead of shifts and masks all over the place. llvm-svn: 179294
2013-04-11Fix MachO's getRelocationAdditionalInfo.Rafael Espindola1-0/+6
It was returning the loaded address of the section containing the relocation, which really doesn't seem to be the intent of this function. llvm-svn: 179255
2013-04-10Template MachOObjectFile over endianness too.Rafael Espindola1-9/+9
llvm-svn: 179179
2013-04-10Template the MachO types over endianness.Rafael Espindola1-6/+6
For now they are still only used as little endian. llvm-svn: 179147
2013-04-09Convert MachOObjectFile to a template.Rafael Espindola1-852/+110
For now it is templated only on being 64 or 32 bits. I will add little/big endian next. llvm-svn: 179097
2013-04-09More uses for SymbolTableEntryBase.Rafael Espindola1-35/+9
llvm-svn: 179076
2013-04-09Add a SymbolTableEntryBase.Rafael Espindola1-47/+27
Use it when we don't need to know if we have a 32 or 64 bit SymbolTableEntry. llvm-svn: 179074
2013-04-08Add a SectionBase struct.Rafael Espindola1-24/+24
Use it to share code and when we don't need to know if we have a 32 or 64 bit Section. llvm-svn: 179072
2013-04-08Template the MachO types over the word size.Rafael Espindola1-65/+86
llvm-svn: 179051
2013-04-08Remove is64BitLoadCommand.Rafael Espindola1-20/+10
llvm-svn: 179048
2013-04-08Add all 4 MachO object types. Use the stored type to implement is64Bits().Rafael Espindola1-5/+8
llvm-svn: 179021
2013-04-07Make MachOObjectFile independent from MachOObject.Rafael Espindola1-16/+9
llvm-svn: 178998
2013-04-07Implement MachOObjectFile::getData directly.Rafael Espindola1-1/+1
llvm-svn: 178997
2013-04-07Implement MachOObjectFile::is64Bit directly.Rafael Espindola1-1/+2
llvm-svn: 178996
2013-04-07Implement MachOObjectFile::getHeaderSize directly.Rafael Espindola1-1/+1
llvm-svn: 178995