diff options
| author | 2013-11-07 18:36:53 +0000 | |
|---|---|---|
| committer | 2013-11-07 18:36:53 +0000 | |
| commit | 2d47df9fcf5ec53e2afda3ee21a6f7cafb2fd3fb (patch) | |
| tree | 5d3b073e8f7d8f21643dcaa948d50bd0138c9b9c | |
| parent | 55ed56bd5ba912d6b91776046bee09e779c8d879 (diff) | |
| parent | d0c09dc2177d132099a05af8537bdb9a8225af8c (diff) | |
Merge "Add missing error message propagation to ElfFile::SetMap"
| -rw-r--r-- | runtime/elf_file.cc | 26 | ||||
| -rw-r--r-- | runtime/elf_file.h | 2 |
2 files changed, 16 insertions, 12 deletions
diff --git a/runtime/elf_file.cc b/runtime/elf_file.cc index 15c95f2206..b3b24baf80 100644 --- a/runtime/elf_file.cc +++ b/runtime/elf_file.cc @@ -82,7 +82,8 @@ bool ElfFile::Setup(File* file, bool writable, bool program_header_only, std::st // first just map ELF header to get program header size information size_t elf_header_size = sizeof(llvm::ELF::Elf32_Ehdr); if (!SetMap(MemMap::MapFile(elf_header_size, prot, flags, file_->Fd(), 0, - file_->GetPath().c_str(), error_msg))) { + file_->GetPath().c_str(), error_msg), + error_msg)) { return false; } // then remap to cover program header @@ -94,14 +95,16 @@ bool ElfFile::Setup(File* file, bool writable, bool program_header_only, std::st return false; } if (!SetMap(MemMap::MapFile(program_header_size, prot, flags, file_->Fd(), 0, - file_->GetPath().c_str(), error_msg))) { + file_->GetPath().c_str(), error_msg), + error_msg)) { *error_msg = StringPrintf("Failed to map ELF program headers: %s", error_msg->c_str()); return false; } } else { // otherwise map entire file if (!SetMap(MemMap::MapFile(file_->GetLength(), prot, flags, file_->Fd(), 0, - file_->GetPath().c_str(), error_msg))) { + file_->GetPath().c_str(), error_msg), + error_msg)) { *error_msg = StringPrintf("Failed to map ELF file: %s", error_msg->c_str()); return false; } @@ -173,9 +176,10 @@ ElfFile::~ElfFile() { delete dynsym_symbol_table_; } -bool ElfFile::SetMap(MemMap* map) { +bool ElfFile::SetMap(MemMap* map, std::string* error_msg) { if (map == NULL) { - // MemMap::Open should have already logged + // MemMap::Open should have already set an error. + DCHECK(!error_msg->empty()); return false; } map_.reset(map); @@ -187,12 +191,12 @@ bool ElfFile::SetMap(MemMap* map) { || (llvm::ELF::ElfMagic[1] != header_->e_ident[llvm::ELF::EI_MAG1]) || (llvm::ELF::ElfMagic[2] != header_->e_ident[llvm::ELF::EI_MAG2]) || (llvm::ELF::ElfMagic[3] != header_->e_ident[llvm::ELF::EI_MAG3])) { - LOG(WARNING) << "Failed to find ELF magic in " << file_->GetPath() - << ": " << std::hex - << static_cast<uint8_t>(header_->e_ident[llvm::ELF::EI_MAG0]) - << static_cast<uint8_t>(header_->e_ident[llvm::ELF::EI_MAG1]) - << static_cast<uint8_t>(header_->e_ident[llvm::ELF::EI_MAG2]) - << static_cast<uint8_t>(header_->e_ident[llvm::ELF::EI_MAG3]); + *error_msg = StringPrintf("Failed to find ELF magic in %s: %c%c%c%c", + file_->GetPath().c_str(), + header_->e_ident[llvm::ELF::EI_MAG0], + header_->e_ident[llvm::ELF::EI_MAG1], + header_->e_ident[llvm::ELF::EI_MAG2], + header_->e_ident[llvm::ELF::EI_MAG3]); return false; } diff --git a/runtime/elf_file.h b/runtime/elf_file.h index b0251370d2..f8c235d191 100644 --- a/runtime/elf_file.h +++ b/runtime/elf_file.h @@ -122,7 +122,7 @@ class ElfFile { bool Setup(File* file, bool writable, bool program_header_only, std::string* error_msg); - bool SetMap(MemMap* map); + bool SetMap(MemMap* map, std::string* error_msg); byte* GetProgramHeadersStart(); byte* GetSectionHeadersStart(); |