Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/external/cddl/osnet/dev/dtrace/amd64



On 12.08.2018 18:07, Christos Zoulas wrote:
> Module Name:	src
> Committed By:	christos
> Date:		Sun Aug 12 16:07:27 UTC 2018
> 
> Modified Files:
> 	src/external/cddl/osnet/dev/dtrace/amd64: dtrace_isa.c
> 
> Log Message:
> handle variable kernel vm min address
> 
> 
> To generate a diff of this commit:
> cvs rdiff -u -r1.8 -r1.9 \
>     src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c
> 
> Please note that diffs are not public domain; they are subject to the
> copyright notices on the relevant files.
> 
> 
> 
> Modified files:
> 
> Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c
> diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.8 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.9
> --- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.8	Fri Jul 27 03:32:59 2018
> +++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c	Sun Aug 12 12:07:27 2018
> @@ -1,4 +1,4 @@
> -/*	$NetBSD: dtrace_isa.c,v 1.8 2018/07/27 07:32:59 maxv Exp $	*/
> +/*	$NetBSD: dtrace_isa.c,v 1.9 2018/08/12 16:07:27 christos Exp $	*/
>  
>  /*
>   * CDDL HEADER START
> @@ -45,7 +45,11 @@ uint16_t dtrace_fuword16_nocheck(void *)
>  uint32_t dtrace_fuword32_nocheck(void *);
>  uint64_t dtrace_fuword64_nocheck(void *);
>  
> +#ifdef VM_MIN_KERNEL_ADDRESS_DEFAULT
> +__strong_alias(kernelbase, vm_min_kernel_address)
> +#else
>  uintptr_t kernelbase = (uintptr_t)VM_MIN_KERNEL_ADDRESS;
> +#endif
>  
>  #define INKERNEL(va) ((intptr_t)(va) < 0) /* XXX horror */
>  
> 

This broke dtrace and produced missing symbol for the kernel module:

[    4.934652] kern.module.path=/stand/amd64/8.99.24/modules
[    6.065073] kobj_checksyms, 988: [dtrace]: linker error: symbol
`kernelbase' not found
[    6.065073] WARNING: module error: unable to affix module `dtrace',
error 8
[    6.155107] kobj_checksyms, 988: [dtrace]: linker error: symbol
`kernelbase' not found
[    6.155107] WARNING: module error: unable to affix module `dtrace',
error 8
[    6.155107] WARNING: module error: recursive load failed for
`dtrace_sdt' (`dtrace' required), error 8
[    6.165111] kobj_checksyms, 988: [dtrace]: linker error: symbol
`kernelbase' not found
[    6.165111] WARNING: module error: unable to affix module `dtrace',
error 8
[    6.165111] WARNING: module error: recursive load failed for
`dtrace_fbt' (`dtrace' required), error 8

etc

This probably comes from
external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c which uses extern
symbol to kernelbase.


Adding more context:

$ for w in *dtrace*/*.kmod; do echo $w; nm $w| grep kernelbase; done
dtrace/dtrace.kmod
                 U kernelbase
dtrace_fbt/dtrace_fbt.kmod
dtrace_lockstat/dtrace_lockstat.kmod
dtrace_profile/dtrace_profile.kmod
dtrace_sdt/dtrace_sdt.kmod
dtrace_syscall/dtrace_syscall.kmod
dtrace_syscall_linux/dtrace_syscall_linux.kmod
dtrace_syscall_linux32/dtrace_syscall_linux32.kmod
dtrace_syscall_netbsd32/dtrace_syscall_netbsd32.kmod


Adding a weak or strong symbol in dtrace_subr.c didn't help.

diff -u -r1.10 dtrace_subr.c
--- external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c  5 Jun 2018
12:04:19 -0000       1.10
+++ external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c  16 Aug 2018
12:17:22 -0000
@@ -48,7 +48,11 @@
 #include <machine/cpu_counter.h>
 #include <machine/cpufunc.h>

+#ifdef VM_MIN_KERNEL_ADDRESS_DEFAULT
+__weak_alias(kernelbase, vm_min_kernel_address)
+#else
 extern uintptr_t       kernelbase;
+#endif

 int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);


Produces:

/usr/src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c: In function
'dtrace_toxic_ranges':
/usr/src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:124:13:
error: 'kernelbase' undeclared (first use in this function)
  (*func)(0, kernelbase);
             ^~~~~~~~~~
/usr/src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:124:13:
note: each undeclared identifier is reported only once for each function
it appears in


On the other hand this seems to build and produce insertable kernel modules:

Index: external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c
===================================================================
RCS file: /cvsroot/src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c,v
retrieving revision 1.10
diff -u -r1.10 dtrace_subr.c
--- external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c	5 Jun 2018
12:04:19 -0000	1.10
+++ external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c	16 Aug 2018
12:20:54 -0000
@@ -48,7 +48,11 @@
 #include <machine/cpu_counter.h>
 #include <machine/cpufunc.h>

+#ifdef VM_MIN_KERNEL_ADDRESS_DEFAULT
+#define kernelbase vm_min_kernel_address
+#else
 extern uintptr_t 	kernelbase;
+#endif

 int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);


Attachment: signature.asc
Description: OpenPGP digital signature



Home | Main Index | Thread Index | Old Index