On 19/02/12 15:45, P. Wilhelm wrote: Hi Paul,
I've been able to install Solaris 8 using CDs on the Sparc Softmmu client system. Kudos to those responsible for Sparc development! I've been able to run a number of applications without problems on the client machine. I noticed something odd, however, and have been trying to isolate the cause. Hopefully, someone here will have an idea or two for me to try. The issue: The syslogd seems to accept and post to the appropriate log file only a small number of messages before no longer updating the log file when further messages are posted, the syslogd seems to hang. The symptom does not appear to be different when rebooting or restarting the syslog daemon. The daemon will post a couple of message to the log file and then stop accepting any more. Why ask here? I've done a couple of things to see if I can isolate the source of the oddity and they seem to point to qemu.
It does seem that you've found some kind of emulation bug here...
What I've done so far: 1) I've tried using "logger" and a C program I wrote to use the syslog() function. - Both have the same issue noted above.
Okay - if you have a reproducible test case then this is a very good starting point :)
2) I've used both the OpenBios and SS5.bin bios. - Symptom does not change between the two.
Right. I don't think this would make much difference, since OpenBIOS/SS5.bin are mainly used to provide enough support for the Solaris kernel to enumerate and interface with the virtual hardware. Once the main Solaris kernel is running, the native kernel drivers take over and so OpenBIOS/SS5.bin are no longer really in the picture from this point onwards.
3) I checked my /etc/syslog.conf on real hardware running the same version of Solaris 8. Syslogging works as you'd expect there. (Note - I don't have real SparcStation 5 hardware. I've been using an old Sun4u machine, Ultra-1 -- hopefully, that does not invalidate my "real hardware" checks.).
Okay - I'm not sure about this, but Blue/Artyom would probably be better to comment here.
4) I ran syslogd in debug mode on both the client and the real hardware, but did not see anything in the output from each that gave a clue as to the issue. Generally, the output confirmed that I had syslogd configured the same way on both. How to proceed? I am a reasonably adept software developer, however, I do not have experience at the guts-level of Solaris OS or Sparc hardware. My work on Solaris/Sparc has been at the application level, but I have worked at the hardware level on other (proprietary) systems. If I had access to syslogd source code, I'd be comfortable working from there, but I am fairly certain that is not available - let me know if I am wrong. I've thought about looking for an open source syslog daemon and trying to use it instead of the Solaris version. Any thoughts about next steps are appreciated.
If you head on over to the OpenSolaris source repository then you can grab a copy of Oracle's syslogd code from http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/syslogd/. It's probably a much later version than the one supplied with Solaris 8, however if you can reproduce the problem using source code from there then we can definitely point you in the right direction to help find out what is wrong.
Also Blue has commented in the past that because it's only recently been possible to run SPARC Solaris under QEMU, it could be that the Solaris C compiler emits different instruction sequences to, say, GCC, and so it may be testing instruction paths in the emulator that aren't typically used by GCC/Linux which I believe was one of the primary development platforms. So you may like to experiment building your syslogd with both GCC and the native Solaris CC and then comparing the results to see if this makes a difference too.
HTH, Mark. -- Mark Cave-Ayland - Senior Technical Architect PostgreSQL - PostGIS Sirius Corporation plc - control through freedom http://www.siriusit.co.uk t: +44 870 608 0063 Sirius Labs: http://www.siriusit.co.uk/labs