diff options
author | peter <peter@FreeBSD.org> | 2001-08-24 09:12:04 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2001-08-24 09:12:04 +0000 |
commit | 1baec064218e855422ffc2f826cf83bbc7911bff (patch) | |
tree | 9057b6932374c9ce1ab363d9edaef363e1f62da1 /gnu | |
parent | 89bd0a43383b1b10e21cfba74c7bf109b71a62f1 (diff) | |
download | FreeBSD-src-1baec064218e855422ffc2f826cf83bbc7911bff.zip FreeBSD-src-1baec064218e855422ffc2f826cf83bbc7911bff.tar.gz |
Dynamically adapt to kernbase changes on crashdumps, falling back to
KERNBASE if the "kernbase" symbol is not present on older kernels.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c | 20 | ||||
-rw-r--r-- | gnu/usr.bin/binutils/gdb/kvm-fbsd.c | 20 |
2 files changed, 38 insertions, 2 deletions
diff --git a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c index 9513af3..fdfc6a3 100644 --- a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c +++ b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c @@ -449,7 +449,25 @@ xfer_umem (memaddr, myaddr, len, write) return n; } -#define KERNOFF ((unsigned)KERNBASE) +static CORE_ADDR +ksym_kernbase() +{ + static CORE_ADDR kernbase; + struct minimal_symbol *sym; + + if (kernbase == 0) + { + sym = lookup_minimal_symbol ("kernbase", NULL, NULL); + if (sym == NULL) { + kernbase = KERNBASE; + } else { + kernbase = SYMBOL_VALUE_ADDRESS (sym); + } + } + return kernbase; +} + +#define KERNOFF (ksym_kernbase()) #define INKERNEL(x) ((x) >= KERNOFF) static CORE_ADDR sbr; diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c index 9513af3..fdfc6a3 100644 --- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c +++ b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c @@ -449,7 +449,25 @@ xfer_umem (memaddr, myaddr, len, write) return n; } -#define KERNOFF ((unsigned)KERNBASE) +static CORE_ADDR +ksym_kernbase() +{ + static CORE_ADDR kernbase; + struct minimal_symbol *sym; + + if (kernbase == 0) + { + sym = lookup_minimal_symbol ("kernbase", NULL, NULL); + if (sym == NULL) { + kernbase = KERNBASE; + } else { + kernbase = SYMBOL_VALUE_ADDRESS (sym); + } + } + return kernbase; +} + +#define KERNOFF (ksym_kernbase()) #define INKERNEL(x) ((x) >= KERNOFF) static CORE_ADDR sbr; |