Issue |
145757
|
Summary |
llvm-objdump disassemly does not correctly decode data references in PIC code?
|
Labels |
tools:llvm-objdump,
new issue
|
Assignees |
|
Reporter |
MatzeB
|
Reproducer:
test.c:
```
int foo = 0;
int get_foo() { return foo; }
void set_foo(int val) { foo = val; }
```
compile and dump:
```
$ clang -fPIC -shared -o libtest.so test.c
$ llvm-objdump -d libtest.so
...
0000000000001100 <get_foo>:
1100: 55 pushq %rbp
1101: 48 89 e5 movq %rsp, %rbp
1104: 48 8b 05 dd 2e 00 00 movq 0x2edd(%rip), %rax # 0x3fe8 <__gmon_start__+0x3fe8>
110b: 8b 00 movl (%rax), %eax
110d: 5d popq %rbp
110e: c3 retq
110f: 90 nop
0000000000001110 <set_foo>:
1110: 55 pushq %rbp
1111: 48 89 e5 movq %rsp, %rbp
1114: 89 7d fc movl %edi, -0x4(%rbp)
1117: 8b 4d fc movl -0x4(%rbp), %ecx
111a: 48 8b 05 c7 2e 00 00 movq 0x2ec7(%rip), %rax # 0x3fe8 <__gmon_start__+0x3fe8>
1121: 89 08 movl %ecx, (%rax)
1123: 5d popq %rbp
1124: c3 retq
```
Note that this says `__gmon_start__+0x3fe8` at the place where it references the `foo` variable.
GNU objdump gets this right and says:
```
...
1104: 48 8b 05 dd 2e 00 00 mov 0x2edd(%rip),%rax # 3fe8 <foo@@Base-0x3c>
...
111a: 48 8b 05 c7 2e 00 00 mov 0x2ec7(%rip),%rax # 3fe8 <foo@@Base-0x3c>
...
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs