Ard:
  Dose this patch fix Section Alignment of elf binaries compiled with 
GCC(Linux) reported by Michael Zimmermann <[email protected]>?

Thanks
Liming
-----Original Message-----
From: Ard Biesheuvel [mailto:[email protected]] 
Sent: Wednesday, September 09, 2015 5:44 PM
To: [email protected]; Gao, Liming; Liu, Yingke D
Cc: [email protected]; [email protected]; Ard Biesheuvel
Subject: [PATCH] BaseTools/GenFw: align RVA of debug

SVN commit r18077 ("BaseTools/GenFw: move .debug contents to .data to save 
space") removed the separate .debug section after moving its contents into 
.text or .data. However, this change does not take into account that some of 
these contents need to appear at a 32-bit aligned offset. So align the debug 
data RVA to 32 bits.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <[email protected]>
---
 BaseTools/Source/C/GenFw/Elf32Convert.c | 13 +++++++++++--  
BaseTools/Source/C/GenFw/Elf64Convert.c | 13 +++++++++++--
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/BaseTools/Source/C/GenFw/Elf32Convert.c 
b/BaseTools/Source/C/GenFw/Elf32Convert.c
index e1b92ebd713e..4b330a61669f 100644
--- a/BaseTools/Source/C/GenFw/Elf32Convert.c
+++ b/BaseTools/Source/C/GenFw/Elf32Convert.c
@@ -218,6 +218,15 @@ CoffAlign (
   return (Offset + mCoffAlignment - 1) & ~(mCoffAlignment - 1);  }
 
+STATIC
+UINT32
+DebugRvaAlign (
+  UINT32 Offset
+  )
+{
+  return (Offset + 3) & ~3;
+}
+
 //
 // filter functions
 //
@@ -365,7 +374,7 @@ ScanSections32 (
     assert (FALSE);
   }
 
-  mDebugOffset = mCoffOffset;
+  mDebugOffset = DebugRvaAlign(mCoffOffset);
 
   if (mEhdr->e_machine != EM_ARM) {
     mCoffOffset = CoffAlign(mCoffOffset); @@ -423,7 +432,7 @@ ScanSections32 (
   // section alignment.
   //
   if (SectionCount > 0) {
-    mDebugOffset = mCoffOffset;
+    mDebugOffset = DebugRvaAlign(mCoffOffset);
   }
   mCoffOffset = mDebugOffset + sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY) +
                 sizeof(EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) + diff --git 
a/BaseTools/Source/C/GenFw/Elf64Convert.c 
b/BaseTools/Source/C/GenFw/Elf64Convert.c
index c758ed9d64a6..a3f1f5d3d4c7 100644
--- a/BaseTools/Source/C/GenFw/Elf64Convert.c
+++ b/BaseTools/Source/C/GenFw/Elf64Convert.c
@@ -211,6 +211,15 @@ CoffAlign (
   return (Offset + mCoffAlignment - 1) & ~(mCoffAlignment - 1);  }
 
+STATIC
+UINT32
+DebugRvaAlign (
+  UINT32 Offset
+  )
+{
+  return (Offset + 3) & ~3;
+}
+
 //
 // filter functions
 //
@@ -359,7 +368,7 @@ ScanSections64 (
     assert (FALSE);
   }
 
-  mDebugOffset = mCoffOffset;
+  mDebugOffset = DebugRvaAlign(mCoffOffset);
 
   if (mEhdr->e_machine != EM_ARM) {
     mCoffOffset = CoffAlign(mCoffOffset); @@ -412,7 +421,7 @@ ScanSections64 (
   // section alignment.
   //
   if (SectionCount > 0) {
-    mDebugOffset = mCoffOffset;
+    mDebugOffset = DebugRvaAlign(mCoffOffset);
   }
   mCoffOffset = mDebugOffset + sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY) +
                 sizeof(EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) +
--
1.9.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to