Rudolfs,

  The recompiler crash you had there is not the same as what we just 
debugged but it is similar.

  The difference is that what we saw only affected 32-bit Windows. It 
only happened with release builds, not debug builds.

  The problem was a bug in the gcc compiler triggered by a large amount 
of local variables in a function. One or more registers saved on the 
stack got destroyed.

  In the recompiler code, generally it must hold that env == 
cpu_single_env. If that is not true then 'env' probably got destroyed. 
Note that gdb will likely not display 'env' correctly.

  You could sprinkle a few 'Assert(env == cpu_single_env)' statements in 
the recompiler code and see if any of them hit.


      Regards,
         Michal

On 3/31/2015 3:40 PM, Rūdolfs Bundulis wrote:
> Hi Klaus,
>
>  > Did you by any chance extend the CPUCTX struct or any other data
>  > structure which might be used by the recompiler? Just hours ago we
>  > tracked down a MingW gcc bug in the very same area which smells very
>  > similar...
>
> No, they only thing I've done is provided an IFramebuffer
> implementation, I haven't touched any internals. I mean, so far all I
> was doing was based on the SDK API, the init call now is the first thing
> I'm using from the actual source tree. But something very bad could be
> wrong with my implementation that could cause this, as I said, the
> weirdest thing is that when running under Windows with a debug build
> VirtualBox frontends never hit the recompiler but my code does. Now that
> I have found a solution for Linux I'll do full testing and see if it
> works fine - if it does , the issue is Windows only, if not, I should be
> able to debug. Simply for me it's really hard to understand what is
> going on in the recompiler code under Windows since I'm not familiar
> with Qemu. I don't know if you had time to look at it - but I at least
> posted the longjmp stack trace here
> https://www.virtualbox.org/pipermail/vbox-dev/2015-February/012872.html,
> is it similar to what you have found?
>
>
>> "Regular" API clients don't need this, they can happily live with the
>> implicit, delayed initialization which disables some functionality.
>> That's why it makes no sense to talk about it in tstVBoxAPIXPCOM.cpp -
>> it's happily working.
>
> Sorry,I did not quite understand - so the fact I was running fine
> without it on Windows is because it is needed only for XPCOM and not COM
> or was I just lucky?
>
>
> Best Regards,
> Rudolfs Bundulis
>
> 2015-03-31 16:16 GMT+03:00 Klaus Espenlaub <[email protected]
> <mailto:[email protected]>>:
>
>     Rūdolfs,
>
>     On 31.03.2015 13:22, Rūdolfs Bundulis wrote:
>     > Hi,
>     >
>     > ok I found the root issue - my code did not call  RTR3InitExe(argc,
>     > &argv, 0) since I built the application only from looking at the API
>     > interfaces and was not aware that I need to do this (actually maybe it
>     > makes sense to include a comment int the xpcom tstVBoxAPIXPCOM.cpp
>     > sample about this?).
>
>     "Regular" API clients don't need this, they can happily live with the
>     implicit, delayed initialization which disables some functionality.
>     That's why it makes no sense to talk about it in tstVBoxAPIXPCOM.cpp -
>     it's happily working.
>
>     Only API clients actually running VMs inside them absolutely need the
>     full initialization as the very first thing, otherwise they won't work.
>
>     > Now after I've taken a closer look to the frontends
>     > I see that all them call the initialization function the first thing. I
>     > added it and my IFrambuffer implementation started to get invocations.
>
>     Pretty sure that e.g. VBoxManage.cpp only does it because in uses quite
>     some runtime functionality, and doesn't want to run any risk (in the old
>     days it was far less "optional" to do the initialization).
>
>     > Since my Windows code worked fine without it - should I add it to
>     > Windows as well? Any chance it is responsible for the weird recompiler
>     > longjmp crash I get? Thanks in advance.
>
>     Did you by any chance extend the CPUCTX struct or any other data
>     structure which might be used by the recompiler? Just hours ago we
>     tracked down a MingW gcc bug in the very same area which smells very
>     similar...
>
>     Regards
>     Klaus
>     >
>     > Best Regards,
>     > Rudolfs Bundulis
>     >
>     >
>     >
>     >2015-03-30 <tel:2015-03-30> 2:42 GMT+03:00 Rūdolfs Bundulis
>     <[email protected] <mailto:[email protected]>
>      > <mailto:[email protected]
>     <mailto:[email protected]>>>:
>      >
>      >     Hi,
>      >
>      >     I compiled debug version of 4.3.26 and tried my code against it -
>      >     now the log has a much nicer assert message just before it ends:
>      >
>      >     00:00:55.619996 TM: GIP - u32Mode=1 (SyncTSC) u32UpdateHz=83
>      >     00:00:55.652313 TM: cTSCTicksPerSecond=0xa0861eba (2 693 144 250)
>      >     fTSCVirtualized=true  fTSCUseRealTSC=false
>      >     00:00:55.652322 TM: fMaybeUseOffsettedHostTSC=true
>      >     TSCTiedToExecution=false TSCNotTiedToHalt=false
>      >     00:00:55.652373
>      >     00:00:55.652376 !!Assertion Failed!!
>      >     00:00:55.652378 Expression: <NULL>
>      >     00:00:55.652380 Location  :
>      >
>       /home/rudolfs/VirtualBox-4.3.26/src/VBox/VMM/VMMR3/TM.cpp(576) int
>      >     TMR3Init(PVM)
>      >     00:00:55.652508 Failed to create timer, u32Millies=10
>      >     rc=VERR_NOT_SUPPORTED.
>      >
>      >     I put a breakpoint in TM.cpp:576, and it seems that I am failing
>      >     because of the code in RTTimerCreateEx():
>      >
>      >          /*
>      >           * We need the signal masks to be set correctly, which they
>      >     won't be in
>      >           * unobtrusive mode.
>      >           */
>      >          if (RTR3InitIsUnobtrusive())
>      >              return VERR_NOT_SUPPORTED;
>      >
>      >     What is unobtrusive mode and what signal masks do I need to set?
>      >     I'll have a look at what is done in the frontends, but I
>     guess that
>      >     you guys here can explain it in more detail.
>      >
>      >     Best Reagrds,
>      >     Rudolfs Bundulis
>
>     _______________________________________________
>     vbox-dev mailing list
>     [email protected] <mailto:[email protected]>
>     https://www.virtualbox.org/mailman/listinfo/vbox-dev
>
>
>
>
> _______________________________________________
> vbox-dev mailing list
> [email protected]
> https://www.virtualbox.org/mailman/listinfo/vbox-dev
>


_______________________________________________
vbox-dev mailing list
[email protected]
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to