diff options
author | obrien <obrien@FreeBSD.org> | 2001-06-26 17:57:37 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2001-06-26 17:57:37 +0000 |
commit | 19e2ac85bad49e2ce230eb478005ba430b31f627 (patch) | |
tree | 98bb5805054dbbc2462d3aa86355b47a085f67eb /contrib | |
parent | d43a7bbb99a2035bb5b098269ab303836cba2a35 (diff) | |
download | FreeBSD-src-19e2ac85bad49e2ce230eb478005ba430b31f627.zip FreeBSD-src-19e2ac85bad49e2ce230eb478005ba430b31f627.tar.gz |
Merge rev 1.2 (teach `ld' how to access FreeBSD's ld ELF hints)
into Binutils 2.11.2.
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/binutils/ld/emultempl/elf32.em | 63 |
1 files changed, 27 insertions, 36 deletions
diff --git a/contrib/binutils/ld/emultempl/elf32.em b/contrib/binutils/ld/emultempl/elf32.em index 79aa1c2..da7c435 100644 --- a/contrib/binutils/ld/emultempl/elf32.em +++ b/contrib/binutils/ld/emultempl/elf32.em @@ -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; - - f = strrchr (soname, '/'); - if (f != NULL) - ++f; - else - f = soname; + soname = basename (s->filename); - 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. - - First strip off everything before the last '/'. */ - filename = strrchr (entry->filename, '/'); - filename++; + filename we recorded earlier. */ - 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")); |