Module Name:    src
Committed By:   riastradh
Date:           Sun Jul 30 09:20:14 UTC 2023

Modified Files:
        src/libexec/ld.elf_so: Makefile reloc.c rtld.c rtld.h symbol.c
Added Files:
        src/libexec/ld.elf_so: hash.c hash.h

Log Message:
ld.elf_so: Split hash functions into a separate file.

This way we can test them in isolation.

No functional change intended.


To generate a diff of this commit:
cvs rdiff -u -r1.146 -r1.147 src/libexec/ld.elf_so/Makefile \
    src/libexec/ld.elf_so/rtld.h
cvs rdiff -u -r0 -r1.1 src/libexec/ld.elf_so/hash.c \
    src/libexec/ld.elf_so/hash.h
cvs rdiff -u -r1.117 -r1.118 src/libexec/ld.elf_so/reloc.c
cvs rdiff -u -r1.214 -r1.215 src/libexec/ld.elf_so/rtld.c
cvs rdiff -u -r1.75 -r1.76 src/libexec/ld.elf_so/symbol.c

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

Modified files:

Index: src/libexec/ld.elf_so/Makefile
diff -u src/libexec/ld.elf_so/Makefile:1.146 src/libexec/ld.elf_so/Makefile:1.147
--- src/libexec/ld.elf_so/Makefile:1.146	Sun Jul 30 09:19:19 2023
+++ src/libexec/ld.elf_so/Makefile	Sun Jul 30 09:20:14 2023
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.146 2023/07/30 09:19:19 riastradh Exp $
+#	$NetBSD: Makefile,v 1.147 2023/07/30 09:20:14 riastradh Exp $
 #
 # NOTE: when changing ld.so, ensure that ldd still compiles.
 #
@@ -76,6 +76,7 @@ SRCS+=		compat.c
 SRCS+=		debug.c
 SRCS+=		diagassert.c
 SRCS+=		expand.c
+SRCS+=		hash.c
 SRCS+=		headers.c
 SRCS+=		load.c
 SRCS+=		map_object.c
Index: src/libexec/ld.elf_so/rtld.h
diff -u src/libexec/ld.elf_so/rtld.h:1.146 src/libexec/ld.elf_so/rtld.h:1.147
--- src/libexec/ld.elf_so/rtld.h:1.146	Sun Jun  4 01:24:56 2023
+++ src/libexec/ld.elf_so/rtld.h	Sun Jul 30 09:20:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtld.h,v 1.146 2023/06/04 01:24:56 joerg Exp $	 */
+/*	$NetBSD: rtld.h,v 1.147 2023/07/30 09:20:14 riastradh Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -442,8 +442,6 @@ void _rtld_call_ifunc(Obj_Entry *, sigse
 Obj_Entry *_rtld_load_library(const char *, const Obj_Entry *, int);
 
 /* symbol.c */
-Elf32_Word _rtld_sysv_hash(const char *);
-Elf32_Word _rtld_gnu_hash(const char *);
 const Elf_Sym *_rtld_symlook_obj(const char *, Elf_Hash *,
     const Obj_Entry *, u_int, const Ver_Entry *);
 const Elf_Sym *_rtld_find_symdef(unsigned long, const Obj_Entry *,

Index: src/libexec/ld.elf_so/reloc.c
diff -u src/libexec/ld.elf_so/reloc.c:1.117 src/libexec/ld.elf_so/reloc.c:1.118
--- src/libexec/ld.elf_so/reloc.c:1.117	Sat Dec  4 08:53:34 2021
+++ src/libexec/ld.elf_so/reloc.c	Sun Jul 30 09:20:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: reloc.c,v 1.117 2021/12/04 08:53:34 skrll Exp $	 */
+/*	$NetBSD: reloc.c,v 1.118 2023/07/30 09:20:14 riastradh Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -39,7 +39,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: reloc.c,v 1.117 2021/12/04 08:53:34 skrll Exp $");
+__RCSID("$NetBSD: reloc.c,v 1.118 2023/07/30 09:20:14 riastradh Exp $");
 #endif /* not lint */
 
 #include <err.h>
@@ -56,6 +56,7 @@ __RCSID("$NetBSD: reloc.c,v 1.117 2021/1
 #include <dirent.h>
 
 #include "debug.h"
+#include "hash.h"
 #include "rtld.h"
 
 #ifndef RTLD_INHIBIT_COPY_RELOCS

Index: src/libexec/ld.elf_so/rtld.c
diff -u src/libexec/ld.elf_so/rtld.c:1.214 src/libexec/ld.elf_so/rtld.c:1.215
--- src/libexec/ld.elf_so/rtld.c:1.214	Sun Jun  4 23:42:38 2023
+++ src/libexec/ld.elf_so/rtld.c	Sun Jul 30 09:20:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtld.c,v 1.214 2023/06/04 23:42:38 riastradh Exp $	 */
+/*	$NetBSD: rtld.c,v 1.215 2023/07/30 09:20:14 riastradh Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -40,7 +40,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: rtld.c,v 1.214 2023/06/04 23:42:38 riastradh Exp $");
+__RCSID("$NetBSD: rtld.c,v 1.215 2023/07/30 09:20:14 riastradh Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -60,7 +60,9 @@ __RCSID("$NetBSD: rtld.c,v 1.214 2023/06
 #include <ctype.h>
 
 #include <dlfcn.h>
+
 #include "debug.h"
+#include "hash.h"
 #include "rtld.h"
 
 #if !defined(lint)

Index: src/libexec/ld.elf_so/symbol.c
diff -u src/libexec/ld.elf_so/symbol.c:1.75 src/libexec/ld.elf_so/symbol.c:1.76
--- src/libexec/ld.elf_so/symbol.c:1.75	Tue Apr 18 22:42:52 2023
+++ src/libexec/ld.elf_so/symbol.c	Sun Jul 30 09:20:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: symbol.c,v 1.75 2023/04/18 22:42:52 christos Exp $	 */
+/*	$NetBSD: symbol.c,v 1.76 2023/07/30 09:20:14 riastradh Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -40,7 +40,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: symbol.c,v 1.75 2023/04/18 22:42:52 christos Exp $");
+__RCSID("$NetBSD: symbol.c,v 1.76 2023/07/30 09:20:14 riastradh Exp $");
 #endif /* not lint */
 
 #include <err.h>
@@ -57,6 +57,7 @@ __RCSID("$NetBSD: symbol.c,v 1.75 2023/0
 #include <dirent.h>
 
 #include "debug.h"
+#include "hash.h"
 #include "rtld.h"
 
 /*
@@ -80,39 +81,6 @@ _rtld_donelist_check(DoneList *dlp, cons
 	return false;
 }
 
-/*
- * SysV hash function for symbol table lookup.  It is a slightly optimized
- * version of the hash specified by the System V ABI.
- */
-Elf32_Word
-_rtld_sysv_hash(const char *name)
-{
-	const unsigned char *p = (const unsigned char *) name;
-	Elf32_Word h = 0;
-
-	while (__predict_true(*p != '\0')) {
-		h = (h << 4) + *p++;
-		h ^= (h >> 24) & 0xf0;
-	}
-	return (h & 0x0fffffff);
-}
-
-/*
- * Hash function for symbol table lookup.  Don't even think about changing
- * this.  It is specified by the GNU toolchain ABI.
- */
-Elf32_Word
-_rtld_gnu_hash(const char *name)
-{
-	const unsigned char *p = (const unsigned char *) name;
-	uint_fast32_t h = 5381;
-	unsigned char c;
-
-	for (c = *p; c != '\0'; c = *++p)
-		h = h * 33 + c;
-	return (h & 0xffffffff);
-}
-
 const Elf_Sym *
 _rtld_symlook_list(const char *name, Elf_Hash *hash, const Objlist *objlist,
     const Obj_Entry **defobj_out, u_int flags, const Ver_Entry *ventry,

Added files:

Index: src/libexec/ld.elf_so/hash.c
diff -u /dev/null src/libexec/ld.elf_so/hash.c:1.1
--- /dev/null	Sun Jul 30 09:20:14 2023
+++ src/libexec/ld.elf_so/hash.c	Sun Jul 30 09:20:14 2023
@@ -0,0 +1,81 @@
+/*	$NetBSD: hash.c,v 1.1 2023/07/30 09:20:14 riastradh Exp $	 */
+
+/*
+ * Copyright 1996 John D. Polstra.
+ * Copyright 1996 Matt Thomas <m...@3am-software.com>
+ * Copyright 2002 Charles M. Hannum <r...@ihack.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by John Polstra.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Dynamic linker for ELF.
+ *
+ * John Polstra <j...@polstra.com>.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: hash.c,v 1.1 2023/07/30 09:20:14 riastradh Exp $");
+#endif /* not lint */
+
+#include <stdint.h>
+
+#include "hash.h"
+
+/*
+ * SysV hash function for symbol table lookup.  It is a slightly optimized
+ * version of the hash specified by the System V ABI.
+ */
+Elf32_Word
+_rtld_sysv_hash(const char *name)
+{
+	const unsigned char *p = (const unsigned char *) name;
+	Elf32_Word h = 0;
+
+	while (__predict_true(*p != '\0')) {
+		h = (h << 4) + *p++;
+		h ^= (h >> 24) & 0xf0;
+	}
+	return (h & 0x0fffffff);
+}
+
+/*
+ * Hash function for symbol table lookup.  Don't even think about changing
+ * this.  It is specified by the GNU toolchain ABI.
+ */
+Elf32_Word
+_rtld_gnu_hash(const char *name)
+{
+	const unsigned char *p = (const unsigned char *) name;
+	uint_fast32_t h = 5381;
+	unsigned char c;
+
+	for (c = *p; c != '\0'; c = *++p)
+		h = h * 33 + c;
+	return (h & 0xffffffff);
+}
Index: src/libexec/ld.elf_so/hash.h
diff -u /dev/null src/libexec/ld.elf_so/hash.h:1.1
--- /dev/null	Sun Jul 30 09:20:14 2023
+++ src/libexec/ld.elf_so/hash.h	Sun Jul 30 09:20:14 2023
@@ -0,0 +1,42 @@
+/*	$NetBSD: hash.h,v 1.1 2023/07/30 09:20:14 riastradh Exp $	 */
+
+/*
+ * Copyright 1996 John D. Polstra.
+ * Copyright 1996 Matt Thomas <m...@3am-software.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by John Polstra.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef	RTLD_HASH_H
+#define	RTLD_HASH_H
+
+#include <sys/exec_elf.h>
+
+Elf32_Word _rtld_sysv_hash(const char *);
+Elf32_Word _rtld_gnu_hash(const char *);
+
+#endif	/* RTLD_HASH_H */

Reply via email to