In -fapple-kext mode, global object construction code

ends up in the text segment. // rdar://8825235.

llvm-svn: 125585
This commit is contained in:
Fariborz Jahanian 2011-02-15 18:54:46 +00:00
parent ffb3b51ba8
commit 09948f1af6
2 changed files with 26 additions and 5 deletions

View File

@ -159,11 +159,12 @@ CreateGlobalInitOrDestructFunction(CodeGenModule &CGM,
llvm::Function *Fn =
llvm::Function::Create(FTy, llvm::GlobalValue::InternalLinkage,
Name, &CGM.getModule());
if (!CGM.getContext().getLangOptions().AppleKext) {
// Set the section if needed.
if (const char *Section =
CGM.getContext().Target.getStaticInitSectionSpecifier())
Fn->setSection(Section);
}
if (!CGM.getLangOptions().Exceptions)
Fn->setDoesNotThrow();

View File

@ -0,0 +1,20 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fapple-kext -fno-rtti -emit-llvm -o - %s | FileCheck %s
// rdar://8825235
/**
1) Normally, global object construction code ends up in __StaticInit segment of text section
.section __TEXT,__StaticInit,regular,pure_instructions
In kext mode, they end up in the __text segment.
*/
class foo {
public:
foo();
virtual ~foo();
};
foo a;
foo b;
foo c;
foo::~foo() {}
// CHECK-NOT: __TEXT,__StaticInit,regular,pure_instructions