[PATCH] D113576: [AArch64] [COFF] Move jump tables back to the readonly section

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 10 09:19:51 PST 2021


mstorsjo created this revision.
mstorsjo added reviewers: efriedma, TomTan, rnk.
Herald added subscribers: hiraditya, kristof.beyls.
mstorsjo requested review of this revision.
Herald added a project: LLVM.

This essentially reverts f5884d255e78305d41c28c6e001a460ff83981d8
(D57277 <https://reviews.llvm.org/D57277>).

That commit was made as a workaround since LLVM back then didn't
support cross-section relative relocations (IMAGE_REL_ARM64_REL32)
in COFF for ARM64. Support for this was implemented later,
in d5c5cf5ce8d921fc8c5e1b608c298a1ffa688d37 <https://reviews.llvm.org/rGd5c5cf5ce8d921fc8c5e1b608c298a1ffa688d37> (D99572 <https://reviews.llvm.org/D99572>) and
382c505d9cfca8adaec47aea2da7bbcbc00fc05c <https://reviews.llvm.org/rG382c505d9cfca8adaec47aea2da7bbcbc00fc05c> (D102217 <https://reviews.llvm.org/D102217>).

The commit that moved jump tables to the function section noted
that it woud be ideal to utilize IMAGE_REL_ARM64_REL32.

This fixes https://bugs.llvm.org/show_bug.cgi?id=52378 by
avoiding large offsets in the ADRP relocation when referencing
the jump table, as the immediate offset is relative to the start of
the possibly large text section (as the jump table label isn't
made a proper object file level symbol).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113576

Files:
  llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
  llvm/test/CodeGen/AArch64/win64-jumptable.ll


Index: llvm/test/CodeGen/AArch64/win64-jumptable.ll
===================================================================
--- llvm/test/CodeGen/AArch64/win64-jumptable.ll
+++ llvm/test/CodeGen/AArch64/win64-jumptable.ll
@@ -38,12 +38,14 @@
 ; CHECK:    .seh_proc f
 ; CHECK:    b g
 ; CHECK-NEXT:  .seh_endfunclet
+; CHECK-NEXT:  .section .rdata,"dr"
 ; CHECK-NEXT: .p2align  2
 ; CHECK-NEXT: .LJTI0_0:
 ; CHECK:    .word .LBB0_2-.Ltmp0
 ; CHECK:    .word .LBB0_3-.Ltmp0
 ; CHECK:    .word .LBB0_4-.Ltmp0
 ; CHECK:    .word .LBB0_5-.Ltmp0
+; CHECK:    .text
 ; CHECK:    .seh_endproc
 
 ; Check that we can emit an object file with correct unwind info.
Index: llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
+++ llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -818,18 +818,9 @@
   const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
   if (JT.empty()) return;
 
-  const Function &F = MF->getFunction();
   const TargetLoweringObjectFile &TLOF = getObjFileLowering();
-  bool JTInDiffSection =
-      !STI->isTargetCOFF() ||
-      !TLOF.shouldPutJumpTableInFunctionSection(
-          MJTI->getEntryKind() == MachineJumpTableInfo::EK_LabelDifference32,
-          F);
-  if (JTInDiffSection) {
-      // Drop it in the readonly section.
-      MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(F, TM);
-      OutStreamer->SwitchSection(ReadOnlySec);
-  }
+  MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(MF->getFunction(), TM);
+  OutStreamer->SwitchSection(ReadOnlySec);
 
   auto AFI = MF->getInfo<AArch64FunctionInfo>();
   for (unsigned JTI = 0, e = JT.size(); JTI != e; ++JTI) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113576.386201.patch
Type: text/x-patch
Size: 1728 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211110/261b745f/attachment.bin>


More information about the llvm-commits mailing list