Skip to content

Commit

Permalink
* elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0
Browse files Browse the repository at this point in the history
	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.
  • Loading branch information
Ulrich Drepper committed Nov 9, 2006
1 parent a9a6bf3 commit 2692dee
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 51 deletions.
22 changes: 22 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion elf/dl-debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */;
Expand Down
31 changes: 12 additions & 19 deletions elf/dl-load.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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')
Expand Down Expand Up @@ -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);

Expand All @@ -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
Expand All @@ -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);
}


Expand Down
41 changes: 28 additions & 13 deletions include/libc-symbols.h
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
12 changes: 7 additions & 5 deletions sysdeps/gnu/errlist-compat.awk
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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;
Expand Down
23 changes: 12 additions & 11 deletions sysdeps/gnu/siglist.c
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/powerpc/fpu/math_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_
Expand Down Expand Up @@ -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_ */

0 comments on commit 2692dee

Please sign in to comment.