diff options
author | Federico G. Schwindt <fgsch@cvs.openbsd.org> | 2002-05-13 17:07:46 +0000 |
---|---|---|
committer | Federico G. Schwindt <fgsch@cvs.openbsd.org> | 2002-05-13 17:07:46 +0000 |
commit | c866442bb5e16be2b5323fee961ceb1315393514 (patch) | |
tree | f12f495081042abe1a40d83bf05d076ff8aa8a17 /gnu/usr.bin/binutils/ld/ldfile.c | |
parent | 99d2ba46f95f9f99286b4c66576c4607669b0e7f (diff) |
resolve conflicts.
Diffstat (limited to 'gnu/usr.bin/binutils/ld/ldfile.c')
-rw-r--r-- | gnu/usr.bin/binutils/ld/ldfile.c | 192 |
1 files changed, 101 insertions, 91 deletions
diff --git a/gnu/usr.bin/binutils/ld/ldfile.c b/gnu/usr.bin/binutils/ld/ldfile.c index 9613c078384..0e4d0ec3a2e 100644 --- a/gnu/usr.bin/binutils/ld/ldfile.c +++ b/gnu/usr.bin/binutils/ld/ldfile.c @@ -1,5 +1,5 @@ /* Linker file opening and searching. - Copyright (C) 1991, 92, 93, 94, 95, 98, 99, 2000 + Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GLD, the Gnu Linker. @@ -19,12 +19,7 @@ along with GLD; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* - ldfile.c - - look after all the file stuff - - */ +/* ldfile.c: look after all the file stuff. */ #include "bfd.h" #include "sysdep.h" @@ -38,6 +33,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "ldgram.h" #include "ldlex.h" #include "ldemul.h" +#include "libiberty.h" #include <ctype.h> @@ -59,7 +55,7 @@ char *slash = "/"; #endif #endif #else /* MPW */ -/* The MPW path char is a colon. */ +/* The MPW path char is a colon. */ char *slash = ":"; #endif /* MPW */ @@ -67,15 +63,14 @@ char *slash = ":"; static search_dirs_type **search_tail_ptr = &search_head; -typedef struct search_arch -{ - char *name; +typedef struct search_arch { + char *name; struct search_arch *next; } search_arch_type; 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 *name, const char *exten)); void @@ -137,7 +132,7 @@ ldfile_try_open_bfd (attempt, entry) return true; if (bfd_arch_get_compatible (check, output_bfd) == NULL) { - einfo (_("%P: skipping incompatible %s when searching for %s"), + einfo (_("%P: skipping incompatible %s when searching for %s\n"), attempt, entry->local_sym_name); bfd_close (entry->the_bfd); entry->the_bfd = NULL; @@ -170,8 +165,8 @@ ldfile_open_file_search (arch, entry, lib, suffix) } for (search = search_head; - search != (search_dirs_type *)NULL; - search = search->next) + search != (search_dirs_type *) NULL; + search = search->next) { char *string; @@ -194,8 +189,8 @@ ldfile_open_file_search (arch, entry, lib, suffix) lib, entry->filename, arch, suffix); else if (entry->filename[0] == '/' || entry->filename[0] == '.' #if defined (__MSDOS__) || defined (_WIN32) - || entry->filename[0] == '\\' - || (isalpha (entry->filename[0]) + || entry->filename[0] == '\\' + || (isalpha (entry->filename[0]) && entry->filename[1] == ':') #endif ) @@ -232,27 +227,37 @@ ldfile_open_file (entry) einfo (_("%F%P: cannot open %s for %s: %E\n"), entry->filename, entry->local_sym_name); else - einfo(_("%F%P: cannot open %s: %E\n"), entry->local_sym_name); + einfo (_("%F%P: cannot open %s: %E\n"), entry->local_sym_name); } else { search_arch_type *arch; + 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) { - if (ldfile_open_file_search (arch->name, entry, "lib", ".a")) - return; + found = ldfile_open_file_search (arch->name, entry, "lib", ".a"); + if (found) + break; #ifdef VMS - if (ldfile_open_file_search (arch->name, entry, ":lib", ".a")) - return; + found = ldfile_open_file_search (arch->name, entry, ":lib", ".a"); + if (found) + break; #endif - if (ldemul_find_potential_libraries (arch->name, entry)) - return; + found = ldemul_find_potential_libraries (arch->name, entry); + if (found) + break; } - einfo (_("%F%P: cannot find %s\n"), entry->local_sym_name); + + /* If we have found the file, we don't need to search directories + again. */ + if (found) + entry->search_dirs_flag = false; + else + einfo (_("%F%P: cannot find %s\n"), entry->local_sym_name); } } @@ -267,6 +272,7 @@ try_open (name, exten) char buff[1000]; result = fopen (name, "r"); + if (trace_file_tries) { if (result == NULL) @@ -282,6 +288,7 @@ try_open (name, exten) { sprintf (buff, "%s%s", name, exten); result = fopen (buff, "r"); + if (trace_file_tries) { if (result == NULL) @@ -306,18 +313,23 @@ ldfile_find_command_file (name, extend) FILE *result; char buffer[1000]; - /* First try raw name */ - result = try_open(name,""); - if (result == (FILE *)NULL) { - /* Try now prefixes */ - for (search = search_head; - search != (search_dirs_type *)NULL; - search = search->next) { - sprintf(buffer,"%s%s%s", search->name, slash, name); - result = try_open(buffer, extend); - if (result)break; + /* First try raw name. */ + result = try_open (name, ""); + if (result == (FILE *) NULL) + { + /* Try now prefixes. */ + for (search = search_head; + search != (search_dirs_type *) NULL; + search = search->next) + { + sprintf (buffer, "%s%s%s", search->name, slash, name); + + result = try_open (buffer, extend); + if (result) + break; + } } - } + return result; } @@ -326,31 +338,29 @@ ldfile_open_command_file (name) const char *name; { FILE *ldlex_input_stack; - ldlex_input_stack = ldfile_find_command_file(name, ""); - - if (ldlex_input_stack == (FILE *)NULL) { - bfd_set_error (bfd_error_system_call); - einfo(_("%P%F: cannot open linker script file %s: %E\n"),name); - } - lex_push_file(ldlex_input_stack, name); - + ldlex_input_stack = ldfile_find_command_file (name, ""); + + if (ldlex_input_stack == (FILE *) NULL) + { + bfd_set_error (bfd_error_system_call); + einfo (_("%P%F: cannot open linker script file %s: %E\n"), name); + } + + lex_push_file (ldlex_input_stack, name); + ldfile_input_filename = name; lineno = 1; had_script = true; } - - - - #ifdef GNU960 -static -char * -gnu960_map_archname( name ) -char *name; +static char * +gnu960_map_archname (name) + char *name; { struct tabentry { char *cmd_switch; char *arch; }; - static struct tabentry arch_tab[] = { + static struct tabentry arch_tab[] = + { "", "", "KA", "ka", "KB", "kb", @@ -362,60 +372,57 @@ char *name; NULL, "" }; struct tabentry *tp; - - for ( tp = arch_tab; tp->cmd_switch != NULL; tp++ ){ - if ( !strcmp(name,tp->cmd_switch) ){ - break; + for (tp = arch_tab; tp->cmd_switch != NULL; tp++) + { + if (! strcmp (name,tp->cmd_switch)) + break; } - } - if ( tp->cmd_switch == NULL ){ - einfo(_("%P%F: unknown architecture: %s\n"),name); - } + if (tp->cmd_switch == NULL) + einfo (_("%P%F: unknown architecture: %s\n"), name); + return tp->arch; } - - void -ldfile_add_arch(name) -char *name; +ldfile_add_arch (name) + char *name; { search_arch_type *new = - (search_arch_type *)xmalloc((bfd_size_type)(sizeof(search_arch_type))); + (search_arch_type *) xmalloc ((bfd_size_type) (sizeof (search_arch_type))); + if (*name != '\0') + { + if (ldfile_output_machine_name[0] != '\0') + { + einfo (_("%P%F: target architecture respecified\n")); + return; + } - if (*name != '\0') { - if (ldfile_output_machine_name[0] != '\0') { - einfo(_("%P%F: target architecture respecified\n")); - return; + ldfile_output_machine_name = name; } - ldfile_output_machine_name = name; - } - new->next = (search_arch_type*)NULL; - new->name = gnu960_map_archname( name ); + new->next = (search_arch_type *) NULL; + new->name = gnu960_map_archname (name); *search_arch_tail_ptr = new; search_arch_tail_ptr = &new->next; - } -#else /* not GNU960 */ - +#else /* not GNU960 */ void ldfile_add_arch (in_name) - CONST char * in_name; + CONST char *in_name; { - char *name = buystring(in_name); + char *name = xstrdup (in_name); search_arch_type *new = (search_arch_type *) xmalloc (sizeof (search_arch_type)); ldfile_output_machine_name = in_name; new->name = name; - new->next = (search_arch_type*)NULL; + new->next = (search_arch_type *) NULL; while (*name) { if (isupper ((unsigned char) *name)) @@ -428,19 +435,22 @@ ldfile_add_arch (in_name) } #endif -/* Set the output architecture */ +/* Set the output architecture. */ + void ldfile_set_output_arch (string) CONST char *string; { - const bfd_arch_info_type *arch = bfd_scan_arch(string); - - if (arch) { - ldfile_output_architecture = arch->arch; - ldfile_output_machine = arch->mach; - ldfile_output_machine_name = arch->printable_name; - } - else { - einfo(_("%P%F: cannot represent machine `%s'\n"), string); - } + const bfd_arch_info_type *arch = bfd_scan_arch (string); + + if (arch) + { + ldfile_output_architecture = arch->arch; + ldfile_output_machine = arch->mach; + ldfile_output_machine_name = arch->printable_name; + } + else + { + einfo (_("%P%F: cannot represent machine `%s'\n"), string); + } } |