Module Name: src
Committed By: skrll
Date: Fri Apr 28 07:33:57 UTC 2023
Modified Files:
src/sys/arch/aarch64/aarch64: kobj_machdep.c
src/sys/arch/alpha/alpha: kobj_machdep.c
src/sys/arch/amd64/amd64: kobj_machdep.c
src/sys/arch/arm/arm32: kobj_machdep.c
src/sys/arch/hppa/hppa: kobj_machdep.c
src/sys/arch/i386/i386: kobj_machdep.c
src/sys/arch/m68k/m68k: kobj_machdep.c
src/sys/arch/mips/mips: kobj_machdep.c
src/sys/arch/powerpc/powerpc: kobj_machdep.c
src/sys/arch/sh3/sh3: kobj_machdep.c
src/sys/arch/sparc/sparc: kobj_machdep.c
src/sys/arch/sparc64/sparc64: kobj_machdep.c
src/sys/arch/vax/vax: kobj_machdep.c
src/sys/kern: subr_kobj.c
src/sys/sys: kobj.h
Log Message:
Pass local symbols relocations in both passes and provide the kobj_reloc
implementation visibility of these relocations.
Currently all implementations resolve local symbol relocations in the first
pass and simply skip them in the second. The RISC-V implementation will
make use of this visiblity.
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/aarch64/aarch64/kobj_machdep.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/alpha/alpha/kobj_machdep.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/amd64/amd64/kobj_machdep.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/arm32/kobj_machdep.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/hppa/hppa/kobj_machdep.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/i386/i386/kobj_machdep.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/m68k/m68k/kobj_machdep.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mips/mips/kobj_machdep.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/powerpc/kobj_machdep.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sh3/sh3/kobj_machdep.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sparc/sparc/kobj_machdep.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sparc64/sparc64/kobj_machdep.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/vax/vax/kobj_machdep.c
cvs rdiff -u -r1.77 -r1.78 src/sys/kern/subr_kobj.c
cvs rdiff -u -r1.20 -r1.21 src/sys/sys/kobj.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/aarch64/aarch64/kobj_machdep.c
diff -u src/sys/arch/aarch64/aarch64/kobj_machdep.c:1.6 src/sys/arch/aarch64/aarch64/kobj_machdep.c:1.7
--- src/sys/arch/aarch64/aarch64/kobj_machdep.c:1.6 Fri Dec 11 18:03:33 2020
+++ src/sys/arch/aarch64/aarch64/kobj_machdep.c Fri Apr 28 07:33:55 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.6 2020/12/11 18:03:33 skrll Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.7 2023/04/28 07:33:55 skrll Exp $ */
/*
* Copyright (c) 2018 Ryo Shimizu <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.6 2020/12/11 18:03:33 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.7 2023/04/28 07:33:55 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -168,6 +168,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
return 0;
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
error = kobj_sym_lookup(ko, symidx, &saddr);
if (error != 0) {
printf("kobj_reloc: symidx %d lookup failure."
Index: src/sys/arch/alpha/alpha/kobj_machdep.c
diff -u src/sys/arch/alpha/alpha/kobj_machdep.c:1.3 src/sys/arch/alpha/alpha/kobj_machdep.c:1.4
--- src/sys/arch/alpha/alpha/kobj_machdep.c:1.3 Fri Nov 3 09:59:07 2017
+++ src/sys/arch/alpha/alpha/kobj_machdep.c Fri Apr 28 07:33:55 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.3 2017/11/03 09:59:07 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.4 2023/04/28 07:33:55 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.3 2017/11/03 09:59:07 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.4 2023/04/28 07:33:55 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -88,6 +88,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
symidx = ELF_R_SYM(rel->r_info);
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_ALPHA_NONE:
break;
Index: src/sys/arch/amd64/amd64/kobj_machdep.c
diff -u src/sys/arch/amd64/amd64/kobj_machdep.c:1.8 src/sys/arch/amd64/amd64/kobj_machdep.c:1.9
--- src/sys/arch/amd64/amd64/kobj_machdep.c:1.8 Tue May 28 03:52:08 2019
+++ src/sys/arch/amd64/amd64/kobj_machdep.c Fri Apr 28 07:33:55 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.8 2019/05/28 03:52:08 kamil Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.9 2023/04/28 07:33:55 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.8 2019/05/28 03:52:08 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.9 2023/04/28 07:33:55 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -106,6 +106,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
}
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_X86_64_NONE: /* none */
break;
Index: src/sys/arch/arm/arm32/kobj_machdep.c
diff -u src/sys/arch/arm/arm32/kobj_machdep.c:1.15 src/sys/arch/arm/arm32/kobj_machdep.c:1.16
--- src/sys/arch/arm/arm32/kobj_machdep.c:1.15 Tue Dec 1 02:43:14 2020
+++ src/sys/arch/arm/arm32/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.15 2020/12/01 02:43:14 rin Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.16 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.15 2020/12/01 02:43:14 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.16 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -95,6 +95,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
symidx = ELF_R_SYM(rel->r_info);
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_ARM_NONE: /* none */
case R_ARM_V4BX: /* none */
Index: src/sys/arch/hppa/hppa/kobj_machdep.c
diff -u src/sys/arch/hppa/hppa/kobj_machdep.c:1.15 src/sys/arch/hppa/hppa/kobj_machdep.c:1.16
--- src/sys/arch/hppa/hppa/kobj_machdep.c:1.15 Fri Nov 3 09:59:08 2017
+++ src/sys/arch/hppa/hppa/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.15 2017/11/03 09:59:08 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.16 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.15 2017/11/03 09:59:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.16 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -149,6 +149,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
rtype = ELF_R_TYPE(rela->r_info);
symidx = ELF_R_SYM(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_TYPE(NONE):
break;
Index: src/sys/arch/i386/i386/kobj_machdep.c
diff -u src/sys/arch/i386/i386/kobj_machdep.c:1.8 src/sys/arch/i386/i386/kobj_machdep.c:1.9
--- src/sys/arch/i386/i386/kobj_machdep.c:1.8 Fri Nov 3 09:59:08 2017
+++ src/sys/arch/i386/i386/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.8 2017/11/03 09:59:08 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.9 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.8 2017/11/03 09:59:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.9 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -95,6 +95,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
symidx = ELF_R_SYM(rel->r_info);
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_386_NONE: /* none */
return 0;
Index: src/sys/arch/m68k/m68k/kobj_machdep.c
diff -u src/sys/arch/m68k/m68k/kobj_machdep.c:1.4 src/sys/arch/m68k/m68k/kobj_machdep.c:1.5
--- src/sys/arch/m68k/m68k/kobj_machdep.c:1.4 Fri Nov 3 09:59:08 2017
+++ src/sys/arch/m68k/m68k/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.4 2017/11/03 09:59:08 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.5 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.4 2017/11/03 09:59:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.5 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -57,6 +57,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
symnum = ELF_R_SYM(rela->r_info);
rtype = ELF_R_TYPE(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_TYPE(NONE):
break;
Index: src/sys/arch/mips/mips/kobj_machdep.c
diff -u src/sys/arch/mips/mips/kobj_machdep.c:1.1 src/sys/arch/mips/mips/kobj_machdep.c:1.2
--- src/sys/arch/mips/mips/kobj_machdep.c:1.1 Tue Mar 23 13:22:40 2021
+++ src/sys/arch/mips/mips/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.1 2021/03/23 13:22:40 simonb Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.2 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -84,6 +84,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
rtype = ELF_R_TYPE(rela->r_info);
symidx = ELF_R_SYM(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
/* pointer to 32bit value and instruction */
insn = (void *)where;
Index: src/sys/arch/powerpc/powerpc/kobj_machdep.c
diff -u src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.7 src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.8
--- src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.7 Fri Nov 3 09:59:08 2017
+++ src/sys/arch/powerpc/powerpc/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.7 2017/11/03 09:59:08 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.7 2017/11/03 09:59:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -91,6 +91,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
rtype = ELF_R_TYPE(rela->r_info);
symidx = ELF_R_SYM(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_PPC_NONE:
break;
Index: src/sys/arch/sh3/sh3/kobj_machdep.c
diff -u src/sys/arch/sh3/sh3/kobj_machdep.c:1.7 src/sys/arch/sh3/sh3/kobj_machdep.c:1.8
--- src/sys/arch/sh3/sh3/kobj_machdep.c:1.7 Tue Apr 9 00:36:55 2019
+++ src/sys/arch/sh3/sh3/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.7 2019/04/09 00:36:55 uwe Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.7 2019/04/09 00:36:55 uwe Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -59,6 +59,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
symidx = ELF_R_SYM(rela->r_info);
rtype = ELF_R_TYPE(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
switch (rtype) {
case R_TYPE(NONE):
break;
Index: src/sys/arch/sparc/sparc/kobj_machdep.c
diff -u src/sys/arch/sparc/sparc/kobj_machdep.c:1.5 src/sys/arch/sparc/sparc/kobj_machdep.c:1.6
--- src/sys/arch/sparc/sparc/kobj_machdep.c:1.5 Sun Nov 5 01:18:15 2017
+++ src/sys/arch/sparc/sparc/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.5 2017/11/05 01:18:15 christos Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.6 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 1999, 2002, 2008 The NetBSD Foundation, Inc.
@@ -138,6 +138,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
type = ELF_R_TYPE(rela->r_info);
value = rela->r_addend;
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
if (type == R_TYPE(NONE))
return 0;
Index: src/sys/arch/sparc64/sparc64/kobj_machdep.c
diff -u src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.7 src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.8
--- src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.7 Fri Nov 3 09:59:08 2017
+++ src/sys/arch/sparc64/sparc64/kobj_machdep.c Fri Apr 28 07:33:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.7 2017/11/03 09:59:08 maxv Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $ */
/*-
* Copyright (c) 2001 Jake Burkholder.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.7 2017/11/03 09:59:08 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.8 2023/04/28 07:33:56 skrll Exp $");
#define ELFSIZE ARCH_ELFSIZE
@@ -201,6 +201,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
rtype = ELF64_R_TYPE(rela->r_info);
symidx = ELF_R_SYM(rela->r_info);
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
if (rtype == R_SPARC_NONE)
return 0;
Index: src/sys/arch/vax/vax/kobj_machdep.c
diff -u src/sys/arch/vax/vax/kobj_machdep.c:1.1 src/sys/arch/vax/vax/kobj_machdep.c:1.2
--- src/sys/arch/vax/vax/kobj_machdep.c:1.1 Mon Apr 30 06:46:12 2018
+++ src/sys/arch/vax/vax/kobj_machdep.c Fri Apr 28 07:33:57 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj_machdep.c,v 1.1 2018/04/30 06:46:12 ragge Exp $ */
+/* $NetBSD: kobj_machdep.c,v 1.2 2023/04/28 07:33:57 skrll Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -54,6 +54,12 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas
printf("Elf_Rel not supported");
return -1;
}
+ const Elf_Sym *sym = kobj_symbol(ko, symidx);
+
+ if (!local && ELF_ST_BIND(sym->st_info) == STB_LOCAL) {
+ return 0;
+ }
+
if (rtype != R_VAX_PC32 && rtype != R_VAX_32) {
printf("Bad relocation %d", rtype);
return -1;
Index: src/sys/kern/subr_kobj.c
diff -u src/sys/kern/subr_kobj.c:1.77 src/sys/kern/subr_kobj.c:1.78
--- src/sys/kern/subr_kobj.c:1.77 Mon Apr 17 08:14:51 2023
+++ src/sys/kern/subr_kobj.c Fri Apr 28 07:33:57 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_kobj.c,v 1.77 2023/04/17 08:14:51 skrll Exp $ */
+/* $NetBSD: subr_kobj.c,v 1.78 2023/04/28 07:33:57 skrll Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.77 2023/04/17 08:14:51 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.78 2023/04/28 07:33:57 skrll Exp $");
#ifdef _KERNEL_OPT
#include "opt_modular.h"
@@ -878,6 +878,14 @@ kobj_jettison(kobj_t ko)
}
}
+const Elf_Sym *
+kobj_symbol(kobj_t ko, uintptr_t symidx)
+{
+
+ return ko->ko_symtab + symidx;
+}
+
+
/*
* kobj_sym_lookup:
*
@@ -1080,7 +1088,8 @@ kobj_relocate(kobj_t ko, bool local)
continue;
}
sym = ko->ko_symtab + symidx;
- if (local != (ELF_ST_BIND(sym->st_info) == STB_LOCAL)) {
+ /* Skip non-local symbols in the first pass (local == TRUE) */
+ if (local && (ELF_ST_BIND(sym->st_info) != STB_LOCAL)) {
continue;
}
error = kobj_reloc(ko, base, rel, false, local);
@@ -1116,7 +1125,8 @@ kobj_relocate(kobj_t ko, bool local)
continue;
}
sym = ko->ko_symtab + symidx;
- if (local != (ELF_ST_BIND(sym->st_info) == STB_LOCAL)) {
+ /* Skip non-local symbols in the first pass (local == TRUE) */
+ if (local && (ELF_ST_BIND(sym->st_info) != STB_LOCAL)) {
continue;
}
error = kobj_reloc(ko, base, rela, true, local);
Index: src/sys/sys/kobj.h
diff -u src/sys/sys/kobj.h:1.20 src/sys/sys/kobj.h:1.21
--- src/sys/sys/kobj.h:1.20 Mon Nov 6 17:56:25 2017
+++ src/sys/sys/kobj.h Fri Apr 28 07:33:57 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: kobj.h,v 1.20 2017/11/06 17:56:25 christos Exp $ */
+/* $NetBSD: kobj.h,v 1.21 2023/04/28 07:33:57 skrll Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -47,6 +47,7 @@ int kobj_stat(kobj_t, vaddr_t *, size_t
int kobj_find_section(kobj_t, const char *, void **, size_t *);
/* MI-MD interface. */
+const Elf_Sym * kobj_symbol(kobj_t, uintptr_t);
int kobj_sym_lookup(kobj_t, uintptr_t, Elf_Addr *);
int kobj_reloc(kobj_t, uintptr_t, const void *, bool, bool);
int kobj_machdep(kobj_t, void *, size_t, bool);