[vm, elf] Speculatively align section header table.
Change-Id: Iec820e4fe0df691e914d593ffce13bcc8e5cddf5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106485
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index 9b1c566..38a1d15 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -66,6 +66,7 @@
#if defined(TARGET_ARCH_IS_32_BIT)
static const intptr_t kElfHeaderSize = 52;
+static const intptr_t kElfSectionTableAlignment = 4;
static const intptr_t kElfSectionTableEntrySize = 40;
static const intptr_t kElfProgramTableEntrySize = 32;
static const intptr_t kElfSymbolTableEntrySize = 16;
@@ -73,6 +74,7 @@
static const intptr_t kElfSymbolHashTableEntrySize = 4;
#else
static const intptr_t kElfHeaderSize = 64;
+static const intptr_t kElfSectionTableAlignment = 8;
static const intptr_t kElfSectionTableEntrySize = 64;
static const intptr_t kElfProgramTableEntrySize = 56;
static const intptr_t kElfSymbolTableEntrySize = 24;
@@ -508,6 +510,7 @@
file_offset += section->file_size;
}
+ file_offset = Utils::RoundUp(file_offset, kElfSectionTableAlignment);
section_table_file_offset_ = file_offset;
section_table_file_size_ =
(sections_.length() + kNumInvalidSections) * kElfSectionTableEntrySize;
@@ -686,6 +689,8 @@
}
void Elf::WriteSectionTable() {
+ stream_->Align(kElfSectionTableAlignment);
+
ASSERT(stream_->position() == section_table_file_offset_);
{