diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:41:05 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:41:05 +0000 | 
| commit | 01095a5d43bbfde13731688ddcf6048ebb8b7721 (patch) | |
| tree | 4def12e759965de927d963ac65840d663ef9d1ea /lib/Object/ObjectFile.cpp | |
| parent | f0f4822ed4b66e3579e92a89f368f8fb860e218e (diff) | |
Notes
Diffstat (limited to 'lib/Object/ObjectFile.cpp')
| -rw-r--r-- | lib/Object/ObjectFile.cpp | 38 | 
1 files changed, 24 insertions, 14 deletions
diff --git a/lib/Object/ObjectFile.cpp b/lib/Object/ObjectFile.cpp index d12dc411361c..92f9c1f4f0a0 100644 --- a/lib/Object/ObjectFile.cpp +++ b/lib/Object/ObjectFile.cpp @@ -29,9 +29,12 @@ ObjectFile::ObjectFile(unsigned int Type, MemoryBufferRef Source)      : SymbolicFile(Type, Source) {}  bool SectionRef::containsSymbol(SymbolRef S) const { -  ErrorOr<section_iterator> SymSec = S.getSection(); -  if (!SymSec) +  Expected<section_iterator> SymSec = S.getSection(); +  if (!SymSec) { +    // TODO: Actually report errors helpfully. +    consumeError(SymSec.takeError());      return false; +  }    return *this == **SymSec;  } @@ -46,20 +49,27 @@ uint64_t ObjectFile::getSymbolValue(DataRefImpl Ref) const {  std::error_code ObjectFile::printSymbolName(raw_ostream &OS,                                              DataRefImpl Symb) const { -  ErrorOr<StringRef> Name = getSymbolName(Symb); -  if (std::error_code EC = Name.getError()) -    return EC; +  Expected<StringRef> Name = getSymbolName(Symb); +  if (!Name) +    return errorToErrorCode(Name.takeError());    OS << *Name;    return std::error_code();  }  uint32_t ObjectFile::getSymbolAlignment(DataRefImpl DRI) const { return 0; } +bool ObjectFile::isSectionBitcode(DataRefImpl Sec) const { +  StringRef SectName; +  if (!getSectionName(Sec, SectName)) +    return SectName == ".llvmbc"; +  return false; +} +  section_iterator ObjectFile::getRelocatedSection(DataRefImpl Sec) const {    return section_iterator(SectionRef(Sec, this));  } -ErrorOr<std::unique_ptr<ObjectFile>> +Expected<std::unique_ptr<ObjectFile>>  ObjectFile::createObjectFile(MemoryBufferRef Object, sys::fs::file_magic Type) {    StringRef Data = Object.getBuffer();    if (Type == sys::fs::file_magic::unknown) @@ -71,13 +81,13 @@ ObjectFile::createObjectFile(MemoryBufferRef Object, sys::fs::file_magic Type) {    case sys::fs::file_magic::archive:    case sys::fs::file_magic::macho_universal_binary:    case sys::fs::file_magic::windows_resource: -    return object_error::invalid_file_type; +    return errorCodeToError(object_error::invalid_file_type);    case sys::fs::file_magic::elf:    case sys::fs::file_magic::elf_relocatable:    case sys::fs::file_magic::elf_executable:    case sys::fs::file_magic::elf_shared_object:    case sys::fs::file_magic::elf_core: -    return createELFObjectFile(Object); +    return errorOrToExpected(createELFObjectFile(Object));    case sys::fs::file_magic::macho_object:    case sys::fs::file_magic::macho_executable:    case sys::fs::file_magic::macho_fixed_virtual_memory_shared_lib: @@ -93,23 +103,23 @@ ObjectFile::createObjectFile(MemoryBufferRef Object, sys::fs::file_magic Type) {    case sys::fs::file_magic::coff_object:    case sys::fs::file_magic::coff_import_library:    case sys::fs::file_magic::pecoff_executable: -    return createCOFFObjectFile(Object); +    return errorOrToExpected(createCOFFObjectFile(Object));    }    llvm_unreachable("Unexpected Object File Type");  } -ErrorOr<OwningBinary<ObjectFile>> +Expected<OwningBinary<ObjectFile>>  ObjectFile::createObjectFile(StringRef ObjectPath) {    ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr =        MemoryBuffer::getFile(ObjectPath);    if (std::error_code EC = FileOrErr.getError()) -    return EC; +    return errorCodeToError(EC);    std::unique_ptr<MemoryBuffer> Buffer = std::move(FileOrErr.get()); -  ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = +  Expected<std::unique_ptr<ObjectFile>> ObjOrErr =        createObjectFile(Buffer->getMemBufferRef()); -  if (std::error_code EC = ObjOrErr.getError()) -    return EC; +  if (!ObjOrErr) +    ObjOrErr.takeError();    std::unique_ptr<ObjectFile> Obj = std::move(ObjOrErr.get());    return OwningBinary<ObjectFile>(std::move(Obj), std::move(Buffer));  | 
