Mail Archives: djgpp-workers/2001/01/23/12:35:59
According to Eli Zaretskii:
> > -> c
> > Breakpoint 1, main (argc=1, argv=0x905d4) at analyse_ints.c:129
> > 129 if( argc != 2)
> > -> bt
> > #0 main (argc=1, argv=0x905d4) at analyse_ints.c:129
> > #1 0x3368 in __crt1_startup ()
> > -> n
> > Exiting due to signal SIGFPE
>
> This one is not. What does "disassemble analyse_ints" print near the
> EIP of the breakpoint (0x1a64)? Do you see any FP instructions
> anywhere around that?
Here's the disassembly (-> disass main):
Dump of assembler code for function main:
0x1a58 <main>: push %ebp
0x1a59 <main+1>: mov %esp,%ebp
0x1a5b <main+3>: sub $0x7c,%esp
0x1a5e <main+6>: push %edi
0x1a5f <main+7>: push %esi
0x1a60 <main+8>: push %ebx
0x1a61 <main+9>: mov 0xc(%ebp),%edx
0x1a64 <main+12>: cmpl $0x2,0x8(%ebp)
0x1a68 <main+16>: je 0x1a84 <main+44>
0x1a6a <main+18>: mov (%edx),%eax
0x1a6c <main+20>: add $0xfffffff8,%esp
0x1a6f <main+23>: push %eax
0x1a70 <main+24>: push $0x1810
0x1a75 <main+29>: call 0x3800 <printf>
0x1a7a <main+34>: add $0xfffffff4,%esp
As you can see no floating point instructions anywhere.
> > Coprocessor Error at eip=00001a64, x87 status=
> > Program received signal SIGEMT, Emulation trap.
> > 0x9611 in _status87 ()
> > -> bt
> > #0 0x9611 in _status87 ()
> > #1 0x47da in do_faulting_finish_message ()
> > #2 0x4d13 in __djgpp_traceback_exit ()
> > #3 0x4da0 in raise ()
> > #4 0x2c3a in nofpsig ()
> > #5 0x4daa in raise ()
> > #6 0x4e07 in __djgpp_exception_processor ()
> > #7 0x1 in ?? ()
> > #8 0x3368 in __crt1_startup ()
>
> This is expected: the code which prints the traceback calls
> _status87. But what is that 0x1 on the stack?
I can't explain it but it seems to be the value of argc (or a copy of
it) because if I try to run the program with "r a" it becomes 0x2 and
with "r 2 b" it becomes 0x3.
Right,
MartinS
- Raw text -