aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/ObjectFile.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-02-29Rename embedded bitcode section in MachOSteven Wu1-0/+7
Summary: Rename the section embeds bitcode from ".llvmbc,.llvmbc" to "__LLVM,__bitcode". The new name matches MachO section naming convention. Reviewers: rafael, pcc Subscribers: davide, llvm-commits, joker.eph Differential Revision: http://reviews.llvm.org/D17388 llvm-svn: 262245
2015-08-07Convert getSymbolSection to return an ErrorOr.Rafael Espindola1-3/+3
This function can actually fail since the symbol contains an index to the section and that can be invalid. llvm-svn: 244375
2015-07-07Delete UnknownAddress. It is a perfectly valid symbol value.Rafael Espindola1-0/+9
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. llvm-svn: 241605
2015-07-02Return ErrorOr from SymbolRef::getName.Rafael Espindola1-3/+3
This function can really fail since the string table offset can be out of bounds. Using ErrorOr makes sure the error is checked. Hopefully a lot of the boilerplate code in tools/* can go away once we have a diagnostic manager in Object. llvm-svn: 241297
2015-06-30Implement containsSymbol with other lower level methods.Rafael Espindola1-0/+7
llvm-svn: 241112
2015-06-09Remove object_error::success and use std::error_code() insteadRui Ueyama1-1/+1
make_error_code(object_error) is slow because object::object_category() uses a ManagedStatic variable. But the real problem is that the function is called too frequently. This patch uses std::error_code() instead of object_error::success. In most cases, we return "success", so this patch reduces number of function calls to that function. http://reviews.llvm.org/D10333 llvm-svn: 239409
2015-05-31Simplify interface of function that doesn't fail.Rafael Espindola1-5/+1
llvm-svn: 238700
2015-02-25Object: Handle Mach-O kext bundle filesJustin Bogner1-0/+1
This particular subtype of Mach-O was missing. Add it. llvm-svn: 230567
2014-11-18Support ELF files of unknown type.Michael J. Spencer1-0/+1
llvm-svn: 222208
2014-08-19Don't own the buffer in object::Binary.Rafael Espindola1-8/+16
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-07-31Use std::unique_ptr to make the ownership explicit.Rafael Espindola1-2/+5
llvm-svn: 214377
2014-07-06Update the MemoryBuffer API to use ErrorOr.Rafael Espindola1-3/+4
llvm-svn: 212405
2014-06-24Pass a unique_ptr<MemoryBuffer> to the constructors in the Binary hierarchy.Rafael Espindola1-3/+3
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-4/+5
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-9/+5
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-13Remove 'using std::errro_code' from lib.Rafael Espindola1-7/+6
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-06-12Remove system_error.h.Rafael Espindola1-1/+1
This is a minimal change to remove the header. I will remove the occurrences of "using std::error_code" in a followup patch. llvm-svn: 210803
2014-03-06Replace OwningPtr<T> with std::unique_ptr<T>.Ahmed Charles1-2/+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-02-21Shankar kindly pointed out that I wasn't following the coding convention ↵Aaron Ballman1-1/+1
properly, so moving raw_ostream.h above system_error.h. llvm-svn: 201885
2014-02-21Fixing the MSVC build by including a file.Aaron Ballman1-0/+1
llvm-svn: 201884
2014-02-21Add a SymbolicFile interface between Binary and ObjectFile.Rafael Espindola1-1/+10
This interface allows IRObjectFile to be implemented without having dummy methods for all section and segment related methods. Both llvm-ar and llvm-nm are changed to use it. Unfortunately the mangler is still not plugged in since it requires some refactoring to make a Module hold a DataLayout. llvm-svn: 201881
2014-01-24Make ObjectFile ownership of the MemoryBuffer optional.Rafael Espindola1-7/+9
This allows llvm-ar to mmap the input files only once. llvm-svn: 200040
2014-01-22Pass the computed magic to createBinary and createObjectFile if available.Rafael Espindola1-2/+4
identify_magic is not free, so we should avoid calling it twice. The argument also makes it cheap for createBinary to just forward to createObjectFile. llvm-svn: 199813
2014-01-22Change createObjectFile to return an ErrorOr.Rafael Espindola1-14/+10
llvm-svn: 199776
2014-01-21Be a bit more consistent about using ErrorOr when constructing Binary objects.Rafael Espindola1-3/+3
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-11-15Path: Recognize COFF import library file magic.Rui Ueyama1-0/+1
Summary: Make identify_magic to recognize COFF import file. Reviewers: Bigcheese CC: llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2165 llvm-svn: 194852
2013-10-15Path: Recognize Windows compiled resource file.Rui Ueyama1-0/+1
Some background: One can pass compiled resource files (.res files) directly to the linker on Windows. If a resource file is given, the linker will run "cvtres" command in background to convert the resource file to a COFF file to link it. What I'm trying to do with this patch is to make the linker to recognize the resource file by file magic, so that it can run cvtres command. Differential Revision: http://llvm-reviews.chandlerc.com/D1943 llvm-svn: 192742
2013-07-24Delete the buffer in createObjectFile if it fails.Rafael Espindola1-1/+4
The Binary constructor takes ownership of the memory buffer. This is a fairly unfortunate interface, but for now make createObjectFile consistent with it by also deleting the buffer if it fails. Fixes a leak in llvm-ar found by the valgrind bots. llvm-svn: 187039
2013-06-18Basic support for parsing Mach-O universal binaries in LLVMObject libraryAlexey Samsonov1-0/+1
llvm-svn: 184191
2013-06-11Fix variable name style. Don't cast to and from int.Rafael Espindola1-0/+2
This enables the compiler to see the enum and produce warnings about a switch not being fully covered. Fix one of these warnings. llvm-svn: 183749
2013-06-11Convert another use of sys::identifyFileType.Rafael Espindola1-25/+26
No functionality change. llvm-svn: 183747
2013-06-10Pass a StringRef to sys::identifyFileType.Rafael Espindola1-2/+1
llvm-svn: 183669
2013-05-30Change how we iterate over relocations on ELF.Rafael Espindola1-0/+4
For COFF and MachO, sections semantically have relocations that apply to them. That is not the case on ELF. In relocatable objects (.o), a section with relocations in ELF has offsets to another section where the relocations should be applied. In dynamic objects and executables, relocations don't have an offset, they have a virtual address. The section sh_info may or may not point to another section, but that is not actually used for resolving the relocations. This patch exposes that in the ObjectFile API. It has the following advantages: * Most (all?) clients can handle this more efficiently. They will normally walk all relocations, so doing an effort to iterate in a particular order doesn't save time. * llvm-readobj now prints relocations in the same way the native readelf does. * probably most important, relocations that don't point to any section are now visible. This is the case of relocations in the rela.dyn section. See the updated relocation-executable.test for example. llvm-svn: 182908
2013-04-29Add getSymbolAlignment to the ObjectFile interface.Rafael Espindola1-0/+6
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-07Remove unused argument.Rafael Espindola1-1/+1
llvm-svn: 178987
2013-01-25When encountering an unknown file format, ObjectFile::createObjectFile shouldEli Bendersky1-1/+3
politely report it instead of running into llvm_unreachable. Also patch llvm-dwarfdump to actually check whether the file it's attempting to dump is a valid object file. llvm-svn: 173489
2011-12-25Remove unused variables.Rafael Espindola1-1/+1
llvm-svn: 147261
2011-12-20Unweaken vtables as per ↵David Blaikie1-0/+2
http://llvm.org/docs/CodingStandards.html#ll_virtual_anch llvm-svn: 146960
2011-09-14ObjectFile: Add support for mach-o-style dSYM companion files.Benjamin Kramer1-0/+1
llvm-svn: 139676
2011-06-25Make Binary the parent of ObjectFile and update children to new interface.Michael J. Spencer1-12/+2
llvm-svn: 133870
2011-06-13Revert the last two commits in the series. r132911, r132912.Michael J. Spencer1-2/+12
llvm-svn: 132913
2011-06-13Make Binary the parent of ObjectFile and update children to new interface.Michael J. Spencer1-12/+2
llvm-svn: 132911
2011-04-22Hook in mach-o object files into Object interface.Eric Christopher1-1/+1
llvm-svn: 129976
2011-01-20Object: Add ELF support.Michael J. Spencer1-1/+1
llvm-svn: 123896
2011-01-20Object: Add COFF Support.Michael J. Spencer1-1/+1
llvm-svn: 123895
2010-12-16MemoryBuffer now return an error_code and returns a OwningPtr<MemoryBuffer> ↵Michael J. Spencer1-2/+5
via an out parm. llvm-svn: 121958
2010-12-09Support/MemoryBuffer: Replace all uses of std::string *ErrMsg with ↵Michael J. Spencer1-1/+3
error_code &ec. And fix clients. llvm-svn: 121379
2010-11-29Merge System into Support.Michael J. Spencer1-1/+1
llvm-svn: 120298