[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_);
 
   {