Merge rev 1.2 (teach `ld' how to access FreeBSD's ld ELF hints)
into Binutils 2.11.2.
This commit is contained in:
parent
9cbaab2ae7
commit
098abe2f2a
@ -10,7 +10,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||
|
||||
/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
|
||||
Copyright (C) 1991, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
|
||||
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
Written by Steve Chamberlain <sac@cygnus.com>
|
||||
ELF support by Ian Lance Taylor <ian@cygnus.com>
|
||||
@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libiberty.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
@ -133,7 +134,7 @@ static void
|
||||
gld${EMULATION_NAME}_vercheck (s)
|
||||
lang_input_statement_type *s;
|
||||
{
|
||||
const char *soname, *f;
|
||||
const char *soname;
|
||||
struct bfd_link_needed_list *l;
|
||||
|
||||
if (global_vercheck_failed)
|
||||
@ -144,19 +145,13 @@ gld${EMULATION_NAME}_vercheck (s)
|
||||
|
||||
soname = bfd_elf_get_dt_soname (s->the_bfd);
|
||||
if (soname == NULL)
|
||||
soname = bfd_get_filename (s->the_bfd);
|
||||
|
||||
f = strrchr (soname, '/');
|
||||
if (f != NULL)
|
||||
++f;
|
||||
else
|
||||
f = soname;
|
||||
soname = basename (bfd_get_filename (s->the_bfd));
|
||||
|
||||
for (l = global_vercheck_needed; l != NULL; l = l->next)
|
||||
{
|
||||
const char *suffix;
|
||||
|
||||
if (strcmp (f, l->name) == 0)
|
||||
if (strcmp (soname, l->name) == 0)
|
||||
{
|
||||
/* Probably can't happen, but it's an easy check. */
|
||||
continue;
|
||||
@ -171,7 +166,7 @@ gld${EMULATION_NAME}_vercheck (s)
|
||||
|
||||
suffix += sizeof ".so." - 1;
|
||||
|
||||
if (strncmp (f, l->name, suffix - l->name) == 0)
|
||||
if (strncmp (soname, l->name, suffix - l->name) == 0)
|
||||
{
|
||||
/* Here we know that S is a dynamic object FOO.SO.VER1, and
|
||||
the object we are considering needs a dynamic object
|
||||
@ -195,7 +190,6 @@ gld${EMULATION_NAME}_stat_needed (s)
|
||||
struct stat st;
|
||||
const char *suffix;
|
||||
const char *soname;
|
||||
const char *f;
|
||||
|
||||
if (global_found)
|
||||
return;
|
||||
@ -233,17 +227,12 @@ gld${EMULATION_NAME}_stat_needed (s)
|
||||
|
||||
soname = bfd_elf_get_dt_soname (s->the_bfd);
|
||||
if (soname == NULL)
|
||||
soname = s->filename;
|
||||
soname = basename (s->filename);
|
||||
|
||||
f = strrchr (soname, '/');
|
||||
if (f != NULL)
|
||||
++f;
|
||||
else
|
||||
f = soname;
|
||||
|
||||
if (strncmp (f, global_needed->name, suffix - global_needed->name) == 0)
|
||||
if (strncmp (soname, global_needed->name,
|
||||
suffix - global_needed->name) == 0)
|
||||
einfo ("%P: warning: %s, needed by %B, may conflict with %s\n",
|
||||
global_needed->name, global_needed->by, f);
|
||||
global_needed->name, global_needed->by, soname);
|
||||
}
|
||||
|
||||
|
||||
@ -343,11 +332,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
||||
einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd);
|
||||
|
||||
/* First strip off everything before the last '/'. */
|
||||
soname = strrchr (abfd->filename, '/');
|
||||
if (soname)
|
||||
soname++;
|
||||
else
|
||||
soname = abfd->filename;
|
||||
soname = basename (abfd->filename);
|
||||
|
||||
if (trace_file_tries)
|
||||
info_msg (_("found %s at %s\n"), soname, name);
|
||||
@ -1020,20 +1005,13 @@ gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry)
|
||||
if (bfd_check_format (entry->the_bfd, bfd_object)
|
||||
&& (entry->the_bfd->flags & DYNAMIC) != 0)
|
||||
{
|
||||
char *needed_name;
|
||||
|
||||
ASSERT (entry->is_archive && entry->search_dirs_flag);
|
||||
|
||||
/* Rather than duplicating the logic above. Just use the
|
||||
filename we recorded earlier.
|
||||
filename we recorded earlier. */
|
||||
|
||||
First strip off everything before the last '/'. */
|
||||
filename = strrchr (entry->filename, '/');
|
||||
filename++;
|
||||
|
||||
needed_name = (char *) xmalloc (strlen (filename) + 1);
|
||||
strcpy (needed_name, filename);
|
||||
bfd_elf_set_dt_needed_name (entry->the_bfd, needed_name);
|
||||
filename = xstrdup (basename (entry->filename));
|
||||
bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -1408,6 +1386,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
||||
|
||||
#define OPTION_DISABLE_NEW_DTAGS (400)
|
||||
#define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
|
||||
#define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
|
||||
|
||||
static struct option longopts[] =
|
||||
{
|
||||
@ -1421,6 +1400,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
||||
{"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
|
||||
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
|
||||
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
|
||||
{"Bgroup", no_argument, NULL, OPTION_GROUP},
|
||||
{"Bgroup", no_argument, NULL, OPTION_GROUP},
|
||||
EOF
|
||||
fi
|
||||
|
||||
@ -1479,6 +1460,12 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
||||
link_info.new_dtags = true;
|
||||
break;
|
||||
|
||||
case OPTION_GROUP:
|
||||
link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
|
||||
/* Groups must be self-contained. */
|
||||
link_info.no_undefined = true;
|
||||
break;
|
||||
|
||||
case 'z':
|
||||
if (strcmp (optarg, "initfirst") == 0)
|
||||
link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
|
||||
@ -1504,6 +1491,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
||||
link_info.flags |= (bfd_vma) DF_ORIGIN;
|
||||
link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
|
||||
}
|
||||
else if (strcmp (optarg, "defs") == 0)
|
||||
link_info.no_undefined = true;
|
||||
/* What about the other Solaris -z options? FIXME. */
|
||||
break;
|
||||
EOF
|
||||
@ -1537,8 +1526,10 @@ EOF
|
||||
|
||||
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
||||
cat >>e${EMULATION_NAME}.c <<EOF
|
||||
fprintf (file, _(" -Bgroup\t\tSelects group name lookup rules for DSO\n"));
|
||||
fprintf (file, _(" --disable-new-dtags\tDisable new dynamic tags\n"));
|
||||
fprintf (file, _(" --enable-new-dtags\tEnable new dynamic tags\n"));
|
||||
fprintf (file, _(" -z defs\t\tDisallows undefined symbols\n"));
|
||||
fprintf (file, _(" -z initfirst\t\tMark DSO to be initialized first at runtime\n"));
|
||||
fprintf (file, _(" -z interpose\t\tMark object to interpose all DSOs but executable\n"));
|
||||
fprintf (file, _(" -z loadfltr\t\tMark object requiring immediate process\n"));
|
||||
|
Loading…
Reference in New Issue
Block a user