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

