Skip to content

Commit bedac64

Browse files
authored
[llvm][SystemZ] Recognize @GOTENT modifier in assembler. (#107038)
Closes #105918. I'm unsure if there are other places that need to be updated for this.
1 parent ebc7f55 commit bedac64

File tree

4 files changed

+141
-131
lines changed

4 files changed

+141
-131
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ class MCSymbolRefExpr : public MCExpr {
192192
VK_Invalid,
193193

194194
VK_GOT,
195+
VK_GOTENT,
195196
VK_GOTOFF,
196197
VK_GOTREL,
197198
VK_PCREL,

llvm/lib/MC/MCExpr.cpp

Lines changed: 133 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) {
226226
case VK_DTPOFF: return "DTPOFF";
227227
case VK_DTPREL: return "DTPREL";
228228
case VK_GOT: return "GOT";
229+
case VK_GOTENT: return "GOTENT";
229230
case VK_GOTOFF: return "GOTOFF";
230231
case VK_GOTREL: return "GOTREL";
231232
case VK_PCREL: return "PCREL";
@@ -404,137 +405,138 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) {
404405
MCSymbolRefExpr::VariantKind
405406
MCSymbolRefExpr::getVariantKindForName(StringRef Name) {
406407
return StringSwitch<VariantKind>(Name.lower())
407-
.Case("dtprel", VK_DTPREL)
408-
.Case("dtpoff", VK_DTPOFF)
409-
.Case("got", VK_GOT)
410-
.Case("gotoff", VK_GOTOFF)
411-
.Case("gotrel", VK_GOTREL)
412-
.Case("pcrel", VK_PCREL)
413-
.Case("gotpcrel", VK_GOTPCREL)
414-
.Case("gotpcrel_norelax", VK_GOTPCREL_NORELAX)
415-
.Case("gottpoff", VK_GOTTPOFF)
416-
.Case("indntpoff", VK_INDNTPOFF)
417-
.Case("ntpoff", VK_NTPOFF)
418-
.Case("gotntpoff", VK_GOTNTPOFF)
419-
.Case("plt", VK_PLT)
420-
.Case("tlscall", VK_TLSCALL)
421-
.Case("tlsdesc", VK_TLSDESC)
422-
.Case("tlsgd", VK_TLSGD)
423-
.Case("tlsld", VK_TLSLD)
424-
.Case("tlsldm", VK_TLSLDM)
425-
.Case("tpoff", VK_TPOFF)
426-
.Case("tprel", VK_TPREL)
427-
.Case("tlvp", VK_TLVP)
428-
.Case("tlvppage", VK_TLVPPAGE)
429-
.Case("tlvppageoff", VK_TLVPPAGEOFF)
430-
.Case("page", VK_PAGE)
431-
.Case("pageoff", VK_PAGEOFF)
432-
.Case("gotpage", VK_GOTPAGE)
433-
.Case("gotpageoff", VK_GOTPAGEOFF)
434-
.Case("imgrel", VK_COFF_IMGREL32)
435-
.Case("secrel32", VK_SECREL)
436-
.Case("size", VK_SIZE)
437-
.Case("abs8", VK_X86_ABS8)
438-
.Case("pltoff", VK_X86_PLTOFF)
439-
.Case("l", VK_PPC_LO)
440-
.Case("h", VK_PPC_HI)
441-
.Case("ha", VK_PPC_HA)
442-
.Case("high", VK_PPC_HIGH)
443-
.Case("higha", VK_PPC_HIGHA)
444-
.Case("higher", VK_PPC_HIGHER)
445-
.Case("highera", VK_PPC_HIGHERA)
446-
.Case("highest", VK_PPC_HIGHEST)
447-
.Case("highesta", VK_PPC_HIGHESTA)
448-
.Case("got@l", VK_PPC_GOT_LO)
449-
.Case("got@h", VK_PPC_GOT_HI)
450-
.Case("got@ha", VK_PPC_GOT_HA)
451-
.Case("local", VK_PPC_LOCAL)
452-
.Case("tocbase", VK_PPC_TOCBASE)
453-
.Case("toc", VK_PPC_TOC)
454-
.Case("toc@l", VK_PPC_TOC_LO)
455-
.Case("toc@h", VK_PPC_TOC_HI)
456-
.Case("toc@ha", VK_PPC_TOC_HA)
457-
.Case("u", VK_PPC_U)
458-
.Case("l", VK_PPC_L)
459-
.Case("tls", VK_PPC_TLS)
460-
.Case("dtpmod", VK_PPC_DTPMOD)
461-
.Case("tprel@l", VK_PPC_TPREL_LO)
462-
.Case("tprel@h", VK_PPC_TPREL_HI)
463-
.Case("tprel@ha", VK_PPC_TPREL_HA)
464-
.Case("tprel@high", VK_PPC_TPREL_HIGH)
465-
.Case("tprel@higha", VK_PPC_TPREL_HIGHA)
466-
.Case("tprel@higher", VK_PPC_TPREL_HIGHER)
467-
.Case("tprel@highera", VK_PPC_TPREL_HIGHERA)
468-
.Case("tprel@highest", VK_PPC_TPREL_HIGHEST)
469-
.Case("tprel@highesta", VK_PPC_TPREL_HIGHESTA)
470-
.Case("dtprel@l", VK_PPC_DTPREL_LO)
471-
.Case("dtprel@h", VK_PPC_DTPREL_HI)
472-
.Case("dtprel@ha", VK_PPC_DTPREL_HA)
473-
.Case("dtprel@high", VK_PPC_DTPREL_HIGH)
474-
.Case("dtprel@higha", VK_PPC_DTPREL_HIGHA)
475-
.Case("dtprel@higher", VK_PPC_DTPREL_HIGHER)
476-
.Case("dtprel@highera", VK_PPC_DTPREL_HIGHERA)
477-
.Case("dtprel@highest", VK_PPC_DTPREL_HIGHEST)
478-
.Case("dtprel@highesta", VK_PPC_DTPREL_HIGHESTA)
479-
.Case("got@tprel", VK_PPC_GOT_TPREL)
480-
.Case("got@tprel@l", VK_PPC_GOT_TPREL_LO)
481-
.Case("got@tprel@h", VK_PPC_GOT_TPREL_HI)
482-
.Case("got@tprel@ha", VK_PPC_GOT_TPREL_HA)
483-
.Case("got@dtprel", VK_PPC_GOT_DTPREL)
484-
.Case("got@dtprel@l", VK_PPC_GOT_DTPREL_LO)
485-
.Case("got@dtprel@h", VK_PPC_GOT_DTPREL_HI)
486-
.Case("got@dtprel@ha", VK_PPC_GOT_DTPREL_HA)
487-
.Case("got@tlsgd", VK_PPC_GOT_TLSGD)
488-
.Case("got@tlsgd@l", VK_PPC_GOT_TLSGD_LO)
489-
.Case("got@tlsgd@h", VK_PPC_GOT_TLSGD_HI)
490-
.Case("got@tlsgd@ha", VK_PPC_GOT_TLSGD_HA)
491-
.Case("got@tlsld", VK_PPC_GOT_TLSLD)
492-
.Case("got@tlsld@l", VK_PPC_GOT_TLSLD_LO)
493-
.Case("got@tlsld@h", VK_PPC_GOT_TLSLD_HI)
494-
.Case("got@tlsld@ha", VK_PPC_GOT_TLSLD_HA)
495-
.Case("got@pcrel", VK_PPC_GOT_PCREL)
496-
.Case("got@tlsgd@pcrel", VK_PPC_GOT_TLSGD_PCREL)
497-
.Case("got@tlsld@pcrel", VK_PPC_GOT_TLSLD_PCREL)
498-
.Case("got@tprel@pcrel", VK_PPC_GOT_TPREL_PCREL)
499-
.Case("tls@pcrel", VK_PPC_TLS_PCREL)
500-
.Case("notoc", VK_PPC_NOTOC)
501-
.Case("gdgot", VK_Hexagon_GD_GOT)
502-
.Case("gdplt", VK_Hexagon_GD_PLT)
503-
.Case("iegot", VK_Hexagon_IE_GOT)
504-
.Case("ie", VK_Hexagon_IE)
505-
.Case("ldgot", VK_Hexagon_LD_GOT)
506-
.Case("ldplt", VK_Hexagon_LD_PLT)
507-
.Case("lo8", VK_AVR_LO8)
508-
.Case("hi8", VK_AVR_HI8)
509-
.Case("hlo8", VK_AVR_HLO8)
510-
.Case("typeindex", VK_WASM_TYPEINDEX)
511-
.Case("tbrel", VK_WASM_TBREL)
512-
.Case("mbrel", VK_WASM_MBREL)
513-
.Case("tlsrel", VK_WASM_TLSREL)
514-
.Case("got@tls", VK_WASM_GOT_TLS)
515-
.Case("funcindex", VK_WASM_FUNCINDEX)
516-
.Case("gotpcrel32@lo", VK_AMDGPU_GOTPCREL32_LO)
517-
.Case("gotpcrel32@hi", VK_AMDGPU_GOTPCREL32_HI)
518-
.Case("rel32@lo", VK_AMDGPU_REL32_LO)
519-
.Case("rel32@hi", VK_AMDGPU_REL32_HI)
520-
.Case("rel64", VK_AMDGPU_REL64)
521-
.Case("abs32@lo", VK_AMDGPU_ABS32_LO)
522-
.Case("abs32@hi", VK_AMDGPU_ABS32_HI)
523-
.Case("hi", VK_VE_HI32)
524-
.Case("lo", VK_VE_LO32)
525-
.Case("pc_hi", VK_VE_PC_HI32)
526-
.Case("pc_lo", VK_VE_PC_LO32)
527-
.Case("got_hi", VK_VE_GOT_HI32)
528-
.Case("got_lo", VK_VE_GOT_LO32)
529-
.Case("gotoff_hi", VK_VE_GOTOFF_HI32)
530-
.Case("gotoff_lo", VK_VE_GOTOFF_LO32)
531-
.Case("plt_hi", VK_VE_PLT_HI32)
532-
.Case("plt_lo", VK_VE_PLT_LO32)
533-
.Case("tls_gd_hi", VK_VE_TLS_GD_HI32)
534-
.Case("tls_gd_lo", VK_VE_TLS_GD_LO32)
535-
.Case("tpoff_hi", VK_VE_TPOFF_HI32)
536-
.Case("tpoff_lo", VK_VE_TPOFF_LO32)
537-
.Default(VK_Invalid);
408+
.Case("dtprel", VK_DTPREL)
409+
.Case("dtpoff", VK_DTPOFF)
410+
.Case("got", VK_GOT)
411+
.Case("gotent", VK_GOTENT)
412+
.Case("gotoff", VK_GOTOFF)
413+
.Case("gotrel", VK_GOTREL)
414+
.Case("pcrel", VK_PCREL)
415+
.Case("gotpcrel", VK_GOTPCREL)
416+
.Case("gotpcrel_norelax", VK_GOTPCREL_NORELAX)
417+
.Case("gottpoff", VK_GOTTPOFF)
418+
.Case("indntpoff", VK_INDNTPOFF)
419+
.Case("ntpoff", VK_NTPOFF)
420+
.Case("gotntpoff", VK_GOTNTPOFF)
421+
.Case("plt", VK_PLT)
422+
.Case("tlscall", VK_TLSCALL)
423+
.Case("tlsdesc", VK_TLSDESC)
424+
.Case("tlsgd", VK_TLSGD)
425+
.Case("tlsld", VK_TLSLD)
426+
.Case("tlsldm", VK_TLSLDM)
427+
.Case("tpoff", VK_TPOFF)
428+
.Case("tprel", VK_TPREL)
429+
.Case("tlvp", VK_TLVP)
430+
.Case("tlvppage", VK_TLVPPAGE)
431+
.Case("tlvppageoff", VK_TLVPPAGEOFF)
432+
.Case("page", VK_PAGE)
433+
.Case("pageoff", VK_PAGEOFF)
434+
.Case("gotpage", VK_GOTPAGE)
435+
.Case("gotpageoff", VK_GOTPAGEOFF)
436+
.Case("imgrel", VK_COFF_IMGREL32)
437+
.Case("secrel32", VK_SECREL)
438+
.Case("size", VK_SIZE)
439+
.Case("abs8", VK_X86_ABS8)
440+
.Case("pltoff", VK_X86_PLTOFF)
441+
.Case("l", VK_PPC_LO)
442+
.Case("h", VK_PPC_HI)
443+
.Case("ha", VK_PPC_HA)
444+
.Case("high", VK_PPC_HIGH)
445+
.Case("higha", VK_PPC_HIGHA)
446+
.Case("higher", VK_PPC_HIGHER)
447+
.Case("highera", VK_PPC_HIGHERA)
448+
.Case("highest", VK_PPC_HIGHEST)
449+
.Case("highesta", VK_PPC_HIGHESTA)
450+
.Case("got@l", VK_PPC_GOT_LO)
451+
.Case("got@h", VK_PPC_GOT_HI)
452+
.Case("got@ha", VK_PPC_GOT_HA)
453+
.Case("local", VK_PPC_LOCAL)
454+
.Case("tocbase", VK_PPC_TOCBASE)
455+
.Case("toc", VK_PPC_TOC)
456+
.Case("toc@l", VK_PPC_TOC_LO)
457+
.Case("toc@h", VK_PPC_TOC_HI)
458+
.Case("toc@ha", VK_PPC_TOC_HA)
459+
.Case("u", VK_PPC_U)
460+
.Case("l", VK_PPC_L)
461+
.Case("tls", VK_PPC_TLS)
462+
.Case("dtpmod", VK_PPC_DTPMOD)
463+
.Case("tprel@l", VK_PPC_TPREL_LO)
464+
.Case("tprel@h", VK_PPC_TPREL_HI)
465+
.Case("tprel@ha", VK_PPC_TPREL_HA)
466+
.Case("tprel@high", VK_PPC_TPREL_HIGH)
467+
.Case("tprel@higha", VK_PPC_TPREL_HIGHA)
468+
.Case("tprel@higher", VK_PPC_TPREL_HIGHER)
469+
.Case("tprel@highera", VK_PPC_TPREL_HIGHERA)
470+
.Case("tprel@highest", VK_PPC_TPREL_HIGHEST)
471+
.Case("tprel@highesta", VK_PPC_TPREL_HIGHESTA)
472+
.Case("dtprel@l", VK_PPC_DTPREL_LO)
473+
.Case("dtprel@h", VK_PPC_DTPREL_HI)
474+
.Case("dtprel@ha", VK_PPC_DTPREL_HA)
475+
.Case("dtprel@high", VK_PPC_DTPREL_HIGH)
476+
.Case("dtprel@higha", VK_PPC_DTPREL_HIGHA)
477+
.Case("dtprel@higher", VK_PPC_DTPREL_HIGHER)
478+
.Case("dtprel@highera", VK_PPC_DTPREL_HIGHERA)
479+
.Case("dtprel@highest", VK_PPC_DTPREL_HIGHEST)
480+
.Case("dtprel@highesta", VK_PPC_DTPREL_HIGHESTA)
481+
.Case("got@tprel", VK_PPC_GOT_TPREL)
482+
.Case("got@tprel@l", VK_PPC_GOT_TPREL_LO)
483+
.Case("got@tprel@h", VK_PPC_GOT_TPREL_HI)
484+
.Case("got@tprel@ha", VK_PPC_GOT_TPREL_HA)
485+
.Case("got@dtprel", VK_PPC_GOT_DTPREL)
486+
.Case("got@dtprel@l", VK_PPC_GOT_DTPREL_LO)
487+
.Case("got@dtprel@h", VK_PPC_GOT_DTPREL_HI)
488+
.Case("got@dtprel@ha", VK_PPC_GOT_DTPREL_HA)
489+
.Case("got@tlsgd", VK_PPC_GOT_TLSGD)
490+
.Case("got@tlsgd@l", VK_PPC_GOT_TLSGD_LO)
491+
.Case("got@tlsgd@h", VK_PPC_GOT_TLSGD_HI)
492+
.Case("got@tlsgd@ha", VK_PPC_GOT_TLSGD_HA)
493+
.Case("got@tlsld", VK_PPC_GOT_TLSLD)
494+
.Case("got@tlsld@l", VK_PPC_GOT_TLSLD_LO)
495+
.Case("got@tlsld@h", VK_PPC_GOT_TLSLD_HI)
496+
.Case("got@tlsld@ha", VK_PPC_GOT_TLSLD_HA)
497+
.Case("got@pcrel", VK_PPC_GOT_PCREL)
498+
.Case("got@tlsgd@pcrel", VK_PPC_GOT_TLSGD_PCREL)
499+
.Case("got@tlsld@pcrel", VK_PPC_GOT_TLSLD_PCREL)
500+
.Case("got@tprel@pcrel", VK_PPC_GOT_TPREL_PCREL)
501+
.Case("tls@pcrel", VK_PPC_TLS_PCREL)
502+
.Case("notoc", VK_PPC_NOTOC)
503+
.Case("gdgot", VK_Hexagon_GD_GOT)
504+
.Case("gdplt", VK_Hexagon_GD_PLT)
505+
.Case("iegot", VK_Hexagon_IE_GOT)
506+
.Case("ie", VK_Hexagon_IE)
507+
.Case("ldgot", VK_Hexagon_LD_GOT)
508+
.Case("ldplt", VK_Hexagon_LD_PLT)
509+
.Case("lo8", VK_AVR_LO8)
510+
.Case("hi8", VK_AVR_HI8)
511+
.Case("hlo8", VK_AVR_HLO8)
512+
.Case("typeindex", VK_WASM_TYPEINDEX)
513+
.Case("tbrel", VK_WASM_TBREL)
514+
.Case("mbrel", VK_WASM_MBREL)
515+
.Case("tlsrel", VK_WASM_TLSREL)
516+
.Case("got@tls", VK_WASM_GOT_TLS)
517+
.Case("funcindex", VK_WASM_FUNCINDEX)
518+
.Case("gotpcrel32@lo", VK_AMDGPU_GOTPCREL32_LO)
519+
.Case("gotpcrel32@hi", VK_AMDGPU_GOTPCREL32_HI)
520+
.Case("rel32@lo", VK_AMDGPU_REL32_LO)
521+
.Case("rel32@hi", VK_AMDGPU_REL32_HI)
522+
.Case("rel64", VK_AMDGPU_REL64)
523+
.Case("abs32@lo", VK_AMDGPU_ABS32_LO)
524+
.Case("abs32@hi", VK_AMDGPU_ABS32_HI)
525+
.Case("hi", VK_VE_HI32)
526+
.Case("lo", VK_VE_LO32)
527+
.Case("pc_hi", VK_VE_PC_HI32)
528+
.Case("pc_lo", VK_VE_PC_LO32)
529+
.Case("got_hi", VK_VE_GOT_HI32)
530+
.Case("got_lo", VK_VE_GOT_LO32)
531+
.Case("gotoff_hi", VK_VE_GOTOFF_HI32)
532+
.Case("gotoff_lo", VK_VE_GOTOFF_LO32)
533+
.Case("plt_hi", VK_VE_PLT_HI32)
534+
.Case("plt_lo", VK_VE_PLT_LO32)
535+
.Case("tls_gd_hi", VK_VE_TLS_GD_HI32)
536+
.Case("tls_gd_lo", VK_VE_TLS_GD_LO32)
537+
.Case("tpoff_hi", VK_VE_TPOFF_HI32)
538+
.Case("tpoff_lo", VK_VE_TPOFF_LO32)
539+
.Default(VK_Invalid);
538540
}
539541

540542
/* *** */

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ unsigned SystemZELFObjectWriter::getRelocType(MCContext &Ctx,
185185
return getTLSGDReloc(Ctx, Loc, Kind);
186186

187187
case MCSymbolRefExpr::VK_GOT:
188+
case MCSymbolRefExpr::VK_GOTENT:
188189
if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL)
189190
return ELF::R_390_GOTENT;
190191
Ctx.reportError(Loc, "Only PC-relative GOT accesses are supported for now");

llvm/test/MC/SystemZ/fixups.s

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
.align 16
2020
larl %r14, target@got
2121

22+
# CHECK: larl %r14, target@GOTENT # encoding: [0xc0,0xe0,A,A,A,A]
23+
# CHECK-NEXT: # fixup A - offset: 2, value: target@GOTENT+2, kind: FK_390_PC32DBL
24+
# CHECK-REL: 0x{{[0-9A-F]*2}} R_390_GOTENT target 0x2
25+
.align 16
26+
larl %r14, target@gotent
27+
2228
# CHECK: larl %r14, target@INDNTPOFF # encoding: [0xc0,0xe0,A,A,A,A]
2329
# CHECK-NEXT: # fixup A - offset: 2, value: target@INDNTPOFF+2, kind: FK_390_PC32DBL
2430
# CHECK-REL: 0x{{[0-9A-F]*2}} R_390_TLS_IEENT target 0x2

0 commit comments

Comments
 (0)