Ignore llvm.* globals.

It is not clear if llvm.global_ctors should or should not be in llvm.metadata,
but in practice it is not and we need to ignore it for LTO.

llvm-svn: 212351
This commit is contained in:
Rafael Espindola 2014-07-04 19:08:22 +00:00
parent 4e63fc498c
commit 2dc0d9bddb
2 changed files with 4 additions and 6 deletions

View File

@ -238,16 +238,13 @@ uint32_t IRObjectFile::getSymbolFlags(DataRefImpl Symb) const {
if (GV->hasLinkOnceLinkage() || GV->hasWeakLinkage())
Res |= BasicSymbolRef::SF_Weak;
if (auto *Var = dyn_cast<GlobalVariable>(GV)) {
if (GV->getName().startswith("llvm."))
Res |= BasicSymbolRef::SF_FormatSpecific;
else if (auto *Var = dyn_cast<GlobalVariable>(GV)) {
if (Var->getSection() == StringRef("llvm.metadata"))
Res |= BasicSymbolRef::SF_FormatSpecific;
}
if (auto *F = dyn_cast<Function>(GV)) {
if (F->getName().startswith("llvm."))
Res |= BasicSymbolRef::SF_FormatSpecific;
}
return Res;
}

View File

@ -13,3 +13,4 @@ declare void @SomeOtherFunction(...)
@var = global i32 0
@llvm.used = appending global [1 x i8*] [i8* bitcast (i32* @var to i8*)], section "llvm.metadata"
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* null, i8* null }]