All of lore.kernel.org
 help / color / mirror / Atom feed
From: Warner Losh <imp@bsdimp.com>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: Stacey Son <sson@freebsd.org>,
	QEMU Trivial <qemu-trivial@nongnu.org>,
	Klye Evans <kevans@freebsd.org>, Michael Tokarev <mjt@tls.msk.ru>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Laurent Vivier <laurent@vivier.eu>
Subject: Re: [PATCH 22/24] bsd-user/arm/target_arch_signal.h: arm set_mcontext
Date: Thu, 28 Oct 2021 18:07:05 -0600	[thread overview]
Message-ID: <CANCZdfo8b2uO=g_mGbZx8241nB8qytAsAD-E4nh7MLDCt9KGgw@mail.gmail.com> (raw)
In-Reply-To: <344ac222-daa9-c752-8c6a-21773efb8656@linaro.org>

[-- Attachment #1: Type: text/plain, Size: 2160 bytes --]

On Thu, Oct 28, 2021 at 11:53 AM Richard Henderson <
richard.henderson@linaro.org> wrote:

> On 10/19/21 9:44 AM, Warner Losh wrote:
> > +    regs->regs[15] = tswap32(gr[TARGET_REG_PC]);
> > +    cpsr = tswap32(gr[TARGET_REG_CPSR]);
> > +    cpsr_write(regs, cpsr, CPSR_USER | CPSR_EXEC, CPSRWriteByInstr);
>
> Hmm.  What's the expected behaviour if the saved CPSR state does not match
> the PC state
> wrt thumb?
>
> I'm ok if this should fail in spectacular ways, I just wanna know.
>
> I *think* what will happen at the moment is that qemu will go into a
> whacky state in which
> the translator will read and interpret unaligned data.
>
> I have a pending patch set for arm to raise unaligned exceptions for
> mis-aligned pc.  For
> arm32 mode, this is fine, and we'll raise the exception.  But for thumb
> mode, this is
> architecturally impossible, and the translator will assert.
>
> The assert is going to be a problem.  There are a couple of options:
>
> (1) TARGET_REG_PC wins: unset PC[0] and adjust CPSR[T] to match.
>
> (2) CPSR_T wins: unset pc[0] if CPSR[T] is set, unchanged otherwise.  (In
> the Arm ARM
> psueodcode, pc[0] is hardwired to 0 in thumb mode.)
>
> (3) Don't worry about matching PC[0] and CPSR[T], but do prevent an
> impossible situation
> and unset PC[0] always.  If PC[1] is set, and CPSR[T] is unset, then we'll
> raise unaligned
> when the cpu restarts.
>

Consider this program:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
int g;
void fortytwo(int arg) { g = 42; }
int main(int argc, char **argv) {
        g = 123;
        signal(SIGALRM, fortytwo); alarm(1); pause();
        printf("G is %d\n", g);
}

Built for 'arm' I get
G is 42
Build -mthumb I get
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault

So even without your new assert, there are some issues I need to look into
before I can
get to this very interesting case :(. These are all good questions, though.
I clearly have
some work to do here...

And, finally, you're missing the mc_vfp_* handling.
>

Yes. We don't really support that at the moment, but I'll look into how
hard that might be
to add.

Warner

[-- Attachment #2: Type: text/html, Size: 3041 bytes --]

  reply	other threads:[~2021-10-29  0:12 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-19 16:44 [PATCH 00/24] bsd-user: arm (32-bit) support Warner Losh
2021-10-19 16:44 ` [PATCH 01/24] bsd-user/arm/target_arch_sysarch.h: Use consistent include guards Warner Losh
2021-10-23  7:29   ` Kyle Evans
2021-10-28 15:08   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 02/24] bsd-user/arm/target_syscall.h: Add copyright and update name Warner Losh
2021-10-23  7:30   ` Kyle Evans
2021-10-28 15:08   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 03/24] bsd-user/arm/target_arch_cpu.c: Target specific TLS routines Warner Losh
2021-10-23  7:30   ` Kyle Evans
2021-10-28 15:08   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 04/24] bsd-user/arm/target_arch_cpu.h: CPU Loop definitions Warner Losh
2021-10-23  7:31   ` Kyle Evans
2021-10-28 15:14   ` Richard Henderson
2021-10-28 17:36     ` Warner Losh
2021-10-19 16:44 ` [PATCH 05/24] bsd-user/arm/target_arch_cpu.h: Implement target_cpu_clone_regs Warner Losh
2021-10-23  7:31   ` Kyle Evans
2021-10-28 15:15   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 06/24] bsd-user/arm/target_arch_cpu.h: Dummy target_cpu_loop implementation Warner Losh
2021-10-23  7:32   ` Kyle Evans
2021-10-28 15:15   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 07/24] bsd-user/arm/target_arch_cpu.h: Implment trivial EXCP exceptions Warner Losh
2021-10-26  5:52   ` Kyle Evans
2021-10-28 15:19   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 08/24] bsd-user/arm/target_arch_cpu.h: Implement data abort exceptions Warner Losh
2021-10-26  5:47   ` Kyle Evans
2021-10-28 15:29   ` Richard Henderson
2021-10-28 16:56     ` Warner Losh
2021-10-19 16:44 ` [PATCH 09/24] bsd-user/arm/target_arch_cpu.h: Implement system call dispatch Warner Losh
2021-10-23  7:33   ` Kyle Evans
2021-10-23 15:17     ` Warner Losh
2021-10-28 15:35   ` Richard Henderson
2021-10-28 17:56     ` Warner Losh
2021-10-19 16:44 ` [PATCH 10/24] bsd-user/arm/target_arch_reg.h: Implement core dump register copying Warner Losh
2021-10-26  5:48   ` Kyle Evans
2021-10-28 15:36   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 11/24] bsd-user/arm/target_arch_vmparam.h: Parameters for arm address space Warner Losh
2021-10-26  5:52   ` Kyle Evans
2021-10-28 15:37   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 12/24] bsd-user/arm/target_arch_sigtramp.h: Signal Trampoline for arm Warner Losh
2021-10-26  5:51   ` Kyle Evans
2021-10-28 15:42   ` Richard Henderson
2021-10-28 19:35     ` Warner Losh
2021-10-19 16:44 ` [PATCH 13/24] bsd-user/arm/target_arch_thread.h: Routines to create and switch to a thread Warner Losh
2021-10-26  6:01   ` Kyle Evans
2021-10-26  6:11     ` Kyle Evans
2021-10-27 15:35       ` Warner Losh
2021-10-27 15:40         ` Kyle Evans
2021-10-28 15:57   ` Richard Henderson
2021-10-28 19:45     ` Warner Losh
2021-10-29 16:06       ` Richard Henderson
2021-10-19 16:44 ` [PATCH 14/24] bsd-user/arm/target_arch_elf.h: arm defines for ELF Warner Losh
2021-10-26  6:07   ` Kyle Evans
2021-10-28 16:02   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 15/24] bsd-user/arm/target_arch_elf.h: arm get hwcap Warner Losh
2021-10-26  6:02   ` Kyle Evans
2021-10-28 16:06   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 16/24] bsd-user/arm/target_arch_elf.h: arm get_hwcap2 impl Warner Losh
2021-10-26  6:02   ` Kyle Evans
2021-10-28 16:08   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 17/24] bsd-user/arm/target_arch_signal.h: arm specific signal registers and stack Warner Losh
2021-10-26  6:03   ` Kyle Evans
2021-10-28 16:18   ` Richard Henderson
2021-10-28 16:48     ` Warner Losh
2021-10-19 16:44 ` [PATCH 18/24] bsd-user/arm/target_arch_signal.h: arm machine context for signals Warner Losh
2021-10-26  6:03   ` Kyle Evans
2021-10-28 17:04   ` Richard Henderson
2021-10-28 17:18   ` Richard Henderson
2021-10-28 20:16     ` Warner Losh
2021-10-19 16:44 ` [PATCH 19/24] bsd-user/arm/target_arch_signal.h: arm user context and trapframe " Warner Losh
2021-10-26  6:07   ` Kyle Evans
2021-10-27 15:48     ` Warner Losh
2021-10-28 17:22   ` Richard Henderson
2021-10-30  2:44     ` Warner Losh
2021-10-19 16:44 ` [PATCH 20/24] bsd-user/arm/target_arch_signal.h: arm set_sigtramp_args Warner Losh
2021-10-26  6:10   ` Kyle Evans
2021-10-28 17:25   ` Richard Henderson
2021-10-28 17:35     ` Kyle Evans
2021-10-28 22:22       ` Warner Losh
2021-10-28 22:41     ` Warner Losh
2021-10-30  2:47       ` Warner Losh
2021-10-19 16:44 ` [PATCH 21/24] bsd-user/arm/target_arch_signal.h: arm get_mcontext Warner Losh
2021-10-26  6:08   ` Kyle Evans
2021-10-28 17:27   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 22/24] bsd-user/arm/target_arch_signal.h: arm set_mcontext Warner Losh
2021-10-26  6:12   ` Kyle Evans
2021-10-28 17:53   ` Richard Henderson
2021-10-29  0:07     ` Warner Losh [this message]
2021-10-29  4:34       ` Warner Losh
2021-10-28 17:57   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 23/24] bsd-user/arm/target_arch_signal.h: arm get_ucontext_sigreturn Warner Losh
2021-10-26  6:12   ` Kyle Evans
2021-10-28 17:59   ` Richard Henderson
2021-10-19 16:44 ` [PATCH 24/24] bsd-user: add arm target build Warner Losh
2021-10-26  6:21   ` Kyle Evans
2021-10-28 18:02     ` Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CANCZdfo8b2uO=g_mGbZx8241nB8qytAsAD-E4nh7MLDCt9KGgw@mail.gmail.com' \
    --to=imp@bsdimp.com \
    --cc=kevans@freebsd.org \
    --cc=laurent@vivier.eu \
    --cc=mjt@tls.msk.ru \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=sson@freebsd.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.