diff options
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r-- | llvm/lib/MC/MCAssembler.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp index 5c8e904..d172ad1 100644 --- a/llvm/lib/MC/MCAssembler.cpp +++ b/llvm/lib/MC/MCAssembler.cpp @@ -945,6 +945,14 @@ bool MCAssembler::relaxFill(MCFillFragment &F) { return true; } +bool MCAssembler::relaxOrg(MCOrgFragment &F) { + uint64_t Size = computeFragmentSize(F); + if (F.getSize() == Size) + return false; + F.setSize(Size); + return true; +} + bool MCAssembler::relaxFragment(MCFragment &F) { switch(F.getKind()) { default: @@ -966,6 +974,8 @@ bool MCAssembler::relaxFragment(MCFragment &F) { return relaxCVDefRange(cast<MCCVDefRangeFragment>(F)); case MCFragment::FT_Fill: return relaxFill(cast<MCFillFragment>(F)); + case MCFragment::FT_Org: + return relaxOrg(static_cast<MCOrgFragment &>(F)); } } diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index bcc77c0..8c27958 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -86,7 +86,7 @@ void MCObjectStreamer::ensureHeadroom(size_t Headroom) { void MCObjectStreamer::addSpecialFragment(MCFragment *Frag) { assert(Frag->getKind() != MCFragment::FT_Data && - "F should have a variable-size tail"); + "Frag should have a variable-size tail"); // Frag is not connected to FragSpace. Before modifying CurFrag with // addFragment(Frag), allocate an empty fragment to maintain FragSpace // connectivity, potentially reusing CurFrag's associated space. diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index c5611a38..7782dc1 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -6273,7 +6273,8 @@ bool parseAssignmentExpression(StringRef Name, bool allow_redef, // used as a symbol, or it is an absolute symbol). Sym = Parser.getContext().lookupSymbol(Name); if (Sym) { - if (!Sym->isUnset() && (!allow_redef || !Sym->isRedefinable())) + if ((Sym->isVariable() || Sym->isDefined()) && + (!allow_redef || !Sym->isRedefinable())) return Parser.Error(EqualLoc, "redefinition of '" + Name + "'"); // If the symbol is redefinable, clone it and update the symbol table // to the new symbol. Existing references to the original symbol remain |