aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/ELFObjectFile.cpp
AgeCommit message (Collapse)AuthorFilesLines
2015-06-04[Object, ELF] Don't assert on invalid magic in createELFObjectFile.Alexey Samsonov1-2/+3
Instead, return a proper error code from factory. llvm-svn: 239116
2015-06-04[Object, ELF] Don't call llvm_unreachable() from createELFObjectFile.Alexey Samsonov1-2/+2
Instead, return a proper error code from factory. llvm-svn: 239113
2015-06-02Simplify now that we always use an alignment of 2 for ELF files.Rafael Espindola1-42/+18
This saves 123144 bytes out of llvm-nm on powerpc64le. llvm-svn: 238824
2014-08-19Don't own the buffer in object::Binary.Rafael Espindola1-22/+13
Owning the buffer is somewhat inflexible. Some Binaries have sub Binaries (like Archive) and we had to create dummy buffers just to handle that. It is also a bad fit for IRObjectFile where the Module wants to own the buffer too. Keeping this ownership would make supporting IR inside native objects particularly painful. This patch focuses in lib/Object. If something elsewhere used to own an Binary, now it also owns a MemoryBuffer. This patch introduces a few new types. * MemoryBufferRef. This is just a pair of StringRefs for the data and name. This is to MemoryBuffer as StringRef is to std::string. * OwningBinary. A combination of Binary and a MemoryBuffer. This is needed for convenience functions that take a filename and return both the buffer and the Binary using that buffer. The C api now uses OwningBinary to avoid any change in semantics. I will start a new thread to see if we want to change it and how. llvm-svn: 216002
2014-08-17Add a non-templated ELFObjectFileBase class.Rafael Espindola1-0/+4
Use it to implement some ELF only virtual interfaces instead of using error prone series of dyn_casts. llvm-svn: 215838
2014-07-31Use std::unique_ptr to make the ownership explicit.Rafael Espindola1-2/+2
llvm-svn: 214377
2014-07-05This only needs a StringRef. No functionality change.Rafael Espindola1-1/+2
llvm-svn: 212371
2014-06-24Replace two release calls with std::move. I missed this on the previous commit.Rafael Espindola1-2/+2
llvm-svn: 211597
2014-06-24Pass a unique_ptr<MemoryBuffer> to the constructors in the Binary hierarchy.Rafael Espindola1-8/+8
Once the objects are constructed, they own the buffer. Passing a unique_ptr makes that clear. llvm-svn: 211595
2014-06-23Pass a std::unique_ptr& to the create??? methods is lib/Object.Rafael Espindola1-10/+19
This makes the buffer ownership on error conditions very natural. The buffer is only moved out of the argument if an object is constructed that now owns the buffer. llvm-svn: 211546
2014-06-23Make ObjectFile and BitcodeReader always own the MemoryBuffer.Rafael Espindola1-26/+9
This allows us to just use a std::unique_ptr to store the pointer to the buffer. The flip side is that they have to support releasing the buffer back to the caller. Overall this looks like a more efficient and less brittle api. llvm-svn: 211542
2014-06-18Fix a memory leak in the error path.Rafael Espindola1-2/+10
llvm-svn: 211184
2014-06-16Fix pr17056.Rafael Espindola1-5/+5
This makes llvm-nm ignore members that are not sufficiently aligned for lib/Object to handle. These archives are invalid. GNU AR is able to handle this, but in general just warns about broken archive members. We should probably start warning too, but for now just make sure llvm-nm exits with an 0. llvm-svn: 211036
2014-06-13Remove 'using std::errro_code' from lib.Rafael Espindola1-2/+1
llvm-svn: 210871
2014-06-12Don't use 'using std::error_code' in include/llvm.Rafael Espindola1-0/+1
This should make sure that most new uses use the std prefix. llvm-svn: 210835
2014-03-06Replace OwningPtr<T> with std::unique_ptr<T>.Ahmed Charles1-1/+1
This compiles with no changes to clang/lld/lldb with MSVC and includes overloads to various functions which are used by those projects and llvm which have OwningPtr's as parameters. This should allow out of tree projects some time to move. There are also no changes to libs/Target, which should help out of tree targets have time to move, if necessary. llvm-svn: 203083
2014-03-05[C++11] Replace OwningPtr::take() with OwningPtr::release().Ahmed Charles1-1/+1
llvm-svn: 202957
2014-01-24Make ObjectFile ownership of the MemoryBuffer optional.Rafael Espindola1-9/+18
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-15/+18
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-08-08[Object] Split the ELF interface into 3 parts.Michael J. Spencer1-2/+1
* ELFTypes.h contains template magic for defining types based on endianess, size, and alignment. * ELFFile.h defines the ELFFile class which provides low level ELF specific access. * ELFObjectFile.h contains ELFObjectFile which uses ELFFile to implement the ObjectFile interface. llvm-svn: 188022
2013-05-24Replace Count{Leading,Trailing}Zeros_{32,64} with count{Leading,Trailing}Zeros.Michael J. Spencer1-1/+1
llvm-svn: 182680
2013-02-03[Support] Add LLVM_IS_UNALIGNED_ACCESS_FAST.Michael J. Spencer1-4/+16
llvm-svn: 174271
2013-01-15[Object][ELF] Simplify ELFObjectFile by using ELFType.Michael J. Spencer1-8/+8
This simplifies the usage and implementation of ELFObjectFile by using ELFType to replace: <endianness target_endianness, std::size_t max_alignment, bool is64Bits> This does complicate the base ELF types as they must now use template template parameters to partially specialize for the 32 and 64bit cases. However these are only defined once. llvm-svn: 172515
2013-01-04[Object][ELF] Add a maximum alignment. This is used by createELFObjectFile ↵Michael J. Spencer1-6/+28
to create a properly aligned reader. llvm-svn: 171520
2012-04-16Implement GDB integration for source level debugging of code JITed usingPreston Gurd1-10/+0
the MCJIT execution engine. The GDB JIT debugging integration support works by registering a loaded object image with a pre-defined function that GDB will monitor if GDB is attached. GDB integration support is implemented for ELF only at this time. This integration requires GDB version 7.0 or newer. Patch by Andy Kaylor! llvm-svn: 154868
2012-02-12Expose the ELFObjectFile class directly in the Object/ELF.h header, similarlyEli Bendersky1-1695/+25
to what's done for MachO and COFF. This allows advanced uses of the class to be implemented outside the Object library. In particular, the DyldELFObject subclass is now moved into its logical home - ExecutionEngine/RuntimeDyld. This patch was reviewed by Michael Spencer. llvm-svn: 150327
2012-02-04Object: avoid undefined behavior when bounds-checkingDylan Noblesmith1-8/+22
Don't form an out of bounds pointer just to test if it would be out of bounds. Also perform the same bounds checking for all the previous mapped structures. llvm-svn: 149750
2012-01-24Sink assert-only variables into the assertsMatt Beaumont-Gay1-16/+10
llvm-svn: 148849
2012-01-23Silence warnings in -asserts buildMatt Beaumont-Gay1-0/+6
llvm-svn: 148715
2012-01-22Basic runtime dynamic loading capabilities added to ELFObjectFile, implementedEli Bendersky1-19/+239
in a subclass named DyldELFObject. This class supports rebasing the object file it represents by re-mapping section addresses to the actual memory addresses the object was placed in. This is required for MC-JIT implementation on ELF with debugging support. Patch reviewed on llvm-commits. Developed together with Ashok Thirumurthi and Andrew Kaylor. llvm-svn: 148653
2011-11-29Fixed ObjectFile functions:Danil Malyshev1-13/+36
- getSymbolOffset() renamed as getSymbolFileOffset() - getSymbolFileOffset(), getSymbolAddress(), getRelocationAddress() returns same result for ELFObjectFile, MachOObjectFile and COFFObjectFile. - added getRelocationOffset() - fixed MachOObjectFile::getSymbolSize() - fixed MachOObjectFile::getSymbolSection() - fixed MachOObjectFile::getSymbolOffset() for symbols without section data. llvm-svn: 145408
2011-11-27Revert r145180 as it is causing test failures on all the bots.Chandler Carruth1-36/+13
Original commit message: Fixed ObjectFile functions: - getSymbolOffset() renamed as getSymbolFileOffset() - getSymbolFileOffset(), getSymbolAddress(), getRelocationAddress() returns same result for ELFObjectFile, MachOObjectFile and COFFObjectFile. - added getRelocationOffset() - fixed MachOObjectFile::getSymbolSize() - fixed MachOObjectFile::getSymbolSection() - fixed MachOObjectFile::getSymbolOffset() for symbols without section data. llvm-svn: 145182
2011-11-27Fixed ObjectFile functions:Danil Malyshev1-13/+36
- getSymbolOffset() renamed as getSymbolFileOffset() - getSymbolFileOffset(), getSymbolAddress(), getRelocationAddress() returns same result for ELFObjectFile, MachOObjectFile and COFFObjectFile. - added getRelocationOffset() - fixed MachOObjectFile::getSymbolSize() - fixed MachOObjectFile::getSymbolSection() - fixed MachOObjectFile::getSymbolOffset() for symbols without section data. llvm-svn: 145180
2011-10-26Expand relocation type field to 64 bits. MachO scattered relocations ↵Owen Anderson1-2/+2
require 33 bits of type info. llvm-svn: 143032
2011-10-17Object: Add some types to SymbolRef::Type.Michael J. Spencer1-0/+6
Some of these can be true at the same time and there are a lot to add, so this should be turned into a bitfield. Some of the other accessors should probably be folded into this. llvm-svn: 142318
2011-10-17Object: Add isSymbolAbsolute and getSymbolSection.Michael J. Spencer1-0/+29
llvm-svn: 142317
2011-10-17Object: Add isSymbolWeak.Michael J. Spencer1-0/+12
llvm-svn: 142316
2011-10-17Object: Implement casting for concrete classes.Michael J. Spencer1-0/+5
llvm-svn: 142314
2011-10-17Object: Fix redundant name.Michael J. Spencer1-2/+2
llvm-svn: 142238
2011-10-13ELF: Fix the section that relocations apply to. Add test to verify. Patch by ↵Michael J. Spencer1-3/+3
Danil Malyshev! llvm-svn: 141901
2011-10-13Elf_Word is not POD! Stop using it in a DenseMap.Nick Lewycky1-7/+4
llvm-svn: 141851
2011-10-12lib/Object/ELFObjectFile.cpp: Fix undefined behavior for ↵NAKAMURA Takumi1-1/+4
MC/ELF/many-section.s not to fail (on msvc). DenseMap::lookup(k) would return "default constructor value" when k was not met. It would be useless when value type were POD. llvm-svn: 141774
2011-10-11Reapply r141605 with fixes for appropriate handling of reserved section numbersNick Lewycky1-17/+50
in st_shndx fields. llvm-svn: 141639
2011-10-11Add support for .symtab_shnidx. Unfortunately, doing this required breaking aNick Lewycky1-9/+42
layer of abstraction around SymbolRef where you can read its private SymbolPimpl member. llvm-svn: 141636
2011-10-11Revert r141605 as it broke tests for llvm-nm.Nick Lewycky1-34/+13
llvm-svn: 141614
2011-10-11Add support for reading many-section ELF files.Nick Lewycky1-13/+34
If you want to tackle adding the testcase, let me know. It's a 4.2MB ELF file and I'll be happy to mail it to you. llvm-svn: 141605
2011-10-10Object: add getSectionAlignment.Michael J. Spencer1-0/+10
llvm-svn: 141581
2011-10-07Fix GCC again.Michael J. Spencer1-1/+1
llvm-svn: 141389
2011-10-07Change relocation API to be per section. This time without breaking GCC.Michael J. Spencer1-79/+301
llvm-svn: 141385
2011-10-07Revert 141376 and 141377 due to breaking the build.Bill Wendling1-301/+79
--- Reverse-merging r141377 into '.': U tools/llvm-objdump/MachODump.cpp --- Reverse-merging r141376 into '.': U include/llvm/Object/COFF.h U include/llvm/Object/ObjectFile.h U include/llvm-c/Object.h U tools/llvm-objdump/llvm-objdump.cpp U lib/Object/MachOObjectFile.cpp U lib/Object/COFFObjectFile.cpp U lib/Object/Object.cpp U lib/Object/ELFObjectFile.cpp llvm-svn: 141379