diff options
| author | Tor Egge <tegge@FreeBSD.org> | 1997-06-27 15:48:22 +0000 |
|---|---|---|
| committer | Tor Egge <tegge@FreeBSD.org> | 1997-06-27 15:48:22 +0000 |
| commit | 47c8f7894f1a2b8718e2cd18b21a17619d874f34 (patch) | |
| tree | d1d62a259b5133e94778257a7be8032574f84409 | |
| parent | b747f8bce47abf026487fa59a556ef5b7525e18e (diff) | |
Notes
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c | 13 | ||||
| -rw-r--r-- | gnu/usr.bin/gdb/gdb/freebsd-nat.c | 13 |
2 files changed, 24 insertions, 2 deletions
diff --git a/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c b/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c index c7c506f6db3c3..4fdb09f28312e 100644 --- a/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c +++ b/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c @@ -23,6 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <sys/ptrace.h> #include <machine/reg.h> #include <machine/frame.h> +#include <sys/param.h> +#include <sys/user.h> #include "gdbcore.h" #include "value.h" #include "inferior.h" @@ -91,8 +93,17 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) register int cregno; register int addr; int bad_reg = -1; - int offset = -reg_addr & (core_reg_size - 1); + int offset; + struct user *tmp_uaddr; + /* + * First get virtual address of user structure. Then calculate offset. + */ + memcpy(&tmp_uaddr, + &((struct user *) core_reg_sect)->u_kproc.kp_proc.p_addr, + sizeof(tmp_uaddr)); + offset = -reg_addr - (int) tmp_uaddr; + for (regno = 0; regno < NUM_REGS; regno++) { cregno = tregmap[regno]; diff --git a/gnu/usr.bin/gdb/gdb/freebsd-nat.c b/gnu/usr.bin/gdb/gdb/freebsd-nat.c index c7c506f6db3c3..4fdb09f28312e 100644 --- a/gnu/usr.bin/gdb/gdb/freebsd-nat.c +++ b/gnu/usr.bin/gdb/gdb/freebsd-nat.c @@ -23,6 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <sys/ptrace.h> #include <machine/reg.h> #include <machine/frame.h> +#include <sys/param.h> +#include <sys/user.h> #include "gdbcore.h" #include "value.h" #include "inferior.h" @@ -91,8 +93,17 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) register int cregno; register int addr; int bad_reg = -1; - int offset = -reg_addr & (core_reg_size - 1); + int offset; + struct user *tmp_uaddr; + /* + * First get virtual address of user structure. Then calculate offset. + */ + memcpy(&tmp_uaddr, + &((struct user *) core_reg_sect)->u_kproc.kp_proc.p_addr, + sizeof(tmp_uaddr)); + offset = -reg_addr - (int) tmp_uaddr; + for (regno = 0; regno < NUM_REGS; regno++) { cregno = tregmap[regno]; |
