summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2007-09-11 08:27:17 +0000
committerBill Wendling <isanbard@gmail.com>2007-09-11 08:27:17 +0000
commit2b8fc31df9dbfde8665f9e663549cc6c2777ad98 (patch)
tree58e67133f40782468d0c0733acfcf3706712a313 /llvm/lib/Target
parent887ecdeb0188976be7ab3f56f57494467a9fc785 (diff)
downloadbcm5719-llvm-2b8fc31df9dbfde8665f9e663549cc6c2777ad98.tar.gz
bcm5719-llvm-2b8fc31df9dbfde8665f9e663549cc6c2777ad98.zip
The personality function on Darwin needs a global stub. We then refer to
that global stub instead of doing the ".set" thingy we were doing before. llvm-svn: 41838
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/TargetAsmInfo.cpp2
-rw-r--r--llvm/lib/Target/X86/X86ATTAsmPrinter.cpp3
-rw-r--r--llvm/lib/Target/X86/X86AsmPrinter.cpp9
-rw-r--r--llvm/lib/Target/X86/X86AsmPrinter.h3
-rw-r--r--llvm/lib/Target/X86/X86TargetAsmInfo.cpp2
5 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/TargetAsmInfo.cpp b/llvm/lib/Target/TargetAsmInfo.cpp
index df7a2ec78d1..09a8d5ab8e7 100644
--- a/llvm/lib/Target/TargetAsmInfo.cpp
+++ b/llvm/lib/Target/TargetAsmInfo.cpp
@@ -38,6 +38,8 @@ TargetAsmInfo::TargetAsmInfo() :
GlobalVarAddrSuffix(""),
FunctionAddrPrefix(""),
FunctionAddrSuffix(""),
+ PersonalityPrefix(""),
+ PersonalitySuffix(""),
InlineAsmStart("#APP"),
InlineAsmEnd("#NO_APP"),
AssemblerDialect(0),
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
index b0e6ed127d4..3d54d69ebb5 100644
--- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -74,7 +74,8 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
if (TAI->doesSupportDebugInformation()) {
// Let PassManager know we need debug information and relay
// the MachineModuleInfo address on to DwarfWriter.
- DW.SetModuleInfo(&getAnalysis<MachineModuleInfo>());
+ MMI = &getAnalysis<MachineModuleInfo>();
+ DW.SetModuleInfo(MMI);
}
SetupMachineFunction(MF);
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp
index a06cc6f61b1..b7de8f002db 100644
--- a/llvm/lib/Target/X86/X86AsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp
@@ -352,6 +352,15 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
O << "\n";
+ if (MMI) {
+ // Add the (possibly multiple) personalities to the set of global values.
+ const std::vector<Function *>& Personalities = MMI->getPersonalities();
+
+ for (std::vector<Function *>::const_iterator I = Personalities.begin(),
+ E = Personalities.end(); I != E; ++I)
+ if (*I) GVStubs.insert("_" + (*I)->getName());
+ }
+
// Output stubs for external and common global variables.
if (GVStubs.begin() != GVStubs.end())
SwitchToDataSection(
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.h b/llvm/lib/Target/X86/X86AsmPrinter.h
index 45be89eb216..49110f415dc 100644
--- a/llvm/lib/Target/X86/X86AsmPrinter.h
+++ b/llvm/lib/Target/X86/X86AsmPrinter.h
@@ -30,10 +30,11 @@ namespace llvm {
struct VISIBILITY_HIDDEN X86SharedAsmPrinter : public AsmPrinter {
DwarfWriter DW;
+ MachineModuleInfo *MMI;
X86SharedAsmPrinter(std::ostream &O, X86TargetMachine &TM,
const TargetAsmInfo *T)
- : AsmPrinter(O, TM, T), DW(O, this, T) {
+ : AsmPrinter(O, TM, T), DW(O, this, T), MMI(0) {
Subtarget = &TM.getSubtarget<X86Subtarget>();
}
diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp
index 07a1a197f3a..414782ee4db 100644
--- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -68,6 +68,8 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
StaticCtorsSection = ".mod_init_func";
StaticDtorsSection = ".mod_term_func";
}
+ PersonalityPrefix = "L";
+ PersonalitySuffix = "$non_lazy_ptr";
InlineAsmStart = "# InlineAsm Start";
InlineAsmEnd = "# InlineAsm End";
SetDirective = "\t.set";
OpenPOWER on IntegriCloud