SIGILL on brl instruction
You are seeing a SIGILL (Illegal Instruction) when you hit a brl instruction
Note below gdb gives the faulting address as 0x4000000002737901, which, when you look at the disassembled output is a brl instruction.
Program received signal SIGILL, Illegal instruction. 0x4000000002737901 in __libc_csu_fini () (gdb) bt #0 0x4000000002737901 in __libc_csu_fini () #1 0x4000000002737790 in __libc_csu_init () #2 0x20000000002a1220 in __libc_start_main () from /lib/libc.so.6.1 #3 0x4000000000004260 in _start () (gdb) disassemble Dump of assembler code for function __libc_csu_fini: 0x4000000002737830 <__libc_csu_fini+0>: [MII] alloc r36=ar.pfs,6,6,0 0x4000000002737831 <__libc_csu_fini+1>: addl r14=58216,r1 [ ... more of the same removed ... ] 0x4000000002737901 <__libc_csu_fini+209>: brl.few 0x40000000000027e0 <_init>;;
On the Itanium 1 (the original Itanium) the brl instruction must be emulated by the operating system. Chances are you are running a kernel built for a Itanium 2 (or McKinley) system, which does not have this support built in. In Debian, ensure your kernel package has the extension -itanium family rather than the -mckinley extension.