diff options
| author | enami <enami@NetBSD.org> | 2009-11-27 02:51:15 +0000 |
|---|---|---|
| committer | enami <enami@NetBSD.org> | 2009-11-27 02:51:15 +0000 |
| commit | 72ec821622b26b924e43434223498cef12bc1663 (patch) | |
| tree | 2c19de21dc150ba98da81529703e3135ea98dd7b /gnu | |
| parent | 3f09797207c914236236e604744c2735f629ff5c (diff) | |
Lookup lwp0.l_addr instead of proc0paddr to locate PCB.
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/dist/gdb6/gdb/bsd-kvm.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gnu/dist/gdb6/gdb/bsd-kvm.c b/gnu/dist/gdb6/gdb/bsd-kvm.c index 3284950ea92..f38e0fb4210 100644 --- a/gnu/dist/gdb6/gdb/bsd-kvm.c +++ b/gnu/dist/gdb6/gdb/bsd-kvm.c @@ -211,6 +211,27 @@ bsd_kvm_fetch_registers (int regnum) return; } +#if 1 /* TODO: HAVE_STRUCT_LWP_L_ADDR */ + memset (nl, 0, sizeof nl); + nl[0].n_name = "_lwp0"; + + if (kvm_nlist (core_kd, nl) == -1) + error (("%s"), kvm_geterr (core_kd)); + + if (nl[0].n_value != 0) + { + struct pcb *paddr; + + /* Found lwp0. */ + nl[0].n_value += offsetof (struct lwp, l_addr); + if (kvm_read (core_kd, nl[0].n_value, &paddr, sizeof paddr) == -1) + error (("%s"), kvm_geterr (core_kd)); + + bsd_kvm_fetch_pcb (paddr); + return; + } +#endif + #ifdef HAVE_STRUCT_THREAD_TD_PCB /* In FreeBSD kernels for 5.0-RELEASE and later, the PCB no longer lives in `struct proc' but in `struct thread'. The `struct |
