llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
29.12k stars 12.01k forks source link

llvm-objdump --adjust-vma gives different result than GNU objdump #75444

Open pwprzybyla opened 11 months ago

pwprzybyla commented 11 months ago

There is a discrepancy between --adjust-vma of llvm-objdump and GNU objdump. I use adjust-vma.test from llvm and generate the object file input.o. Then I run both llvm-objdump --adjust-vma=0x123000 --all-headers -D -z input.o and objdump --adjust-vma=0x123000 --all-headers -D -z input.o . From this thest I would expect to have same section adresses adjusted. However there is difference between both: GNU objdump

0000000000000000 <debug_str_sym>: 0: 00 00 add %al,(%rax) 1: R_X86_64_32 .text 2: 00 00 add %al,(%rax)

llvm-objdump 0000000000000000 <debug_str_sym>: 0: 00 00 addb %al, (%rax) 0000000000123001: R_X86_64_32 .text 2: 00 00 addb %al, (%rax)

To my understanding section debug_str_sym should not be adjusted as it is not allocatable section and it is debug one. More to say in source code of llvm-objdump I can find following comment:

// Used for --adjust-vma to check if address should be adjusted by the // specified value for a given section. // For ELF we do not adjust non-allocatable sections like debug ones, // because they are not loadable. // TODO: implement for other file formats.

llvmbot commented 11 months ago

@llvm/issue-subscribers-tools-llvm-objdump

Author: None (pwprzybyla)

There is a discrepancy between --adjust-vma of llvm-objdump and GNU objdump. I use adjust-vma.test from llvm and generate the object file input.o. Then I run both `llvm-objdump --adjust-vma=0x123000 --all-headers -D -z input.o` and `objdump --adjust-vma=0x123000 --all-headers -D -z input.o` . From this thest I would expect to have same section adresses adjusted. However there is difference between both: GNU objdump `0000000000000000 <debug_str_sym>:` ` 0: 00 00 add %al,(%rax)` ` 1: R_X86_64_32 .text` ` 2: 00 00 add %al,(%rax)` llvm-objdump `0000000000000000 <debug_str_sym>:` ` 0: 00 00 addb %al, (%rax)` ` 0000000000123001: R_X86_64_32 .text` ` 2: 00 00 addb %al, (%rax)` To my understanding section debug_str_sym should not be adjusted as it is not allocatable section and it is debug one. More to say in source code of llvm-objdump I can find following comment: `// Used for --adjust-vma to check if address should be adjusted by the` `// specified value for a given section.` `// For ELF we do not adjust non-allocatable sections like debug ones,` `// because they are not loadable.` `// TODO: implement for other file formats.`