On Fri, Feb 12, 2016 at 10:12:31AM +0100, Ard Biesheuvel wrote:
> 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]>

Not my package, but from an ARM perspective:
Reviewed-by: Leif Lindholm <[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

Reply via email to