diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp --- a/llvm/lib/Object/IRSymtab.cpp +++ b/llvm/lib/Object/IRSymtab.cpp @@ -41,10 +41,15 @@ using namespace llvm; using namespace irsymtab; -static const char *LibcallRoutineNames[] = { +static const char *PreservedSymbols[] = { #define HANDLE_LIBCALL(code, name) name, #include "llvm/IR/RuntimeLibcalls.def" #undef HANDLE_LIBCALL + // There are global variables, so put it here instead of in + // RuntimeLibcalls.def. + // TODO: Are there similar such variables? + "__ssp_canary_word", + "__stack_chk_guard", }; namespace { @@ -261,9 +266,9 @@ setStr(Sym.IRName, GV->getName()); - bool IsBuiltinFunc = llvm::is_contained(LibcallRoutineNames, GV->getName()); + bool IsPreservedSymbol = llvm::is_contained(PreservedSymbols, GV->getName()); - if (Used.count(GV) || IsBuiltinFunc) + if (Used.count(GV) || IsPreservedSymbol) Sym.Flags |= 1 << storage::Symbol::FB_used; if (GV->isThreadLocal()) Sym.Flags |= 1 << storage::Symbol::FB_tls; diff --git a/llvm/test/ThinLTO/X86/builtin-nostrip.ll b/llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll copy from llvm/test/ThinLTO/X86/builtin-nostrip.ll copy to llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll --- a/llvm/test/ThinLTO/X86/builtin-nostrip.ll +++ b/llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll @@ -1,16 +1,17 @@ -; REQUIRES: x86-registered-target +; REQUIRES: powerpc-registered-target ; Compile with thinlto indices, to enable thinlto. ; RUN: opt -module-summary %s -o %t1.bc ; Test old lto interface with thinlto. ; RUN: llvm-lto -exported-symbol=main -thinlto-action=run %t1.bc -; RUN: llvm-nm %t1.bc.thinlto.o | FileCheck %s --check-prefix=CHECK-NM +; RUN: llvm-nm %t1.bc | FileCheck %s --check-prefix=CHECK-NM ; Test new lto interface with thinlto. ; RUN: llvm-lto2 run %t1.bc -o %t.out -save-temps \ ; RUN: -r %t1.bc,bar,pl \ +; RUN: -r %t1.bc,__ssp_canary_word,pl \ ; RUN: -r %t1.bc,__stack_chk_fail,pl -; RUN: llvm-nm %t.out.1 | FileCheck %s --check-prefix=CHECK-NM +; RUN: llvm-nm %t.out.1.2.internalize.bc | FileCheck %s --check-prefix=CHECK-NM ; Re-compile, this time without the thinlto indices. ; RUN: opt %s -o %t4.bc @@ -18,24 +19,26 @@ ; Test the new lto interface without thinlto. ; RUN: llvm-lto2 run %t4.bc -o %t5.out -save-temps \ ; RUN: -r %t4.bc,bar,pl \ +; RUN: -r %t4.bc,__ssp_canary_word,pl \ ; RUN: -r %t4.bc,__stack_chk_fail,pl -; RUN: llvm-nm %t5.out.0 | FileCheck %s --check-prefix=CHECK-NM +; RUN: llvm-nm %t5.out.0.2.internalize.bc | FileCheck %s --check-prefix=CHECK-NM ; Test the old lto interface without thinlto. -; RUN: llvm-lto -exported-symbol=main %t4.bc -o %t6 -; RUN: llvm-nm %t6 | FileCheck %s --check-prefix=CHECK-NM +; RUN: llvm-lto -exported-symbol=main -save-merged-module %t4.bc -o %t6 +; RUN: llvm-nm %t6.merged.bc | FileCheck %s --check-prefix=CHECK-NM -; CHECK-NM-NOT: bar +; CHECK-NM: D __ssp_canary_word ; CHECK-NM: T __stack_chk_fail -; CHECK-NM-NOT: bar -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" +target datalayout = "E-m:a-p:32:32-i64:64-n32" +target triple = "powerpc-ibm-aix-xcoff" define void @bar() { ret void } +@__ssp_canary_word = dso_local global i64 1, align 8 + define void @__stack_chk_fail() { ret void } diff --git a/llvm/test/ThinLTO/X86/builtin-nostrip.ll b/llvm/test/ThinLTO/X86/builtin-nostrip.ll --- a/llvm/test/ThinLTO/X86/builtin-nostrip.ll +++ b/llvm/test/ThinLTO/X86/builtin-nostrip.ll @@ -9,6 +9,7 @@ ; Test new lto interface with thinlto. ; RUN: llvm-lto2 run %t1.bc -o %t.out -save-temps \ ; RUN: -r %t1.bc,bar,pl \ +; RUN: -r %t1.bc,__stack_chk_guard,pl \ ; RUN: -r %t1.bc,__stack_chk_fail,pl ; RUN: llvm-nm %t.out.1 | FileCheck %s --check-prefix=CHECK-NM @@ -18,6 +19,7 @@ ; Test the new lto interface without thinlto. ; RUN: llvm-lto2 run %t4.bc -o %t5.out -save-temps \ ; RUN: -r %t4.bc,bar,pl \ +; RUN: -r %t4.bc,__stack_chk_guard,pl \ ; RUN: -r %t4.bc,__stack_chk_fail,pl ; RUN: llvm-nm %t5.out.0 | FileCheck %s --check-prefix=CHECK-NM @@ -27,6 +29,7 @@ ; CHECK-NM-NOT: bar ; CHECK-NM: T __stack_chk_fail +; CHECK-NM: D __stack_chk_guard ; CHECK-NM-NOT: bar target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" @@ -36,6 +39,8 @@ ret void } +@__stack_chk_guard = dso_local global i64 1, align 8 + define void @__stack_chk_fail() { ret void }