Module Name:    src
Committed By:   pgoyette
Date:           Thu Jan 24 03:27:24 UTC 2019

Modified Files:
        src/sys/arch/amd64/amd64 [pgoyette-compat]: netbsd32_machdep.c
        src/sys/arch/mips/mips [pgoyette-compat]: netbsd32_machdep.c
        src/sys/arch/sparc64/sparc64 [pgoyette-compat]: netbsd32_machdep.c
        src/sys/compat/linux/common [pgoyette-compat]: linux_exec_elf32.c
        src/sys/kern [pgoyette-compat]: compat_stub.c
        src/sys/sys [pgoyette-compat]: compat_stub.h

Log Message:
Replace weak symbol definition for machine32 with a hook.  Our in-kernel
linker doesn't handle weak symbols, so this prevented us from loading the
compat_linux32 module.

XXX There don't seem to be any other consumers of machine32 (nor does
XXX there seem to be any consumers of machine_arch32), even though it
XXX is defined for aarch64, arm32, and riscv).


To generate a diff of this commit:
cvs rdiff -u -r1.115.2.16 -r1.115.2.17 \
    src/sys/arch/amd64/amd64/netbsd32_machdep.c
cvs rdiff -u -r1.15.2.12 -r1.15.2.13 \
    src/sys/arch/mips/mips/netbsd32_machdep.c
cvs rdiff -u -r1.110.14.5 -r1.110.14.6 \
    src/sys/arch/sparc64/sparc64/netbsd32_machdep.c
cvs rdiff -u -r1.94.12.1 -r1.94.12.2 \
    src/sys/compat/linux/common/linux_exec_elf32.c
cvs rdiff -u -r1.1.2.39 -r1.1.2.40 src/sys/kern/compat_stub.c
cvs rdiff -u -r1.1.2.52 -r1.1.2.53 src/sys/sys/compat_stub.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/netbsd32_machdep.c
diff -u src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.115.2.16 src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.115.2.17
--- src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.115.2.16	Tue Jan 22 07:42:40 2019
+++ src/sys/arch/amd64/amd64/netbsd32_machdep.c	Thu Jan 24 03:27:23 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.115.2.16 2019/01/22 07:42:40 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.115.2.17 2019/01/24 03:27:23 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.115.2.16 2019/01/22 07:42:40 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.115.2.17 2019/01/24 03:27:23 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -969,16 +969,23 @@ netbsd32_vm_default_addr(struct proc *p,
 		return VM_DEFAULT_ADDRESS32_BOTTOMUP(base, sz);
 }
 
+static const char *
+netbsd32_machine32(void)
+{
+
+	return machine32;
+}
+
 void
 netbsd32_machdep_md_init(void)
 {
 
-	/* nothing to do */
+	MODULE_SET_HOOK(netbsd32_machine32_hook, "mach32", netbsd32_machine32);
 }
 
 void
 netbsd32_machdep_md_fini(void)
 {
 
-	/* nothing to do */
+	MODULE_UNSET_HOOK(netbsd32_machine32_hook);
 }

Index: src/sys/arch/mips/mips/netbsd32_machdep.c
diff -u src/sys/arch/mips/mips/netbsd32_machdep.c:1.15.2.12 src/sys/arch/mips/mips/netbsd32_machdep.c:1.15.2.13
--- src/sys/arch/mips/mips/netbsd32_machdep.c:1.15.2.12	Tue Jan 22 07:42:40 2019
+++ src/sys/arch/mips/mips/netbsd32_machdep.c	Thu Jan 24 03:27:23 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.15.2.12 2019/01/22 07:42:40 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.15.2.13 2019/01/24 03:27:23 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.15.2.12 2019/01/22 07:42:40 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.15.2.13 2019/01/24 03:27:23 pgoyette Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_coredump.h"
@@ -317,16 +317,25 @@ netbsd32_sendsig(const ksiginfo_t *ksi, 
 	    netbsd32_sendsig_siginfo(ksi, mask));
 }
 
-void    
-netbsd32_machdep_md_init(void)
-{       
-                
-	/* nothing to do */
-}               
-                
-void            
+static const char *
+netbsd32_machine32(void)
+{
+
+	return machine32;
+}
+
+void 
+netbsd32_machdep_md_init(void) 
+{
+
+	MODULE_SET_HOOK(netbsd32_machine32_hook, "mach32", netbsd32_machine32);
+}
+
+void
 netbsd32_machdep_md_fini(void)
-{       
+{
 
-	/* nothing to do */
+	MODULE_UNSET_HOOK(netbsd32_machine32_hook);
 }
+
+

Index: src/sys/arch/sparc64/sparc64/netbsd32_machdep.c
diff -u src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.110.14.5 src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.110.14.6
--- src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.110.14.5	Tue Jan 22 07:42:40 2019
+++ src/sys/arch/sparc64/sparc64/netbsd32_machdep.c	Thu Jan 24 03:27:24 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.110.14.5 2019/01/22 07:42:40 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.110.14.6 2019/01/24 03:27:24 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.110.14.5 2019/01/22 07:42:40 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.110.14.6 2019/01/24 03:27:24 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -1016,17 +1016,23 @@ netbsd32_vm_default_addr(struct proc *p,
 	return round_page((vaddr_t)(base) + (vsize_t)MAXDSIZ32);
 }
 
-void    
-netbsd32_machdep_md_init(void)
+static const char *
+netbsd32_machine32(void)
 {
-                    
-	/* nothing to do */
-}               
- 
-void    
-netbsd32_machdep_md_fini(void)
+
+	return machine32;
+}
+
+void 
+netbsd32_machdep_md_init(void) 
 {
-        
-	/* nothing to do */
+
+	MODULE_SET_HOOK(netbsd32_machine32_hook, "mach32", netbsd32_machine32);
 }
 
+void
+netbsd32_machdep_md_fini(void)
+{
+
+	MODULE_UNSET_HOOK(netbsd32_machine32_hook);
+}

Index: src/sys/compat/linux/common/linux_exec_elf32.c
diff -u src/sys/compat/linux/common/linux_exec_elf32.c:1.94.12.1 src/sys/compat/linux/common/linux_exec_elf32.c:1.94.12.2
--- src/sys/compat/linux/common/linux_exec_elf32.c:1.94.12.1	Sat Jul 28 04:37:43 2018
+++ src/sys/compat/linux/common/linux_exec_elf32.c	Thu Jan 24 03:27:24 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_exec_elf32.c,v 1.94.12.1 2018/07/28 04:37:43 pgoyette Exp $	*/
+/*	$NetBSD: linux_exec_elf32.c,v 1.94.12.2 2019/01/24 03:27:24 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 2000, 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_exec_elf32.c,v 1.94.12.1 2018/07/28 04:37:43 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_exec_elf32.c,v 1.94.12.2 2019/01/24 03:27:24 pgoyette Exp $");
 
 #ifndef ELFSIZE
 /* XXX should die */
@@ -55,6 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: linux_exec_e
 #include <sys/stat.h>
 #include <sys/kauth.h>
 #include <sys/cprng.h>
+#include <sys/compat_stub.h>
 
 #include <sys/mman.h>
 #include <sys/syscallargs.h>
@@ -334,11 +335,7 @@ ELFNAME2(linux,go_rt0_signature)(struct 
 		goto out;
 
 #if (ELFSIZE == 32)
-	extern const char machine32[] __weak;
-	if (machine32 != NULL)
-		m = machine32;
-	else
-		m = machine;
+	MODULE_HOOK_CALL(netbsd32_machine32_hook, (), machine, m);
 #else
 	m = machine;
 #endif

Index: src/sys/kern/compat_stub.c
diff -u src/sys/kern/compat_stub.c:1.1.2.39 src/sys/kern/compat_stub.c:1.1.2.40
--- src/sys/kern/compat_stub.c:1.1.2.39	Tue Jan 15 22:01:26 2019
+++ src/sys/kern/compat_stub.c	Thu Jan 24 03:27:24 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.1.2.39 2019/01/15 22:01:26 pgoyette Exp $	*/
+/* $NetBSD: compat_stub.c,v 1.1.2.40 2019/01/24 03:27:24 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -248,3 +248,7 @@ struct compat_70_unp_hook_t compat_70_un
  */
 struct sysvipc50_sysctl_hook_t sysvipc50_sysctl_hook;
 
+/* 
+ * Hook for compat32_machine32
+ */
+struct netbsd32_machine32_hook_t netbsd32_machine32_hook;

Index: src/sys/sys/compat_stub.h
diff -u src/sys/sys/compat_stub.h:1.1.2.52 src/sys/sys/compat_stub.h:1.1.2.53
--- src/sys/sys/compat_stub.h:1.1.2.52	Tue Jan 22 07:42:42 2019
+++ src/sys/sys/compat_stub.h	Thu Jan 24 03:27:24 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.h,v 1.1.2.52 2019/01/22 07:42:42 pgoyette Exp $	*/
+/* $NetBSD: compat_stub.h,v 1.1.2.53 2019/01/24 03:27:24 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -308,4 +308,9 @@ MODULE_HOOK(compat_70_unp_hook, struct m
 #include <sys/sysctl.h>
 MODULE_HOOK(sysvipc50_sysctl_hook, int, (SYSCTLFN_PROTO));
 
+/*
+ * Hook for compat32_machine32
+ */
+MODULE_HOOK(netbsd32_machine32_hook, const char *, (void));
+
 #endif	/* _SYS_COMPAT_STUB_H */

Reply via email to