a1f8ad145e
applied to our copy of llvm/clang. These can be applied in alphabetical order to a pristine llvm/clang 3.4 release source tree, to result in the same version used in FreeBSD. This is intended to clearly document all the changes until now, which mostly consist of cherry pickings from the respective upstream trunks, plus a number of hand-written FreeBSD-specific ones. Hopefully those can eventually be cleaned up and sent upstream too. MFC after: 1 week X-MFC-With: r263313
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://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;
|