[Simh] trouble selecting VAX ethernet on CentOS

Michael Bloom mabloom at dslextreme.com
Fri Mar 2 12:22:15 EST 2012


On 02/29/2012 15:38 PM,  Michael L. Umbricht  wrote:
> With no special options to "make vax" I do get "push   %rbp" from "disas
>   eth_open"
Thanks, Michael.  That is good to know.

Thanks also to Mark, for the explanation about the stack trashing.  
(Perhaps pthread_attr_setguardsize() or the equivalent  where available, 
might help to help  prevent such a bug from affecting it's debuggability?)

The source of my worry had been this: I've seen several systems (they 
were not not linux, though) in which insufficient thought had been given 
to the needs of debugging when setting up the stack after the occurrence 
of a trap.

On one such (SystemV R3) system,  I ended up rewriting part of the trap 
handling code so that an expanded signal info frame, that was placed on 
the stack, placed a copy of the frame pointer in the same relative 
position that it would have been in had the handler been invoked by a 
subroutine call so  that the debugger could easily trace  (from the 
signal handler, if the signal was caught) back to the routine where the 
trap had been generated, with no gaps resulting from insufficient 
thought in design.

The only tricky part was making it backward compatible so that old 
binaries would still run correctly.  To do this, my new signal 
trampoline took advantage of the fact that the old binaries were looking 
for a flag placed on the stack in the event of traps like SEGV's having 
happened at user level to tell them to issue a specific 
return-from-signal sys3b() call (despite it being a 68020 machine not a 
3b2).  If it was an old binary, it would look for the flag and use the 
old mechanism, but a new binary would be aware it was in a BSD style 
signal trampoline and use a BSD style sigreturn() that had been added in 
support of the new mechanism. It's so long ago, I no longer remember the 
details clearly,  but the improvement in debuggability was so dramatic 
that I subsequently modified the kernel to save the frame pointer on all 
traps so that panic dumps could be debugged just as easily, at only a 
very slight cost in kernel time.

When I saw that stack,  and read in the gcc manual page that the default 
for frame pointer generation on intel machines had been reversed,  I 
guess I panic'ed a bit myself.  But, empirical evidence seems to show 
the manual page to be wrong in that regard.



More information about the Simh mailing list