diff options
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | elf/dl-debug.c | 2 | ||||
-rw-r--r-- | elf/dl-load.c | 31 | ||||
-rw-r--r-- | include/libc-symbols.h | 41 | ||||
-rw-r--r-- | sysdeps/gnu/errlist-compat.awk | 12 | ||||
-rw-r--r-- | sysdeps/gnu/siglist.c | 23 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/math_private.h | 4 |
7 files changed, 84 insertions, 51 deletions
@@ -1,3 +1,25 @@ +2006-10-09 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0 + rather than r->r_brk. + +2006-11-08 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-load.c (decompose_rpath): Return bool rather than void. + If l->l_name is on inhibit_rpath list, set sps->dirs to -1 and + return false, otherwise return true. + (cache_rpath): Return decompose_rpath return value. + +2006-11-07 Jakub Jelinek <jakub@redhat.com> + + * include/libc-symbols.h (declare_symbol): Rename to... + (declare_symbol_alias): ... this. Add ORIGINAL argument, imply + strong_alias (ORIGINAL, SYMBOL) in asm to make sure it preceedes + .size directive. + * sysdeps/gnu/errlist-compat.awk: Adjust for declare_symbol_alias + changes. + * sysdeps/gnu/siglist.c: Likewise. + 2006-11-03 Steven Munroe <sjmunroe@us.ibm.com> * sysdeps/powerpc/fpu/bits/mathinline.h diff --git a/elf/dl-debug.c b/elf/dl-debug.c index d00fe87..2538364 100644 --- a/elf/dl-debug.c +++ b/elf/dl-debug.c @@ -54,7 +54,7 @@ _dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns) else r = &GL(dl_ns)[ns]._ns_debug; - if (r->r_brk == 0 || ldbase != 0) + if (r->r_map == NULL || ldbase != 0) { /* Tell the debugger where to find the map of loaded objects. */ r->r_version = 1 /* R_DEBUG_VERSION XXX */; diff --git a/elf/dl-load.c b/elf/dl-load.c index ccbbf4f..1650ef9 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -511,7 +511,7 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep, } -static void +static bool internal_function decompose_rpath (struct r_search_path_struct *sps, const char *rpath, struct link_map *l, const char *what) @@ -546,19 +546,8 @@ decompose_rpath (struct r_search_path_struct *sps, { /* This object is on the list of objects for which the RUNPATH and RPATH must not be used. */ - result = calloc (1, sizeof *result); - if (result == NULL) - { - signal_error_cache: - errstring = N_("cannot create cache for search path"); - signal_error: - _dl_signal_error (ENOMEM, NULL, NULL, errstring); - } - - sps->dirs = result; - sps->malloced = 1; - - return; + sps->dirs = (void *) -1; + return false; } while (*inhp != '\0') @@ -588,7 +577,11 @@ decompose_rpath (struct r_search_path_struct *sps, result = (struct r_search_path_elem **) malloc ((nelems + 1 + 1) * sizeof (*result)); if (result == NULL) - goto signal_error_cache; + { + errstring = N_("cannot create cache for search path"); + signal_error: + _dl_signal_error (ENOMEM, NULL, NULL, errstring); + } fillin_rpath (copy, result, ":", 0, what, where); @@ -599,6 +592,7 @@ decompose_rpath (struct r_search_path_struct *sps, sps->dirs = result; /* The caller will change this value if we haven't used a real malloc. */ sps->malloced = 1; + return true; } /* Make sure cached path information is stored in *SP @@ -623,10 +617,9 @@ cache_rpath (struct link_map *l, } /* Make sure the cache information is available. */ - decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB]) - + l->l_info[tag]->d_un.d_val), - l, what); - return true; + return decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB]) + + l->l_info[tag]->d_un.d_val), + l, what); } diff --git a/include/libc-symbols.h b/include/libc-symbols.h index 9eabcbd..a2faeaf 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -294,27 +294,42 @@ requires at runtime the shared libraries from the glibc version used \ for linking") #endif -/* Declare SYMBOL to be TYPE (`function' or `object') and of SIZE bytes, - when the assembler supports such declarations (such as in ELF). +/* Declare SYMBOL to be TYPE (`function' or `object') of SIZE bytes + alias to ORIGINAL, when the assembler supports such declarations + (such as in ELF). This is only necessary when defining something in assembly, or playing funny alias games where the size should be other than what the compiler thinks it is. */ -#define declare_symbol(symbol, type, size) \ - declare_symbol_1 (symbol, type, size) +#define declare_symbol_alias(symbol, original, type, size) \ + declare_symbol_alias_1 (symbol, original, type, size) #ifdef ASM_TYPE_DIRECTIVE_PREFIX # ifdef __ASSEMBLER__ -# define declare_symbol_1(symbol, type, size) \ +# define declare_symbol_alias_1(symbol, original, type, size) \ + strong_alias (original, symbol); \ .type C_SYMBOL_NAME (symbol), \ - declare_symbol_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type), size -# define declare_symbol_1_paste(a, b) declare_symbol_1_paste_1 (a,b) -# define declare_symbol_1_paste_1(a,b) a##b + declare_symbol_alias_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type); \ + .size C_SYMBOL_NAME (symbol), size +# define declare_symbol_alias_1_paste(a, b) \ + declare_symbol_alias_1_paste_1 (a,b) +# define declare_symbol_alias_1_paste_1(a,b) a##b # else /* Not __ASSEMBLER__. */ -# define declare_symbol_1(symbol, type, size) \ - asm (".type " __SYMBOL_PREFIX #symbol ", " \ - declare_symbol_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \ +# define declare_symbol_alias_1(symbol, original, type, size) \ + asm (declare_symbol_alias_1_stringify (ASM_GLOBAL_DIRECTIVE) \ + " " __SYMBOL_PREFIX #symbol \ + "\n\t" declare_symbol_alias_1_alias (symbol, original) \ + "\n\t.type " __SYMBOL_PREFIX #symbol ", " \ + declare_symbol_alias_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \ "\n\t.size " __SYMBOL_PREFIX #symbol ", " #size); -# define declare_symbol_1_stringify(x) declare_symbol_1_stringify_1 (x) -# define declare_symbol_1_stringify_1(x) #x +# define declare_symbol_alias_1_stringify(x) \ + declare_symbol_alias_1_stringify_1 (x) +# define declare_symbol_alias_1_stringify_1(x) #x +# ifdef HAVE_ASM_SET_DIRECTIVE +# define declare_symbol_alias_1_alias(symbol, original) \ + ".set " __SYMBOL_PREFIX #symbol ", " __SYMBOL_PREFIX #original +# else +# define declare_symbol_alias_1_alias(symbol, original) \ + __SYMBOL_PREFIX #symbol " = " __SYMBOL_PREFIX #original +# endif /* HAVE_ASM_SET_DIRECTIVE */ # endif /* __ASSEMBLER__ */ #else # define declare_symbol_1(symbol, type, size) /* Nothing. */ diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk index ab67a18..307c4d7 100644 --- a/sysdeps/gnu/errlist-compat.awk +++ b/sysdeps/gnu/errlist-compat.awk @@ -1,5 +1,5 @@ # awk script to generate errlist-compat.c -# Copyright (C) 2002, 2004 Free Software Foundation, Inc. +# Copyright (C) 2002, 2004, 2006 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 @@ -92,16 +92,18 @@ END { printf "# include <bits/wordsize.h>\n"; printf "extern const char *const __sys_errlist_%s[NERR];\n", old; printf "const int __sys_nerr_%s = %d;\n", old, n; - printf "strong_alias (_sys_errlist_internal, __sys_errlist_%s)\n", old; - printf "declare_symbol (__sys_errlist_%s, object, __WORDSIZE/8*%d)\n", \ - old, n; + printf "declare_symbol_alias (__sys_errlist_%s, _sys_errlist_internal,", \ + old; + printf " object, __WORDSIZE/8*%d)\n", n; printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \ old, old; printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old; printf "extern const char *const ___sys_errlist_%s[NERR];\n", old; printf "extern const int __sys_nerr_%s;\n", old; - printf "strong_alias (__sys_errlist_%s, ___sys_errlist_%s)\n", old, old; + printf "declare_symbol_alias (___sys_errlist_%s, _sys_errlist_internal,", \ + old; + printf " object, __WORDSIZE/8*%d)\n", n; printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old; printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \ old, old; diff --git a/sysdeps/gnu/siglist.c b/sysdeps/gnu/siglist.c index cb1875f..b8d3796 100644 --- a/sysdeps/gnu/siglist.c +++ b/sysdeps/gnu/siglist.c @@ -1,5 +1,5 @@ /* Define list of all signal numbers and their names. - Copyright (C) 1997-2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1997-2000, 2002, 2003, 2006 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 @@ -40,11 +40,11 @@ const char *const __new_sys_sigabbrev[NSIG] = strong_alias (__new_sys_sigabbrev, _sys_sigabbrev_internal) #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -strong_alias (_sys_siglist_internal, __old_sys_siglist) -declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8) +declare_symbol_alias (__old_sys_siglist, _sys_siglist_internal, object, + OLD_SIGLIST_SIZE * __WORDSIZE / 8) -strong_alias (_sys_sigabbrev_internal, __old_sys_sigabbrev) -declare_symbol (__old_sys_sigabbrev, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8) +declare_symbol_alias (__old_sys_sigabbrev, _sys_sigabbrev_internal, object, + OLD_SIGLIST_SIZE * __WORDSIZE / 8) strong_alias (__old_sys_siglist, _old_sys_siglist) compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0); @@ -53,14 +53,15 @@ compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0); #endif #if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE -strong_alias (_sys_siglist_internal, __old2_sys_siglist) -declare_symbol (__old2_sys_siglist, object, OLD2_SIGLIST_SIZE * __WORDSIZE / 8) +declare_symbol_alias (__old2_sys_siglist, __new_sys_siglist, object, + OLD2_SIGLIST_SIZE * __WORDSIZE / 8) -strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev) -declare_symbol (__old2_sys_sigabbrev, object, - OLD2_SIGLIST_SIZE * __WORDSIZE / 8) +declare_symbol_alias (__old2_sys_sigabbrev, __new_sys_sigabbrev, object, + OLD2_SIGLIST_SIZE * __WORDSIZE / 8) + +declare_symbol_alias (_old2_sys_siglist, __new_sys_siglist, object, + OLD2_SIGLIST_SIZE * __WORDSIZE / 8) -strong_alias (__old2_sys_siglist, _old2_sys_siglist) compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1); compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1); compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1); diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h index cea25a8..90021c6 100644 --- a/sysdeps/powerpc/fpu/math_private.h +++ b/sysdeps/powerpc/fpu/math_private.h @@ -15,7 +15,7 @@ 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., 51 Franklin St - Fifth Floor, Boston, + Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _PPC_MATH_PRIVATE_H_ @@ -78,6 +78,6 @@ __ieee754_sqrtf (float __x) } #endif /* __LIBC_INTERNAL_MATH_INLINES */ -# include_next <math_private.h> +#include <math/math_private.h> #endif /* _PPC_MATH_PRIVATE_H_ */ |