Thanks! OK, it is in libc sigsetjmp:
(gdb) b *0x2051de70
Breakpoint 2 at 0x2051de70: file
../sysdeps/unix/sysv/linux/ia64/setjmp.S, line 109.
(gdb) c
Continuing.
run_testsuite();
Breakpoint 2, __sigsetjmp () at ../sysdeps/unix/sysv/linux/ia64/setjmp.S:109
109 ../sysdeps/unix/sysv/linux/ia64/setjmp.S: No such file or directory.
in ../sysdeps/unix/sysv/linux/ia64/setjmp.S
Current language: auto
The current source language is auto; currently asm.
The address does appear reproducible, as I get the same unaligned
access warning on subsequent runs from the shell.
Under gdb, as before noted, there is no unaligned access warning, but
a failure associated with a piece of code doing setjmp and longjmp.
T418:;
{frame_ptr fr;
fr=frs_sch_catch(((object)(VVi)[107]));
if(fr==((void *)0)) FEerror(The tag ~s is undefined.,1,((object)(VVi)[107]));
base[16]= ((object)Ct_body);
vs_top=(vs_base=base+16)+1;
unwind(fr,((object)(VVi)[107]));}
goto T409;
On the first iteration, all goes well, then the unwind call calls a
longjmp, which escapes to the following setjmp earlier in the code:
do { frame_ptr _frs_top = frs_top +1; if (_frs_top = frs_limit)
frs_overflow(); _frs_top-frs_lex = lex_env; _frs_top-frs_bds_top = bds_top;
_frs_top-frs_class = (FRS_CATCH); _frs_top-frs_in_signal_handler =
in_signal_handler; _frs_top-frs_val = (((object)(VVi)[107]));
_frs_top-frs_ihs = ihs_top; frs_top=_frs_top; _setjmp (_frs_top-frs_jmpbuf);
} while (0);
when the frs_sch_catch is run again, it cannot find the frame on a
global stack and triggers the undefined error.
This code works at -O0, and fails under -O2. It is compiled with
-Wall and contains volatile declarations as necessary so there are no
gcc clobbering warnings. And this code has worked for years on ia64
before.
Here is a disassembly in the sigsetjmp routine:
(gdb) disassemble 0x2051de70
Dump of assembler code for function __sigsetjmp:
0x2051de20 __sigsetjmp+0: [MMI] alloc r35=ar.pfs,9,7,0
0x2051de21 __sigsetjmp+1: mov.m r36=ar.unat
0x2051de22 __sigsetjmp+2: nop.i 0x0;;
0x2051de30 __sigsetjmp+16:[MII] mov.m r17=ar.fpsr
0x2051de31 __sigsetjmp+17:mov r2=r32
0x2051de32 __sigsetjmp+18:adds r3=8,r32;;
0x2051de40 __sigsetjmp+32:[MMI] st8.spill.nta [r2]=r12,16
0x2051de41 __sigsetjmp+33:st8.spill.nta [r3]=r1,16
0x2051de42 __sigsetjmp+34:nop.i 0x0;;
0x2051de50 __sigsetjmp+48:[MMI] st8.nta [r2]=r36,16
0x2051de51 __sigsetjmp+49:st8.nta [r3]=r17,16
0x2051de52 __sigsetjmp+50:adds r8=160,r32;;
0x2051de60 __sigsetjmp+64:[MMI] st8.spill.nta [r2]=r4,16
0x2051de61 __sigsetjmp+65:st8.spill.nta [r3]=r5,16
0x2051de62 __sigsetjmp+66:adds r9=176,r32;;
0x2051de70 __sigsetjmp+80:[MMI] stf.spill.nta [r8]=f2,32
0x2051de71 __sigsetjmp+81:stf.spill.nta [r9]=f3,32
0x2051de72 __sigsetjmp+82:mov r34=b0;;
0x2051de80 __sigsetjmp+96:[MMI] stf.spill.nta [r8]=f4,32
0x2051de81 __sigsetjmp+97:stf.spill.nta [r9]=f5,32
0x2051de82 __sigsetjmp+98:mov r17=b1;;
0x2051de90 __sigsetjmp+112: [MMI] stf.spill.nta [r8]=f16,32
If I try breaking at the address gdb does not progress on continue:
b *0x2051de70
Note: breakpoint 2 (disabled) also set at pc 0x2051de70.
Breakpoint 4 at 0x2051de70: file
../sysdeps/unix/sysv/linux/ia64/setjmp.S, line 109.
(gdb) c
Continuing.
Breakpoint 4, __sigsetjmp () at ../sysdeps/unix/sysv/linux/ia64/setjmp.S:109
109 ../sysdeps/unix/sysv/linux/ia64/setjmp.S: No such file or directory.
in ../sysdeps/unix/sysv/linux/ia64/setjmp.S
Current language: auto
The current source language is auto; currently asm.
(gdb)
Continuing.
Breakpoint 4, __sigsetjmp () at ../sysdeps/unix/sysv/linux/ia64/setjmp.S:109
109 in ../sysdeps/unix/sysv/linux/ia64/setjmp.S
(gdb)
Continuing.
Breakpoint 4, __sigsetjmp () at ../sysdeps/unix/sysv/linux/ia64/setjmp.S:109
109 in ../sysdeps/unix/sysv/linux/ia64/setjmp.S
(gdb)
Continuing.
Breakpoint 4, __sigsetjmp () at ../sysdeps/unix/sysv/linux/ia64/setjmp.S:109
109 in ../sysdeps/unix/sysv/linux/ia64/setjmp.S
(gdb)
Suggestions? I'm going to try gcc-4.3, but I cannot seem to get gdb
to isolate this further.
Separately -- do you perchance know of a reference for ia64 object
code relocation?
Take care,
On 1/26/10 3:43 PM, Camm Maguire wrote:
Greetings, and thanks!
Breakpoint 2 at 0x2051de70
(gdb) r -eval '(run)'
Starting program: /home/camm/maxima-5.20.1/src/binary-gcl/maxima -eval
'(run)'
Warning:
Cannot insert breakpoint 2.
Error accessing