Thanks Gabe.  Good catch about the actual value -- I just saw a negative
number and assumed -1, whoops.  Based on what Nirmit is seeing, it seems
like HINT_NOP or MOV_R_I must be the instruction causing the fault, but
yeah a backtrace will probably help confirm.

Nirmit, can you please try running stable with a debug build (to get a
backtrace) and develop with a release build and let us know what you see?

Matt

On Wed, Dec 1, 2021 at 10:47 PM Gabe Black <gabe.bl...@gmail.com> wrote:

> I realize this is probably a hard question to answer with Exec being
> broken, but do you know what instruction is causing the problem? HINT_NOP?
> Probably the first thing that someone should do (if they haven't already)
> is to run this under gdb and see what the backtrace looks like, since that
> would give us a lot more info to work with.
>
> Looking at the info we have here, I see that the return from classValue()
> is -854770912 (not -1?) which to me looks like junk. I think probably
> what's happening is that the RegId being passed to the instruction's
> printReg function is from a bad pointer of some sort which is why it
> doesn't know how to print the register name. The RegId in this case refers
> to a particular register/operand, not the instruction as a whole. For
> instance, when the previous instruction prints out eax, that would be a
> RegId with classValue() (member regClass) set to IntRegClass, and regIdx
> set to INTREG_RAX.
>
> This works a little differently now and is in the process of being
> significantly reworked, although the gist is largely the same, particularly
> in the details involved here. The RegId structure tells you what type of
> register you're dealing with, aka its class, and also which particular
> register within that space you're referring to. The printReg method is
> trying to figure out what the name of that register is so it can be printed
> as part of the disassembly.
>
> I think the real bug is going to be that the RegId itself is bogus, and so
> when it's operated on, it's random junk will lead to random behavior or
> errors. It could be, for instance, that the instruction is trying to print
> a register name in its disassembly, but it doesn't actually *have* a
> register value set up in that slot and so is using uninitialized values.
> Typically the instructions would try to print out, say, destination
> register 0 when forming the disassembly string. Alternatively, O3 could
> have done something whacky and could be trying to do something with a
> nonsense instruction. I would personally lean towards the first option, but
> without more info it's hard to tell.
>
> I would also suggest trying this with develop. I don't think that's a
> *solution* to the problem, but it would possibly help isolate a cause. Like
> I said, how things work in develop are a little bit different, so we might
> get more info by also seeing what happens in those slightly different
> circumstances.
>
> Gabe
>
> On Wed, Dec 1, 2021 at 8:30 PM Matt Sinclair <mattdsinclair.w...@gmail.com>
> wrote:
>
>> Hi Gabe,
>>
>> I was trying to dig through the RegClass code earlier to figure out why
>> the value is -1 for this instruction, and the only thing that I can think
>> of is HINT_NOP needs a RegClass value set for it, but it isn't set for some
>> reason (which is not 100% clear to me).  You know this code much better
>> than I do though, hence I was hoping you might see something I'm not seeing.
>>
>> Since this error is happening on a clean checkout of gem5 on stable, it
>> seems like a bug that anyone could face if they use the Exec debug flag.
>>
>> Thanks,
>> Matt
>>
>> ---------- Forwarded message ---------
>> From: Nirmit Jallawar via gem5-users <gem5-users@gem5.org>
>> Date: Wed, Dec 1, 2021 at 10:25 PM
>> Subject: [gem5-users] Unrecognized register class when using the "Exec"
>> debug flag
>> To: gem5-users@gem5.org <gem5-users@gem5.org>
>> Cc: Nirmit Jallawar <jalla...@wisc.edu>
>>
>>
>> Hi all,
>>
>>
>>
>> I was trying to run a gem5 simulation using the O3CPU but encountered
>> problems with gem5 “panic” when running with the “Exec” debug flags
>> enabled. I have built gem5 for the x86 ISA, and am using the stable branch.
>>
>> The full log can be found in the zip linked below (crash_debug_log).
>>
>> The error in the log seems to be related to this:
>>
>> build/X86/arch/x86/insts/static_inst.cc:253: panic: Unrecognized register
>> class.
>>
>>
>>
>> On further debugging, it seems that the register class value is being set
>> to -1:
>>
>> ….
>>
>> 7335000: system.cpu: T0 : 0x7ffff801bbdd @_end+140737354234813. 2 :
>> CALL_NEAR_I : stis   t7, SS:[rsp + 0xfffffffffffffff8] : MemWrite :
>>  D=0x00007ffff801bbe2 A=0x7fffffffed48
>>
>> 7335000: system.cpu: T0 : 0x7ffff801bbdd @_end+140737354234813. 3 :
>> CALL_NEAR_I : subi   rsp, rsp, 0x8 : IntAlu :  D=0x00007fffffffed48
>>
>> 7335000: system.cpu: T0 : 0x7ffff801bbdd @_end+140737354234813. 4 :
>> CALL_NEAR_I : wrip   t7, t1 : IntAlu :
>>
>> 7447000: system.cpu: T0 : 0x7ffff801d080 @_end+140737354240096    : hint
>>
>> 7447000: system.cpu: T0 : 0x7ffff801d080 @_end+140737354240096. 0 :
>> HINT_NOP : fault   NoFault : No_OpClass :
>>
>> 7447000: system.cpu: T0 : 0x7ffff801d084 @_end+140737354240100    : mov
>> eax, 0xc
>>
>> 7447000: system.cpu: T0 : 0x7ffff801d084 @_end+140737354240100. 0 :
>> MOV_R_I : limm   eax, 0xc : IntAlu :  D=0x000000000000000c
>>
>> build/X86/arch/x86/insts/static_inst.cc:254: panic: Unknown register
>> class: -854770912 (reg.classValue())
>>
>> Memory Usage: 632228 KBytes
>>
>> Program aborted at tick 7455000
>>
>> --- BEGIN LIBC BACKTRACE ---
>>
>> ….
>>
>> The error does not appear when using no debug flags or using flags like
>> 'IEW'.
>>
>> The command used to run the simulation is:
>>
>> ../build/X86/gem5.opt --debug-flags=Exec DAXPY-newCPU.py daxpy --cpu O3CPU
>>
>> If needed, you can find the related files here:
>> https://drive.google.com/file/d/1Sxg-c9Gy0NU2r3_nd88A_le18C5RkuR_/view?usp=sharing
>>
>> I would appreciate any help on this.
>>
>>
>>
>> Best,
>>
>> Nirmit
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> gem5-users mailing list -- gem5-users@gem5.org
>> To unsubscribe send an email to gem5-users-le...@gem5.org
>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>>
>
_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to