Ard:
  He reports that the 'common-page-size' flag doesn't work. When he configures 
its value to 4096, the alignment in the converted EFI image is still default 
32. Could you help check it? 

  The detail report is attached below. 
The 'common-page-size' flag doesn't change the value of this field though. what 
it does change is the Alignment value of the Program Headers:
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x010000 0x00000000 0x00000000 0x042f8 0x042f8 R E 0x10000
  LOAD           0x0142f8 0x000142f8 0x000142f8 0x000d4 0x000f4 RW  0x10000
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x10
the section alignment still stays at 0/1/4.

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

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
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to