Skip to content

Commit

Permalink
[ELF][AArch64] Fix adrp to undefined weak reference.
Browse files Browse the repository at this point in the history
In the ABI for the 64-bit Arm architecture the section on weak references
states:
During linking, the symbol value of an undefined weak reference is:
- Zero if the relocation type is absolute
- The address of the place if the relocation type is pc-relative.

The relocations associated with an ADRP are relative so we should resolve
the undefined weak reference to the place instead of 0. This matches GNU
ld.bfd behaviour.

fixes pr34928

Differential Revision: https://reviews.llvm.org/D55599

llvm-svn: 349024
  • Loading branch information
smithp35 committed Dec 13, 2018
1 parent 919f5fb commit fe3015d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
4 changes: 2 additions & 2 deletions lld/ELF/InputSection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -671,11 +671,11 @@ static uint64_t getRelocTargetVA(const InputFile *File, RelType Type, int64_t A,
return In.MipsGot->getVA() + In.MipsGot->getTlsIndexOffset(File) -
In.MipsGot->getGp(File);
case R_AARCH64_PAGE_PC: {
uint64_t Val = Sym.isUndefWeak() ? A : Sym.getVA(A);
uint64_t Val = Sym.isUndefWeak() ? P + A : Sym.getVA(A);
return getAArch64Page(Val) - getAArch64Page(P);
}
case R_AARCH64_PLT_PAGE_PC: {
uint64_t Val = Sym.isUndefWeak() ? A : Sym.getPltVA() + A;
uint64_t Val = Sym.isUndefWeak() ? P + A : Sym.getPltVA() + A;
return getAArch64Page(Val) - getAArch64Page(P);
}
case R_RISCV_PC_INDIRECT: {
Expand Down
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-undefined-weak.s
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ _start:
// CHECK-NEXT: 210008: {{.*}} b.eq #4
// CHECK-NEXT: 21000c: {{.*}} cbz x1, #4
// CHECK-NEXT: 210010: {{.*}} adr x0, #0
// CHECK-NEXT: 210014: {{.*}} adrp x0, #-2162688
// CHECK-NEXT: 210014: {{.*}} adrp x0, #0
// CHECK: 210018: {{.*}} .word 0x00000000
// CHECK-NEXT: 21001c: {{.*}} .word 0x00000000
// CHECK-NEXT: 210020: {{.*}} .word 0x00000000
Expand Down

0 comments on commit fe3015d

Please sign in to comment.