Jump to content

TASK FORCE - [AMD] to missing SSE4.1 Instruction set - older CPUs on macOS Sierra (10.12.x)


spakk
 Share

272 posts in this topic

Recommended Posts

I am just building the kernel and will report later

I will now check this kernel with my CPU and report later

 

Edit:

I've made a video and will upload it later

AMD10.12.6-SSE4.1.zip

Udis86-SSE4.1_20171022_014331.jpg

Link to comment
Share on other sites

I am just building the kernel and will report later

I will now check this kernel with my CPU and report later

 

Edit:

I've made a video and will upload it later

None of these instructions is sse4.1.  I turned on printing for all instructions executed by opemu.  You may selectively print to see boot messages.

Link to comment
Share on other sites

None of these instructions is sse4.1.  I turned on printing for all instructions executed by opemu.  You may selectively print to see boot messages.

I'll look where I made the mistake

Link to comment
Share on other sites

Asrock N68C-S USS

 

Now I stuck at this point:

attachicon.gifIMG_1928.JPG

The cursor doesn't respond to my USB mouse but USB keyboard seems to be working.

 

1. can not find information to your controller, start systeminfo.app or dpci-manager.app and see which controller is installed

2. or put this into org.chanmeleon.boot.plist, may it can help?

    USBBusFix

    Yes

 

3. if possible boot with -v -f or with -s ..etc

 

4. Which drivers are in extra/extensions?

Link to comment
Share on other sites

do you have solved the problem ?

I guess there is a bug somewhere in opemu, probably in sse41.c. I added printf in sse41.c and the kernel started working and it doesn't matter what to put in printf, it will work while printf is there. Here is some reference to that https://stackoverflow.com/questions/6079865/why-does-a-printf-stop-a-crash-from-occuring/6079878#6079878

 

and here is my test kernel. i put dots in printf in it to be able to see other print

kernel.zip

  • Like 1
Link to comment
Share on other sites

I guess there is a bug somewhere in opemu, probably in sse41.c. I added printf in sse41.c and the kernel started working and it doesn't matter what to put in printf, it will work while printf is there. Here is some reference to that https://stackoverflow.com/questions/6079865/why-does-a-printf-stop-a-crash-from-occuring/6079878#6079878

 

and here is my test kernel. i put dots in printf in it to be able to see other print

so now it stops at this endless loop with Opemu: UD2 error.

What changes you have made?

Opemu..Ud2  20171024_200016.jpg

  • Like 1
Link to comment
Share on other sites

so now it stops at this endless loop with Opemu: UD2 error.

What changes you have made?

I've used ydeng's patch and added printf in op_see41_run. That's all :D

and printf should be disabled in other places in opemu because it will get a kernel panic if it isn't.

  • Like 1
Link to comment
Share on other sites

I think it has something to do with the graphics card

 

Edit:

this is my test result

1___20171026_014102.jpg

2___20171026_014106.jpg

  • Like 1
Link to comment
Share on other sites

I've used ydeng's patch and added printf in op_see41_run. That's all :D

and printf should be disabled in other places in opemu because it will get a kernel panic if it isn't.

Where did you put the printf exactly?  I see a whole bunch of sse4.1 instructions on your single user mode boot screen.  There is some strange side effect going on.

Link to comment
Share on other sites

Do you have the full log of single user mode?

this is correct, you can boot only with "single user mode", every other input goes into a kernel panic

sory, a misunderstanding ;)

 

Edit:

but the information that "AXAXAXAXAXAX" has made regarding printf () in sse41.c, can not be alone, there must be other changes in the source. he should check the source again

I do not get the same effect with the changes as the last kernel from "AXAXAXAXAXAX" , therefore there must be something else changed.

Link to comment
Share on other sites

Do you have the full log of single user mode?

post-1299088-0-38041900-1509026658_thumb.png

post-1299088-0-41148400-1509026676_thumb.png

post-1299088-0-29783900-1509026697_thumb.png

post-1299088-0-39880200-1509026713_thumb.png

post-1299088-0-95783600-1509026765_thumb.png

post-1299088-0-83361000-1509026796_thumb.png

post-1299088-0-55671600-1509026808_thumb.png

this is correct, you can boot only with "single user mode", every other input goes into a kernel panic

sory, a misunderstanding ;)

 

Edit:

but the information that "AXAXAXAXAXAX" has made regarding printf () in sse41.c, can not be alone, there must be other changes in the source. he should check the source again

I do not get the same effect with the changes as the last kernel from "AXAXAXAXAXAX" , therefore there must be something else changed.

I think only printf in sse41.c affected that. But I'll check it with clean sources and report later.

 

Edit:

I applied ydeng's patch onto sourses, commented printf in opemu_ktrap and opemu_utrap in opemu.c and enabled printf in op_sse41_run in sse41.c and built this kernel and it doesn't get kernel panic :)

kernel.zip

 

  • Like 1
Link to comment
Share on other sites

attachicon.gifIMG_1961.PNG

attachicon.gifIMG_1962.PNG

attachicon.gifIMG_1964.PNG

attachicon.gifIMG_1965.PNG

attachicon.gifIMG_1966.PNG

attachicon.gifIMG_1967.PNG

attachicon.gifIMG_1969.PNG

 

I think only printf in sse41.c affected that. But I'll check it with clean sources and report later

This looks like some kind of race conditions.  The instructions are working.  But the results are committed  to xmm registers directly.  If something else happens between the trap return and thread continuation, content of xmm registers might be missed up.  Could you put printk the value of op_obj.ring0 as well?

Link to comment
Share on other sites

so the emulation is working right? we are close, but there is the need for some check for the results, or other wise the content of the xmm registers will not the rigth, If I have understood correctly

Link to comment
Share on other sites

This looks like some kind of race conditions.  The instructions are working.  But the results are committed  to xmm registers directly.  If something else happens between the trap return and thread continuation, content of xmm registers might be missed up.  Could you put printk the value of op_obj.ring0 as well?

It is always 0

post-1299088-0-44984700-1509063531_thumb.jpg

Link to comment
Share on other sites

 Share

×
×
  • Create New...