From: Petar Jovanovic Date: Fri, 19 Oct 2018 22:16:49 +0000 (+0000) Subject: [llvm-objdump] Fix --file-headers (-f) option X-Git-Tag: llvmorg-8.0.0-rc1~6238 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d947bad093b0920aec2b7cea31da7f723612367;p=platform%2Fupstream%2Fllvm.git [llvm-objdump] Fix --file-headers (-f) option Changed the format call to match the surrounding code. Previously it was printing an unsigned int while the return type being printed was long unsigned int or wider. This caused problems for big-endian systems which were discovered on mips64. Also, the printed address had less characters than it should because the character count was directly obtained from the number of bytes in the address. The tests were adapted to fit this fix and now use longer addresses. Patch by Milos Stojanovic. Differential Revision: https://reviews.llvm.org/D53403 llvm-svn: 344818 --- diff --git a/llvm/test/tools/llvm-objdump/file-headers-coff.test b/llvm/test/tools/llvm-objdump/file-headers-coff.test index 784b012..144532d 100644 --- a/llvm/test/tools/llvm-objdump/file-headers-coff.test +++ b/llvm/test/tools/llvm-objdump/file-headers-coff.test @@ -10,4 +10,4 @@ sections: symbols: # CHECK: architecture: i386 -# CHECK: start address: 0x0000 +# CHECK: start address: 0x00000000 diff --git a/llvm/test/tools/llvm-objdump/file-headers-elf.test b/llvm/test/tools/llvm-objdump/file-headers-elf.test index ade59cf..397b903 100644 --- a/llvm/test/tools/llvm-objdump/file-headers-elf.test +++ b/llvm/test/tools/llvm-objdump/file-headers-elf.test @@ -8,7 +8,7 @@ FileHeader: Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 - Entry: 0x123456 + Entry: 0x123456789abcde # CHECK: architecture: x86_64 -# CHECK: start address: 0x00123456 +# CHECK: start address: 0x00123456789abcde diff --git a/llvm/test/tools/llvm-objdump/file-headers-pe.test b/llvm/test/tools/llvm-objdump/file-headers-pe.test index 1e2fb2c..68c0861 100644 --- a/llvm/test/tools/llvm-objdump/file-headers-pe.test +++ b/llvm/test/tools/llvm-objdump/file-headers-pe.test @@ -7,7 +7,7 @@ header: !Header Machine: IMAGE_FILE_MACHINE_I386 Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ] OptionalHeader: - AddressOfEntryPoint: 0x1234 + AddressOfEntryPoint: 0x123456 # Unfortunately, all these flags are mandatory to set AddressOfEntryPoint. # All the values are randomly picked. They can't interfere in what # we are testing here. @@ -30,4 +30,4 @@ sections: symbols: # CHECK: architecture: i386 -# CHECK: start address: 0x1234 +# CHECK: start address: 0x00123456 diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 64c3823..7107966 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -2220,8 +2220,11 @@ static void printFileHeaders(const ObjectFile *o) { Expected StartAddrOrErr = o->getStartAddress(); if (!StartAddrOrErr) report_error(o->getFileName(), StartAddrOrErr.takeError()); + + StringRef Fmt = o->getBytesInAddress() > 4 ? "%016" PRIx64 : "%08" PRIx64; + uint64_t Address = StartAddrOrErr.get(); outs() << "start address: " - << format("0x%0*x", o->getBytesInAddress(), StartAddrOrErr.get()) + << "0x" << format(Fmt.data(), Address) << "\n"; }