Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 99c3e48

Browse files
committed
[Sparc] Use %r_disp32 for pc_rel entries in FDE as well.
This makes MCAsmInfo::getExprForFDESymbol() a virtual function and overrides it in SparcMCAsmInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200376 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 52de969 commit 99c3e48

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

include/llvm/MC/MCAsmInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ namespace llvm {
364364
unsigned Encoding,
365365
MCStreamer &Streamer) const;
366366

367-
const MCExpr *
367+
virtual const MCExpr *
368368
getExprForFDESymbol(const MCSymbol *Sym,
369369
unsigned Encoding,
370370
MCStreamer &Streamer) const;

lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,15 @@ SparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym,
5656

5757
return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
5858
}
59+
60+
const MCExpr*
61+
SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
62+
unsigned Encoding,
63+
MCStreamer &Streamer) const {
64+
if (Encoding & dwarf::DW_EH_PE_pcrel) {
65+
MCContext &Ctx = Streamer.getContext();
66+
return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32,
67+
MCSymbolRefExpr::Create(Sym, Ctx), Ctx);
68+
}
69+
return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
70+
}

lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ class SparcELFMCAsmInfo : public MCAsmInfoELF {
2626
virtual const MCExpr* getExprForPersonalitySymbol(const MCSymbol *Sym,
2727
unsigned Encoding,
2828
MCStreamer &Streamer) const;
29+
virtual const MCExpr* getExprForFDESymbol(const MCSymbol *Sym,
30+
unsigned Encoding,
31+
MCStreamer &Streamer) const;
32+
2933
};
3034

3135
} // namespace llvm

test/CodeGen/SPARC/exception.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
; V8PIC_NOCFI: .section .eh_frame
5858
; V8PIC_NOCFI-NOT: .section
5959
; V8PIC_NOCFI: .word %r_disp32(DW.ref.__gxx_personality_v0)
60+
; V8PIC_NOCFI: .word %r_disp32(.Ltmp{{.+}}) ! FDE initial location
6061

6162

6263
; V9ABS-LABEL: main:
@@ -94,6 +95,7 @@
9495
; V9PIC_NOCFI: .section .eh_frame
9596
; V9PIC_NOCFI-NOT: .section
9697
; V9PIC_NOCFI: .word %r_disp32(DW.ref.__gxx_personality_v0)
98+
; V9PIC_NOCFI: .word %r_disp32(.Ltmp{{.+}}) ! FDE initial location
9799

98100
define i32 @main(i32 %argc, i8** nocapture readnone %argv) unnamed_addr #0 {
99101
entry:

0 commit comments

Comments
 (0)