a426b286c8
patch for r263619, and unify all the URLs to point to svnweb.
77 lines
3.1 KiB
Diff
77 lines
3.1 KiB
Diff
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://svnweb.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;
|