summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff')
-rw-r--r--contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff76
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;
OpenPOWER on IntegriCloud