On 15 February 2016 at 10:27, Gao, Liming <[email protected]> wrote:
> Reviewed-by: Liming Gao <[email protected]>
>

Thanks. Pushed to master.


> -----Original Message-----
> From: Ard Biesheuvel [mailto:[email protected]]
> Sent: Friday, February 12, 2016 5:13 PM
> To: [email protected]; Gao, Liming; Zhu, Yonghong
> Cc: [email protected]; [email protected]; Ard Biesheuvel
> Subject: [PATCH] BaseTools/GenFw AARCH64: add support for relative data 
> relocations
>
> This adds support to the ELF to PE/COFF conversion performed by GenFw for
> the AArch64 ELF relocation types R_AARCH64_PREL64, R_AARCH64_PREL32 and
> R_AARCH64_PREL16. Since we already require the ELF and PE/COFF section
> layouts to be identical in order to support other relative relocation
> types, this is simply a matter of whitelisting these new relocation types
> in the same way.
>
> While we're at it, clean up the code a bit, and add a comment explaining
> why these relocations are ignored in WriteRelocations64 ().
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <[email protected]>
> ---
>  BaseTools/Source/C/GenFw/Elf64Convert.c | 22 +++++++++++---------
>  1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c 
> b/BaseTools/Source/C/GenFw/Elf64Convert.c
> index 90d80a22daf2..fb85b3821b38 100644
> --- a/BaseTools/Source/C/GenFw/Elf64Convert.c
> +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c
> @@ -767,6 +767,9 @@ WriteSections64 (
>            case R_AARCH64_LD_PREL_LO19:
>            case R_AARCH64_CALL26:
>            case R_AARCH64_JUMP26:
> +          case R_AARCH64_PREL64:
> +          case R_AARCH64_PREL32:
> +          case R_AARCH64_PREL16:
>              //
>              // The GCC toolchains (i.e., binutils) may corrupt section 
> relative
>              // relocations when emitting relocation sections into fully 
> linked
> @@ -855,20 +858,13 @@ WriteRelocations64 (
>
>              switch (ELF_R_TYPE(Rel->r_info)) {
>              case R_AARCH64_ADR_PREL_LO21:
> -              break;
> -
>              case R_AARCH64_CONDBR19:
> -              break;
> -
>              case R_AARCH64_LD_PREL_LO19:
> -              break;
> -
>              case R_AARCH64_CALL26:
> -              break;
> -
>              case R_AARCH64_JUMP26:
> -              break;
> -
> +            case R_AARCH64_PREL64:
> +            case R_AARCH64_PREL32:
> +            case R_AARCH64_PREL16:
>              case R_AARCH64_ADR_PREL_PG_HI21:
>              case R_AARCH64_ADD_ABS_LO12_NC:
>              case R_AARCH64_LDST8_ABS_LO12_NC:
> @@ -876,6 +872,12 @@ WriteRelocations64 (
>              case R_AARCH64_LDST32_ABS_LO12_NC:
>              case R_AARCH64_LDST64_ABS_LO12_NC:
>              case R_AARCH64_LDST128_ABS_LO12_NC:
> +              //
> +              // No fixups are required for relative relocations, provided 
> that
> +              // the relative offsets between sections have been preserved in
> +              // the ELF to PE/COFF conversion. We have already asserted that
> +              // this is the case in WriteSections64 ().
> +              //
>                break;
>
>              case R_AARCH64_ABS64:
> --
> 2.5.0
>
> _______________________________________________
> 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