MC: Overhaul handling of .lcomm

- Darwin lied about not supporting .lcomm and turned it into zerofill in the
  asm parser. Push the zerofill-conversion down into macho-specific code.
- This makes the tri-state LCOMMType enum superfluous, there are no targets
  without .lcomm.
- Do proper error reporting when trying to use .lcomm with alignment on a target
  that doesn't support it.
- .comm and .lcomm alignment was parsed in bytes on COFF, should be power of 2.
- Fixes PR13755 (.lcomm crashes on ELF).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163395 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer
2012-09-07 17:25:13 +00:00
parent 8e70b5506e
commit 39646d96e7
14 changed files with 67 additions and 38 deletions

View File

@@ -312,8 +312,7 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
return;
}
if (MAI->getLCOMMDirectiveType() != LCOMM::None &&
(MAI->getLCOMMDirectiveType() != LCOMM::NoAlignment || Align == 1)) {
if (Align == 1 || MAI->getLCOMMDirectiveSupportsAlignment()) {
// .lcomm _foo, 42
OutStreamer.EmitLocalCommonSymbol(GVSym, Size, Align);
return;