estes@tty3b.UUCP (08/19/83)
I recently have been trying to port some software to run under
BTL Unix 4.0 and 5.0. In these attempts, I have experienced
both "IOT trap - core dumped" and "EMT trap - core dumped".
Referring to signal(2), I find that those result from IOT and
EMT instructions, respectively. What the manual doesn't say
is what these instructions are.
How do these signals occur? and what do they mean? Am I doing
something wrong?
The other signals are fairly easy to figure out, but these two
have me puzzled.
Ted Estes
Teletype Corp., Skokie, Il
{otuxa, we13}!tty3b!estesgwyn%brl-vld@sri-unix.UUCP (08/20/83)
From: Doug Gwyn (VLD/VMB) <gwyn@brl-vld> IOT and EMT are PDP-11 machine instructions. On a non-PDP-11 UNIX these instructions probably don't exist, but signals SIGIOT and SIGEMT can still be generated; in fact, the abort() library function generates a SIGIOT to force a core dump. SIGEMT, on the other hand, is rarely used. On a PDP-11, unexpected IOT and EMT signals often are the result of accidentally executing data as instructions. Using ld's -n or -i flag will often help track this particular bug down. I do recall HCR's RT-11 emulator using EMT instructions (since RT-11 did), and kernel modification was necessary to keep these from generating SIGEMT and instead branch to a user process's EMT handler. If the code you are converting is PDP-11 assembly language, then the most probable cause of EMTs and IOTs would be the fact that these perform system calls on DEC operating systems and/or standalone applications, but UNIX has its own system calls (invoked by TRAP instructions on PDP-11s). In this case, you will have to find equivalent UNIX functions for the original EMTs/IOTs. I would suggest tossing whatever it is and redoing it in C, since there is no future in PDP-11 assembly language programming.
dbj.rice@rand-relay@sri-unix.UUCP (08/21/83)
From: Dave Johnson <dbj.rice@rand-relay>
"IOT and EMT are PDP-11 machine instructions. On a non-PDP-11 UNIX these
instructions probably don't exist..."
Yes, there are no "IOT" or "EMT" instruction on a VAX, but a SIGEMT may be
generated by the XFC machine instruction. Although "as" doesn't have a
mnemonic for this instruction, you can still generate it by assembling the
constant 0xfc as a byte.
"in fact, the abort() library function generates a SIGIOT to force a core
dump."
No, on 4.1 BSD at least, abort() generates a SIGILL by executing a "halt"
instruction. Check /usr/src/libc/sys/abort.s
Dave Johnson
Dept. of Math Science
Rice University
dbj.rice@Rand-Relaygwyn@brl-vld@sri-unix.UUCP (08/22/83)
From: Doug Gwyn (VLD/VMB) <gwyn@brl-vld> The query appeared to originate from a Bell UNIX site. Only Berkeley has changed abort() to generate SIGILL; all Bell UNIX systems generate SIGIOT.