mirror of
https://github.com/bebbo/amigaos-cross-toolchain.git
synced 2025-12-08 22:38:24 +00:00
125 lines
3.3 KiB
Diff
125 lines
3.3 KiB
Diff
--- binutils-2.9.1/ld/ldfile.c Fri May 1 08:48:48 1998
|
|
+++ binutils-2.9.1/ld/ldfile.c Sun Aug 23 00:00:00 1998
|
|
@@ -39,6 +39,9 @@ Software Foundation, 59 Temple Place - S
|
|
|
|
#include <ctype.h>
|
|
|
|
+static int n_flavors, flavors_len;
|
|
+char **flavors;
|
|
+
|
|
const char *ldfile_input_filename;
|
|
boolean ldfile_assumed_script = false;
|
|
const char *ldfile_output_machine_name = "";
|
|
@@ -79,6 +82,32 @@ static boolean ldfile_open_file_search
|
|
const char *lib, const char *suffix));
|
|
static FILE *try_open PARAMS ((const char *name, const char *exten));
|
|
|
|
+static int flavors_cmp (f1, f2)
|
|
+ const void *f1, *f2;
|
|
+{
|
|
+ return strcmp (*(char**)f1, *(char**)f2);
|
|
+}
|
|
+
|
|
+void
|
|
+sort_flavors ()
|
|
+{
|
|
+ if (n_flavors > 1)
|
|
+ qsort ((void*)flavors, n_flavors, sizeof(char**), flavors_cmp);
|
|
+}
|
|
+
|
|
+void
|
|
+ldfile_add_flavor (name)
|
|
+ char *name;
|
|
+{
|
|
+ n_flavors++;
|
|
+ if (flavors)
|
|
+ flavors = (char**) xrealloc ((PTR)flavors, n_flavors*sizeof (char*));
|
|
+ else
|
|
+ flavors = (char**) xmalloc (sizeof (char*));
|
|
+ flavors [n_flavors-1] = name;
|
|
+ flavors_len += strlen (name);
|
|
+}
|
|
+
|
|
void
|
|
ldfile_add_library_path (name, cmdline)
|
|
const char *name;
|
|
@@ -128,6 +157,7 @@ ldfile_open_file_search (arch, entry, li
|
|
const char *suffix;
|
|
{
|
|
search_dirs_type *search;
|
|
+ char *flavor_dir = (char *) alloca (flavors_len + n_flavors + 1);
|
|
|
|
/* If this is not an archive, try to open it in the current
|
|
directory first. */
|
|
@@ -142,6 +172,7 @@ ldfile_open_file_search (arch, entry, li
|
|
search = search->next)
|
|
{
|
|
char *string;
|
|
+ int i, count=n_flavors;
|
|
|
|
if (entry->dynamic && ! link_info.relocateable)
|
|
{
|
|
@@ -171,15 +202,40 @@ ldfile_open_file_search (arch, entry, li
|
|
else
|
|
sprintf (string, "%s%s%s", search->name, slash, entry->filename);
|
|
|
|
- if (ldfile_try_open_bfd (string, entry))
|
|
- {
|
|
- entry->filename = string;
|
|
- return true;
|
|
+ for (count = n_flavors; count>=0; count--) {
|
|
+ *flavor_dir = '\0';
|
|
+ for (i=0; i<count; i++) {
|
|
+ strcat (flavor_dir, flavors[i]);
|
|
+ strcat (flavor_dir, slash);
|
|
}
|
|
|
|
- free (string);
|
|
+ string = (char *) xmalloc (strlen (search->name)
|
|
+ + strlen (slash)
|
|
+ + strlen (flavor_dir)
|
|
+ + strlen (lib)
|
|
+ + strlen (entry->filename)
|
|
+ + strlen (arch)
|
|
+ + strlen (suffix)
|
|
+ + 1);
|
|
+
|
|
+ if (entry->is_archive)
|
|
+ sprintf (string, "%s%s%s%s%s%s%s", search->name, slash, flavor_dir,
|
|
+ lib, entry->filename, arch, suffix);
|
|
+ else if (entry->filename[0] == '/' || entry->filename[0] == '.')
|
|
+ strcpy (string, entry->filename);
|
|
+ else
|
|
+ sprintf (string, "%s%s%s%s", search->name, slash, flavor_dir,
|
|
+ entry->filename);
|
|
+
|
|
+ if (ldfile_try_open_bfd (string, entry))
|
|
+ {
|
|
+ entry->filename = string;
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ free (string);
|
|
+ }
|
|
}
|
|
-
|
|
return false;
|
|
}
|
|
|
|
@@ -206,6 +262,15 @@ ldfile_open_file (entry)
|
|
arch != (search_arch_type *) NULL;
|
|
arch = arch->next)
|
|
{
|
|
+#if (defined (__BEOS__) && defined (__INTEL__))
|
|
+ if (ldfile_open_file_search (arch->name, entry, "lib", ".so.LIB"))
|
|
+ return;
|
|
+#endif
|
|
+#if defined (__CYGWIN32__)
|
|
+ if (strcmp (default_target, "pei-i386") == 0
|
|
+ && (ldfile_open_file_search (arch->name, entry, "", ".lib")))
|
|
+ return;
|
|
+#endif
|
|
if (ldfile_open_file_search (arch->name, entry, "lib", ".a"))
|
|
return;
|
|
#ifdef VMS
|