On 2/7/24 08:20, deller@kernel.org wrote:
> From: Helge Deller <deller@gmx.de>
>
> HP-UX 11 and HP ODE tools use the "rsm 0,%reg" instruction in not priviledged
> code paths to get the current PSW flags. The constant 0 means that no bits of
> the PSW shall be reset, so this is effectively a read-only access to the PSW.
> Allow this read-only access even for not privileged code.
>
> Signed-off-by: Helge Deller <deller@gmx.de>
> ---
> target/hppa/translate.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index 10fdc0813d..7e58775bbf 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -2156,10 +2156,16 @@ static bool trans_ldsid(DisasContext *ctx, arg_ldsid *a)
>
> static bool trans_rsm(DisasContext *ctx, arg_rsm *a)
> {
> +#ifdef CONFIG_USER_ONLY
> CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
> -#ifndef CONFIG_USER_ONLY
> +#else
> TCGv_i64 tmp;
>
> + /* HP-UX 11i and HP ODE use rsm for read-access to PSW */
> + if (a->i) {
> + CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
> + }
> +
> nullify_over(ctx);
Wow, that is not documented in the manual. I wonder what this user-land software uses
this for? There aren't many bits in there that are relevant to user-land.
I suppose PSW_W is readable from there, but that can be inferred from SAR...
Acked-by: Richard Henderson <richard.henderson@linaro.org>
r~