Revert "[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols"

This reverts commit fffdb7eac58b4efde5e23c1281e7a7f93a42d280.

Causes crashes, see https://reviews.llvm.org/D145208
This commit is contained in:
Arthur Eubanks 2023-04-13 09:09:18 -07:00
parent 4da96515ea
commit 29a88f991b
13 changed files with 13 additions and 107 deletions

View File

@ -47,7 +47,6 @@ enum MCSymbolAttr {
MCSA_WeakReference, ///< .weak_reference (MachO)
MCSA_WeakDefAutoPrivate, ///< .weak_def_can_be_hidden (MachO)
MCSA_Memtag, ///< .memtag (ELF)
MCSA_WeakAntiDep, ///< .weak_anti_dep (COFF)
};
enum MCAssemblerFlag {

View File

@ -102,9 +102,6 @@ protected:
/// This symbol is private extern.
mutable unsigned IsPrivateExtern : 1;
/// This symbol is weak external.
mutable unsigned IsWeakExternal : 1;
/// LLVM RTTI discriminator. This is actually a SymbolKind enumerator, but is
/// unsigned to avoid sign extension and achieve better bitpacking with MSVC.
unsigned Kind : 3;
@ -164,8 +161,8 @@ protected:
MCSymbol(SymbolKind Kind, const StringMapEntry<bool> *Name, bool isTemporary)
: IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false),
IsRegistered(false), IsExternal(false), IsPrivateExtern(false),
IsWeakExternal(false), Kind(Kind), IsUsedInReloc(false),
SymbolContents(SymContentsUnset), CommonAlignLog2(0), Flags(0) {
Kind(Kind), IsUsedInReloc(false), SymbolContents(SymContentsUnset),
CommonAlignLog2(0), Flags(0) {
Offset = 0;
FragmentAndHasName.setInt(!!Name);
if (Name)
@ -410,8 +407,6 @@ public:
bool isPrivateExtern() const { return IsPrivateExtern; }
void setPrivateExtern(bool Value) { IsPrivateExtern = Value; }
bool isWeakExternal() const { return IsWeakExternal; }
/// print - Print the value to the stream \p OS.
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;

View File

@ -23,9 +23,8 @@ class MCSymbolCOFF : public MCSymbol {
SF_ClassMask = 0x00FF,
SF_ClassShift = 0,
SF_SafeSEH = 0x0100,
SF_WeakExternalCharacteristicsMask = 0x0E00,
SF_WeakExternalCharacteristicsShift = 9,
SF_WeakExternal = 0x0100,
SF_SafeSEH = 0x0200,
};
public:
@ -46,14 +45,11 @@ public:
modifyFlags(StorageClass << SF_ClassShift, SF_ClassMask);
}
COFF::WeakExternalCharacteristics getWeakExternalCharacteristics() const {
return static_cast<COFF::WeakExternalCharacteristics>((getFlags() & SF_WeakExternalCharacteristicsMask) >>
SF_WeakExternalCharacteristicsShift);
bool isWeakExternal() const {
return getFlags() & SF_WeakExternal;
}
void setIsWeakExternal(COFF::WeakExternalCharacteristics Characteristics) const {
IsWeakExternal = true;
modifyFlags(Characteristics << SF_WeakExternalCharacteristicsShift,
SF_WeakExternalCharacteristicsMask);
void setIsWeakExternal() const {
modifyFlags(SF_WeakExternal, SF_WeakExternal);
}
bool isSafeSEH() const {

View File

@ -772,9 +772,6 @@ bool MCAsmStreamer::emitSymbolAttribute(MCSymbol *Symbol,
case MCSA_Memtag:
OS << "\t.memtag\t";
break;
case MCSA_WeakAntiDep:
OS << "\t.weak_anti_dep\t";
break;
}
Symbol->print(OS, MAI);

View File

@ -216,7 +216,6 @@ bool MCELFStreamer::emitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) {
case MCSA_Invalid:
case MCSA_IndirectSymbol:
case MCSA_Exported:
case MCSA_WeakAntiDep:
return false;
case MCSA_NoDeadStrip:

View File

@ -761,9 +761,6 @@ bool MCExpr::evaluateAsValue(MCValue &Res, const MCAsmLayout &Layout) const {
}
static bool canExpand(const MCSymbol &Sym, bool InSet) {
if (Sym.isWeakExternal())
return false;
const MCExpr *Expr = Sym.getVariableValue();
const auto *Inner = dyn_cast<MCSymbolRefExpr>(Expr);
if (Inner) {
@ -1000,8 +997,6 @@ MCFragment *MCExpr::findAssociatedFragment() const {
case SymbolRef: {
const MCSymbolRefExpr *SRE = cast<MCSymbolRefExpr>(this);
const MCSymbol &Sym = SRE->getSymbol();
if (Sym.isWeakExternal())
return nullptr;
return Sym.getFragment();
}

View File

@ -358,7 +358,6 @@ bool MCMachOStreamer::emitSymbolAttribute(MCSymbol *Sym,
case MCSA_LGlobal:
case MCSA_Exported:
case MCSA_Memtag:
case MCSA_WeakAntiDep:
return false;
case MCSA_Global:

View File

@ -6371,7 +6371,7 @@ static bool isSymbolUsedInExpression(const MCSymbol *Sym, const MCExpr *Value) {
case MCExpr::SymbolRef: {
const MCSymbol &S =
static_cast<const MCSymbolRefExpr *>(Value)->getSymbol();
if (S.isVariable() && !S.isWeakExternal())
if (S.isVariable())
return isSymbolUsedInExpression(Sym, S.getVariableValue());
return &S == Sym;
}

View File

@ -67,7 +67,6 @@ class COFFAsmParser : public MCAsmParserExtension {
addDirectiveHandler<&COFFAsmParser::ParseDirectiveLinkOnce>(".linkonce");
addDirectiveHandler<&COFFAsmParser::ParseDirectiveRVA>(".rva");
addDirectiveHandler<&COFFAsmParser::ParseDirectiveSymbolAttribute>(".weak");
addDirectiveHandler<&COFFAsmParser::ParseDirectiveSymbolAttribute>(".weak_anti_dep");
addDirectiveHandler<&COFFAsmParser::ParseDirectiveCGProfile>(".cg_profile");
// Win64 EH directives.
@ -282,7 +281,6 @@ bool COFFAsmParser::ParseSectionFlags(StringRef SectionName,
bool COFFAsmParser::ParseDirectiveSymbolAttribute(StringRef Directive, SMLoc) {
MCSymbolAttr Attr = StringSwitch<MCSymbolAttr>(Directive)
.Case(".weak", MCSA_Weak)
.Case(".weak_anti_dep", MCSA_WeakAntiDep)
.Default(MCSA_Invalid);
assert(Attr != MCSA_Invalid && "unexpected symbol attribute directive!");
if (getLexer().isNot(AsmToken::EndOfStatement)) {

View File

@ -115,11 +115,7 @@ bool MCWinCOFFStreamer::emitSymbolAttribute(MCSymbol *S,
default: return false;
case MCSA_WeakReference:
case MCSA_Weak:
Symbol->setIsWeakExternal(COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS);
Symbol->setExternal(true);
break;
case MCSA_WeakAntiDep:
Symbol->setIsWeakExternal(COFF::IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY);
Symbol->setIsWeakExternal();
Symbol->setExternal(true);
break;
case MCSA_Global:

View File

@ -414,9 +414,9 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSym,
Sym->Aux.resize(1);
memset(&Sym->Aux[0], 0, sizeof(Sym->Aux[0]));
Sym->Aux[0].AuxType = ATWeakExternal;
Sym->Aux[0].Aux.WeakExternal.TagIndex = 0; // Filled in later
Sym->Aux[0].Aux.WeakExternal.TagIndex = 0;
Sym->Aux[0].Aux.WeakExternal.Characteristics =
cast<MCSymbolCOFF>(MCSym).getWeakExternalCharacteristics();
COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS;
} else {
if (!Base)
Sym->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;

View File

@ -24,7 +24,7 @@ weak_aliased_to_external = external2
// CHECK: 0x0 IMAGE_REL_I386_DIR32 external_aliased_to_local
// CHECK: 0x4 IMAGE_REL_I386_DIR32 external1
// CHECK: 0x8 IMAGE_REL_I386_DIR32 global_aliased_to_local
// CHECK: 0xC IMAGE_REL_I386_DIR32 weak_aliased_to_external
// CHECK: 0xC IMAGE_REL_I386_DIR32 external2
// CHECK: ]
// CHECK: Symbols [
// CHECK-NEXT: Symbol {

View File

@ -1,68 +0,0 @@
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj --symbols - | FileCheck %s
// CHECK: Symbol {
// CHECK-NEXT: Name: .text
// CHECK: Symbol {
// CHECK-NEXT: Name: .data
// CHECK: Symbol {
// CHECK-NEXT: Name: .bss
.weak_anti_dep a
a = b
// CHECK: Symbol {
// CHECK-NEXT: Name: a
// CHECK-NEXT: Value: 0
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
// CHECK-NEXT: BaseType: Null (0x0)
// CHECK-NEXT: ComplexType: Null (0x0)
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
// CHECK-NEXT: AuxSymbolCount: 1
// CHECK-NEXT: AuxWeakExternal {
// CHECK-NEXT: Linked: b (8)
// CHECK-NEXT: Search: AntiDependency (0x4)
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: b
// CHECK-NEXT: Value: 0
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
// CHECK-NEXT: BaseType: Null (0x0)
// CHECK-NEXT: ComplexType: Null (0x0)
// CHECK-NEXT: StorageClass: External (0x2)
// CHECK-NEXT: AuxSymbolCount: 0
// CHECK-NEXT: }
.weak_anti_dep r1
.weak_anti_dep r2
r1 = r2
r2 = r1
// CHECK: Symbol {
// CHECK-NEXT: Name: r1
// CHECK-NEXT: Value: 0
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
// CHECK-NEXT: BaseType: Null (0x0)
// CHECK-NEXT: ComplexType: Null (0x0)
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
// CHECK-NEXT: AuxSymbolCount: 1
// CHECK-NEXT: AuxWeakExternal {
// CHECK-NEXT: Linked: r2 (11)
// CHECK-NEXT: Search: AntiDependency (0x4)
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: r2
// CHECK-NEXT: Value: 0
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
// CHECK-NEXT: BaseType: Null (0x0)
// CHECK-NEXT: ComplexType: Null (0x0)
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
// CHECK-NEXT: AuxSymbolCount: 1
// CHECK-NEXT: AuxWeakExternal {
// CHECK-NEXT: Linked: r1 (9)
// CHECK-NEXT: Search: AntiDependency (0x4)
// CHECK-NEXT: }
// CHECK-NEXT: }