summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/DwarfWriter.cpp
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
commitd60da495cd5c6bc119b3489e6b3147158735bb99 (patch)
treed26aa4b527b45bdc2f8b0f53673cd5e6a763363f /lib/CodeGen/DwarfWriter.cpp
parent29ce95511f905df3a63e3b953a4a0179ead46865 (diff)
downloadexternal_llvm-d60da495cd5c6bc119b3489e6b3147158735bb99.zip
external_llvm-d60da495cd5c6bc119b3489e6b3147158735bb99.tar.gz
external_llvm-d60da495cd5c6bc119b3489e6b3147158735bb99.tar.bz2
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/DwarfWriter.cpp')
-rw-r--r--lib/CodeGen/DwarfWriter.cpp29
1 files changed, 9 insertions, 20 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 073cb4a..2b4b4ce 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -2789,26 +2789,15 @@ private:
if (Personality) {
Asm->EmitULEB128Bytes(7);
Asm->EOL("Augmentation Size");
- Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4);
- Asm->EOL("Personality (pcrel sdata4)");
+ Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect);
+ Asm->EOL("Personality (pcrel sdata4 indirect)");
- if (TAI->needsSet()) {
- O << "\t.set\t";
- PrintLabelName("set", SetCounter);
- O << ",";
- Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
- O << "-" << TAI->getPCSymbol();
- Asm->EOL("Set Personality");
- PrintRelDirective();
- PrintLabelName("set", SetCounter);
- Asm->EOL("Personality");
- ++SetCounter;
- } else {
- PrintRelDirective();
- Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
- O << "-" << TAI->getPCSymbol();
- Asm->EOL("Personality");
- }
+ PrintRelDirective();
+ O << TAI->getPersonalityPrefix();
+ Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
+ O << TAI->getPersonalitySuffix();
+ O << "-" << TAI->getPCSymbol();
+ Asm->EOL("Personality");
Asm->EmitULEB128Bytes(DW_EH_PE_pcrel);
Asm->EOL("LSDA Encoding (pcrel)");
@@ -3297,7 +3286,7 @@ public:
const std::vector<Function *> Personalities = MMI->getPersonalities();
for (unsigned i =0; i < Personalities.size(); ++i)
EmitCommonEHFrame(Personalities[i], i);
-
+
for (std::vector<FunctionEHFrameInfo>::iterator I = EHFrames.begin(),
E = EHFrames.end(); I != E; ++I)
EmitEHFrame(*I);