[lld][Alignment][NFC] Use Align instead of log2 of alignment in Wasm Sections
I intend to slowly upgrade all alignments to the Align type in lld as well. Some places talk about alignment in Bytes while other specify them as Log2(Bytes). Let's make sure all of this is coherent. Differential Revision: https://reviews.llvm.org/D139181
This commit is contained in:
parent
173f62d98f
commit
cfe77f23d6
|
@ -85,7 +85,7 @@ public:
|
||||||
OutputSection *outputSec = nullptr;
|
OutputSection *outputSec = nullptr;
|
||||||
uint32_t comdat = UINT32_MAX;
|
uint32_t comdat = UINT32_MAX;
|
||||||
uint32_t inputSectionOffset = 0;
|
uint32_t inputSectionOffset = 0;
|
||||||
uint32_t alignment;
|
llvm::Align alignment;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
// Only applies to data segments.
|
// Only applies to data segments.
|
||||||
|
@ -109,8 +109,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
InputChunk(ObjFile *f, Kind k, StringRef name, uint32_t alignment = 0,
|
InputChunk(ObjFile *f, Kind k, StringRef name, uint32_t alignment = 0,
|
||||||
uint32_t flags = 0)
|
uint32_t flags = 0)
|
||||||
: name(name), file(f), alignment(alignment), flags(flags), sectionKind(k),
|
: name(name), file(f), alignment(1ULL << alignment), flags(flags),
|
||||||
live(!config->gcSections), discarded(false) {}
|
sectionKind(k), live(!config->gcSections), discarded(false) {}
|
||||||
ArrayRef<uint8_t> data() const { return rawData; }
|
ArrayRef<uint8_t> data() const { return rawData; }
|
||||||
uint64_t getTombstone() const;
|
uint64_t getTombstone() const;
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@ namespace wasm {
|
||||||
void OutputSegment::addInputSegment(InputChunk *inSeg) {
|
void OutputSegment::addInputSegment(InputChunk *inSeg) {
|
||||||
alignment = std::max(alignment, inSeg->alignment);
|
alignment = std::max(alignment, inSeg->alignment);
|
||||||
inputSegments.push_back(inSeg);
|
inputSegments.push_back(inSeg);
|
||||||
size = llvm::alignTo(size, 1ULL << inSeg->alignment);
|
size = llvm::alignTo(size, inSeg->alignment);
|
||||||
LLVM_DEBUG(dbgs() << "addInputSegment: " << inSeg->name << " oname=" << name
|
LLVM_DEBUG(dbgs() << "addInputSegment: " << inSeg->name << " oname=" << name
|
||||||
<< " size=" << inSeg->getSize()
|
<< " size=" << inSeg->getSize() << " align="
|
||||||
<< " align=" << inSeg->alignment << " at:" << size << "\n");
|
<< Log2(inSeg->alignment) << " at:" << size << "\n");
|
||||||
inSeg->outputSeg = this;
|
inSeg->outputSeg = this;
|
||||||
inSeg->outputSegmentOffset = size;
|
inSeg->outputSegmentOffset = size;
|
||||||
size += inSeg->getSize();
|
size += inSeg->getSize();
|
||||||
|
@ -56,8 +56,9 @@ void OutputSegment::finalizeInputSegments() {
|
||||||
});
|
});
|
||||||
if (i == mergedSegments.end()) {
|
if (i == mergedSegments.end()) {
|
||||||
LLVM_DEBUG(llvm::dbgs() << "new merge segment: " << name
|
LLVM_DEBUG(llvm::dbgs() << "new merge segment: " << name
|
||||||
<< " alignment=" << ms->alignment << "\n");
|
<< " alignment=" << Log2(ms->alignment) << "\n");
|
||||||
auto *syn = make<SyntheticMergedChunk>(name, ms->alignment, ms->flags);
|
auto *syn =
|
||||||
|
make<SyntheticMergedChunk>(name, Log2(ms->alignment), ms->flags);
|
||||||
syn->outputSeg = this;
|
syn->outputSeg = this;
|
||||||
mergedSegments.push_back(syn);
|
mergedSegments.push_back(syn);
|
||||||
i = std::prev(mergedSegments.end());
|
i = std::prev(mergedSegments.end());
|
||||||
|
@ -74,7 +75,7 @@ void OutputSegment::finalizeInputSegments() {
|
||||||
inputSegments = newSegments;
|
inputSegments = newSegments;
|
||||||
size = 0;
|
size = 0;
|
||||||
for (InputChunk *seg : inputSegments) {
|
for (InputChunk *seg : inputSegments) {
|
||||||
size = llvm::alignTo(size, 1ULL << seg->alignment);
|
size = llvm::alignTo(size, seg->alignment);
|
||||||
LLVM_DEBUG(llvm::dbgs() << "outputSegmentOffset set: " << seg->name
|
LLVM_DEBUG(llvm::dbgs() << "outputSegmentOffset set: " << seg->name
|
||||||
<< " -> " << size << "\n");
|
<< " -> " << size << "\n");
|
||||||
seg->outputSegmentOffset = size;
|
seg->outputSegmentOffset = size;
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
uint32_t linkingFlags = 0;
|
uint32_t linkingFlags = 0;
|
||||||
uint32_t initFlags = 0;
|
uint32_t initFlags = 0;
|
||||||
uint32_t sectionOffset = 0;
|
uint32_t sectionOffset = 0;
|
||||||
uint32_t alignment = 0;
|
llvm::Align alignment;
|
||||||
uint64_t startVA = 0;
|
uint64_t startVA = 0;
|
||||||
std::vector<InputChunk *> inputSegments;
|
std::vector<InputChunk *> inputSegments;
|
||||||
|
|
||||||
|
|
|
@ -668,7 +668,7 @@ void LinkingSection::writeBody() {
|
||||||
writeUleb128(sub.os, dataSegments.size(), "num data segments");
|
writeUleb128(sub.os, dataSegments.size(), "num data segments");
|
||||||
for (const OutputSegment *s : dataSegments) {
|
for (const OutputSegment *s : dataSegments) {
|
||||||
writeStr(sub.os, s->name, "segment name");
|
writeStr(sub.os, s->name, "segment name");
|
||||||
writeUleb128(sub.os, s->alignment, "alignment");
|
writeUleb128(sub.os, Log2(s->alignment), "alignment");
|
||||||
writeUleb128(sub.os, s->linkingFlags, "flags");
|
writeUleb128(sub.os, s->linkingFlags, "flags");
|
||||||
}
|
}
|
||||||
sub.writeTo(os);
|
sub.writeTo(os);
|
||||||
|
|
|
@ -288,11 +288,12 @@ void Writer::layoutMemory() {
|
||||||
|
|
||||||
out.dylinkSec->memAlign = 0;
|
out.dylinkSec->memAlign = 0;
|
||||||
for (OutputSegment *seg : segments) {
|
for (OutputSegment *seg : segments) {
|
||||||
out.dylinkSec->memAlign = std::max(out.dylinkSec->memAlign, seg->alignment);
|
out.dylinkSec->memAlign =
|
||||||
memoryPtr = alignTo(memoryPtr, 1ULL << seg->alignment);
|
std::max(out.dylinkSec->memAlign, Log2(seg->alignment));
|
||||||
|
memoryPtr = alignTo(memoryPtr, seg->alignment);
|
||||||
seg->startVA = memoryPtr;
|
seg->startVA = memoryPtr;
|
||||||
log(formatv("mem: {0,-15} offset={1,-8} size={2,-8} align={3}", seg->name,
|
log(formatv("mem: {0,-15} offset={1,-8} size={2,-8} align={3}", seg->name,
|
||||||
memoryPtr, seg->size, seg->alignment));
|
memoryPtr, seg->size, Log2(seg->alignment)));
|
||||||
|
|
||||||
if (!config->relocatable && seg->isTLS()) {
|
if (!config->relocatable && seg->isTLS()) {
|
||||||
if (WasmSym::tlsSize) {
|
if (WasmSym::tlsSize) {
|
||||||
|
@ -301,7 +302,7 @@ void Writer::layoutMemory() {
|
||||||
}
|
}
|
||||||
if (WasmSym::tlsAlign) {
|
if (WasmSym::tlsAlign) {
|
||||||
auto *tlsAlign = cast<DefinedGlobal>(WasmSym::tlsAlign);
|
auto *tlsAlign = cast<DefinedGlobal>(WasmSym::tlsAlign);
|
||||||
setGlobalPtr(tlsAlign, int64_t{1} << seg->alignment);
|
setGlobalPtr(tlsAlign, seg->alignment.value());
|
||||||
}
|
}
|
||||||
if (!config->sharedMemory && WasmSym::tlsBase) {
|
if (!config->sharedMemory && WasmSym::tlsBase) {
|
||||||
auto *tlsBase = cast<DefinedGlobal>(WasmSym::tlsBase);
|
auto *tlsBase = cast<DefinedGlobal>(WasmSym::tlsBase);
|
||||||
|
|
Loading…
Reference in New Issue