2014-03-18 22:07:45 +00:00
|
|
|
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.
|
|
|
|
|
2014-05-24 22:27:31 +00:00
|
|
|
Introduced here: http://svnweb.freebsd.org/changeset/base/262261
|
2014-03-18 22:07:45 +00:00
|
|
|
|
|
|
|
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;
|