[PATCH] D139407: [llvm-objdump][AArch64] Fix ADRP target label calculation

Kristina Bessonova via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 10:30:17 PST 2022


krisb updated this revision to Diff 482186.
krisb added a comment.

Rebase & ping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139407/new/

https://reviews.llvm.org/D139407

Files:
  llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
  llvm/test/tools/llvm-objdump/ELF/AArch64/pcrel-address.yaml


Index: llvm/test/tools/llvm-objdump/ELF/AArch64/pcrel-address.yaml
===================================================================
--- llvm/test/tools/llvm-objdump/ELF/AArch64/pcrel-address.yaml
+++ llvm/test/tools/llvm-objdump/ELF/AArch64/pcrel-address.yaml
@@ -2,7 +2,7 @@
 # RUN: llvm-objdump %t -d --no-show-raw-insn --no-leading-addr | FileCheck %s
 
 # CHECK-LABEL: <_start>:
-# CHECK-NEXT:    adrp x2, 0x220000 <_start+0x80>
+# CHECK-NEXT:    adrp x2, 0x220000 <_start+0x1ff00>
 
 --- !ELF
 FileHeader:
@@ -16,10 +16,6 @@
     Address: 0x200100
     Flags:   [SHF_ALLOC, SHF_EXECINSTR]
     Content: '02010090'
-  - Name:    .data
-    Type:    SHT_PROGBITS
-    Flags:   [SHF_ALLOC, SHF_WRITE]
-    Address: 0x220000
 Symbols:
   - Name:    _start
     Section: .text
Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
===================================================================
--- llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
+++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
@@ -412,8 +412,11 @@
     const auto &Desc = Info->get(Inst.getOpcode());
     for (unsigned i = 0, e = Inst.getNumOperands(); i != e; i++) {
       if (Desc.OpInfo[i].OperandType == MCOI::OPERAND_PCREL) {
-        int64_t Imm = Inst.getOperand(i).getImm() * 4;
-        Target = Addr + Imm;
+        int64_t Imm = Inst.getOperand(i).getImm();
+        if (Inst.getOpcode() == AArch64::ADRP)
+          Target = (Addr & -4096) + Imm * 4096;
+        else
+          Target = Addr + Imm * 4;
         return true;
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139407.482186.patch
Type: text/x-patch
Size: 1575 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221212/cf165c9d/attachment.bin>


More information about the llvm-commits mailing list