Skip to content

Commit

Permalink
[llvm-objdump] Fix --file-headers (-f) option
Browse files Browse the repository at this point in the history
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
  • Loading branch information
petar-jovanovic committed Oct 19, 2018
1 parent 8a91cf1 commit 8d947ba
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 6 deletions.
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-objdump/file-headers-coff.test
Expand Up @@ -10,4 +10,4 @@ sections:
symbols:

# CHECK: architecture: i386
# CHECK: start address: 0x0000
# CHECK: start address: 0x00000000
4 changes: 2 additions & 2 deletions llvm/test/tools/llvm-objdump/file-headers-elf.test
Expand Up @@ -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
4 changes: 2 additions & 2 deletions llvm/test/tools/llvm-objdump/file-headers-pe.test
Expand Up @@ -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.
Expand All @@ -30,4 +30,4 @@ sections:
symbols:

# CHECK: architecture: i386
# CHECK: start address: 0x1234
# CHECK: start address: 0x00123456
5 changes: 4 additions & 1 deletion llvm/tools/llvm-objdump/llvm-objdump.cpp
Expand Up @@ -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";
}

Expand Down

0 comments on commit 8d947ba

Please sign in to comment.