summaryrefslogtreecommitdiff
path: root/patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch')
-rw-r--r--patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch b/patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch
new file mode 100644
index 0000000..ec48544
--- /dev/null
+++ b/patches/glibc/2.3.6/180-glibc-2.3.6-allow-gcc-4.0-elf.patch
@@ -0,0 +1,67 @@
+From http://www.mail-archive.com/pld-cvs-commit@pld-linux.org/msg00229.html
+Fixes
+ rtld.c: In function '_dl_start':
+ dynamic-link.h:47: error: nested function 'elf_machine_rela_relative' declared but never defined
+ dynamic-link.h:41: error: nested function 'elf_machine_rela' declared but never defined
+when compiling glibc-2.3.4 with gcc-4.0
+
+But see also
+http://sources.redhat.com/ml/libc-hacker/2005-02/msg00000.html
+and
+http://sources.redhat.com/ml/libc-hacker/2005-03/msg00008.html
+which seem to propose less radical fixes?
+
+Aha. See also http://sources.redhat.com/bugzilla/show_bug.cgi?id=721
+
+--- glibc-2.3.6.orig/elf/dynamic-link.h 2005-03-12 18:12:37.000000000 -0800
++++ glibc-2.3.6/elf/dynamic-link.h 2005-03-12 18:12:59.777820848 -0800
+@@ -19,47 +19,6 @@
+
+ #include <elf.h>
+ #include <assert.h>
+-
+-#ifdef RESOLVE
+-/* We pass reloc_addr as a pointer to void, as opposed to a pointer to
+- ElfW(Addr), because not all architectures can assume that the
+- relocated address is properly aligned, whereas the compiler is
+- entitled to assume that a pointer to a type is properly aligned for
+- the type. Even if we cast the pointer back to some other type with
+- less strict alignment requirements, the compiler might still
+- remember that the pointer was originally more aligned, thereby
+- optimizing away alignment tests or using word instructions for
+- copying memory, breaking the very code written to handle the
+- unaligned cases. */
+-# if ! ELF_MACHINE_NO_REL
+-auto inline void __attribute__((always_inline))
+-elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
+- const ElfW(Sym) *sym, const struct r_found_version *version,
+- void *const reloc_addr);
+-auto inline void __attribute__((always_inline))
+-elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
+- void *const reloc_addr);
+-# endif
+-# if ! ELF_MACHINE_NO_RELA
+-auto inline void __attribute__((always_inline))
+-elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
+- const ElfW(Sym) *sym, const struct r_found_version *version,
+- void *const reloc_addr);
+-auto inline void __attribute__((always_inline))
+-elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
+- void *const reloc_addr);
+-# endif
+-# if ELF_MACHINE_NO_RELA || defined ELF_MACHINE_PLT_REL
+-auto inline void __attribute__((always_inline))
+-elf_machine_lazy_rel (struct link_map *map,
+- ElfW(Addr) l_addr, const ElfW(Rel) *reloc);
+-# else
+-auto inline void __attribute__((always_inline))
+-elf_machine_lazy_rel (struct link_map *map,
+- ElfW(Addr) l_addr, const ElfW(Rela) *reloc);
+-# endif
+-#endif
+-
+ #include <dl-machine.h>
+
+ #ifndef VERSYMIDX
+
+Signed-off-by: Robert P. J. Day <rpjday@mindspring.com>