* 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.
This commit is contained in:
Ulrich Drepper 2006-11-09 16:12:22 +00:00
parent a9a6bf36c1
commit 2692deea65
7 changed files with 84 additions and 51 deletions

View File

@ -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

View File

@ -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 */;

View File

@ -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])
return decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB])
+ l->l_info[tag]->d_un.d_val),
l, what);
return true;
}

View File

@ -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. */

View File

@ -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;

View File

@ -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)
strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev)
declare_symbol (__old2_sys_sigabbrev, object,
declare_symbol_alias (__old2_sys_siglist, __new_sys_siglist, 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);

View File

@ -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_ */