You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

101 lines
3.0 KiB

# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../binutils/ld-glob.patch
# Copyright (C) 2006 The OpenSDE Project
# Copyright (C) 2004 - 2006 The T2 SDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---
This adds /etc/ld.so.conf globbing to the gnu linker. We need this, since we
also patch the glibc's dynamic linker and the linker needs to be able to
scan the directories, too.
- Rene Rebe <rene@exactcode.de>
--- binutils-2.15.94.0.1/ld/emultempl/elf32.em 2004-11-22 21:33:33.000000000 +0100
+++ binutils-2.15.94.0.1-glob/ld/emultempl/elf32.em 2004-12-23 23:40:56.549479128 +0100
@@ -633,7 +633,7 @@
}
while (c != '\0');
}
- else
+ else /* normal dir (e.g. no include) */
{
char *dir = p;
while (*p && *p != '=' && *p != ' ' && *p != '\t' && *p != '\f'
@@ -642,14 +642,48 @@
while (p != dir && p[-1] == '/')
--p;
- if (info->path == NULL)
+
+ /* cut trailing comments and such */
+ p[1] = 0;
+
+ /* assume path is a pattern - compare with quite equal glibc patch
+ -ReneR */
+
+ glob_t result;
+ #ifdef GLOB_ONLYDIR
+ if (glob(dir, GLOB_ONLYDIR, NULL, &result) == 0) {
+ #else
+ if (glob(dir, 0, NULL, &result) == 0) {
+ #endif
+ size_t j;
+ for (j = 0; j < result.gl_pathc; j++)
{
+ char* x = result.gl_pathv[j];
+
+ if (info->path == NULL) {
+ info->alloc = strlen(x) + 256;
+ info->path = xmalloc (info->alloc);
+ info->len = 0;
+ }
+ else {
+ if (info->len + 1 + strlen(x) + 1 >= info->alloc) {
+ info->alloc += strlen(x) + 1 + 256;
+ info->path = xrealloc (info->path, info->alloc);
+ }
+ info->path[info->len++] = ':';
+ }
+ strcpy (info->path + info->len, x);
+ info->len += strlen(x);
+
+ }
+ } else {
+ /* error orig. code from binutils - in theory we do not need it */
+ if (info->path == NULL) {
info->alloc = p - dir + 1 + 256;
info->path = xmalloc (info->alloc);
info->len = 0;
}
- else
- {
+ else {
if (info->len + 1 + (p - dir) >= info->alloc)
{
info->alloc += p - dir + 256;
@@ -657,9 +688,11 @@
}
info->path[info->len++] = ':';
}
- memcpy (info->path + info->len, dir, p - dir);
- info->len += p - dir;
- info->path[info->len] = '\0';
+ memcpy (info->path + info->len, dir, p - dir);
+ info->len += p - dir;
+ info->path[info->len] = '\0';
+ }
+ globfree (&result);
}
}
while (! feof (f));