diff mbox

Commit b2a575a1c652 broke i486 support.

Message ID 20170529101413.GN16511@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Richard W.M. Jones May 29, 2017, 10:14 a.m. UTC
On Mon, May 29, 2017 at 11:22:14AM +0200, Thomas Huth wrote:
> On 28.05.2017 07:18, Rob Landley wrote:
> > You can't boot a kernel under -cpu 486 since that commit (hangs
> > producing no output) because it added a bios image that won't run on
> > anything short of pentium II.
> > 
> > You can try the run-emulator.sh script in
> > http://landley.net/aboriginal/downloads/binaries/system-image-i486.tar.gz
> > before and after that commit to check for yourself.
> 
>  Hi Rob,
> 
> thanks for the bug report ... but to make sure that your mail does not
> get lost in the high traffic of the qemu-devel mailing list, it might be
> a good idea to CC: the people from that commit b2a575a1c652 in this case
> (which I've done now).

I see in the disassembly use of cmovne (new in Pentium Pro) and
bswap (new in 486).
[http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]

The cmovne instruction is generated by the compiler (GCC in my case),

The following patch removes the cmovne instruction, so it should work
on 486 (although I didn't test it).  It's not possible to remove bswap
without surgery on the inline assembler.



Rich.

Comments

Thomas Huth May 29, 2017, 11:20 a.m. UTC | #1
On 29.05.2017 12:14, Richard W.M. Jones wrote:
> On Mon, May 29, 2017 at 11:22:14AM +0200, Thomas Huth wrote:
>> On 28.05.2017 07:18, Rob Landley wrote:
>>> You can't boot a kernel under -cpu 486 since that commit (hangs
>>> producing no output) because it added a bios image that won't run on
>>> anything short of pentium II.
>>>
>>> You can try the run-emulator.sh script in
>>> http://landley.net/aboriginal/downloads/binaries/system-image-i486.tar.gz
>>> before and after that commit to check for yourself.
>>
>>  Hi Rob,
>>
>> thanks for the bug report ... but to make sure that your mail does not
>> get lost in the high traffic of the qemu-devel mailing list, it might be
>> a good idea to CC: the people from that commit b2a575a1c652 in this case
>> (which I've done now).
> 
> I see in the disassembly use of cmovne (new in Pentium Pro) and
> bswap (new in 486).
> [http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]
> 
> The cmovne instruction is generated by the compiler (GCC in my case),
> 
> The following patch removes the cmovne instruction, so it should work
> on 486 (although I didn't test it).  It's not possible to remove bswap
> without surgery on the inline assembler.
> 
> --- a/pc-bios/optionrom/Makefile
> +++ b/pc-bios/optionrom/Makefile
> @@ -13,6 +13,7 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/optionrom)
>  ifeq ($(lastword $(filter -O%, -O0 $(CFLAGS))),-O0)
>  override CFLAGS += -O2
>  endif
> +override CFLAGS += -march=i386

I guess you could also use "-march=i486" here instead, since QEMU does
not emulate a 386, as far as I can see.

 Thomas
Rob Landley May 30, 2017, 7:05 p.m. UTC | #2
On 05/29/2017 05:14 AM, Richard W.M. Jones wrote:
> I see in the disassembly use of cmovne (new in Pentium Pro) and
> bswap (new in 486).
> [http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]
> 
> The cmovne instruction is generated by the compiler (GCC in my case),
> 
> The following patch removes the cmovne instruction, so it should work
> on 486 (although I didn't test it).  It's not possible to remove bswap
> without surgery on the inline assembler.

Is there any way to make it just _not_ load the option rom for -cpu 486?
It ran fine before that thing went in...

Rob
Thomas Huth May 31, 2017, 8:58 a.m. UTC | #3
On 30.05.2017 21:05, Rob Landley wrote:
> On 05/29/2017 05:14 AM, Richard W.M. Jones wrote:
>> I see in the disassembly use of cmovne (new in Pentium Pro) and
>> bswap (new in 486).
>> [http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]
>>
>> The cmovne instruction is generated by the compiler (GCC in my case),
>>
>> The following patch removes the cmovne instruction, so it should work
>> on 486 (although I didn't test it).  It's not possible to remove bswap
>> without surgery on the inline assembler.
> 
> Is there any way to make it just _not_ load the option rom for -cpu 486?
> It ran fine before that thing went in...

Looking at that commit b2a575a1c652 that you've mentioned, it seems like
you could work-around the problem by disabling DMA for the fw_cfg
device. Try something like adding the parameter

 -global fw_cfg.dma_enabled=false

to your command line. If that does not help, try to use an older machine
type, like "-M pc-i440fx-2.5".

 Thomas
Richard W.M. Jones May 31, 2017, 9:03 a.m. UTC | #4
On Tue, May 30, 2017 at 02:05:15PM -0500, Rob Landley wrote:
> On 05/29/2017 05:14 AM, Richard W.M. Jones wrote:
> > I see in the disassembly use of cmovne (new in Pentium Pro) and
> > bswap (new in 486).
> > [http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]
> > 
> > The cmovne instruction is generated by the compiler (GCC in my case),
> > 
> > The following patch removes the cmovne instruction, so it should work
> > on 486 (although I didn't test it).  It's not possible to remove bswap
> > without surgery on the inline assembler.
> 
> Is there any way to make it just _not_ load the option rom for -cpu 486?
> It ran fine before that thing went in...

Well it ran, but it was very slow.  The DMA method can be literally
orders of magnitude faster.

Does adding the flag I suggested help?

Rich.
Paolo Bonzini May 31, 2017, 12:34 p.m. UTC | #5
On 30/05/2017 21:05, Rob Landley wrote:
> On 05/29/2017 05:14 AM, Richard W.M. Jones wrote:
>> I see in the disassembly use of cmovne (new in Pentium Pro) and
>> bswap (new in 486).
>> [http://cse.unl.edu/~goddard/Courses/CSCE351/IntelArchitecture/InstructionSetSummary.pdf]
>>
>> The cmovne instruction is generated by the compiler (GCC in my case),
>>
>> The following patch removes the cmovne instruction, so it should work
>> on 486 (although I didn't test it).  It's not possible to remove bswap
>> without surgery on the inline assembler.
> 
> Is there any way to make it just _not_ load the option rom for -cpu 486?
> It ran fine before that thing went in...

You were loading another option ROM.  Thomas's suggested -global
invocation will revert to that ROM until we fix it.

Paolo
diff mbox

Patch

--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -13,6 +13,7 @@  $(call set-vpath, $(SRC_PATH)/pc-bios/optionrom)
 ifeq ($(lastword $(filter -O%, -O0 $(CFLAGS))),-O0)
 override CFLAGS += -O2
 endif
+override CFLAGS += -march=i386
 
 # Drop -fstack-protector and the like
 QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS)) $(CFLAGS_NOPIE) -ffreestanding