Update.
1998-12-31 Ulrich Drepper <drepper@cygnus.com>
* iconvdata/Makefile: Use rpath $ORIGIN for modules which use any of
the conversion libraries.
* include/features.h: Mention latest extensions in _POSIX_C_SOURCE
description.
* libio/genops.c (list_all_lock): New variable.
(_IO_un_link, _IO_link_in): Acquire lock before modifying _IO_list_all.
[PR libc/911].
* sysdeps/i386/i686/strtok.s: Add missing cld.
* sysdeps/i386/i686/mempcpy.S: New file.
1998-12-30 Geoff Keating <geoffk@ozemail.com.au>
Suppress parentheses warnings:
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
(DL_FIND_ARG_COMPONENTS): here,
* sysdeps/powerpc/dl-machine.c: here,
* sysdeps/powerpc/fclrexcpt.c (feclearexcept): here,
* sysdeps/powerpc/fesetround.c (fesetround): here,
* sysdeps/powerpc/feupdateenv.c (feupdateenv): here,
* sysdeps/powerpc/fraiseexcpt.c (feraiseexcept): here,
* sysdeps/powerpc/fsetexcptflg.c (fesetexceptflag): here,
* sysdeps/powerpc/s_rint.c (__rint): here,
* sysdeps/powerpc/s_rintf.c (__rintf): here,
* sysdeps/powerpc/w_sqrt.c (__sqrt): here,
* sysdeps/powerpc/w_sqrtf.c (__sqrtf): and here.
1998-12-30 Geoff Keating <geoffk@ozemail.com.au>
* wcsmbs/wcstold.c [__NO_LONG_DOUBLE_MATH]: Include wchar.h.
* wcsmbs/wcstold_l.c [__NO_LONG_DOUBLE_MATH]: Likewise. Also define
appropropriate prototypes, correct procedure names.
1998-12-30 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/generic/crypt-entry.c: Prototype __crypt_r, suppress
warning.
(__crypt_r): Add __restrict.
* sysdeps/generic/crypt.h: Remove internal routine. Add __restrict.
1998-12-31 Ulrich Drepper <drepper@cygnus.com>
* stdlib/longlong.h: Add missing #else in SPARC definitions.
1998-12-30 Andreas Jaeger <aj@arthur.rhein-neckar.de>
Patches by Ralf Baechle <ralf@gnu.org>:
* sysdeps/unix/sysv/linux/mips/sgidefs.h: Removed.
* sysdeps/unix/sysv/linux/mips/sys/asm.h: Removed.
* sysdeps/unix/sysv/linux/mips/sys/regdef.h: Removed.
* sysdeps/unix/sysv/linux/mips/sys/fpregdef.h: Removed.
* sysdeps/unix/sysv/linux/mips/regdef.h: Removed.
* sysdeps/unix/sysv/linux/mips/fpregdef.h: Removed.
* sysdeps/unix/sysv/linux/mips/Makefile: Remove delete files.
* sysdeps/unix/sysv/linux/mips/Dist: Remove deleted files.
* sysdeps/mips/sys/fpregdef.h: New files, enhanced versions of deleted
linux specific files.
* sysdeps/mips/sys/asm.h: Likewise.
* sysdeps/mips/sgidefs.h: Likewise.
* sysdeps/mips/fpregdef.h: Likewise.
* sysdeps/mips/regdef.h: Likewise.
* sysdeps/mips/Makefile: Add new headers.
* sysdeps/mips/Dist: Add new files.
* sysdeps/mips/fpu_control.h (_FPU_DEFAULT): Change value.
1998-12-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* iconvdata/Makefile: Remove variable assignments and rules that
are now auto-generated. Include $(objpfx)iconv-rules instead.
Btw, that removes a few typos.
(charmaps): New variable.
($(objpfx)iconv-rules): New target.
(gen-8bit-modules): Renamed from sed-generated-headers, remove .h
suffixes.
(gen-8bit-gap-modules): Renamed from awk-generated-headers, remove
.h suffixes.
(gen-special-modules): New variable.
(generated-modules): New variable.
(headers): Use it.
(before-compile): Likewise.
(generated): Likewise, and add iconv-rules.
* iconvdata/euc-cn.c: Renamed from euccn.c.
* iconvdata/euc-jp.c: Renamed from eucjp.c.
* iconvdata/euc-kr.c: Renamed from euckr.c.
* iconvdata/euc-tw.c: Renamed from euctw.c.
* iconvdata/iso_6937.c: Renamed from iso6937.c.
* iconvdata/iso_6937-2.c: Renamed from iso6937-2.c.
* iconvdata/t.61.c: Renamed from t61.c.
* iconvdata/Makefile (distribute): Adjusted for those renames.
Remove $(objpfx) from names.
1998-12-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* sysdeps/generic/hp-timing.h: Fix comment.
* sysdeps/generic/dl-hash.h: Likewise.
* sysdeps/i386/i686/hp-timing.h: Likewise.
1998-12-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* posix/fnmatch.c (fnmatch): Always pass unsigned char values to
FOLD macro.
1998-12-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* nss/db-Makefile ($(VAR_DB)/shadow.db): Fix last change.
1998-12-29 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Sync with
current Linux 2.1.132 kernel sources.
1998-12-28 Andreas Jaeger <aj@arthur.rhein-neckar.de>
Patches by Ralf Baechle <ralf@gnu.org> for Linux/MIPS:
* sysdeps/unix/sysv/linux/mips/syscalls.list: Add ipc, change
pread/pwrite and llseek calls.
* sysdeps/unix/sysv/linux/mips/sysdep.S: New file.
1998-12-29 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>
* malloc/thread-m.h [_LIBC] : Fix for NO_THREADS case.
1998-12-31 18:19:19 +00:00
|
|
|
/* Compute hash value for given string according to ELF standard.
|
2020-01-01 00:14:33 +00:00
|
|
|
Copyright (C) 1995-2020 Free Software Foundation, Inc.
|
1997-02-19 04:43:53 +00:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 04:58:11 +00:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1997-02-19 04:43:53 +00:00
|
|
|
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2001-07-06 04:58:11 +00:00
|
|
|
Lesser General Public License for more details.
|
1997-02-19 04:43:53 +00:00
|
|
|
|
2001-07-06 04:58:11 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-09 23:18:22 +00:00
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
1997-02-19 04:43:53 +00:00
|
|
|
|
|
|
|
#ifndef _DL_HASH_H
|
|
|
|
#define _DL_HASH_H 1
|
|
|
|
|
|
|
|
|
|
|
|
/* This is the hashing function specified by the ELF ABI. In the
|
1998-12-26 09:30:54 +00:00
|
|
|
first five operations no overflow is possible so we optimized it a
|
1997-02-19 04:43:53 +00:00
|
|
|
bit. */
|
2003-06-18 19:34:34 +00:00
|
|
|
static unsigned int
|
2011-12-04 21:12:20 +00:00
|
|
|
__attribute__ ((unused))
|
[BZ #284, BZ #721]
* intl/dcigettext.c (_nl_find_msg): Add a cast.
* nis/nis_clone_dir.c (nis_clone_directory): Use char * for ADDR.
* nis/nis_clone_obj.c (nis_clone_object): Likewise.
* nis/nis_clone_res.c (nis_clone_result): Likewise.
* resolv/nss_dns/dns-network.c (getanswer_r): Use const unsigned char *
for END_OF_MESSAGE and CP.
* resolv/res_send.c (send_dg): Add else branch for case impossible
unless `poll' is buggy.
* crypt/crypt_util.c (__setkey_r): Add a cast.
* locale/programs/linereader.c (get_toplvl_escape): Use size_t for
NBYTES, and unsigned char * for BYTES.
* locale/programs/charmap.c (charmap_new_char): Use size_t and
unsighed char * for NBYTES, BYTES parameters.
* sysdeps/generic/dl-hash.h (_dl_elf_hash): Take const char * argument
and cast it.
* sysdeps/i386/i686/dl-hash.h (_dl_elf_hash): Likewise.
* sunrpc/create_xid.c (_create_xid): Don't use unsigned long for RES.
* sunrpc/svcauth_des.c (_svcauth_des): Fix cast type.
* sunrpc/auth_des.c (authdes_create): Don't use u_char for PKEY_DATA.
(authdes_marshal): Don't use unsigned int for LEN.
* sunrpc/xdr.c (xdr_hyper): Don't use unsigned long for T2.
(xdr_u_hyper): Likewise.
(xdr_u_short): Don't use u_long for L.
* sunrpc/xdr_intXX_t.c (xdr_int64_t): Don't use uint32_t for T2.
* inet/rexec.c (rexec_af): Use socklen_t.
* sunrpc/key_call.c (getkeyserv_handle): Likewise.
* sunrpc/rtime.c (rtime): Likewise.
* resolv/res_send.c (send_vc, send_dg): Likewise.
* nis/nis_callback.c (__nis_create_callback): Likewise.
* sysdeps/generic/libc-start.c: Use unsigned int for nthreads ptr.
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix type of ADDR local.
* libio/libio.h (_IO_BE): Add parenthesis around EXPR.
* intl/dcigettext.c (INTVARDEF, INTUSE): Macros removed.
(_nl_default_dirname): Use libc_hidden_data_def instead of INTVARDEF.
(libc_freeres_fn, DCIGETTEXT): Don't use INTUSE.
* intl/bindtextdom.c (INTUSE): Macro removed.
(_nl_default_dirname): Use libc_hidden_proto.
(set_binding_values): Don't use INTUSE.
* include/libintl.h (_libc_intl_domainname_internal): Decl removed.
(_libc_intl_domainname): Use libc_hidden_proto.
* posix/regex_internal.h (gettext): Remove INTUSE on it.
* locale/SYS_libc.c (_libc_intl_domainname): Use libc_hidden_data_def
rather than INTDEF.
* include/libintl.h (_): Don't use *_internal name.
* ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Use int32_t,
not uint32_t.
* locale/lc-ctype.c (_nl_postload_ctype): Likewise for assignments.
* iconv/gconv_open.c (__gconv_open): Remove useless cast.
[BZ #721]
* sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define this outside
of [RESOLVE_MAP].
* sysdeps/sh/dl-machine.h (ELF_MACHINE_NO_REL): Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
2005-02-03 Alexandre Oliva <aoliva@redhat.com>
[BZ #721]
* elf/dynamic-link.h: Don't declare nested auto functions that are
not going to be defined.
2004-07-23 Jakub Jelinek <jakub@redhat.com>
[BZ #284]
* include/features.h (_POSIX_SOURCE, _POSIX_C_SOURCE): Define
if _XOPEN_SOURCE >= 500 even if __STRICT_ANSI__ is defined.
2005-02-16 Roland McGrath <roland@redhat.com>
2005-02-17 01:19:55 +00:00
|
|
|
_dl_elf_hash (const char *name_arg)
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
[BZ #284, BZ #721]
* intl/dcigettext.c (_nl_find_msg): Add a cast.
* nis/nis_clone_dir.c (nis_clone_directory): Use char * for ADDR.
* nis/nis_clone_obj.c (nis_clone_object): Likewise.
* nis/nis_clone_res.c (nis_clone_result): Likewise.
* resolv/nss_dns/dns-network.c (getanswer_r): Use const unsigned char *
for END_OF_MESSAGE and CP.
* resolv/res_send.c (send_dg): Add else branch for case impossible
unless `poll' is buggy.
* crypt/crypt_util.c (__setkey_r): Add a cast.
* locale/programs/linereader.c (get_toplvl_escape): Use size_t for
NBYTES, and unsigned char * for BYTES.
* locale/programs/charmap.c (charmap_new_char): Use size_t and
unsighed char * for NBYTES, BYTES parameters.
* sysdeps/generic/dl-hash.h (_dl_elf_hash): Take const char * argument
and cast it.
* sysdeps/i386/i686/dl-hash.h (_dl_elf_hash): Likewise.
* sunrpc/create_xid.c (_create_xid): Don't use unsigned long for RES.
* sunrpc/svcauth_des.c (_svcauth_des): Fix cast type.
* sunrpc/auth_des.c (authdes_create): Don't use u_char for PKEY_DATA.
(authdes_marshal): Don't use unsigned int for LEN.
* sunrpc/xdr.c (xdr_hyper): Don't use unsigned long for T2.
(xdr_u_hyper): Likewise.
(xdr_u_short): Don't use u_long for L.
* sunrpc/xdr_intXX_t.c (xdr_int64_t): Don't use uint32_t for T2.
* inet/rexec.c (rexec_af): Use socklen_t.
* sunrpc/key_call.c (getkeyserv_handle): Likewise.
* sunrpc/rtime.c (rtime): Likewise.
* resolv/res_send.c (send_vc, send_dg): Likewise.
* nis/nis_callback.c (__nis_create_callback): Likewise.
* sysdeps/generic/libc-start.c: Use unsigned int for nthreads ptr.
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix type of ADDR local.
* libio/libio.h (_IO_BE): Add parenthesis around EXPR.
* intl/dcigettext.c (INTVARDEF, INTUSE): Macros removed.
(_nl_default_dirname): Use libc_hidden_data_def instead of INTVARDEF.
(libc_freeres_fn, DCIGETTEXT): Don't use INTUSE.
* intl/bindtextdom.c (INTUSE): Macro removed.
(_nl_default_dirname): Use libc_hidden_proto.
(set_binding_values): Don't use INTUSE.
* include/libintl.h (_libc_intl_domainname_internal): Decl removed.
(_libc_intl_domainname): Use libc_hidden_proto.
* posix/regex_internal.h (gettext): Remove INTUSE on it.
* locale/SYS_libc.c (_libc_intl_domainname): Use libc_hidden_data_def
rather than INTDEF.
* include/libintl.h (_): Don't use *_internal name.
* ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Use int32_t,
not uint32_t.
* locale/lc-ctype.c (_nl_postload_ctype): Likewise for assignments.
* iconv/gconv_open.c (__gconv_open): Remove useless cast.
[BZ #721]
* sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define this outside
of [RESOLVE_MAP].
* sysdeps/sh/dl-machine.h (ELF_MACHINE_NO_REL): Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
2005-02-03 Alexandre Oliva <aoliva@redhat.com>
[BZ #721]
* elf/dynamic-link.h: Don't declare nested auto functions that are
not going to be defined.
2004-07-23 Jakub Jelinek <jakub@redhat.com>
[BZ #284]
* include/features.h (_POSIX_SOURCE, _POSIX_C_SOURCE): Define
if _XOPEN_SOURCE >= 500 even if __STRICT_ANSI__ is defined.
2005-02-16 Roland McGrath <roland@redhat.com>
2005-02-17 01:19:55 +00:00
|
|
|
const unsigned char *name = (const unsigned char *) name_arg;
|
2011-12-04 22:44:33 +00:00
|
|
|
unsigned long int hash = *name;
|
|
|
|
if (hash != 0 && name[1] != '\0')
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
2011-12-04 22:44:33 +00:00
|
|
|
hash = (hash << 4) + name[1];
|
|
|
|
if (name[2] != '\0')
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
2011-12-04 22:44:33 +00:00
|
|
|
hash = (hash << 4) + name[2];
|
|
|
|
if (name[3] != '\0')
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
2011-12-04 22:44:33 +00:00
|
|
|
hash = (hash << 4) + name[3];
|
|
|
|
if (name[4] != '\0')
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
2011-12-04 22:44:33 +00:00
|
|
|
hash = (hash << 4) + name[4];
|
|
|
|
name += 5;
|
|
|
|
while (*name != '\0')
|
1997-02-19 04:43:53 +00:00
|
|
|
{
|
2011-12-04 22:44:33 +00:00
|
|
|
unsigned long int hi;
|
1997-02-19 04:43:53 +00:00
|
|
|
hash = (hash << 4) + *name++;
|
2011-12-04 22:44:33 +00:00
|
|
|
hi = hash & 0xf0000000;
|
1998-12-26 09:30:54 +00:00
|
|
|
|
2011-12-04 22:44:33 +00:00
|
|
|
/* The algorithm specified in the ELF ABI is as
|
|
|
|
follows:
|
1998-12-26 09:30:54 +00:00
|
|
|
|
2011-12-04 22:44:33 +00:00
|
|
|
if (hi != 0)
|
|
|
|
hash ^= hi >> 24;
|
1998-12-26 09:30:54 +00:00
|
|
|
|
2011-12-04 22:44:33 +00:00
|
|
|
hash &= ~hi;
|
1998-12-26 09:30:54 +00:00
|
|
|
|
2011-12-04 22:44:33 +00:00
|
|
|
But the following is equivalent and a lot
|
|
|
|
faster, especially on modern processors. */
|
1998-12-26 09:30:54 +00:00
|
|
|
|
2011-12-04 22:44:33 +00:00
|
|
|
hash ^= hi >> 24;
|
1997-02-19 04:43:53 +00:00
|
|
|
}
|
2011-12-10 16:53:44 +00:00
|
|
|
|
|
|
|
/* Second part of the modified formula. This
|
|
|
|
operation can be lifted outside the loop. */
|
|
|
|
hash &= 0x0fffffff;
|
1997-02-19 04:43:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return hash;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* dl-hash.h */
|