From: Fariborz Jahanian Date: Tue, 15 Feb 2011 18:54:46 +0000 (+0000) Subject: In -fapple-kext mode, global object construction code X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6c9a0f06ce7e164024d8e4dbf2423a5c5035084;p=clang In -fapple-kext mode, global object construction code ends up in the text segment. // rdar://8825235. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125585 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp index db72080372..8b37e9af3c 100644 --- a/lib/CodeGen/CGDeclCXX.cpp +++ b/lib/CodeGen/CGDeclCXX.cpp @@ -159,11 +159,12 @@ CreateGlobalInitOrDestructFunction(CodeGenModule &CGM, llvm::Function *Fn = llvm::Function::Create(FTy, llvm::GlobalValue::InternalLinkage, Name, &CGM.getModule()); - - // Set the section if needed. - if (const char *Section = - CGM.getContext().Target.getStaticInitSectionSpecifier()) - Fn->setSection(Section); + 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(); diff --git a/test/CodeGenCXX/apple-kext-no-staticinit-section.C b/test/CodeGenCXX/apple-kext-no-staticinit-section.C new file mode 100644 index 0000000000..0401d49179 --- /dev/null +++ b/test/CodeGenCXX/apple-kext-no-staticinit-section.C @@ -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