Index: include/llvm/MC/MCELFStreamer.h =================================================================== --- include/llvm/MC/MCELFStreamer.h +++ include/llvm/MC/MCELFStreamer.h @@ -49,23 +49,23 @@ bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override; void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) override; + uint64_t Size = 0, uint64_t ByteAlignment = 0) override; void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment = 0) override; + uint64_t ByteAlignment = 0) override; void EmitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc = SMLoc()) override; void EmitIdent(StringRef IdentString) override; - void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override; + void EmitValueToAlignment(uint64_t, int64_t, unsigned, uint64_t) override; void FinishImpl() override; Index: include/llvm/MC/MCFragment.h =================================================================== --- include/llvm/MC/MCFragment.h +++ include/llvm/MC/MCFragment.h @@ -278,7 +278,7 @@ class MCAlignFragment : public MCFragment { /// Alignment - The alignment to ensure, in bytes. - unsigned Alignment; + uint64_t Alignment; /// EmitNops - Flag to indicate that (optimal) NOPs should be emitted instead /// of using the provided value. The exact interpretation of this flag is @@ -293,25 +293,25 @@ /// MaxBytesToEmit - The maximum number of bytes to emit; if the alignment /// cannot be satisfied in this width then this fragment is ignored. - unsigned MaxBytesToEmit; + uint64_t MaxBytesToEmit; public: - MCAlignFragment(unsigned Alignment, int64_t Value, unsigned ValueSize, - unsigned MaxBytesToEmit, MCSection *Sec = nullptr) + MCAlignFragment(uint64_t Alignment, int64_t Value, unsigned ValueSize, + uint64_t MaxBytesToEmit, MCSection *Sec = nullptr) : MCFragment(FT_Align, false, 0, Sec), Alignment(Alignment), - EmitNops(false), Value(Value), - ValueSize(ValueSize), MaxBytesToEmit(MaxBytesToEmit) {} + EmitNops(false), Value(Value), ValueSize(ValueSize), + MaxBytesToEmit(MaxBytesToEmit) {} /// \name Accessors /// @{ - unsigned getAlignment() const { return Alignment; } + uint64_t getAlignment() const { return Alignment; } int64_t getValue() const { return Value; } unsigned getValueSize() const { return ValueSize; } - unsigned getMaxBytesToEmit() const { return MaxBytesToEmit; } + uint64_t getMaxBytesToEmit() const { return MaxBytesToEmit; } bool hasEmitNops() const { return EmitNops; } void setEmitNops(bool Value) { EmitNops = Value; } Index: include/llvm/MC/MCObjectStreamer.h =================================================================== --- include/llvm/MC/MCObjectStreamer.h +++ include/llvm/MC/MCObjectStreamer.h @@ -109,11 +109,11 @@ void EmitBundleLock(bool AlignToEnd) override; void EmitBundleUnlock() override; void EmitBytes(StringRef Data) override; - void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0, + void EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value = 0, unsigned ValueSize = 1, - unsigned MaxBytesToEmit = 0) override; - void EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit = 0) override; + uint64_t MaxBytesToEmit = 0) override; + void EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit = 0) override; void emitValueToOffset(const MCExpr *Offset, unsigned char Value, SMLoc Loc) override; void EmitDwarfLocDirective(unsigned FileNo, unsigned Line, Index: include/llvm/MC/MCSection.h =================================================================== --- include/llvm/MC/MCSection.h +++ include/llvm/MC/MCSection.h @@ -59,7 +59,7 @@ MCSymbol *Begin; MCSymbol *End = nullptr; /// The alignment requirement of this section. - unsigned Alignment = 1; + uint64_t Alignment = 1; /// The section index in the assemblers section list. unsigned Ordinal = 0; /// The index of this section in the layout order. @@ -114,8 +114,8 @@ MCSymbol *getEndSymbol(MCContext &Ctx); bool hasEnded() const; - unsigned getAlignment() const { return Alignment; } - void setAlignment(unsigned Value) { Alignment = Value; } + uint64_t getAlignment() const { return Alignment; } + void setAlignment(uint64_t Value) { Alignment = Value; } unsigned getOrdinal() const { return Ordinal; } void setOrdinal(unsigned Value) { Ordinal = Value; } Index: include/llvm/MC/MCStreamer.h =================================================================== --- include/llvm/MC/MCStreamer.h +++ include/llvm/MC/MCStreamer.h @@ -509,7 +509,7 @@ /// \param ByteAlignment - The alignment of the symbol if /// non-zero. This must be a power of 2. virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) = 0; + uint64_t ByteAlignment) = 0; /// \brief Emit a local common (.lcomm) symbol. /// @@ -517,7 +517,7 @@ /// \param Size - The size of the common symbol. /// \param ByteAlignment - The alignment of the common symbol in bytes. virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment); + uint64_t ByteAlignment); /// \brief Emit the zerofill section and an optional symbol. /// @@ -527,7 +527,7 @@ /// \param ByteAlignment - The alignment of the zerofill symbol if /// non-zero. This must be a power of 2 on some targets. virtual void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) = 0; + uint64_t Size = 0, uint64_t ByteAlignment = 0) = 0; /// \brief Emit a thread local bss (.tbss) symbol. /// @@ -537,7 +537,7 @@ /// \param ByteAlignment - The alignment of the thread local common symbol /// if non-zero. This must be a power of 2 on some targets. virtual void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment = 0); + uint64_t Size, uint64_t ByteAlignment = 0); /// @} /// \name Generating Data @@ -682,9 +682,9 @@ /// \param MaxBytesToEmit - The maximum numbers of bytes to emit, or 0. If /// the alignment cannot be reached in this many bytes, no bytes are /// emitted. - virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0, + virtual void EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value = 0, unsigned ValueSize = 1, - unsigned MaxBytesToEmit = 0); + uint64_t MaxBytesToEmit = 0); /// \brief Emit nops until the byte alignment \p ByteAlignment is reached. /// @@ -696,8 +696,8 @@ /// \param MaxBytesToEmit - The maximum numbers of bytes to emit, or 0. If /// the alignment cannot be reached in this many bytes, no bytes are /// emitted. - virtual void EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit = 0); + virtual void EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit = 0); /// \brief Emit some number of copies of \p Value until the byte offset \p /// Offset is reached. Index: include/llvm/MC/MCWasmStreamer.h =================================================================== --- include/llvm/MC/MCWasmStreamer.h +++ include/llvm/MC/MCWasmStreamer.h @@ -48,23 +48,23 @@ bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override; void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) override; + uint64_t Size = 0, uint64_t ByteAlignment = 0) override; void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment = 0) override; + uint64_t ByteAlignment = 0) override; void EmitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc = SMLoc()) override; void EmitIdent(StringRef IdentString) override; - void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override; + void EmitValueToAlignment(uint64_t, int64_t, unsigned, uint64_t) override; void FinishImpl() override; Index: include/llvm/MC/MCWinCOFFStreamer.h =================================================================== --- include/llvm/MC/MCWinCOFFStreamer.h +++ include/llvm/MC/MCWinCOFFStreamer.h @@ -53,13 +53,13 @@ void EmitCOFFSectionIndex(MCSymbol const *Symbol) override; void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitIdent(StringRef IdentString) override; void EmitWinEHHandlerData() override; void FinishImpl() override; Index: lib/MC/ELFObjectWriter.cpp =================================================================== --- lib/MC/ELFObjectWriter.cpp +++ lib/MC/ELFObjectWriter.cpp @@ -155,7 +155,7 @@ return TargetObjectWriter->getRelocType(Ctx, Target, Fixup, IsPCRel); } - void align(unsigned Alignment); + void align(uint64_t Alignment); bool maybeWriteCompression(uint64_t Size, SmallVectorImpl &CompressedContents, @@ -257,7 +257,7 @@ } // end anonymous namespace -void ELFObjectWriter::align(unsigned Alignment) { +void ELFObjectWriter::align(uint64_t Alignment) { uint64_t Padding = OffsetToAlignment(getStream().tell(), Alignment); WriteZeros(Padding); } Index: lib/MC/MCAsmStreamer.cpp =================================================================== --- lib/MC/MCAsmStreamer.cpp +++ lib/MC/MCAsmStreamer.cpp @@ -156,7 +156,7 @@ void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; /// EmitLocalCommonSymbol - Emit a local common (.lcomm) symbol. /// @@ -164,13 +164,13 @@ /// @param Size - The size of the common symbol. /// @param ByteAlignment - The alignment of the common symbol in bytes. void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) override; + uint64_t Size = 0, uint64_t ByteAlignment = 0) override; void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment = 0) override; + uint64_t ByteAlignment = 0) override; void EmitBinaryData(StringRef Data) override; @@ -204,12 +204,12 @@ void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr, SMLoc Loc = SMLoc()) override; - void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0, + void EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value = 0, unsigned ValueSize = 1, - unsigned MaxBytesToEmit = 0) override; + uint64_t MaxBytesToEmit = 0) override; - void EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit = 0) override; + void EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit = 0) override; void emitValueToOffset(const MCExpr *Offset, unsigned char Value, @@ -644,7 +644,7 @@ } void MCAsmStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { OS << "\t.comm\t"; Symbol->print(OS, MAI); OS << ',' << Size; @@ -663,7 +663,7 @@ /// @param Symbol - The common symbol to emit. /// @param Size - The size of the common symbol. void MCAsmStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlign) { + uint64_t ByteAlign) { OS << "\t.lcomm\t"; Symbol->print(OS, MAI); OS << ',' << Size; @@ -685,7 +685,7 @@ } void MCAsmStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { if (Symbol) AssignFragment(Symbol, &Section->getDummyFragment()); @@ -710,7 +710,7 @@ // This depends that the symbol has already been mangled from the original, // e.g. _a. void MCAsmStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { AssignFragment(Symbol, &Section->getDummyFragment()); assert(Symbol && "Symbol shouldn't be NULL!"); @@ -965,9 +965,9 @@ EmitEOL(); } -void MCAsmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value, +void MCAsmStreamer::EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value, unsigned ValueSize, - unsigned MaxBytesToEmit) { + uint64_t MaxBytesToEmit) { // Some assemblers don't support non-power of two alignments, so we always // emit alignments as a power of two if possible. if (isPowerOf2_32(ByteAlignment)) { @@ -1017,8 +1017,8 @@ EmitEOL(); } -void MCAsmStreamer::EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit) { +void MCAsmStreamer::EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit) { // Emit with a text fill value. EmitValueToAlignment(ByteAlignment, MAI->getTextAlignFillValue(), 1, MaxBytesToEmit); Index: lib/MC/MCELFStreamer.cpp =================================================================== --- lib/MC/MCELFStreamer.cpp +++ lib/MC/MCELFStreamer.cpp @@ -290,7 +290,7 @@ } void MCELFStreamer::EmitCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { auto *Symbol = cast(S); getAssembler().registerSymbol(*Symbol); @@ -331,7 +331,7 @@ } void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { auto *Symbol = cast(S); // FIXME: Should this be caught and done earlier? getAssembler().registerSymbol(*Symbol); @@ -348,10 +348,9 @@ MCObjectStreamer::EmitValueImpl(Value, Size, Loc); } -void MCELFStreamer::EmitValueToAlignment(unsigned ByteAlignment, - int64_t Value, +void MCELFStreamer::EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value, unsigned ValueSize, - unsigned MaxBytesToEmit) { + uint64_t MaxBytesToEmit) { if (isBundleLocked()) report_fatal_error("Emitting values inside a locked bundle is forbidden"); MCObjectStreamer::EmitValueToAlignment(ByteAlignment, Value, @@ -629,12 +628,12 @@ } void MCELFStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("ELF doesn't support this directive"); } void MCELFStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("ELF doesn't support this directive"); } Index: lib/MC/MCMachOStreamer.cpp =================================================================== --- lib/MC/MCMachOStreamer.cpp +++ lib/MC/MCMachOStreamer.cpp @@ -90,14 +90,14 @@ bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) override; + uint64_t Size = 0, uint64_t ByteAlignment = 0) override; void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment = 0) override; + uint64_t ByteAlignment = 0) override; void EmitIdent(StringRef IdentString) override { llvm_unreachable("macho doesn't support this directive"); @@ -383,7 +383,7 @@ } void MCMachOStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { // FIXME: Darwin 'as' does appear to allow redef of a .comm by itself. assert(Symbol->isUndefined() && "Cannot define a symbol twice!"); @@ -393,14 +393,14 @@ } void MCMachOStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { // '.lcomm' is equivalent to '.zerofill'. return EmitZerofill(getContext().getObjectFileInfo()->getDataBSSSection(), Symbol, Size, ByteAlignment); } void MCMachOStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { getAssembler().registerSection(*Section); // The symbol may not be present, which only creates the section. @@ -429,7 +429,7 @@ // This should always be called with the thread local bss section. Like the // .zerofill directive this doesn't actually switch sections on us. void MCMachOStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { EmitZerofill(Section, Symbol, Size, ByteAlignment); } Index: lib/MC/MCNullStreamer.cpp =================================================================== --- lib/MC/MCNullStreamer.cpp +++ lib/MC/MCNullStreamer.cpp @@ -30,9 +30,9 @@ } void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override {} + uint64_t ByteAlignment) override {} void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr, - uint64_t Size = 0, unsigned ByteAlignment = 0) override {} + uint64_t Size = 0, uint64_t ByteAlignment = 0) override {} void EmitGPRel32Value(const MCExpr *Value) override {} void BeginCOFFSymbolDef(const MCSymbol *Symbol) override {} void EmitCOFFSymbolStorageClass(int StorageClass) override {} Index: lib/MC/MCObjectStreamer.cpp =================================================================== --- lib/MC/MCObjectStreamer.cpp +++ lib/MC/MCObjectStreamer.cpp @@ -438,10 +438,9 @@ DF->getContents().append(Data.begin(), Data.end()); } -void MCObjectStreamer::EmitValueToAlignment(unsigned ByteAlignment, - int64_t Value, - unsigned ValueSize, - unsigned MaxBytesToEmit) { +void MCObjectStreamer::EmitValueToAlignment(uint64_t ByteAlignment, + int64_t Value, unsigned ValueSize, + uint64_t MaxBytesToEmit) { if (MaxBytesToEmit == 0) MaxBytesToEmit = ByteAlignment; insert(new MCAlignFragment(ByteAlignment, Value, ValueSize, MaxBytesToEmit)); @@ -452,8 +451,8 @@ CurSec->setAlignment(ByteAlignment); } -void MCObjectStreamer::EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit) { +void MCObjectStreamer::EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit) { EmitValueToAlignment(ByteAlignment, 0, 1, MaxBytesToEmit); cast(getCurrentFragment())->setEmitNops(true); } Index: lib/MC/MCStreamer.cpp =================================================================== --- lib/MC/MCStreamer.cpp +++ lib/MC/MCStreamer.cpp @@ -837,9 +837,9 @@ void MCStreamer::emitELFSymverDirective(MCSymbol *Alias, const MCSymbol *Aliasee) {} void MCStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) {} + uint64_t ByteAlignment) {} void MCStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) {} + uint64_t Size, uint64_t ByteAlignment) {} void MCStreamer::ChangeSection(MCSection *, const MCExpr *) {} void MCStreamer::EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) {} void MCStreamer::EmitBytes(StringRef Data) {} @@ -852,11 +852,11 @@ void MCStreamer::emitFill(const MCExpr &NumBytes, uint64_t Value, SMLoc Loc) {} void MCStreamer::emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr, SMLoc Loc) {} -void MCStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value, +void MCStreamer::EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value, unsigned ValueSize, - unsigned MaxBytesToEmit) {} -void MCStreamer::EmitCodeAlignment(unsigned ByteAlignment, - unsigned MaxBytesToEmit) {} + uint64_t MaxBytesToEmit) {} +void MCStreamer::EmitCodeAlignment(uint64_t ByteAlignment, + uint64_t MaxBytesToEmit) {} void MCStreamer::emitValueToOffset(const MCExpr *Offset, unsigned char Value, SMLoc Loc) {} void MCStreamer::EmitBundleAlignMode(unsigned AlignPow2) {} Index: lib/MC/MCWasmStreamer.cpp =================================================================== --- lib/MC/MCWasmStreamer.cpp +++ lib/MC/MCWasmStreamer.cpp @@ -129,7 +129,7 @@ } void MCWasmStreamer::EmitCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { llvm_unreachable("Common symbols are not yet implemented for Wasm"); } @@ -138,7 +138,7 @@ } void MCWasmStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { llvm_unreachable("Local common symbols are not yet implemented for Wasm"); } @@ -147,9 +147,9 @@ MCObjectStreamer::EmitValueImpl(Value, Size, Loc); } -void MCWasmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value, +void MCWasmStreamer::EmitValueToAlignment(uint64_t ByteAlignment, int64_t Value, unsigned ValueSize, - unsigned MaxBytesToEmit) { + uint64_t MaxBytesToEmit) { MCObjectStreamer::EmitValueToAlignment(ByteAlignment, Value, ValueSize, MaxBytesToEmit); } @@ -218,11 +218,11 @@ } void MCWasmStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("Wasm doesn't support this directive"); } void MCWasmStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("Wasm doesn't support this directive"); } Index: lib/MC/MCWinCOFFStreamer.cpp =================================================================== --- lib/MC/MCWinCOFFStreamer.cpp +++ lib/MC/MCWinCOFFStreamer.cpp @@ -218,7 +218,7 @@ } void MCWinCOFFStreamer::EmitCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { auto *Symbol = cast(S); const Triple &T = getContext().getObjectFileInfo()->getTargetTriple(); @@ -250,7 +250,7 @@ } void MCWinCOFFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { auto *Symbol = cast(S); MCSection *Section = getContext().getObjectFileInfo()->getBSSSection(); @@ -271,12 +271,12 @@ } void MCWinCOFFStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("not implemented"); } void MCWinCOFFStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { llvm_unreachable("not implemented"); } Index: lib/MC/WasmObjectWriter.cpp =================================================================== --- lib/MC/WasmObjectWriter.cpp +++ lib/MC/WasmObjectWriter.cpp @@ -282,7 +282,7 @@ void writeDataRelocSection(); void writeLinkingMetaDataSection( ArrayRef Segments, uint32_t DataSize, - uint32_t DataAlignment, + uint64_t DataAlignment, SmallVector, 4> SymbolFlags, bool HasStackPointer, uint32_t StackPointerGlobal); @@ -499,7 +499,7 @@ } static void addData(SmallVectorImpl &DataBytes, - MCSectionWasm &DataSection, uint32_t &DataAlignment) { + MCSectionWasm &DataSection, uint64_t &DataAlignment) { DataBytes.resize(alignTo(DataBytes.size(), DataSection.getAlignment())); DataAlignment = std::max(DataAlignment, DataSection.getAlignment()); DEBUG(errs() << "addData: " << DataSection.getSectionName() << "\n"); @@ -914,7 +914,7 @@ void WasmObjectWriter::writeLinkingMetaDataSection( ArrayRef Segments, uint32_t DataSize, - uint32_t DataAlignment, + uint64_t DataAlignment, SmallVector, 4> SymbolFlags, bool HasStackPointer, uint32_t StackPointerGlobal) { SectionBookkeeping Section; @@ -998,7 +998,7 @@ SmallPtrSet IsAddressTaken; unsigned NumFuncImports = 0; SmallVector DataSegments; - uint32_t DataAlignment = 1; + uint64_t DataAlignment = 1; uint32_t StackPointerGlobal = 0; uint32_t DataSize = 0; bool HasStackPointer = false; Index: lib/Object/RecordStreamer.h =================================================================== --- lib/Object/RecordStreamer.h +++ lib/Object/RecordStreamer.h @@ -50,9 +50,9 @@ void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override; bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; void EmitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) override; + uint64_t ByteAlignment) override; /// Record .symver aliases for later processing. void emitELFSymverDirective(MCSymbol *Alias, const MCSymbol *Aliasee) override; Index: lib/Object/RecordStreamer.cpp =================================================================== --- lib/Object/RecordStreamer.cpp +++ lib/Object/RecordStreamer.cpp @@ -103,12 +103,12 @@ } void RecordStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol, - uint64_t Size, unsigned ByteAlignment) { + uint64_t Size, uint64_t ByteAlignment) { markDefined(*Symbol); } void RecordStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlignment) { + uint64_t ByteAlignment) { markDefined(*Symbol); } Index: lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp =================================================================== --- lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp +++ lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp @@ -776,9 +776,9 @@ MCSection &BSSSection = *OFI.getBSSSection(); MCA.registerSection(BSSSection); - TextSection.setAlignment(std::max(16u, TextSection.getAlignment())); - DataSection.setAlignment(std::max(16u, DataSection.getAlignment())); - BSSSection.setAlignment(std::max(16u, BSSSection.getAlignment())); + TextSection.setAlignment(std::max((uint64_t)16u, TextSection.getAlignment())); + DataSection.setAlignment(std::max((uint64_t)16u, DataSection.getAlignment())); + BSSSection.setAlignment(std::max((uint64_t)16u, BSSSection.getAlignment())); if (RoundSectionSizes) { // Make sections sizes a multiple of the alignment. This is useful for Index: test/MC/ELF/align-64-bits.s =================================================================== --- test/MC/ELF/align-64-bits.s +++ test/MC/ELF/align-64-bits.s @@ -0,0 +1,39 @@ +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s | FileCheck %s + +// Test that the alignment of rodata doesn't force a alignment of the +// previous section (.text) + .text + nop + .section .rodata,"a",@progbits + .align 0x100000000 + +// CHECK: Section { +// CHECK: Name: .text +// CHECK-NEXT: Type: +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: SHF_EXECINSTR +// CHECK-NEXT: ] +// CHECK-NEXT: Address: +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: +// CHECK-NEXT: Name: .rodata +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x100000000 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4294967296 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: } Index: test/MC/ELF/align-nops-64-bits.s =================================================================== --- test/MC/ELF/align-nops-64-bits.s +++ test/MC/ELF/align-nops-64-bits.s @@ -0,0 +1,24 @@ +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s | FileCheck %s + +// Test that we get optimal nops in text + .text +f0: + .align 0x100000000, 0x00000090 + .long 0 + +// CHECK: Section { +// CHECK: Name: .text +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: SHF_EXECINSTR +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x100000000 +// CHECK-NEXT: Size: 4 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4294967296 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: } +