This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, ibm/2.13/master, updated. glibc-2.13-16-gcc390a1
- From: rsa at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 3 May 2011 22:08:35 -0000
- Subject: GNU C Library master sources branch, ibm/2.13/master, updated. glibc-2.13-16-gcc390a1
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, ibm/2.13/master has been updated
via cc390a1f1508a79ba7a4d5bb2f04c161a4b45bd9 (commit)
from c2b8191991e549895215d44a32fba567d747af90 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cc390a1f1508a79ba7a4d5bb2f04c161a4b45bd9
commit cc390a1f1508a79ba7a4d5bb2f04c161a4b45bd9
Author: Andreas Schwab <schwab@linux-m68k.org>
Date: Sat Apr 9 14:55:26 2011 -0400
Don't leave empty element in rpath when skipping an element
(cherry picked from commit 34fe483e121660aff222ec1c15d57804f64191ea)
diff --git a/ChangeLog b/ChangeLog
index 5d637da..bb98ede 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-03-14 Andreas Schwab <schwab@redhat.com>
+
+ * elf/dl-load.c (_dl_dst_substitute): When skipping the first
+ rpath element also skip the following colon.
+ (expand_dynamic_string_token): Add is_path parameter and pass
+ down to DL_DST_REQUIRED and _dl_dst_substitute.
+ (decompose_rpath): Call expand_dynamic_string_token with
+ non-zero is_path. Ignore empty rpaths.
+ (_dl_map_object_from_fd): Call expand_dynamic_string_token
+ with zero is_path.
+
2011-03-28 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 41b5ce7..b7d3401 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1,5 +1,5 @@
/* Map in a shared object's segments from the file.
- Copyright (C) 1995-2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 1995-2005, 2006, 2007, 2009, 2010, 2011 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
@@ -284,6 +284,10 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
name += len;
while (*name != '\0' && (!is_path || *name != ':'))
++name;
+ /* Also skip following colon if this is the first rpath
+ element, but keep an empty element at the end. */
+ if (wp == result && is_path && *name == ':' && name[1] != '\0')
+ ++name;
}
else
/* No DST we recognize. */
@@ -310,7 +314,7 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
belonging to the map is loaded. In this case the path element
containing $ORIGIN is left out. */
static char *
-expand_dynamic_string_token (struct link_map *l, const char *s)
+expand_dynamic_string_token (struct link_map *l, const char *s, int is_path)
{
/* We make two runs over the string. First we determine how large the
resulting string is and then we copy it over. Since this is no
@@ -321,7 +325,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s)
char *result;
/* Determine the number of DST elements. */
- cnt = DL_DST_COUNT (s, 1);
+ cnt = DL_DST_COUNT (s, is_path);
/* If we do not have to replace anything simply copy the string. */
if (__builtin_expect (cnt, 0) == 0)
@@ -335,7 +339,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s)
if (result == NULL)
return NULL;
- return _dl_dst_substitute (l, s, result, 1);
+ return _dl_dst_substitute (l, s, result, is_path);
}
@@ -551,13 +555,21 @@ decompose_rpath (struct r_search_path_struct *sps,
/* Make a writable copy. At the same time expand possible dynamic
string tokens. */
- copy = expand_dynamic_string_token (l, rpath);
+ copy = expand_dynamic_string_token (l, rpath, 1);
if (copy == NULL)
{
errstring = N_("cannot create RUNPATH/RPATH copy");
goto signal_error;
}
+ /* Ignore empty rpaths. */
+ if (*copy == 0)
+ {
+ free (copy);
+ sps->dirs = (char *) -1;
+ return false;
+ }
+
/* Count the number of necessary elements in the result array. */
nelems = 0;
for (cp = copy; *cp != '\0'; ++cp)
@@ -2175,7 +2187,7 @@ _dl_map_object (struct link_map *loader, const char *name,
{
/* The path may contain dynamic string tokens. */
realname = (loader
- ? expand_dynamic_string_token (loader, name)
+ ? expand_dynamic_string_token (loader, name, 0)
: local_strdup (name));
if (realname == NULL)
fd = -1;
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 11 +++++++++++
elf/dl-load.c | 24 ++++++++++++++++++------
2 files changed, 29 insertions(+), 6 deletions(-)
hooks/post-receive
--
GNU C Library master sources