qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Peter Maydell" <peter.maydell@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Cc: "QEMU Developers" <qemu-devel@nongnu.org>,
	"Aleksandar Markovic" <aleksandar.qemu.devel@gmail.com>,
	"Emilio G . Cota" <cota@braap.org>,
	"Brian Campbell" <bacam@z273.org.uk>,
	"Aleksandar Rikalo" <aleksandar.rikalo@rt-rk.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Richard Henderson" <rth@twiddle.net>
Subject: Re: [RFC PATCH-for-5.0?] target/mips/translate: Report exception in delay slot as UNPREDICTABLE
Date: Tue, 7 Apr 2020 11:23:00 +0200	[thread overview]
Message-ID: <894d16c7-4f6d-a842-ec28-f2a0b7cc2565@redhat.com> (raw)
In-Reply-To: <CAFEAcA8rPhPKTjxh-iPkP8qpRpCCYEDgepCK=MSwy96h_kk_7w@mail.gmail.com>

On 4/7/20 10:35 AM, Peter Maydell wrote:
> On Tue, 7 Apr 2020 at 00:55, Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
>>
>> Using the BC1ANY4F instruction with a 24Kf core (MIPS32R2
>> & ASE_MIPS16) we get:
>>
>>    $ echo -ne '\x03\x20\xf8\x09EEEE' > cop1x.bin
>>    $ qemu-system-mipsel -bios cop1x.bin
>>    unknown branch 0x13000
>>    Aborted (core dumped)
> 
>> This is because this COP1X instruction generates a Reserved
>> Instruction when used with this core, however we are in a delay
>> slot, and exceptions in delay slot are architecturally unpredictable.
>>
>> Core dumps confunse users. Instead, report a friendlier error message:
>>
>>    $ qemu-system-mipsel -bios cop1x.bin
>>    qemu-system-mipsel: Exception in delay slot is UNPREDICTABLE
> 
> UNPREDICTABLE behaviour should not in QEMU include
> causing QEMU to exit. You can log it with LOG_GUEST_ERROR
> if you like but you should do something plausible (ideally what
> some bit of real hardware does when this situation happens).

OK. I have no clue how real 24Kf deals with it - I don't own one -, it 
is not in my list of interests (and my list of interests - which I can 
reproduce - is not modeled in QEMU).

> 
> PS: does MIPS use the "UNPREDICTABLE" terminology? I
> thought it was an Arm-ism, but maybe it's caught on more widely.

At least it appears in my MIPS32 ISA Vol II (Revision 0.95) copy from 2001:

1.2  UNPREDICTABLE and UNDEFINED

1.2.1  UNPREDICTABLE
UNPREDICTABLE results may vary from processor implementation to 
implementation, instruction to instruction, oras a function of time on 
the same implementation or instruction. Software can never depend on 
results that are UNPREDICTABLE. UNPREDICTABLE operations may cause a 
result to be generated or not. If a result is generated,it is 
UNPREDICTABLE. UNPREDICTABLE operations may cause arbitrary exceptions.
UNPREDICTABLE results or operations have several implementation 
restrictions:
• Implementations of operations generating UNPREDICTABLE results must 
not depend on any data source (memory or internal state) which is 
inaccessible in the current processor mode
• UNPREDICTABLE operations must not read, write, or modify the contents 
of memory or internal state which is inaccessible in the current 
processor mode. For example, UNPREDICTABLE operations executed in user 
mode must not access memory or internal state that is only accessible in 
Kernel Mode or Debug Mode or in another process
• UNPREDICTABLE operations must not halt or hang the processor

1.2.2  UNDEFINED
UNDEFINED operations or behavior may vary from processor implementation 
to implementation, instruction to instruction, or as a function of time 
on the same implementation or instruction. UNDEFINED operations or 
behavior may vary from nothing to creating an environment in which 
execution can no longer continue. UNDEFINED operations or behavior may 
cause data loss.
UNDEFINED operations or behavior has one implementation restriction:
• UNDEFINED operations or behavior must not cause the processor to hang 
(that is, enter a state from which there is no exit other than powering 
down the processor). The assertion of any of the reset signals must 
restore the processorto an operational state

Then:

Jump and Link Register (JALR)

Processor operation is UNPREDICTABLE if a branch, jump, ERET, DERET, or 
WAIT instruction is placed in the delay slot of a branch or jump.

---

On Vol I Rev 6.01:

5.3.2.1  Control Transfer Instructions in Delay Slots and Forbidden Slots

In MIPS architectures prior to Release 6. if a control transfer 
instruction (CTI) is placed in a branch delay slot, the operation of 
both instructions is UNPREDICTABLE. In Release 6, if a CTI is placed in 
a branch delay slot or a compact branch forbidden slot, implementations 
are required to signal a Reserved Instruction exception.

The following instructions are forbidden in branch delay slots and 
forbidden slots: any CTI, including branches and jumps, ERET, ERETNC, 
DERET, WAIT, and PAUSE. Their occurrence is required to signal a 
Reserved Instruction exception.

5.3.2.2  Exceptions and Delay and Forbidden Slots

If an exception or interrupt prevents the completion of an instruction 
in a delay slot or forbidden slot, the hardware reports an Exception PC 
(CP0 EPC) of the branch, with a status bit set (StatusBD) to indicate 
that the exception was for the instruction in the delay slot of the branch.
By convention, if an exception or interrupt prevents the completion of 
an instruction in a branch delay or forbidden slot, the branch 
instruction is re-executed and branch instructions must be restartable 
to permit this. In particular, procedure calls must be restartable. To 
insure that a procedure call is restartable, procedure calls that have a 
delay slot or forbidden slot (branch/jump-and-link instructions) should 
not use the register in which the return link is stored (usu-ally GPR 
31) as a source register. This applies to all branch/jump-and-link 
instructions that have both a slot (delay or forbidden) and source 
registers, both for conditions (e.g., BGEZAL or BGEZALC) or for jump 
targets (JALR).

---

I would have expected the behavior match the UNDEFINED description, as 
Yongbok Kim commented here:
https://bugs.launchpad.net/qemu/+bug/1663287/comments/3

   branches in a delay slot is "undefined" in the pre-Release
   6 architecture. MIPS architectre release 6 defines to signal
   Reserved Instruction exceptions for such cases.

But it really appears as UNPREDICTABLE.



  reply	other threads:[~2020-04-07  9:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-06 23:54 [RFC PATCH-for-5.0?] target/mips/translate: Report exception in delay slot as UNPREDICTABLE Philippe Mathieu-Daudé
2020-04-06 23:57 ` Philippe Mathieu-Daudé
2020-04-07  8:35 ` Peter Maydell
2020-04-07  9:23   ` Philippe Mathieu-Daudé [this message]
2020-04-07  9:32     ` Philippe Mathieu-Daudé
2020-04-07 21:35       ` Aleksandar Markovic

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=894d16c7-4f6d-a842-ec28-f2a0b7cc2565@redhat.com \
    --to=philmd@redhat.com \
    --cc=aleksandar.qemu.devel@gmail.com \
    --cc=aleksandar.rikalo@rt-rk.com \
    --cc=alex.bennee@linaro.org \
    --cc=aurelien@aurel32.net \
    --cc=bacam@z273.org.uk \
    --cc=cota@braap.org \
    --cc=f4bug@amsat.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).