gdb stopped working in 2.5.10 - works fine in 2.4.x
Subsystems (2)
ALPHA :gdb ./angband
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "alpha-linux"...
(gdb) run
Starting program: /usr/local/games/angband-2.9.7-alpha1/./angband
warning: Cannot insert breakpoint -2:
Cannot access memory at address 0xcc1088a823d9d62c
(gdb) q
The program is running. Exit anyway? (y or n) y
ALPHA :
the breakpoint with a negative number, followed by the message 'Cannot access memory at ...' happens on any executable I try with gdb.
This didn't happen with the 2.4.x kernels, so I suspect something in 2.5.x. Any ideas?
Thanks,
Jurriaan
Signature · 5 lines
After penetrating your skull the decibel storm of raucous riffs and blistering glissandos starts rearranging the synapses in your brain. You have arrived on the territory of Tribe Apocalyptica. Apocalyptica, liner notes to 'Cult' GNU/Linux 2.5.10 on Debian/Alpha 990 bogomips load:0.15 0.53 0.66
Quoted 5 lines · Jurriaan on Alpha
the breakpoint with a negative number, followed by the message 'Cannot access memory at ...' happens on any executable I try with gdb.
This didn't happen with the 2.4.x kernels, so I suspect something in 2.5.x. Any ideas?
Yes, gdb and strace are broken since 2.5.6, IIRC.
Some necessary 'thread_info' changes still are missing in ptrace.c. Fix appended.
Ivan.
arch/alpha/kernel/ptrace.c +4 -4
@@ -106,7 +106,7 @@ get_reg_addr(struct task_struct * task, zero =0 ; addr = &zero; }else { - addr = (long *)((long )task + regoff[regno]); + addr = (long *)((long )task->thread_info + regoff[regno]); }return addr; }
@@ -340,9 +340,9 @@ sys_ptrace(long request, long pid, longif ((unsigned long ) data > _NSIG) goto out;if (request ==PTRACE_SYSCALL ) -set_thread_flag (TIF_SYSCALL_TRACE ); +set_tsk_thread_flag (child,TIF_SYSCALL_TRACE );else -clear_thread_flag (TIF_SYSCALL_TRACE ); +clear_tsk_thread_flag (child,TIF_SYSCALL_TRACE ); child->exit_code = data;wake_up_process (child);/* make sure single-step breakpoint is gone. */
@@ -371,7 +371,7 @@ sys_ptrace(long request, long pid, long goto out;/* Mark single stepping. */ child->thread_info->bpt_nsaved =-1 ; -clear_thread_flag (TIF_SYSCALL_TRACE ); +clear_tsk_thread_flag (child,TIF_SYSCALL_TRACE );wake_up_process (child); child->exit_code = data;/* give it a chance to run. */