diff options
-rw-r--r-- | Tools/CCode/Source/FwImage/fwimage.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Tools/CCode/Source/FwImage/fwimage.c b/Tools/CCode/Source/FwImage/fwimage.c index a4ae10c4c2..11090952cd 100644 --- a/Tools/CCode/Source/FwImage/fwimage.c +++ b/Tools/CCode/Source/FwImage/fwimage.c @@ -337,9 +337,11 @@ ScanSections( Elf_Shdr *shdr = GetShdrByIndex(i); if (IsTextShdr(shdr)) {
//
- // Align the coff offset
+ // Align the coff offset to meet with the alignment requirement of section
+ // itself.
//
CoffOffset = (CoffOffset + shdr->sh_addralign - 1) & ~(shdr->sh_addralign - 1);
+
/* Relocate entry. */ if ((Ehdr->e_entry >= shdr->sh_addr) &&
(Ehdr->e_entry < shdr->sh_addr + shdr->sh_size)) { @@ -357,7 +359,13 @@ ScanSections( DataOffset = CoffOffset; for (i = 0; i < Ehdr->e_shnum; i++) { Elf_Shdr *shdr = GetShdrByIndex(i); - if (IsDataShdr(shdr)) { + if (IsDataShdr(shdr)) {
+ //
+ // Align the coff offset to meet with the alignment requirement of section
+ // itself.
+ //
+ CoffOffset = (CoffOffset + shdr->sh_addralign - 1) & ~(shdr->sh_addralign - 1);
+ CoffSectionsOffset[i] = CoffOffset; CoffOffset += shdr->sh_size; } |