[ARM] Fix PR89222
authorWilco Dijkstra <wdijkstr@arm.com>
Tue, 5 Mar 2019 15:04:01 +0000 (15:04 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 5 Mar 2019 15:04:01 +0000 (15:04 +0000)
commitd7c50d679ffafaf5e7ba105cea765a307f60e2f3
tree253d37b987d7417d008a27abf6398beaa5323df8
parentdeeec83de4379e253af4f41eaaf8f45d4db17302
[ARM] Fix PR89222

The GCC optimizer can generate symbols with non-zero offset from simple
if-statements. Bit zero is used for the Arm/Thumb state bit, so relocations
with offsets fail if it changes bit zero and the relocation forces bit zero
to true.  The fix is to disable offsets on function pointer symbols.

    gcc/
PR target/89222
* config/arm/arm.md (movsi): Use targetm.cannot_force_const_mem
to decide when to split off a non-zero offset from a symbol.
* config/arm/arm.c (arm_cannot_force_const_mem): Disallow offsets
in function symbols.

    testsuite/
PR target/89222
* gcc.target/arm/pr89222.c: Add new test.

From-SVN: r269390
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr89222.c [new file with mode: 0644]