arm: fix UB when compiling thumb2 with PIC [PR100236]
authorRichard Earnshaw <rearnsha@arm.com>
Tue, 27 Apr 2021 11:25:30 +0000 (12:25 +0100)
committerRichard Earnshaw <rearnsha@arm.com>
Tue, 27 Apr 2021 11:27:02 +0000 (12:27 +0100)
commit01d0bda8bdf3cd804e1e00915d432ad0cdc49399
treef8d88c06e274b69106a5637ef6a33e998066d4a5
parent4cea5b8cb715e40e10174e6de405f26202fa3d6a
arm: fix UB when compiling thumb2 with PIC [PR100236]

arm_compute_save_core_reg_mask contains UB in that the saved PIC
register number is used to create a bit mask. However, for some target
options this register is undefined and we end up with a shift of ~0.

On native compilations this is benign since the shift will still be
large enough to move the bit outside of the range of the mask, but if
cross compiling from a system that truncates out-of-range shifts to
zero (or worse, raises a trap for such values) we'll get potentially
wrong code (or a fault).

gcc:
PR target/100236
* config/arm/arm.c (THUMB2_WORK_REGS): Check PIC_OFFSET_TABLE_REGNUM
is valid before including it in the mask.
gcc/config/arm/arm.c