arm: Fix multiple inheritance thunks for thumb-1 with -mpure-code
authorChristophe Lyon <christophe.lyon@linaro.org>
Mon, 2 Nov 2020 14:40:10 +0000 (14:40 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Mon, 2 Nov 2020 14:40:10 +0000 (14:40 +0000)
commit637aeb6b8da36a621cf076068498adc5322be069
treea4ea4dd47a42902f893a1bbe0ef5adca2f25fc03
parentc7f49e0579329961c49ece7f9a048914bcc106d0
arm: Fix multiple inheritance thunks for thumb-1 with -mpure-code

When -mpure-code is used, we cannot load delta from code memory (like
we do without -mpure-code).

This patch builds the value of mi_delta into r3 with a series of
movs/adds/lsls.

We also do some cleanup by not emitting the function address and delta
via .word directives at the end of the thunk since we don't use them
with -mpure-code.

No need for new testcases, this bug was already identified by:
g++.dg/ipa/pr46287-3.C
g++.dg/ipa/pr46984.C
g++.dg/opt/thunk1.C
g++.dg/torture/pr46287.C
g++.dg/torture/pr45699.C

2020-11-02  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/arm.c (arm_thumb1_mi_thunk): Build mi_delta in r3 and
do not emit function address and delta when -mpure-code is used.
gcc/config/arm/arm.c