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 */