aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--elf/dl-deps.c4
-rw-r--r--elf/dl-lookup.c2
-rw-r--r--elf/dl-runtime.c2
-rw-r--r--elf/dl-version.c2
-rw-r--r--elf/do-rel.h2
-rw-r--r--elf/dynamic-link.h6
-rw-r--r--elf/link.h11
-rw-r--r--elf/rtld.c4
-rw-r--r--include/elf.h7
-rw-r--r--sysdeps/generic/dl-dtprocnum.h22
-rw-r--r--sysdeps/ia64/dl-dtprocnum.h22
-rw-r--r--sysdeps/mips/dl-dtprocnum.h22
-rw-r--r--sysdeps/sparc/dl-dtprocnum.h22
14 files changed, 125 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index cf9dfad2c0..8466f26f32 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
2000-06-07 Ulrich Drepper <drepper@redhat.com>
+ * include/elf.h: Include also <dl-dtprocnum.h>.
+ * elf/dl-deps.c: Likewise.
+ * elf/dl-lookup.c: Likewise.
+ * elf/dl-runtime.c: Likewise.
+ * elf/dl-version.c: Likewise.
+ * elf/do-rel.h: Likewise.
+ * elf/dynamic-link.h: Likewise.
+ * elf/link.h: Likewise.
+ * elf/rtld.c: Likewise.
+ * sysdeps/generic/dl-dtprocnum.h: New file.
+ * sysdeps/ia64/dl-dtprocnum.h: New file.
+ * sysdeps/mips/dl-dtprocnum.h: New file.
+ * sysdeps/sparc/dl-dtprocnum.h: New file.
+
* sysdeps/i386/dl-machine.h: Add more __builtin_expect.
* elf/do-lookup.h: Add some __builtin_expect.
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index fca210f72a..670b9df8d4 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -30,11 +30,11 @@
/* Whether an shared object references one or more auxiliary objects
is signaled by the AUXTAG entry in l_info. */
-#define AUXTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGNUM \
+#define AUXTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \
+ DT_EXTRATAGIDX (DT_AUXILIARY))
/* Whether an shared object references one or more auxiliary objects
is signaled by the AUXTAG entry in l_info. */
-#define FILTERTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGNUM \
+#define FILTERTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \
+ DT_EXTRATAGIDX (DT_FILTER))
/* This is zero at program start to signal that the global scope map is
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 09f34f9f4a..d01fdaa648 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -28,7 +28,7 @@
#include <assert.h>
-#define VERSTAG(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag))
+#define VERSTAG(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (tag))
/* We need this string more than once. */
static const char undefined_msg[] = "undefined symbol: ";
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index f0635eae3a..cb38dfe9d0 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -30,7 +30,7 @@
#endif
#ifndef VERSYMIDX
-# define VERSYMIDX(sym) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (sym))
+# define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
#endif
diff --git a/elf/dl-version.c b/elf/dl-version.c
index 0718b8a5a8..67104916d6 100644
--- a/elf/dl-version.c
+++ b/elf/dl-version.c
@@ -29,7 +29,7 @@
#ifndef VERSYMIDX
-# define VERSYMIDX(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag))
+# define VERSYMIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (tag))
#endif
diff --git a/elf/do-rel.h b/elf/do-rel.h
index 721390d4e6..cf39d1df08 100644
--- a/elf/do-rel.h
+++ b/elf/do-rel.h
@@ -27,7 +27,7 @@
#endif
#ifndef VERSYMIDX
-# define VERSYMIDX(sym) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (sym))
+# define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
#endif
/* Perform the relocations in MAP on the running program image as specified
diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h
index 5987707e9c..79e17ed51c 100644
--- a/elf/dynamic-link.h
+++ b/elf/dynamic-link.h
@@ -22,7 +22,7 @@
#include <assert.h>
#ifndef VERSYMIDX
-# define VERSYMIDX(sym) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (sym))
+# define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
#endif
@@ -51,12 +51,12 @@ elf_get_dynamic_info (struct link_map *l)
if (dyn->d_tag < DT_NUM)
info[dyn->d_tag] = dyn;
else if (dyn->d_tag >= DT_LOPROC &&
- dyn->d_tag < DT_LOPROC + DT_PROCNUM)
+ dyn->d_tag < DT_LOPROC + DT_THISPROCNUM)
info[dyn->d_tag - DT_LOPROC + DT_NUM] = dyn;
else if ((Elf32_Word) DT_VERSIONTAGIDX (dyn->d_tag) < DT_VERSIONTAGNUM)
info[VERSYMIDX (dyn->d_tag)] = dyn;
else if ((Elf32_Word) DT_EXTRATAGIDX (dyn->d_tag) < DT_EXTRANUM)
- info[DT_EXTRATAGIDX (dyn->d_tag) + DT_NUM + DT_PROCNUM
+ info[DT_EXTRATAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
+ DT_VERSIONTAGNUM] = dyn;
else
assert (! "bad dynamic tag");
diff --git a/elf/link.h b/elf/link.h
index 0588b523e3..38652ca46a 100644
--- a/elf/link.h
+++ b/elf/link.h
@@ -126,14 +126,15 @@ struct link_map
struct libname_list *l_libname;
/* Indexed pointers to dynamic section.
[0,DT_NUM) are indexed by the processor-independent tags.
- [DT_NUM,DT_NUM+DT_PROCNUM) are indexed by the tag minus DT_LOPROC.
- [DT_NUM+DT_PROCNUM,DT_NUM+DT_PROCNUM+DT_EXTRANUM) are indexed
+ [DT_NUM,DT_NUM+DT_THISPROCNUM) are indexed by the tag minus DT_LOPROC.
+ [DT_NUM+DT_THISPROCNUM,DT_NUM+DT_THISPROCNUM+DT_EXTRANUM) are indexed
by DT_EXTRATAGIDX(tagvalue) and
- [DT_NUM+DT_PROCNUM+DT_VERSIONTAGNUM,
- DT_NUM+DT_PROCNUM+DT_VERSIONTAGNUM+DT_EXTRANUM)
+ [DT_NUM+DT_THISPROCNUM+DT_VERSIONTAGNUM,
+ DT_NUM+DT_THISPROCNUM+DT_VERSIONTAGNUM+DT_EXTRANUM)
are indexed by DT_EXTRATAGIDX(tagvalue) (see <elf.h>). */
- ElfW(Dyn) *l_info[DT_NUM + DT_PROCNUM + DT_VERSIONTAGNUM + DT_EXTRANUM];
+ ElfW(Dyn) *l_info[DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM
+ + DT_EXTRANUM];
const ElfW(Phdr) *l_phdr; /* Pointer to program header table in core. */
ElfW(Addr) l_entry; /* Entry point location. */
ElfW(Half) l_phnum; /* Number of program header entries. */
diff --git a/elf/rtld.c b/elf/rtld.c
index 6bf1dba089..b83eaa61b1 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -348,7 +348,7 @@ match_version (const char *string, struct link_map *map)
const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
ElfW(Verdef) *def;
-#define VERDEFTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (DT_VERDEF))
+#define VERDEFTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERDEF))
if (map->l_info[VERDEFTAG] == NULL)
/* The file has no symbol versioning. */
return 0;
@@ -953,7 +953,7 @@ of this helper program; chances are you did not intend to run this program.\n\
} while (l);
}
-#define VERNEEDTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
+#define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
if (version_info)
{
/* Print more information. This means here, print information
diff --git a/include/elf.h b/include/elf.h
index 8a1764f956..cdedd8598e 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -1 +1,6 @@
-#include <elf/elf.h>
+#ifndef _ELF_H
+# include <elf/elf.h>
+/* Some information which is not meant for the public and therefore not
+ in <elf.h>. */
+# include <dl-dtprocnum.h>
+#endif
diff --git a/sysdeps/generic/dl-dtprocnum.h b/sysdeps/generic/dl-dtprocnum.h
new file mode 100644
index 0000000000..e734f660e7
--- /dev/null
+++ b/sysdeps/generic/dl-dtprocnum.h
@@ -0,0 +1,22 @@
+/* Configuration of lookup functions.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* Number of extra dynamic section entries for this architecture. By
+ default there are none. */
+#define DT_THISPROCNUM 0
diff --git a/sysdeps/ia64/dl-dtprocnum.h b/sysdeps/ia64/dl-dtprocnum.h
new file mode 100644
index 0000000000..bf5e9e4c5e
--- /dev/null
+++ b/sysdeps/ia64/dl-dtprocnum.h
@@ -0,0 +1,22 @@
+/* Configuration of lookup functions. IA-64 version.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* Number of extra dynamic section entries for this architecture. By
+ default there are none. */
+#define DT_THISPROCNUM DT_IA_64_NUM
diff --git a/sysdeps/mips/dl-dtprocnum.h b/sysdeps/mips/dl-dtprocnum.h
new file mode 100644
index 0000000000..bff02c8412
--- /dev/null
+++ b/sysdeps/mips/dl-dtprocnum.h
@@ -0,0 +1,22 @@
+/* Configuration of lookup functions. MIPS version.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* Number of extra dynamic section entries for this architecture. By
+ default there are none. */
+#define DT_THISPROCNUM DT_MIPS_NUM
diff --git a/sysdeps/sparc/dl-dtprocnum.h b/sysdeps/sparc/dl-dtprocnum.h
new file mode 100644
index 0000000000..6eedc0e718
--- /dev/null
+++ b/sysdeps/sparc/dl-dtprocnum.h
@@ -0,0 +1,22 @@
+/* Configuration of lookup functions. SPARC version.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* Number of extra dynamic section entries for this architecture. By
+ default there are none. */
+#define DT_THISPROCNUM DT_SPARC_NUM