diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c index 90d80a22da..fb85b3821b 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: