On 9 September 2015 at 11:46, Gao, Liming <[email protected]> wrote: > Ard: > Dose this patch fix Section Alignment of elf binaries compiled with > GCC(Linux) reported by Michael Zimmermann <[email protected]>? >
No. This fixes a problem on 32-bit ARM where the debug entry is resolved before the MMU is up, which results in an alignment fault. The issue you refer to is about the properties table memory protection feature, right? > -----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

