From 4f7d5c6792b67ed7b4fd9f8f5f64649f1f41bd95 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Fri, 11 Sep 2015 07:07:06 +0000 Subject: 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 Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18443 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/C/GenFw/Elf32Convert.c | 13 +++++++++++-- BaseTools/Source/C/GenFw/Elf64Convert.c | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'BaseTools/Source/C') diff --git a/BaseTools/Source/C/GenFw/Elf32Convert.c b/BaseTools/Source/C/GenFw/Elf32Convert.c index e1b92ebd71..4b330a6166 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 c758ed9d64..a3f1f5d3d4 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) + -- cgit v1.2.3