[BFD][AARCH64]Properly truncate no overflow checking relocation value for load/store immediate.

Renlin Li renlin.li@foss.arm.com
Thu Apr 26 13:05:00 GMT 2018


Hi all,


In aarch64, there are relocations for the unsigned immediate offset of load/store instruction.
The size of the immediate field is 12-bit. In the scaled case, not all 12-bit will be used.

For example: R_AARCH64_LD64_GOT_LO12_NC
Set the LD/ST immediate field to bits [11:3] of relocated value. No overflow
check.

In this case, the top 3 bits of the immediate field of the load instruction should
be all 0. Only 9 bits from the value should be written into the instruction
encoding.

For relocations with over-flow check, if the value is larger than 12-bits, it
will be caught by the checking mechanism.

But for relocations without no overflow check, the value could be larger than
12 bits, after scaling, it might take more bits than the specification
specified. The value should be properly truncated.

The patch here correct the bitsize field of a few relocations, and the bitsize
field is used to properly truncate the value written into the instruction encoding.

Okay to commit?

bfd/ChangeLog:

2018-04-26  Renlin Li  <renlin.li@arm.com>

	* elfnn-aarch64.c (elfNN_aarch64_howto_table): Correct the bitsize
	field of R_AARCH64_LD64_GOT_LO12_NC, R_AARCH64_P32_LD32_GOT_LO12_NC,
	R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
	R_AARCH64_P32_LD32_GOTTPREL_LO12_NC,
	R_AARCH64_LDST16_ABS_LO12_NC,
	R_AARCH64_P32_TLSDESC_LD32_LO12_NC.
	R_AARCH64_P32_TLSDESC_LD32_LO12_NC.
	R_AARCH64_TLSDESC_LD64_LO12_NC.
	R_AARCH64_LDST32_ABS_LO12_NC,
	R_AARCH64_LDST64_ABS_LO12_NC,
	R_AARCH64_LDST128_ABS_LO12_NC,
	* elfxx-aarch64.c (_bfd_aarch64_elf_put_addend): Truncate the
	immediate value for load/store instruction.

ld/ChangeLog:

2018-04-26 Renlin Li  <renlin.li@arm.com>

	* testsuite/ld-aarch64/emit-relocs-115.d: Update test with new value.
	* testsuite/ld-aarch64/emit-relocs-534.d: Likewise.
	* testsuite/ld-aarch64/emit-relocs-555.d: Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bfd.patch
Type: text/x-patch
Size: 8406 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20180426/90b876c8/attachment.bin>


More information about the Binutils mailing list