diff options
| author | Bruce Evans <bde@FreeBSD.org> | 1998-01-19 15:27:56 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 1998-01-19 15:27:56 +0000 |
| commit | 9bb4a86cf09cfc7ab5c5bfe8b83259ccd5dcc5f6 (patch) | |
| tree | 2af5177ba8c901f9cc4595eb59594598da7e4efa /gnu | |
| parent | 04822660a1a37a9c653025cfb3e04a76c41341a5 (diff) | |
Notes
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c | 33 | ||||
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/kvm-fbsd.c | 33 | ||||
| -rw-r--r-- | gnu/usr.bin/gdb/gdb/kvm-fbsd.c | 33 |
3 files changed, 63 insertions, 36 deletions
diff --git a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c index 970d3a848337..3c869f2baf45 100644 --- a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c +++ b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c @@ -382,21 +382,30 @@ kcore_xfer_kmem (memaddr, myaddr, len, write, target) int write; struct target_ops *target; { - int n; - - if (!memaddr) - return (0); + int ns; + int nu; - if (memaddr < kernel_start) - return xfer_umem (memaddr, myaddr, len, write); + if (memaddr >= (CORE_ADDR)VM_MAXUSER_ADDRESS) + nu = 0; + else + { + nu = xfer_umem (memaddr, myaddr, len, write); + if (nu <= 0) + return (0); + if (nu == len) + return (nu); + memaddr += nu; + if (memaddr != (CORE_ADDR)VM_MAXUSER_ADDRESS) + return (nu); + myaddr += nu; + len -= nu; + } - n = write ? - kvm_write (core_kd, memaddr, myaddr, len) : - kvm_read (core_kd, memaddr, myaddr, len) ; + ns = (write ? kvm_write : kvm_read) (core_kd, memaddr, myaddr, len); + if (ns < 0) + ns = 0; - if (n < 0) - return 0; - return n; + return (nu + ns); } static int diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c index 970d3a848337..3c869f2baf45 100644 --- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c +++ b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c @@ -382,21 +382,30 @@ kcore_xfer_kmem (memaddr, myaddr, len, write, target) int write; struct target_ops *target; { - int n; - - if (!memaddr) - return (0); + int ns; + int nu; - if (memaddr < kernel_start) - return xfer_umem (memaddr, myaddr, len, write); + if (memaddr >= (CORE_ADDR)VM_MAXUSER_ADDRESS) + nu = 0; + else + { + nu = xfer_umem (memaddr, myaddr, len, write); + if (nu <= 0) + return (0); + if (nu == len) + return (nu); + memaddr += nu; + if (memaddr != (CORE_ADDR)VM_MAXUSER_ADDRESS) + return (nu); + myaddr += nu; + len -= nu; + } - n = write ? - kvm_write (core_kd, memaddr, myaddr, len) : - kvm_read (core_kd, memaddr, myaddr, len) ; + ns = (write ? kvm_write : kvm_read) (core_kd, memaddr, myaddr, len); + if (ns < 0) + ns = 0; - if (n < 0) - return 0; - return n; + return (nu + ns); } static int diff --git a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c index 970d3a848337..3c869f2baf45 100644 --- a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c +++ b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c @@ -382,21 +382,30 @@ kcore_xfer_kmem (memaddr, myaddr, len, write, target) int write; struct target_ops *target; { - int n; - - if (!memaddr) - return (0); + int ns; + int nu; - if (memaddr < kernel_start) - return xfer_umem (memaddr, myaddr, len, write); + if (memaddr >= (CORE_ADDR)VM_MAXUSER_ADDRESS) + nu = 0; + else + { + nu = xfer_umem (memaddr, myaddr, len, write); + if (nu <= 0) + return (0); + if (nu == len) + return (nu); + memaddr += nu; + if (memaddr != (CORE_ADDR)VM_MAXUSER_ADDRESS) + return (nu); + myaddr += nu; + len -= nu; + } - n = write ? - kvm_write (core_kd, memaddr, myaddr, len) : - kvm_read (core_kd, memaddr, myaddr, len) ; + ns = (write ? kvm_write : kvm_read) (core_kd, memaddr, myaddr, len); + if (ns < 0) + ns = 0; - if (n < 0) - return 0; - return n; + return (nu + ns); } static int |
