tcg/s390x: Check for long-displacement facility at startup

We are already assuming the existance of long-displacement, but were
not being explicit about it.  This has been present since z990.

Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-12-07 16:08:46 +00:00
parent 0a3afe09cb
commit 761ea52213
2 changed files with 19 additions and 2 deletions

View File

@ -3211,6 +3211,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
static void query_s390_facilities(void) static void query_s390_facilities(void)
{ {
unsigned long hwcap = qemu_getauxval(AT_HWCAP); unsigned long hwcap = qemu_getauxval(AT_HWCAP);
const char *which;
/* Is STORE FACILITY LIST EXTENDED available? Honestly, I believe this /* Is STORE FACILITY LIST EXTENDED available? Honestly, I believe this
is present on all 64-bit systems, but let's check for it anyway. */ is present on all 64-bit systems, but let's check for it anyway. */
@ -3232,6 +3233,20 @@ static void query_s390_facilities(void)
if (!(hwcap & HWCAP_S390_VXRS)) { if (!(hwcap & HWCAP_S390_VXRS)) {
s390_facilities[2] = 0; s390_facilities[2] = 0;
} }
/*
* Check for all required facilities.
* ZARCH_ACTIVE is done via preprocessor check for 64-bit.
*/
if (!HAVE_FACILITY(LONG_DISP)) {
which = "long-displacement";
goto fail;
}
return;
fail:
error_report("%s: missing required facility %s", __func__, which);
exit(EXIT_FAILURE);
} }
static void tcg_target_init(TCGContext *s) static void tcg_target_init(TCGContext *s)

View File

@ -52,11 +52,13 @@ typedef enum TCGReg {
#define TCG_TARGET_NB_REGS 64 #define TCG_TARGET_NB_REGS 64
/* A list of relevant facilities used by this translator. Some of these /* Facilities required for proper operation; checked at startup. */
are required for proper operation, and these are checked at startup. */
#define FACILITY_ZARCH_ACTIVE 2 #define FACILITY_ZARCH_ACTIVE 2
#define FACILITY_LONG_DISP 18 #define FACILITY_LONG_DISP 18
/* Facilities that are checked at runtime. */
#define FACILITY_EXT_IMM 21 #define FACILITY_EXT_IMM 21
#define FACILITY_GEN_INST_EXT 34 #define FACILITY_GEN_INST_EXT 34
#define FACILITY_LOAD_ON_COND 45 #define FACILITY_LOAD_ON_COND 45