From: Thomas Huth <thuth@xxxxxxxxxx> We've already got the CONFIG_ARM_V7M switch, but it currently can not be disabled yet. The m_helper.c code should not be compiled into the binary if the switch is not enabled. We also have to provide some stubs in a separate file to make sure that we still can link the other code without CONFIG_ARM_V7M. Signed-off-by: Thomas Huth <thuth@xxxxxxxxxx> Message-Id: <20190903154810.27365-4-thuth@xxxxxxxxxx> [PMD: add write_v7m_exception() stub when not using TCG, remove CONFIG_ARM_V7M=y in default-configs/arm-softmmu.mak] Signed-off-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> --- default-configs/arm-softmmu.mak | 6 ---- target/arm/cpu.h | 7 ++++ target/arm/m_helper-stub.c | 59 +++++++++++++++++++++++++++++++++ target/arm/Makefile.objs | 3 +- 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 target/arm/m_helper-stub.c diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak index 511d74da58..7ae8006556 100644 --- a/default-configs/arm-softmmu.mak +++ b/default-configs/arm-softmmu.mak @@ -1,11 +1,5 @@ # Default configuration for arm-softmmu -# CONFIG_SEMIHOSTING is always required on this architecture -CONFIG_SEMIHOSTING=y - -# TODO: ARM_V7M is currently always required - make this more flexible! -CONFIG_ARM_V7M=y - # CONFIG_PCI_DEVICES=n # CONFIG_TEST_DEVICES=n diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 4ffd991b6f..84e14ce5a9 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1278,7 +1278,14 @@ void pmu_init(ARMCPU *cpu); /* Write a new value to v7m.exception, thus transitioning into or out * of Handler mode; this may result in a change of active stack pointer. */ +#if !defined(CONFIG_TCG) +static inline void write_v7m_exception(CPUARMState *env, uint32_t new_exc) +{ + g_assert_not_reached(); +} +#else void write_v7m_exception(CPUARMState *env, uint32_t new_exc); +#endif /* Map EL and handler into a PSTATE_MODE. */ static inline unsigned int aarch64_pstate_mode(unsigned int el, bool handler) diff --git a/target/arm/m_helper-stub.c b/target/arm/m_helper-stub.c new file mode 100644 index 0000000000..9316a9995b --- /dev/null +++ b/target/arm/m_helper-stub.c @@ -0,0 +1,59 @@ +/* + * ARM V7M related stubs. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" +#include "cpu.h" +#include "exec/helper-proto.h" +#include "internals.h" + +void HELPER(v7m_bxns)(CPUARMState *env, uint32_t dest) +{ + abort(); +} + +void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) +{ + abort(); +} + +uint32_t HELPER(v7m_mrs)(CPUARMState *env, uint32_t reg) +{ + abort(); +} + +void HELPER(v7m_msr)(CPUARMState *env, uint32_t maskreg, uint32_t val) +{ + abort(); +} + +uint32_t HELPER(v7m_tt)(CPUARMState *env, uint32_t addr, uint32_t op) +{ + abort(); +} + +void HELPER(v7m_preserve_fp_state)(CPUARMState *env) +{ + abort(); +} + +void write_v7m_exception(CPUARMState *env, uint32_t new_exc) +{ + abort(); +} + +void HELPER(v7m_vlldm)(CPUARMState *env, uint32_t fptr) +{ + abort(); +} + +void HELPER(v7m_vlstm)(CPUARMState *env, uint32_t fptr) +{ + abort(); +} + +ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate) +{ + abort(); +} diff --git a/target/arm/Makefile.objs b/target/arm/Makefile.objs index a0df58526b..993899d731 100644 --- a/target/arm/Makefile.objs +++ b/target/arm/Makefile.objs @@ -66,7 +66,8 @@ obj-y += tlb_helper.o debug_helper.o obj-y += translate.o op_helper.o obj-y += crypto_helper.o obj-y += iwmmxt_helper.o vec_helper.o neon_helper.o -obj-y += m_helper.o +obj-$(CONFIG_ARM_V7M) += m_helper.o +obj-$(call lnot,$(CONFIG_ARM_V7M)) += m_helper-stub.o obj-$(CONFIG_ARM_V4) += cpu_v4.o obj-$(CONFIG_ARM_V5) += cpu_v5.o -- 2.21.1