diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-04-30 22:29:54 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-04-30 22:29:54 +0000 |
commit | 89fc9e8f5eb74d5607bed7759628775b564a5383 (patch) | |
tree | fb908ff4a7e98e22ebbd3405c092c5b8fec61547 | |
parent | ec7e4fff960f166be8a8a39b7ba8cc7baac6b02c (diff) | |
download | llvm-89fc9e8f5eb74d5607bed7759628775b564a5383.tar.gz llvm-89fc9e8f5eb74d5607bed7759628775b564a5383.tar.bz2 llvm-89fc9e8f5eb74d5607bed7759628775b564a5383.tar.xz |
Enable CFI on OS X.
Currently the output should be almost identical to the one produced by CodeGen
to make the transition easier.
The only two differences I know of are:
* Some files get an extra advance loc of size 0. This will be fixed when
relaxations are enabled.
* The optimization of declaring an EH symbol as an external variable is not
implemented. This is a subset of adding the nounwind attribute, so we if really
this at -O0 we should probably do it at the IL level.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130623 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 3 | ||||
-rw-r--r-- | lib/MC/MCMachOStreamer.cpp | 3 | ||||
-rw-r--r-- | lib/Target/X86/X86MCAsmInfo.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/PowerPC/mulhs.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/X86/2007-09-17-ObjcFrameEH.ll | 4 | ||||
-rw-r--r-- | test/CodeGen/X86/2008-04-02-unnamedEH.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/X86/2008-12-12-PrivateEHSymbol.ll | 4 | ||||
-rw-r--r-- | test/CodeGen/X86/hidden-vis-pic.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/X86/personality.ll | 22 |
9 files changed, 27 insertions, 17 deletions
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index be7febfb17..9d5a2c4802 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -1070,6 +1070,9 @@ void MCAsmStreamer::Finish() { // Dump out the dwarf file & directory tables and line tables. if (getContext().hasDwarfFiles() && !UseLoc) MCDwarfFileTable::Emit(this); + + if (getNumFrameInfos() && !UseCFI) + MCDwarfFrameEmitter::Emit(*this); } MCStreamer *llvm::createAsmStreamer(MCContext &Context, diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp index b5a55a7530..350321b935 100644 --- a/lib/MC/MCMachOStreamer.cpp +++ b/lib/MC/MCMachOStreamer.cpp @@ -377,6 +377,9 @@ void MCMachOStreamer::EmitInstToData(const MCInst &Inst) { } void MCMachOStreamer::Finish() { + if (getNumFrameInfos()) + MCDwarfFrameEmitter::Emit(*this); + // We have to set the fragment atom associations so we can relax properly for // Mach-O. diff --git a/lib/Target/X86/X86MCAsmInfo.cpp b/lib/Target/X86/X86MCAsmInfo.cpp index 23ce3e6c8e..b5dacc1807 100644 --- a/lib/Target/X86/X86MCAsmInfo.cpp +++ b/lib/Target/X86/X86MCAsmInfo.cpp @@ -71,7 +71,7 @@ X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &Triple) { DwarfUsesInlineInfoSection = true; // Exceptions handling - ExceptionsType = ExceptionHandling::DwarfTable; + ExceptionsType = ExceptionHandling::DwarfCFI; } const MCExpr * diff --git a/test/CodeGen/PowerPC/mulhs.ll b/test/CodeGen/PowerPC/mulhs.ll index 9ab8d997c0..5b02e187ae 100644 --- a/test/CodeGen/PowerPC/mulhs.ll +++ b/test/CodeGen/PowerPC/mulhs.ll @@ -5,7 +5,7 @@ ; RUN: not grep add %t ; RUN: grep mulhw %t | count 1 -define i32 @mulhs(i32 %a, i32 %b) { +define i32 @mulhs(i32 %a, i32 %b) nounwind { entry: %tmp.1 = sext i32 %a to i64 ; <i64> [#uses=1] %tmp.3 = sext i32 %b to i64 ; <i64> [#uses=1] diff --git a/test/CodeGen/X86/2007-09-17-ObjcFrameEH.ll b/test/CodeGen/X86/2007-09-17-ObjcFrameEH.ll index c3403a0b4e..1e43272a84 100644 --- a/test/CodeGen/X86/2007-09-17-ObjcFrameEH.ll +++ b/test/CodeGen/X86/2007-09-17-ObjcFrameEH.ll @@ -1,4 +1,6 @@ -; RUN: llc < %s -march=x86 -mtriple=i686-apple-darwin | grep {isNullOrNil].eh"} | count 2 +; RUN: llc < %s -disable-cfi -march=x86 -mtriple=i686-apple-darwin | grep {isNullOrNil].eh"} | FileCheck %s + +; CHECK: "_-[NSString(local) isNullOrNil].eh": %struct.NSString = type { } %struct._objc__method_prototype_list = type opaque diff --git a/test/CodeGen/X86/2008-04-02-unnamedEH.ll b/test/CodeGen/X86/2008-04-02-unnamedEH.ll index 27bbbaa296..ab8ec801b0 100644 --- a/test/CodeGen/X86/2008-04-02-unnamedEH.ll +++ b/test/CodeGen/X86/2008-04-02-unnamedEH.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s | FileCheck %s +; RUN: llc < %s -disable-cfi | FileCheck %s target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" target triple = "i386-apple-darwin8" diff --git a/test/CodeGen/X86/2008-12-12-PrivateEHSymbol.ll b/test/CodeGen/X86/2008-12-12-PrivateEHSymbol.ll index 0717c207da..2e278118b7 100644 --- a/test/CodeGen/X86/2008-12-12-PrivateEHSymbol.ll +++ b/test/CodeGen/X86/2008-12-12-PrivateEHSymbol.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin9 | grep ^__Z1fv.eh -; RUN: llc < %s -march=x86 -mtriple=i386-apple-darwin9 | grep ^__Z1fv.eh +; RUN: llc < %s -disable-cfi -march=x86-64 -mtriple=x86_64-apple-darwin9 | grep ^__Z1fv.eh +; RUN: llc < %s -disable-cfi -march=x86 -mtriple=i386-apple-darwin9 | grep ^__Z1fv.eh define void @_Z1fv() { entry: diff --git a/test/CodeGen/X86/hidden-vis-pic.ll b/test/CodeGen/X86/hidden-vis-pic.ll index ba130a2c1c..217dba6944 100644 --- a/test/CodeGen/X86/hidden-vis-pic.ll +++ b/test/CodeGen/X86/hidden-vis-pic.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -mtriple=i386-apple-darwin9 -relocation-model=pic -disable-fp-elim -unwind-tables | FileCheck %s +; RUN: llc < %s -disable-cfi -mtriple=i386-apple-darwin9 -relocation-model=pic -disable-fp-elim -unwind-tables | FileCheck %s diff --git a/test/CodeGen/X86/personality.ll b/test/CodeGen/X86/personality.ll index 705e489eb4..e952a9bb25 100644 --- a/test/CodeGen/X86/personality.ll +++ b/test/CodeGen/X86/personality.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X64 -; RUN: llc < %s -mtriple=i386-apple-darwin9 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X32 +; RUN: llc < %s -disable-cfi -mtriple=x86_64-apple-darwin9 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X64 +; RUN: llc < %s -disable-cfi -mtriple=i386-apple-darwin9 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X32 ; PR1632 define void @_Z1fv() { @@ -38,13 +38,15 @@ declare void @__gxx_personality_v0() declare void @__cxa_end_catch() -; X64: Leh_frame_common_begin0: -; X64: .long ___gxx_personality_v0@GOTPCREL+4 +; X64: zPLR +; X64: .byte 155 +; X64-NEXT: .long ___gxx_personality_v0@GOTPCREL+4 -; X32: Leh_frame_common_begin0: -; X32: .long L___gxx_personality_v0$non_lazy_ptr- -; .... +; X32: .section __IMPORT,__pointers,non_lazy_symbol_pointers +; X32-NEXT: L___gxx_personality_v0$non_lazy_ptr: +; X32-NEXT: .indirect_symbol ___gxx_personality_v0 -; X32: .section __IMPORT,__pointers,non_lazy_symbol_pointers -; X32: L___gxx_personality_v0$non_lazy_ptr: -; X32: .indirect_symbol ___gxx_personality_v0 +; X32: zPLR +; X32: .byte 155 +; X32-NEXT: : +; X32-NEXT: .long L___gxx_personality_v0$non_lazy_ptr- |