@ -0,0 +1,110 @@ |
|||
Fixes |
|||
In file included from dynamic-link.h:22, |
|||
from dl-reloc.c:265: |
|||
../sysdeps/arm/dl-machine.h: In function '_dl_relocate_object': |
|||
../sysdeps/arm/dl-machine.h:371: error: invalid storage class for function 'fix_bad_pc24' |
|||
../sysdeps/arm/dl-machine.h:406: error: invalid storage class for function 'elf_machine_rel' |
|||
../sysdeps/arm/dl-machine.h:532: error: invalid storage class for function 'elf_machine_rela' |
|||
../sysdeps/arm/dl-machine.h:612: error: invalid storage class for function 'elf_machine_rel_relative' |
|||
../sysdeps/arm/dl-machine.h:621: error: invalid storage class for function 'elf_machine_rela_relative' |
|||
../sysdeps/arm/dl-machine.h:630: error: invalid storage class for function 'elf_machine_lazy_rel' |
|||
|
|||
--- glibc-2.3.4/sysdeps/arm/dl-machine.h.old Sun Mar 20 17:54:37 2005
|
|||
+++ glibc-2.3.4/sysdeps/arm/dl-machine.h Sun Mar 20 17:57:32 2005
|
|||
@@ -359,7 +359,14 @@
|
|||
# endif |
|||
|
|||
/* Deal with an out-of-range PC24 reloc. */ |
|||
-static Elf32_Addr
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline Elf32_Addr
|
|||
+#else
|
|||
+ static inline Elf32_Addr
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
fix_bad_pc24 (Elf32_Addr *const reloc_addr, Elf32_Addr value) |
|||
{ |
|||
static void *fix_page; |
|||
@@ -392,7 +399,14 @@
|
|||
/* Perform the relocation specified by RELOC and SYM (which is fully resolved). |
|||
MAP is the object containing the reloc. */ |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, |
|||
const Elf32_Sym *sym, const struct r_found_version *version, |
|||
void *const reloc_addr_arg) |
|||
@@ -517,7 +531,14 @@
|
|||
} |
|||
|
|||
# ifndef RTLD_BOOTSTRAP |
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, |
|||
const Elf32_Sym *sym, const struct r_found_version *version, |
|||
void *const reloc_addr_arg) |
|||
@@ -597,7 +618,14 @@
|
|||
} |
|||
# endif |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc, |
|||
void *const reloc_addr_arg) |
|||
{ |
|||
@@ -606,7 +634,14 @@
|
|||
} |
|||
|
|||
# ifndef RTLD_BOOTSTRAP |
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, |
|||
void *const reloc_addr_arg) |
|||
{ |
|||
@@ -615,7 +650,14 @@
|
|||
} |
|||
# endif |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_lazy_rel (struct link_map *map, |
|||
Elf32_Addr l_addr, const Elf32_Rel *reloc) |
|||
{ |
|||
|
@ -0,0 +1,54 @@ |
|||
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 |
|||
|
|||
--- glibc-2.3-20050307/elf/dynamic-link.h.old 2005-03-12 18:12:37.000000000 -0800
|
|||
+++ glibc-2.3-20050307/elf/dynamic-link.h 2005-03-12 18:12:59.777820848 -0800
|
|||
@@ -19,43 +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. */
|
|||
-auto 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 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 void __attribute__((always_inline))
|
|||
-elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
|
|||
- void *const reloc_addr);
|
|||
-auto void __attribute__((always_inline))
|
|||
-elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
|
|||
- void *const reloc_addr);
|
|||
-# if ELF_MACHINE_NO_RELA || defined ELF_MACHINE_PLT_REL
|
|||
-auto void __attribute__((always_inline))
|
|||
-elf_machine_lazy_rel (struct link_map *map,
|
|||
- ElfW(Addr) l_addr, const ElfW(Rel) *reloc);
|
|||
-# else
|
|||
-auto 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 |
|||
|
@ -0,0 +1,42 @@ |
|||
Fixes |
|||
In file included from jis0208.c:23: |
|||
jis0208.h:32: error: array type has incomplete element type |
|||
when building glibc with gcc-4.0 |
|||
The bug has been present since at least glibc-2.2.5. |
|||
This patch applies cleanly to glibc-2.3.4 |
|||
|
|||
--- /home/dank/downloads/glibc-2.3-20050307/iconvdata/jis0208.h 2003-06-11 14:40:42.000000000 -0700
|
|||
+++ glibc-2.3-20050307/iconvdata/jis0208.h 2005-03-13 20:55:01.784054760 -0800
|
|||
@@ -24,15 +24,6 @@
|
|||
#include <gconv.h> |
|||
#include <stdint.h> |
|||
|
|||
-/* Conversion table. */
|
|||
-extern const uint16_t __jis0208_to_ucs[];
|
|||
-
|
|||
-extern const char __jisx0208_from_ucs4_lat1[256][2];
|
|||
-extern const char __jisx0208_from_ucs4_greek[0xc1][2];
|
|||
-extern const struct jisx0208_ucs_idx __jisx0208_from_ucs_idx[];
|
|||
-extern const char __jisx0208_from_ucs_tab[][2];
|
|||
-
|
|||
-
|
|||
/* Struct for table with indeces in UCS mapping table. */ |
|||
struct jisx0208_ucs_idx |
|||
{ |
|||
@@ -42,6 +33,15 @@
|
|||
}; |
|||
|
|||
|
|||
+/* Conversion table. */
|
|||
+extern const uint16_t __jis0208_to_ucs[];
|
|||
+
|
|||
+extern const char __jisx0208_from_ucs4_lat1[256][2];
|
|||
+extern const char __jisx0208_from_ucs4_greek[0xc1][2];
|
|||
+extern const struct jisx0208_ucs_idx __jisx0208_from_ucs_idx[];
|
|||
+extern const char __jisx0208_from_ucs_tab[][2];
|
|||
+
|
|||
+
|
|||
static inline uint32_t |
|||
__attribute ((always_inline)) |
|||
jisx0208_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset) |
|||
|
@ -0,0 +1,48 @@ |
|||
2005-02-21 Alan Modra <amodra@bigpond.net.au> |
|||
|
|||
* sysdeps/unix/sysv/linux/powerpc/sys/procfs.h (elf_vrreg_t): Don't |
|||
use __uint128_t. |
|||
|
|||
Fixes |
|||
|
|||
In file included from ../linuxthreads_db/proc_service.h:20, |
|||
from ../linuxthreads_db/thread_dbP.h:7, |
|||
from ../linuxthreads/descr.h:44, |
|||
from ../linuxthreads/internals.h:30, |
|||
from ../linuxthreads/sysdeps/pthread/bits/libc-lock.h:27, |
|||
from ../sysdeps/generic/ldsodefs.h:38, |
|||
from ../sysdeps/unix/sysv/linux/ldsodefs.h:25, |
|||
from <stdin>:2: |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:57: error: syntax error before 'elf_vrreg_t' |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:57: warning: type defaults to 'int' in declaration of 'elf_vrreg_t' |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:57: warning: data definition has no type or storage class |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:58: error: syntax error before 'elf_vrregset_t' |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:58: warning: type defaults to 'int' in declaration of 'elf_vrregset_t' |
|||
../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:58: warning: data definition has no type or storage class |
|||
|
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h,v |
|||
retrieving revision 1.11 |
|||
retrieving revision 1.12 |
|||
diff -u -r1.11 -r1.12
|
|||
--- libc/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h 2003/12/17 23:09:34 1.11
|
|||
+++ libc/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h 2005/03/02 20:11:38 1.12
|
|||
@@ -46,15 +46,10 @@
|
|||
typedef double elf_fpreg_t; |
|||
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; |
|||
|
|||
-/* gcc 3.1 and newer support __uint128_t. */
|
|||
-#if !__GNUC_PREREQ(3,1)
|
|||
-typedef struct {
|
|||
- unsigned long u[4];
|
|||
-} __attribute((aligned(16))) __uint128_t;
|
|||
-#endif
|
|||
-
|
|||
/* Altivec registers */ |
|||
-typedef __uint128_t elf_vrreg_t;
|
|||
+typedef struct {
|
|||
+ unsigned int u[4];
|
|||
+} __attribute__ ((aligned (16))) elf_vrreg_t;
|
|||
typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG]; |
|||
#endif |
|||
|
@ -0,0 +1,41 @@ |
|||
Fixes |
|||
|
|||
../sysdeps/powerpc/powerpc32/dl-machine.h: In function '_dl_relocate_object': |
|||
../sysdeps/powerpc/powerpc32/dl-machine.h:461: error: invalid storage class for function 'elf_machine_rela_relative' |
|||
../sysdeps/powerpc/powerpc32/dl-machine.h:469: error: invalid storage class for function 'elf_machine_lazy_rel' |
|||
|
|||
diff -ur glibc-2.3-20050307.orig/sysdeps/powerpc/powerpc32/dl-machine.h glibc-2.3-20050307/sysdeps/powerpc/powerpc32/dl-machine.h
|
|||
--- glibc-2.3-20050307.orig/sysdeps/powerpc/powerpc32/dl-machine.h Wed Jul 30 23:33:52 2003
|
|||
+++ glibc-2.3-20050307/sysdeps/powerpc/powerpc32/dl-machine.h Thu Mar 17 13:19:16 2005
|
|||
@@ -455,7 +455,14 @@
|
|||
} |
|||
} |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, |
|||
void *const reloc_addr_arg) |
|||
{ |
|||
@@ -463,7 +470,14 @@
|
|||
*reloc_addr = l_addr + reloc->r_addend; |
|||
} |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_lazy_rel (struct link_map *map, |
|||
Elf32_Addr l_addr, const Elf32_Rela *reloc) |
|||
{ |
@ -0,0 +1,60 @@ |
|||
Fixes: |
|||
|
|||
In file included from dynamic-link.h:22, |
|||
from dl-reloc.c:269: |
|||
../sysdeps/powerpc/powerpc64/dl-machine.h: In function '_dl_relocate_object': |
|||
../sysdeps/powerpc/powerpc64/dl-machine.h:573: error: invalid storage class for function 'elf_machine_rela_relative' |
|||
../sysdeps/powerpc/powerpc64/dl-machine.h:607: error: invalid storage class for function 'elf_machine_rela' |
|||
../sysdeps/powerpc/powerpc64/dl-machine.h:889: error: invalid storage class for function 'elf_machine_lazy_rel' |
|||
|
|||
--- glibc-2.3-20050307/sysdeps/powerpc/powerpc64/dl-machine.h.old Thu Mar 17 13:35:23 2005
|
|||
+++ glibc-2.3-20050307/sysdeps/powerpc/powerpc64/dl-machine.h Thu Mar 17 13:37:12 2005
|
|||
@@ -567,7 +567,14 @@
|
|||
const Elf64_Sym *refsym) |
|||
attribute_hidden; |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, |
|||
void *const reloc_addr_arg) |
|||
{ |
|||
@@ -598,7 +605,14 @@
|
|||
|
|||
/* Perform the relocation specified by RELOC and SYM (which is fully |
|||
resolved). MAP is the object containing the reloc. */ |
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_rela (struct link_map *map, |
|||
const Elf64_Rela *reloc, |
|||
const Elf64_Sym *sym, |
|||
@@ -883,7 +897,14 @@
|
|||
MODIFIED_CODE_NOQUEUE (reloc_addr); |
|||
} |
|||
|
|||
-static inline void
|
|||
+#if __GNUC__ >= 4
|
|||
+ auto inline void
|
|||
+#else
|
|||
+ static inline void
|
|||
+#endif
|
|||
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
|
|||
+ __attribute ((always_inline))
|
|||
+#endif
|
|||
elf_machine_lazy_rel (struct link_map *map, |
|||
Elf64_Addr l_addr, const Elf64_Rela *reloc) |
|||
{ |
|||
|
@ -0,0 +1,16 @@ |
|||
../sysdeps/generic/wordexp.c: In function 'exec_comm': |
|||
../sysdeps/generic/wordexp.c:815: sorry, unimplemented: inlining failed in call to 'exec_comm_child': function body not available |
|||
../sysdeps/generic/wordexp.c:900: sorry, unimplemented: called from here |
|||
|
|||
|
|||
--- glibc-2.3-20050307/sysdeps/generic/wordexp.c.old 2005-03-12 08:54:15.709253928 -0800
|
|||
+++ glibc-2.3-20050307/sysdeps/generic/wordexp.c 2005-03-12 08:54:51.242852000 -0800
|
|||
@@ -809,7 +809,7 @@
|
|||
} |
|||
|
|||
/* Function called by child process in exec_comm() */ |
|||
-static void
|
|||
+static inline void
|
|||
internal_function __attribute__ ((always_inline)) |
|||
exec_comm_child (char *comm, int *fildes, int showerr, int noexec) |
|||
{ |
@ -0,0 +1,71 @@ |
|||
? the following error when building with gcc-4.0.0: |
|||
|
|||
../string/strcoll.c:39: error: '__EI_strcoll' aliased to undefined symbol '__GI_strcoll' |
|||
make[2]: *** [/home/dank/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/build-glibc/wcsmbs/wcscoll.os] Error 1 |
|||
make[2]: Leaving directory `/home/dank/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/glibc-2.3.4/wcsmbs' |
|||
|
|||
|
|||
taken from Dan Kegel's glibc patches |
|||
|
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/string/strcoll.c,v |
|||
retrieving revision 1.33 |
|||
retrieving revision 1.34 |
|||
diff -u -r1.33 -r1.34
|
|||
--- libc/string/strcoll.c 2004/03/14 20:51:30 1.33
|
|||
+++ libc/string/strcoll.c 2005/03/17 21:06:24 1.34
|
|||
@@ -23,6 +23,7 @@
|
|||
# define STRING_TYPE char |
|||
# define STRCOLL strcoll |
|||
# define STRCOLL_L __strcoll_l |
|||
+# define USE_HIDDEN_DEF
|
|||
#endif |
|||
|
|||
#include "../locale/localeinfo.h" |
|||
@@ -35,6 +36,7 @@
|
|||
{ |
|||
return STRCOLL_L (s1, s2, _NL_CURRENT_LOCALE); |
|||
} |
|||
-#if !defined WIDE_CHAR_VERSION
|
|||
-libc_hidden_def (strcoll)
|
|||
+
|
|||
+#ifdef USE_HIDDEN_DEF
|
|||
+libc_hidden_def (STRCOLL)
|
|||
#endif |
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/include/wchar.h,v |
|||
retrieving revision 1.26 |
|||
retrieving revision 1.27 |
|||
diff -u -r1.26 -r1.27
|
|||
--- libc/include/wchar.h 2004/03/14 20:45:10 1.26
|
|||
+++ libc/include/wchar.h 2005/03/17 21:06:24 1.27
|
|||
@@ -56,7 +56,6 @@
|
|||
extern int __wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2, |
|||
size_t __n) |
|||
__attribute_pure__; |
|||
-extern int __wcscoll (__const wchar_t *__s1, __const wchar_t *__s2);
|
|||
extern size_t __wcslen (__const wchar_t *__s) __attribute_pure__; |
|||
extern size_t __wcsnlen (__const wchar_t *__s, size_t __maxlen) |
|||
__attribute_pure__; |
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/wcsmbs/wcscoll.c,v |
|||
retrieving revision 1.13 |
|||
retrieving revision 1.14 |
|||
diff -u -r1.13 -r1.14
|
|||
--- libc/wcsmbs/wcscoll.c 2004/03/14 21:05:48 1.13
|
|||
+++ libc/wcsmbs/wcscoll.c 2005/03/17 21:06:24 1.14
|
|||
@@ -22,12 +22,11 @@
|
|||
|
|||
#define STRING_TYPE wchar_t |
|||
#define USTRING_TYPE wint_t |
|||
-#define STRCOLL __wcscoll
|
|||
+#define STRCOLL wcscoll
|
|||
#define STRCOLL_L __wcscoll_l |
|||
|
|||
#include "../string/strcoll.c" |
|||
|
|||
#ifndef USE_IN_EXTENDED_LOCALE_MODEL |
|||
-weak_alias (__wcscoll, wcscoll)
|
|||
libc_hidden_weak (wcscoll) |
|||
#endif |
|||
|
@ -0,0 +1,105 @@ |
|||
If I'm really lucky, this fixes the following error building with gcc-4.0.0: |
|||
|
|||
../sysdeps/ieee754/dbl-64/s_isinf.c:29: error: 'isinf' aliased to undefined symbol '__isinf' |
|||
make[2]: *** [/home/dank/queue/jobdir.fast/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/build-glibc/math/s_isinf.os] Error 1 |
|||
make[1]: *** [math/subdir_lib] Error 2 |
|||
make: *** [lib] Error 2 |
|||
|
|||
patch taken from Dan Kegel's glibc patches |
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/include/libc-symbols.h,v |
|||
retrieving revision 1.70 |
|||
retrieving revision 1.71 |
|||
diff -u -r1.70 -r1.71
|
|||
--- libc/include/libc-symbols.h 2005/02/11 00:29:46 1.70
|
|||
+++ libc/include/libc-symbols.h 2005/03/17 21:06:27 1.71
|
|||
@@ -583,78 +583,23 @@
|
|||
# define hidden_proto(name, attrs...) \ |
|||
__hidden_proto (name, __GI_##name, ##attrs) |
|||
# define __hidden_proto(name, internal, attrs...) \ |
|||
- extern __typeof (name) internal; \
|
|||
extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ |
|||
__hidden_proto_hiddenattr (attrs); |
|||
# define __hidden_asmname(name) \ |
|||
__hidden_asmname1 (__USER_LABEL_PREFIX__, name) |
|||
# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) |
|||
# define __hidden_asmname2(prefix, name) #prefix name |
|||
-# ifdef HAVE_ASM_SET_DIRECTIVE
|
|||
-# define __hidden_def1(original, alias) \
|
|||
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
|||
- .set C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
|
|||
-# ifdef HAVE_ASM_GLOBAL_DOT_NAME
|
|||
-# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \
|
|||
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
|
|||
- .set C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
|
|||
-# else
|
|||
-# define __hidden_dot_def1(original, alias)
|
|||
-# endif
|
|||
-# else
|
|||
-# define __hidden_def1(original, alias) \
|
|||
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
|||
- C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
|
|||
-# ifdef HAVE_ASM_GLOBAL_DOT_NAME
|
|||
-# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \
|
|||
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
|
|||
- C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
|
|||
-# else
|
|||
-# define __hidden_dot_def1(original, alias)
|
|||
-# endif
|
|||
-# endif
|
|||
-# define __hidden_def2(...) #__VA_ARGS__
|
|||
-# define __hidden_def3(...) __hidden_def2 (__VA_ARGS__)
|
|||
-# define hidden_def(name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name) \
|
|||
- __hidden_dot_def1 (__GI_##name, name)));
|
|||
-# define hidden_data_def(name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name)));
|
|||
-# define hidden_ver(local, name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name) \
|
|||
- __hidden_dot_def1 (local, __GI_##name)));
|
|||
-# define hidden_data_ver(local, name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name)));
|
|||
-# ifdef HAVE_WEAK_SYMBOLS
|
|||
-# ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
|
|||
-# define __hidden_weak1(original, alias) \
|
|||
- .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
|
|||
-# ifdef HAVE_ASM_GLOBAL_DOT_NAME
|
|||
-# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \
|
|||
- .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
|
|||
-# else
|
|||
-# define __hidden_dot_weak1(original, alias)
|
|||
-# endif
|
|||
-# else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
|
|||
-# define __hidden_weak1(original, alias) \
|
|||
- .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \
|
|||
- C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
|
|||
-# ifdef HAVE_ASM_GLOBAL_DOT_NAME
|
|||
-# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \
|
|||
- .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
|
|||
- C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
|
|||
-# else
|
|||
-# define __hidden_dot_weak1(original, alias)
|
|||
-# endif
|
|||
-# endif
|
|||
-# define hidden_weak(name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name) \
|
|||
- __hidden_dot_weak1 (__GI_##name, name)));
|
|||
-# define hidden_data_weak(name) \
|
|||
- __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name)));
|
|||
-# else
|
|||
-# define hidden_weak(name) hidden_def (name)
|
|||
-# endif
|
|||
+# define __hidden_ver1(local, internal, name) \
|
|||
+ extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
|
|||
+ extern __typeof (name) __EI_##name \
|
|||
+ __attribute__((alias (__hidden_asmname (#local))))
|
|||
+# define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name);
|
|||
+# define hidden_data_ver(local, name) hidden_ver(local, name)
|
|||
+# define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
|
|||
+# define hidden_data_def(name) hidden_def(name)
|
|||
+# define hidden_weak(name) \
|
|||
+ __hidden_ver1(__GI_##name, name, name) __attribute__((weak));
|
|||
+# define hidden_data_weak(name) hidden_weak(name)
|
|||
# else |
|||
/* For assembly, we need to do the opposite of what we do in C: |
|||
in assembly gcc __REDIRECT stuff is not in place, so functions |
@ -0,0 +1,39 @@ |
|||
Fixes |
|||
../sysdeps/wordsize-64/wcstol_l.c:11: error: '____wcstoll_l_internal' aliased to undefined symbol '____wcstol_l_internal' |
|||
../sysdeps/wordsize-64/wcstol_l.c:12: error: '__wcstoll_l' aliased to undefined symbol '__wcstol_l' |
|||
../sysdeps/wordsize-64/wcstol_l.c:13: error: 'wcstoll_l' aliased to undefined symbol '__wcstol_l' |
|||
|
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/sysdeps/wordsize-64/strtol_l.c,v |
|||
retrieving revision 1.4 |
|||
retrieving revision 1.4.2.1 |
|||
diff -u -r1.4 -r1.4.2.1
|
|||
--- libc/sysdeps/wordsize-64/strtol_l.c 2003/03/03 09:45:12 1.4
|
|||
+++ libc/sysdeps/wordsize-64/strtol_l.c 2005/03/25 11:59:01 1.4.2.1
|
|||
@@ -8,7 +8,9 @@
|
|||
#undef ____strtoll_l_internal |
|||
#undef __strtoll_l |
|||
#undef strtoll_l |
|||
+#if !UNSIGNED
|
|||
strong_alias (____strtol_l_internal, ____strtoll_l_internal) |
|||
libc_hidden_ver (____strtol_l_internal, ____strtoll_l_internal) |
|||
weak_alias (__strtol_l, __strtoll_l) |
|||
weak_alias (__strtol_l, strtoll_l) |
|||
+#endif
|
|||
===================================================================
|
|||
RCS file: /cvs/glibc/libc/sysdeps/wordsize-64/wcstol_l.c,v |
|||
retrieving revision 1.4 |
|||
retrieving revision 1.4.2.1 |
|||
diff -u -r1.4 -r1.4.2.1
|
|||
--- libc/sysdeps/wordsize-64/wcstol_l.c 2002/08/08 11:44:51 1.4
|
|||
+++ libc/sysdeps/wordsize-64/wcstol_l.c 2005/03/25 11:59:01 1.4.2.1
|
|||
@@ -8,6 +8,8 @@
|
|||
#undef ____wcstoll_l_internal |
|||
#undef __wcstoll_l |
|||
#undef wcstoll_l |
|||
+#if !UNSIGNED
|
|||
strong_alias (____wcstol_l_internal, ____wcstoll_l_internal) |
|||
weak_alias (__wcstol_l, __wcstoll_l) |
|||
weak_alias (__wcstol_l, wcstoll_l) |
|||
+#endif
|
|||
|
@ -0,0 +1,154 @@ |
|||
Fixes http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/920501-8.c |
|||
and makes printf("%f", 1.0) work. |
|||
|
|||
diff -uNrp glibc.old/sysdeps/arm/bits/endian.h glibc.new/sysdeps/arm/bits/endian.h
|
|||
--- glibc.old/sysdeps/arm/bits/endian.h 1999-04-12 11:59:13.000000000 -0400
|
|||
+++ glibc.new/sysdeps/arm/bits/endian.h 2004-02-12 09:15:13.000000000 -0500
|
|||
@@ -9,4 +9,9 @@
|
|||
#else |
|||
#define __BYTE_ORDER __LITTLE_ENDIAN |
|||
#endif |
|||
+
|
|||
+#ifdef __VFP_FP__
|
|||
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
|
|||
+#else
|
|||
#define __FLOAT_WORD_ORDER __BIG_ENDIAN |
|||
+#endif
|
|||
diff -uNrp glibc.old/sysdeps/arm/gmp-mparam.h glibc.new/sysdeps/arm/gmp-mparam.h
|
|||
--- glibc.old/sysdeps/arm/gmp-mparam.h 2001-07-07 15:21:19.000000000 -0400
|
|||
+++ glibc.new/sysdeps/arm/gmp-mparam.h 2004-02-12 09:15:13.000000000 -0500
|
|||
@@ -26,5 +26,13 @@ MA 02111-1307, USA. */
|
|||
#define BITS_PER_SHORTINT 16 |
|||
#define BITS_PER_CHAR 8 |
|||
|
|||
-#define IEEE_DOUBLE_BIG_ENDIAN 0
|
|||
-#define IEEE_DOUBLE_MIXED_ENDIAN 1
|
|||
+#if defined(__ARMEB__)
|
|||
+# define IEEE_DOUBLE_MIXED_ENDIAN 0
|
|||
+# define IEEE_DOUBLE_BIG_ENDIAN 1
|
|||
+#elif defined(__VFP_FP__)
|
|||
+# define IEEE_DOUBLE_MIXED_ENDIAN 0
|
|||
+# define IEEE_DOUBLE_BIG_ENDIAN 0
|
|||
+#else
|
|||
+# define IEEE_DOUBLE_BIG_ENDIAN 0
|
|||
+# define IEEE_DOUBLE_MIXED_ENDIAN 1
|
|||
+#endif
|
|||
diff -uNrp glibc.old/sysdeps/arm/ieee754.h glibc.new/sysdeps/arm/ieee754.h
|
|||
--- glibc.old/sysdeps/arm/ieee754.h 2001-07-07 15:21:19.000000000 -0400
|
|||
+++ glibc.new/sysdeps/arm/ieee754.h 1969-12-31 19:00:00.000000000 -0500
|
|||
@@ -1,115 +0,0 @@
|
|||
-/* Copyright (C) 1992, 1995, 1996, 1998 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 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.
|
|||
-
|
|||
- 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
|
|||
- Lesser General Public License for more details.
|
|||
-
|
|||
- You should have received a copy of the GNU Lesser General Public
|
|||
- License along with the GNU C Library; if not, write to the Free
|
|||
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|||
- 02111-1307 USA. */
|
|||
-
|
|||
-#ifndef _IEEE754_H
|
|||
-
|
|||
-#define _IEEE754_H 1
|
|||
-#include <features.h>
|
|||
-
|
|||
-#include <endian.h>
|
|||
-
|
|||
-__BEGIN_DECLS
|
|||
-
|
|||
-union ieee754_float
|
|||
- {
|
|||
- float f;
|
|||
-
|
|||
- /* This is the IEEE 754 single-precision format. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int mantissa:23;
|
|||
- unsigned int exponent:8;
|
|||
- unsigned int negative:1;
|
|||
- } ieee;
|
|||
-
|
|||
- /* This format makes it easier to see if a NaN is a signalling NaN. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int mantissa:22;
|
|||
- unsigned int quiet_nan:1;
|
|||
- unsigned int exponent:8;
|
|||
- unsigned int negative:1;
|
|||
- } ieee_nan;
|
|||
- };
|
|||
-
|
|||
-#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
|
|||
-
|
|||
-
|
|||
-union ieee754_double
|
|||
- {
|
|||
- double d;
|
|||
-
|
|||
- /* This is the IEEE 754 double-precision format. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int mantissa0:20;
|
|||
- unsigned int exponent:11;
|
|||
- unsigned int negative:1;
|
|||
- unsigned int mantissa1:32;
|
|||
- } ieee;
|
|||
-
|
|||
- /* This format makes it easier to see if a NaN is a signalling NaN. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int mantissa0:19;
|
|||
- unsigned int quiet_nan:1;
|
|||
- unsigned int exponent:11;
|
|||
- unsigned int negative:1;
|
|||
- unsigned int mantissa1:32;
|
|||
- } ieee_nan;
|
|||
- };
|
|||
-
|
|||
-#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
|
|||
-
|
|||
-
|
|||
-/* The following two structures are correct for `new' floating point systems but
|
|||
- wrong for the old FPPC. The only solution seems to be to avoid their use on
|
|||
- old hardware. */
|
|||
-
|
|||
-union ieee854_long_double
|
|||
- {
|
|||
- long double d;
|
|||
-
|
|||
- /* This is the IEEE 854 double-extended-precision format. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int exponent:15;
|
|||
- unsigned int empty:16;
|
|||
- unsigned int negative:1;
|
|||
- unsigned int mantissa1:32;
|
|||
- unsigned int mantissa0:32;
|
|||
- } ieee;
|
|||
-
|
|||
- /* This is for NaNs in the IEEE 854 double-extended-precision format. */
|
|||
- struct
|
|||
- {
|
|||
- unsigned int exponent:15;
|
|||
- unsigned int empty:16;
|
|||
- unsigned int negative:1;
|
|||
- unsigned int mantissa1:32;
|
|||
- unsigned int mantissa0:30;
|
|||
- unsigned int quiet_nan:1;
|
|||
- unsigned int one:1;
|
|||
- } ieee_nan;
|
|||
- };
|
|||
-
|
|||
-#define IEEE854_LONG_DOUBLE_BIAS 0x3fff
|
|||
-
|
|||
-__END_DECLS
|
|||
-
|
|||
-#endif /* ieee754.h */
|
@ -0,0 +1,21 @@ |
|||
From http://svn.exactcode.de/t2/trunk/package/base/glibc32/make-install-lib-all.patch |
|||
Rule to install all needed libraries, not just the ones installed by install-lib, |
|||
yet not install programs. |
|||
|
|||
diff -Naur glibc-2.3.4.orig/Makerules glibc-2.3.4/Makerules
|
|||
--- glibc-2.3.4.orig/Makerules 2004-12-15 20:52:39.000000000 +0200
|
|||
+++ glibc-2.3.4/Makerules 2005-02-19 15:16:31.415125176 +0200
|
|||
@@ -844,6 +844,13 @@
|
|||
installed-libcs := $(foreach o,$(filter-out .os,$(object-suffixes-for-libc)),\ |
|||
$(inst_libdir)/$(patsubst %,$(libtype$o),\ |
|||
$(libprefix)$(libc-name))) |
|||
+
|
|||
+install-lib-all: $(inst_slibdir)/libc.so$(libc.so-version) \
|
|||
+ $(inst_slibdir)/libc-$(version).so \
|
|||
+ $(inst_libdir)/libc.so \
|
|||
+ $(inst_libdir)/libc.a \
|
|||
+ install-lib
|
|||
+
|
|||
install: $(installed-libcs) |
|||
$(installed-libcs): $(inst_libdir)/lib$(libprefix)%: lib $(+force) |
|||
$(make-target-directory) |