diff options
-rw-r--r-- | include/llvm/MC/MCAsmInfo.h | 2 | ||||
-rw-r--r-- | lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp | 12 | ||||
-rw-r--r-- | lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h | 4 | ||||
-rw-r--r-- | test/CodeGen/SPARC/exception.ll | 2 |
4 files changed, 19 insertions, 1 deletions
diff --git a/include/llvm/MC/MCAsmInfo.h b/include/llvm/MC/MCAsmInfo.h index d3f48660ab..c36d8585e3 100644 --- a/include/llvm/MC/MCAsmInfo.h +++ b/include/llvm/MC/MCAsmInfo.h @@ -364,7 +364,7 @@ namespace llvm { unsigned Encoding, MCStreamer &Streamer) const; - const MCExpr * + virtual const MCExpr * getExprForFDESymbol(const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const; diff --git a/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp b/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp index 856b4bbf5d..c594868047 100644 --- a/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp +++ b/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp @@ -56,3 +56,15 @@ SparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym, return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer); } + +const MCExpr* +SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym, + unsigned Encoding, + MCStreamer &Streamer) const { + if (Encoding & dwarf::DW_EH_PE_pcrel) { + MCContext &Ctx = Streamer.getContext(); + return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32, + MCSymbolRefExpr::Create(Sym, Ctx), Ctx); + } + return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer); +} diff --git a/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h b/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h index 71dcf6bec3..d53d09deee 100644 --- a/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h +++ b/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h @@ -26,6 +26,10 @@ public: virtual const MCExpr* getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const; + virtual const MCExpr* getExprForFDESymbol(const MCSymbol *Sym, + unsigned Encoding, + MCStreamer &Streamer) const; + }; } // namespace llvm diff --git a/test/CodeGen/SPARC/exception.ll b/test/CodeGen/SPARC/exception.ll index d6044e199f..fd9e871dd9 100644 --- a/test/CodeGen/SPARC/exception.ll +++ b/test/CodeGen/SPARC/exception.ll @@ -57,6 +57,7 @@ ; V8PIC_NOCFI: .section .eh_frame ; V8PIC_NOCFI-NOT: .section ; V8PIC_NOCFI: .word %r_disp32(DW.ref.__gxx_personality_v0) +; V8PIC_NOCFI: .word %r_disp32(.Ltmp{{.+}}) ! FDE initial location ; V9ABS-LABEL: main: @@ -94,6 +95,7 @@ ; V9PIC_NOCFI: .section .eh_frame ; V9PIC_NOCFI-NOT: .section ; V9PIC_NOCFI: .word %r_disp32(DW.ref.__gxx_personality_v0) +; V9PIC_NOCFI: .word %r_disp32(.Ltmp{{.+}}) ! FDE initial location define i32 @main(i32 %argc, i8** nocapture readnone %argv) unnamed_addr #0 { entry: |