summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/binutils/ld/ldfile.c
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-11-02 20:45:59 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-11-02 20:45:59 +0000
commit56301d46413bee335c617ed8e6e32080e4ffaba7 (patch)
tree6a4c4eeffd92f1d9f6394e2d5fa08301fa0b79b1 /gnu/usr.bin/binutils/ld/ldfile.c
parent21ca5604689b35171671ce1ed04c5faccc82e0cd (diff)
Merge conflicts, bringing our changes back in:
- extra $(SHELL) and sugar for make (so that files not mode +x still work) - safer temp file handling - our W^X binary layout changes in ld - OpenBSD policy for library file selection in ld - arm and m88k changes which were not merged in time for official 2.15 - bfd core file handling - a couple typos New for 2.15: - ld(1) and as(1) manpages now generated at build time - binutils/stabs.c reverted to use our in-tree libiberty for now - we still use our VIA C3 crypto code over stock binutils, as it recognizes more instructions - new emulations for OpenBSD on mips64 machines, to help OpenBSD/sgi - relaxed %f# handling in gas on OpenBSD/sparc64 (same as was in 2.14) Tested on all platforms by various people; special thanks to sturm@ and otto@.
Diffstat (limited to 'gnu/usr.bin/binutils/ld/ldfile.c')
-rw-r--r--gnu/usr.bin/binutils/ld/ldfile.c115
1 files changed, 43 insertions, 72 deletions
diff --git a/gnu/usr.bin/binutils/ld/ldfile.c b/gnu/usr.bin/binutils/ld/ldfile.c
index 4806534a74a..a6f0d603dde 100644
--- a/gnu/usr.bin/binutils/ld/ldfile.c
+++ b/gnu/usr.bin/binutils/ld/ldfile.c
@@ -1,6 +1,6 @@
/* Linker file opening and searching.
- Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -69,18 +69,11 @@ static search_dirs_type **search_tail_ptr = &search_head;
static search_arch_type *search_arch_head;
static search_arch_type **search_arch_tail_ptr = &search_arch_head;
-static FILE *try_open
- PARAMS ((const char *, const char *));
-static bfd_boolean is_sysrooted_pathname
- PARAMS ((const char *, bfd_boolean));
-
/* Test whether a pathname, after canonicalization, is the same or a
sub-directory of the sysroot directory. */
static bfd_boolean
-is_sysrooted_pathname (name, notsame)
- const char *name;
- bfd_boolean notsame;
+is_sysrooted_pathname (const char *name, bfd_boolean notsame)
{
char * realname = ld_canon_sysroot ? lrealpath (name) : NULL;
int len;
@@ -88,7 +81,7 @@ is_sysrooted_pathname (name, notsame)
if (! realname)
return FALSE;
-
+
len = strlen (realname);
if (((! notsame && len == ld_canon_sysroot_len)
@@ -110,16 +103,14 @@ is_sysrooted_pathname (name, notsame)
Makes a copy of NAME using xmalloc(). */
void
-ldfile_add_library_path (name, cmdline)
- const char *name;
- bfd_boolean cmdline;
+ldfile_add_library_path (const char *name, bfd_boolean cmdline)
{
search_dirs_type *new;
if (!cmdline && config.only_cmd_line_lib_dirs)
return;
- new = (search_dirs_type *) xmalloc (sizeof (search_dirs_type));
+ new = xmalloc (sizeof (search_dirs_type));
new->next = NULL;
new->cmdline = cmdline;
*search_tail_ptr = new;
@@ -142,9 +133,8 @@ ldfile_add_library_path (name, cmdline)
/* Try to open a BFD for a lang_input_statement. */
bfd_boolean
-ldfile_try_open_bfd (attempt, entry)
- const char *attempt;
- lang_input_statement_type *entry;
+ldfile_try_open_bfd (const char *attempt,
+ lang_input_statement_type *entry)
{
entry->the_bfd = bfd_openr (attempt, entry->target);
@@ -256,7 +246,7 @@ ldfile_try_open_bfd (attempt, entry)
if (yylval.bigint.str)
free (yylval.bigint.str);
break;
- }
+ }
token = yylex ();
}
ldlex_popstate ();
@@ -298,11 +288,10 @@ ldfile_try_open_bfd (attempt, entry)
archive, use ARCH, LIB and SUFFIX to modify the file name. */
bfd_boolean
-ldfile_open_file_search (arch, entry, lib, suffix)
- const char *arch;
- lang_input_statement_type *entry;
- const char *lib;
- const char *suffix;
+ldfile_open_file_search (const char *arch,
+ lang_input_statement_type *entry,
+ const char *lib,
+ const char *suffix)
{
search_dirs_type *search;
@@ -332,13 +321,11 @@ ldfile_open_file_search (arch, entry, lib, suffix)
return FALSE;
}
- for (search = search_head;
- search != (search_dirs_type *) NULL;
- search = search->next)
+ for (search = search_head; search != NULL; search = search->next)
{
char *string;
- if (entry->dynamic && ! link_info.relocateable)
+ if (entry->dynamic && ! link_info.relocatable)
{
if (ldemul_open_dynamic_archive (arch, search, entry))
{
@@ -347,13 +334,13 @@ ldfile_open_file_search (arch, entry, lib, suffix)
}
}
- string = (char *) xmalloc (strlen (search->name)
- + strlen (slash)
- + strlen (lib)
- + strlen (entry->filename)
- + strlen (arch)
- + strlen (suffix)
- + 1);
+ string = xmalloc (strlen (search->name)
+ + strlen (slash)
+ + strlen (lib)
+ + strlen (entry->filename)
+ + strlen (arch)
+ + strlen (suffix)
+ + 1);
if (entry->is_archive)
sprintf (string, "%s%s%s%s%s%s", search->name, slash,
@@ -377,8 +364,7 @@ ldfile_open_file_search (arch, entry, lib, suffix)
/* Open the input file specified by ENTRY. */
void
-ldfile_open_file (entry)
- lang_input_statement_type *entry;
+ldfile_open_file (lang_input_statement_type *entry)
{
if (entry->the_bfd != NULL)
return;
@@ -388,10 +374,10 @@ ldfile_open_file (entry)
if (ldfile_try_open_bfd (entry->filename, entry))
return;
if (strcmp (entry->filename, entry->local_sym_name) != 0)
- einfo (_("%F%P: cannot open %s for %s: %E\n"),
+ einfo (_("%F%P: %s (%s): No such file: %E\n"),
entry->filename, entry->local_sym_name);
else
- einfo (_("%F%P: cannot open %s: %E\n"), entry->local_sym_name);
+ einfo (_("%F%P: %s: No such file: %E\n"), entry->local_sym_name);
}
else
{
@@ -399,9 +385,7 @@ ldfile_open_file (entry)
bfd_boolean found = FALSE;
/* Try to open <filename><suffix> or lib<filename><suffix>.a */
- for (arch = search_arch_head;
- arch != (search_arch_type *) NULL;
- arch = arch->next)
+ for (arch = search_arch_head; arch != NULL; arch = arch->next)
{
found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
if (found)
@@ -433,9 +417,7 @@ ldfile_open_file (entry)
/* Try to open NAME; if that fails, try NAME with EXTEN appended to it. */
static FILE *
-try_open (name, exten)
- const char *name;
- const char *exten;
+try_open (const char *name, const char *exten)
{
FILE *result;
char buff[1000];
@@ -474,9 +456,7 @@ try_open (name, exten)
specified with -L, without and with EXTEND appended. */
FILE *
-ldfile_find_command_file (name, extend)
- const char *name;
- const char *extend;
+ldfile_find_command_file (const char *name, const char *extend)
{
search_dirs_type *search;
FILE *result;
@@ -484,12 +464,10 @@ ldfile_find_command_file (name, extend)
/* First try raw name. */
result = try_open (name, "");
- if (result == (FILE *) NULL)
+ if (result == NULL)
{
/* Try now prefixes. */
- for (search = search_head;
- search != (search_dirs_type *) NULL;
- search = search->next)
+ for (search = search_head; search != NULL; search = search->next)
{
sprintf (buffer, "%s%s%s", search->name, slash, name);
@@ -503,13 +481,12 @@ ldfile_find_command_file (name, extend)
}
void
-ldfile_open_command_file (name)
- const char *name;
+ldfile_open_command_file (const char *name)
{
FILE *ldlex_input_stack;
ldlex_input_stack = ldfile_find_command_file (name, "");
- if (ldlex_input_stack == (FILE *) NULL)
+ if (ldlex_input_stack == NULL)
{
bfd_set_error (bfd_error_system_call);
einfo (_("%P%F: cannot open linker script file %s: %E\n"), name);
@@ -525,8 +502,7 @@ ldfile_open_command_file (name)
#ifdef GNU960
static char *
-gnu960_map_archname (name)
- char *name;
+gnu960_map_archname (char *name)
{
struct tabentry { char *cmd_switch; char *arch; };
static struct tabentry arch_tab[] =
@@ -556,11 +532,9 @@ gnu960_map_archname (name)
}
void
-ldfile_add_arch (name)
- char *name;
+ldfile_add_arch (char *name)
{
- search_arch_type *new =
- (search_arch_type *) xmalloc ((bfd_size_type) (sizeof (search_arch_type)));
+ search_arch_type *new = xmalloc (sizeof (search_arch_type));
if (*name != '\0')
{
@@ -573,7 +547,7 @@ ldfile_add_arch (name)
ldfile_output_machine_name = name;
}
- new->next = (search_arch_type *) NULL;
+ new->next = NULL;
new->name = gnu960_map_archname (name);
*search_arch_tail_ptr = new;
search_arch_tail_ptr = &new->next;
@@ -582,17 +556,15 @@ ldfile_add_arch (name)
#else /* not GNU960 */
void
-ldfile_add_arch (in_name)
- const char *in_name;
+ldfile_add_arch (const char *in_name)
{
char *name = xstrdup (in_name);
- search_arch_type *new =
- (search_arch_type *) xmalloc (sizeof (search_arch_type));
+ search_arch_type *new = xmalloc (sizeof (search_arch_type));
ldfile_output_machine_name = in_name;
new->name = name;
- new->next = (search_arch_type *) NULL;
+ new->next = NULL;
while (*name)
{
*name = TOLOWER (*name);
@@ -607,8 +579,7 @@ ldfile_add_arch (in_name)
/* Set the output architecture. */
void
-ldfile_set_output_arch (string)
- const char *string;
+ldfile_set_output_arch (const char *string, enum bfd_architecture defarch)
{
const bfd_arch_info_type *arch = bfd_scan_arch (string);
@@ -618,8 +589,8 @@ ldfile_set_output_arch (string)
ldfile_output_machine = arch->mach;
ldfile_output_machine_name = arch->printable_name;
}
+ else if (defarch != bfd_arch_unknown)
+ ldfile_output_architecture = defarch;
else
- {
- einfo (_("%P%F: cannot represent machine `%s'\n"), string);
- }
+ einfo (_("%P%F: cannot represent machine `%s'\n"), string);
}