From 6fdfd88220a1728eca98f1172a09a6782b20cb78 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Thu, 2 Jul 2015 14:37:21 +0000 Subject: [PATCH] Use single instance of the identical INKERNEL() and PMC_IN_KERNEL() macros on amd64 and i386. Move the definition to machine/param.h. kgdb defines INKERNEL() too, the conflict is resolved by renaming kgdb version to PINKERNEL(). On i386, correct the lowest kernel address. After the shared page was introduced, USRSTACK no longer points to the last user address + 1 [*] Submitted by: Oliver Pinter [*] Sponsored by: The FreeBSD Foundation MFC after: 1 week --- gnu/usr.bin/gdb/kgdb/trgt.c | 6 +++--- sys/amd64/include/param.h | 3 +++ sys/amd64/include/pmc_mdep.h | 4 +--- sys/amd64/include/stack.h | 2 -- sys/cddl/dev/dtrace/i386/dtrace_isa.c | 3 --- sys/i386/include/param.h | 3 +++ sys/i386/include/pmc_mdep.h | 3 +-- sys/i386/include/stack.h | 2 -- 8 files changed, 11 insertions(+), 15 deletions(-) diff --git a/gnu/usr.bin/gdb/kgdb/trgt.c b/gnu/usr.bin/gdb/kgdb/trgt.c index b2f61890b2a7..c75edf000dba 100644 --- a/gnu/usr.bin/gdb/kgdb/trgt.c +++ b/gnu/usr.bin/gdb/kgdb/trgt.c @@ -76,7 +76,7 @@ kvm_t *kvm; static char kvm_err[_POSIX2_LINE_MAX]; #define KERNOFF (kgdb_kernbase ()) -#define INKERNEL(x) ((x) >= KERNOFF) +#define PINKERNEL(x) ((x) >= KERNOFF) static CORE_ADDR kgdb_kernbase (void) @@ -296,7 +296,7 @@ kgdb_set_proc_cmd (char *arg, int from_tty) addr = (CORE_ADDR) parse_and_eval_address (arg); - if (!INKERNEL (addr)) { + if (!PINKERNEL (addr)) { thr = kgdb_thr_lookup_pid((int)addr); if (thr == NULL) error ("invalid pid"); @@ -319,7 +319,7 @@ kgdb_set_tid_cmd (char *arg, int from_tty) addr = (CORE_ADDR) parse_and_eval_address (arg); - if (kvm != NULL && INKERNEL (addr)) { + if (kvm != NULL && PINKERNEL (addr)) { thr = kgdb_thr_lookup_taddr(addr); if (thr == NULL) error("invalid thread address"); diff --git a/sys/amd64/include/param.h b/sys/amd64/include/param.h index ad6c7330af3e..5892ae954ec2 100644 --- a/sys/amd64/include/param.h +++ b/sys/amd64/include/param.h @@ -149,4 +149,7 @@ #define pgtok(x) ((unsigned long)(x) * (PAGE_SIZE / 1024)) +#define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \ + || ((va) >= VM_MIN_KERNEL_ADDRESS && (va) < VM_MAX_KERNEL_ADDRESS)) + #endif /* !_AMD64_INCLUDE_PARAM_H_ */ diff --git a/sys/amd64/include/pmc_mdep.h b/sys/amd64/include/pmc_mdep.h index 73c93feb0f2e..22249c1e5377 100644 --- a/sys/amd64/include/pmc_mdep.h +++ b/sys/amd64/include/pmc_mdep.h @@ -113,9 +113,7 @@ union pmc_md_pmc { #define PMC_IN_KERNEL_STACK(S,START,END) \ ((S) >= (START) && (S) < (END)) -#define PMC_IN_KERNEL(va) (((va) >= DMAP_MIN_ADDRESS && \ - (va) < DMAP_MAX_ADDRESS) || ((va) >= VM_MIN_KERNEL_ADDRESS && \ - (va) < VM_MAX_KERNEL_ADDRESS)) +#define PMC_IN_KERNEL(va) INKERNEL(va) #define PMC_IN_USERSPACE(va) ((va) <= VM_MAXUSER_ADDRESS) diff --git a/sys/amd64/include/stack.h b/sys/amd64/include/stack.h index 24e2547c67dc..8297eaea2da6 100644 --- a/sys/amd64/include/stack.h +++ b/sys/amd64/include/stack.h @@ -32,8 +32,6 @@ /* * Stack trace. */ -#define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \ - || ((va) >= VM_MIN_KERNEL_ADDRESS && (va) < VM_MAX_KERNEL_ADDRESS)) struct amd64_frame { struct amd64_frame *f_frame; diff --git a/sys/cddl/dev/dtrace/i386/dtrace_isa.c b/sys/cddl/dev/dtrace/i386/dtrace_isa.c index 6c261bfe19ea..04f205c5551f 100644 --- a/sys/cddl/dev/dtrace/i386/dtrace_isa.c +++ b/sys/cddl/dev/dtrace/i386/dtrace_isa.c @@ -47,9 +47,6 @@ extern uintptr_t kernbase; uintptr_t kernelbase = (uintptr_t) &kernbase; -#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK && \ - ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS) - uint8_t dtrace_fuword8_nocheck(void *); uint16_t dtrace_fuword16_nocheck(void *); uint32_t dtrace_fuword32_nocheck(void *); diff --git a/sys/i386/include/param.h b/sys/i386/include/param.h index 54477c12a4d2..b3fd85f45344 100644 --- a/sys/i386/include/param.h +++ b/sys/i386/include/param.h @@ -157,4 +157,7 @@ #define pgtok(x) ((x) * (PAGE_SIZE / 1024)) +#define INKERNEL(va) (((vm_offset_t)(va)) >= VM_MAXUSER_ADDRESS && \ + ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS) + #endif /* !_I386_INCLUDE_PARAM_H_ */ diff --git a/sys/i386/include/pmc_mdep.h b/sys/i386/include/pmc_mdep.h index 5ce791a3b993..ff057cec166a 100644 --- a/sys/i386/include/pmc_mdep.h +++ b/sys/i386/include/pmc_mdep.h @@ -138,8 +138,7 @@ struct pmc_mdep; #define PMC_IN_KERNEL_STACK(S,START,END) \ ((S) >= (START) && (S) < (END)) -#define PMC_IN_KERNEL(va) (((va) >= USRSTACK) && \ - ((va) < VM_MAX_KERNEL_ADDRESS)) +#define PMC_IN_KERNEL(va) INKERNEL(va) #define PMC_IN_USERSPACE(va) ((va) <= VM_MAXUSER_ADDRESS) diff --git a/sys/i386/include/stack.h b/sys/i386/include/stack.h index 78caae0048eb..f63fc4bbda52 100644 --- a/sys/i386/include/stack.h +++ b/sys/i386/include/stack.h @@ -32,8 +32,6 @@ /* * Stack trace. */ -#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK && \ - ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS) struct i386_frame { struct i386_frame *f_frame;