diff options
Diffstat (limited to 'contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff b/contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff new file mode 100644 index 0000000..0053365 --- /dev/null +++ b/contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff @@ -0,0 +1,76 @@ +Pull in r200376 from upstream llvm trunk (by Venkatraman Govindaraju): + + [Sparc] Use %r_disp32 for pc_rel entries in FDE as well. + + This makes MCAsmInfo::getExprForFDESymbol() a virtual function and overrides it in SparcMCAsmInfo. + +Introduced here: http://svn.freebsd.org/changeset/base/262261 + +Index: lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h +=================================================================== +--- lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h ++++ lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h +@@ -26,6 +26,10 @@ class SparcELFMCAsmInfo : public MCAsmInfoELF { + 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 +Index: lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp +=================================================================== +--- lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp ++++ lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp +@@ -58,3 +58,15 @@ SparcELFMCAsmInfo::getExprForPersonalitySymbol(con + + 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); ++} +Index: test/CodeGen/SPARC/exception.ll +=================================================================== +--- test/CodeGen/SPARC/exception.ll ++++ 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: +Index: include/llvm/MC/MCAsmInfo.h +=================================================================== +--- include/llvm/MC/MCAsmInfo.h ++++ include/llvm/MC/MCAsmInfo.h +@@ -371,7 +371,7 @@ namespace llvm { + unsigned Encoding, + MCStreamer &Streamer) const; + +- const MCExpr * ++ virtual const MCExpr * + getExprForFDESymbol(const MCSymbol *Sym, + unsigned Encoding, + MCStreamer &Streamer) const; |