[llvm-objdump] Fix --file-headers (-f) option
authorPetar Jovanovic <petar.jovanovic@mips.com>
Fri, 19 Oct 2018 22:16:49 +0000 (22:16 +0000)
committerPetar Jovanovic <petar.jovanovic@mips.com>
Fri, 19 Oct 2018 22:16:49 +0000 (22:16 +0000)
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

llvm/test/tools/llvm-objdump/file-headers-coff.test
llvm/test/tools/llvm-objdump/file-headers-elf.test
llvm/test/tools/llvm-objdump/file-headers-pe.test
llvm/tools/llvm-objdump/llvm-objdump.cpp

index 784b012..144532d 100644 (file)
@@ -10,4 +10,4 @@ sections:
 symbols:
 
 # CHECK: architecture: i386
-# CHECK: start address: 0x0000
+# CHECK: start address: 0x00000000
index ade59cf..397b903 100644 (file)
@@ -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
index 1e2fb2c..68c0861 100644 (file)
@@ -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
index 64c3823..7107966 100644 (file)
@@ -2220,8 +2220,11 @@ static void printFileHeaders(const ObjectFile *o) {
   Expected<uint64_t> 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";
 }