Introducing the "linker_weak" linkage type. This will be used for Objective-C
metadata types which should be marked as "weak", but which the linker will
remove upon final linkage. For example, the "objc_msgSend_fixup_alloc" symbol is
defined like this:
.globl l_objc_msgSend_fixup_alloc
.weak_definition l_objc_msgSend_fixup_alloc
.section __DATA, __objc_msgrefs, coalesced
.align 3
l_objc_msgSend_fixup_alloc:
.quad _objc_msgSend_fixup
.quad L_OBJC_METH_VAR_NAME_1
This is different from the "linker_private" linkage type, because it can't have
the metadata defined with ".weak_definition".
llvm-svn: 107205
This commit is contained in:
@@ -755,11 +755,12 @@ shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler *Mang) const {
|
||||
/// the directive emitted (this occurs in ObjC metadata).
|
||||
if (!GV) return false;
|
||||
|
||||
// Check whether the mangled name has the "Private" or "LinkerPrivate" prefix.
|
||||
// Check whether the mangled name has the "Private", "LinkerPrivate", or
|
||||
// "LinkerWeak" prefix.
|
||||
if (GV->hasLocalLinkage() && !isa<Function>(GV)) {
|
||||
// FIXME: ObjC metadata is currently emitted as internal symbols that have
|
||||
// \1L and \0l prefixes on them. Fix them to be Private/LinkerPrivate and
|
||||
// this horrible hack can go away.
|
||||
// \1L and \1l prefixes on them. Fix them to be Private / LinkerPrivate /
|
||||
// LinkerWeak and this horrible hack can go away.
|
||||
MCSymbol *Sym = Mang->getSymbol(GV);
|
||||
if (Sym->getName()[0] == 'L' || Sym->getName()[0] == 'l')
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user