aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/generic/ldsodefs.h11
-rw-r--r--sysdeps/ia64/dl-lookupcfg.h3
3 files changed, 18 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index af5fa2439f..197a0ff1a0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-26 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/generic/ldsodefs.h (ELF_RTYPE_CLASS_COPY): Define to 2
+ only if DL_NO_COPY_RELOCS is not defined.
+ * sysdeps/ia64/dl-lookupcfg.h: Define DL_NO_COPY_RELOCS.
+
2003-03-26 Roland McGrath <roland@redhat.com>
* sysdeps/unix/make-syscalls.sh: When an undefined syscall has
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 8bd2efb8f0..e8234026e8 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -97,9 +97,16 @@ typedef ElfW(Addr) lookup_t;
/* Reloc type classes as returned by elf_machine_type_class().
ELF_RTYPE_CLASS_PLT means this reloc should not be satisfied by
some PLT symbol, ELF_RTYPE_CLASS_COPY means this reloc should not be
- satisfied by any symbol in the executable. */
+ satisfied by any symbol in the executable. Some architectures do
+ not support copy relocations. In this case we define the macro to
+ zero so that the code for handling them gets automatically optimized
+ out. */
#define ELF_RTYPE_CLASS_PLT 1
-#define ELF_RTYPE_CLASS_COPY 2
+#ifndef DL_NO_COPY_RELOCS
+# define ELF_RTYPE_CLASS_COPY 2
+#else
+# define ELF_RTYPE_CLASS_COPY 0
+#endif
/* ELF uses the PF_x macros to specify the segment permissions, mmap
uses PROT_xxx. In most cases the three macros have the values 1, 2,
diff --git a/sysdeps/ia64/dl-lookupcfg.h b/sysdeps/ia64/dl-lookupcfg.h
index 2b15420cab..0ae3dd68ba 100644
--- a/sysdeps/ia64/dl-lookupcfg.h
+++ b/sysdeps/ia64/dl-lookupcfg.h
@@ -23,6 +23,9 @@
#define ELF_FUNCTION_PTR_IS_SPECIAL
#define DL_UNMAP_IS_SPECIAL
+/* We do not support copy relocations for IA-64. */
+#define DL_NO_COPY_RELOCS
+
/* Forward declaration. */
struct link_map;