/* This file is is generated by a shell script. DO NOT EDIT! */
/* AIX emulation code for ${EMULATION_NAME}
- Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2016 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
AIX support by Ian Lance Taylor <ian@cygnus.com>
AIX 64 bit support by Tom Rix <trix@redhat.com>
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
- config.dynamic_link = TRUE;
+ input_flags.dynamic = TRUE;
config.has_shared = TRUE;
/* The link_info.[init|fini]_functions are initialized in ld/lexsup.c.
{"bexpall", no_argument, NULL, OPTION_EXPALL},
{"bexpfull", no_argument, NULL, OPTION_EXPFULL},
{"bexport", required_argument, NULL, OPTION_EXPORT},
+ {"bbigtoc", no_argument, NULL, OPTION_IGNORE},
{"bf", no_argument, NULL, OPTION_ERNOTOK},
{"bgc", no_argument, &gc, 1},
{"bh", required_argument, NULL, OPTION_IGNORE},
{NULL, no_argument, NULL, 0}
};
- /* Options supported by the AIX linker which we do not support: -f,
+ /* Options supported by the AIX linker which we do not support:
-S, -v, -Z, -bbindcmds, -bbinder, -bbindopts, -bcalls, -bcaps,
-bcror15, -bdebugopt, -bdbg, -bdelcsect, -bex?, -bfilelist, -bfl,
-bgcbypass, -bglink, -binsert, -bi, -bloadmap, -bl, -bmap, -bnl,
return FALSE;
}
+/* Helper for option '-f', which specify a list of input files.
+ Contrary to the native linker, we don't support shell patterns
+ (simply because glob isn't always available). */
+
+static void
+read_file_list (const char *filename)
+{
+ FILE *f;
+ /* An upper bound on the number of characters in the file. */
+ long pos;
+ /* File in memory. */
+ char *buffer;
+ size_t len;
+ char *b;
+ char *e;
+
+ f = fopen (filename, FOPEN_RT);
+ if (f == NULL)
+ {
+ einfo ("%F%P: cannot open %s\n", filename);
+ return;
+ }
+ if (fseek (f, 0L, SEEK_END) == -1)
+ goto error;
+ pos = ftell (f);
+ if (pos == -1)
+ goto error;
+ if (fseek (f, 0L, SEEK_SET) == -1)
+ goto error;
+
+ buffer = (char *) xmalloc (pos + 1);
+ len = fread (buffer, sizeof (char), pos, f);
+ if (len != (size_t) pos && ferror (f))
+ goto error;
+ /* Add a NUL terminator. */
+ buffer[len] = '\0';
+ fclose (f);
+
+ /* Parse files. */
+ b = buffer;
+ while (1)
+ {
+ /* Skip empty lines. */
+ while (*b == '\n' || *b == '\r')
+ b++;
+
+ /* Stop if end of buffer. */
+ if (b == buffer + len)
+ break;
+
+ /* Eat any byte until end of line. */
+ for (e = b; *e != '\0'; e++)
+ if (*e == '\n' || *e == '\r')
+ break;
+
+ /* Replace end of line by nul. */
+ if (*e != '\0')
+ *e++ = '\0';
+
+ if (b != e)
+ lang_add_input_file (b, lang_input_file_is_search_file_enum, NULL);
+ b = e;
+ }
+ return;
+
+ error:
+ einfo ("%F%P: cannot read %s\n", optarg);
+ fclose (f);
+}
+
static bfd_boolean
gld${EMULATION_NAME}_handle_option (int optc)
{
/* Long option which just sets a flag. */
break;
+ case 'f':
+ /* This overrides --auxiliary. This option specifies a file containing
+ a list of input files. */
+ read_file_list (optarg);
+ break;
+
case 'D':
val = bfd_scan_vma (optarg, &end, 0);
if (*end != '\0')
case OPTION_MODTYPE:
if (*optarg == 'S')
{
- link_info.shared = TRUE;
+ link_info.type = type_dll;
++optarg;
}
if (*optarg == '\0' || optarg[1] == '\0')
*flpp = n;
ret = TRUE;
- entry->loaded = TRUE;
+ entry->flags.loaded = TRUE;
}
fclose (e);
static void
gld${EMULATION_NAME}_after_open (void)
{
- bfd_boolean r;
+ enum output_type t;
struct set_info *p;
+ after_open_default ();
+
/* Call ldctor_build_sets, after pretending that this is a
relocatable link. We do this because AIX requires relocation
entries for all references to symbols, even in a final
executable. Of course, we only want to do this if we are
producing an XCOFF output file. */
- r = link_info.relocatable;
+ t = link_info.type;
if (strstr (bfd_get_target (link_info.output_bfd), "xcoff") != NULL)
- link_info.relocatable = TRUE;
+ link_info.type = type_relocatable;
ldctor_build_sets ();
- link_info.relocatable = r;
+ link_info.type = t;
/* For each set, record the size, so that the XCOFF backend can
output the correct csect length. */
/* Remove this section from the list of the output section.
This assumes we know what the script looks like. */
is = NULL;
- os = lang_output_section_find (sec->output_section->name);
+ os = lang_output_section_get (sec->output_section);
if (os == NULL)
einfo ("%P%F: can't find output section %s\n",
sec->output_section->name);
/* Executables and shared objects must always have .text, .data
and .bss output sections, so that the header can refer to them.
The kernel refuses to load objects that have missing sections. */
- if (!link_info.relocatable)
+ if (!bfd_link_relocatable (&link_info))
for (i = 0; i < ARRAY_SIZE (must_keep_sections); i++)
{
asection *sec;
{
bfd_set_error (bfd_error_system_call);
einfo ("%F%s: %E\n", filename);
+ return;
}
keep = FALSE;
{
struct export_symbol_list *n;
- ldlang_add_undef (symname);
+ ldlang_add_undef (symname, TRUE);
n = ((struct export_symbol_list *)
xmalloc (sizeof (struct export_symbol_list)));
n->next = export_symbols;
obstack_free (o, NULL);
free (o);
}
+
+ fclose (f);
}
/* This routine saves us from worrying about declaring free. */
gld${EMULATION_NAME}_get_script (int *isfile)
EOF
-if test -n "$COMPILE_IN"
+if test x"$COMPILE_IN" = xyes
then
# Scripts compiled in.
{
*isfile = 0;
- if (link_info.relocatable && config.build_constructors)
+ if (bfd_link_relocatable (&link_info) && config.build_constructors)
return
EOF
sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
-echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
+echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
{
*isfile = 1;
- if (link_info.relocatable && config.build_constructors)
+ if (bfd_link_relocatable (&link_info) && config.build_constructors)
return "ldscripts/${EMULATION_NAME}.xu";
- else if (link_info.relocatable)
+ else if (bfd_link_relocatable (&link_info))
return "ldscripts/${EMULATION_NAME}.xr";
else if (!config.text_read_only)
return "ldscripts/${EMULATION_NAME}.xbn";
search_dirs_type *search,
lang_input_statement_type *entry)
{
- const char *filename;
char *path;
- if (!entry->is_archive)
+ if (!entry->flags.maybe_archive)
return FALSE;
- filename = entry->filename;
- path = concat (search->name, "/lib", entry->filename, arch, ".a", NULL);
+ if (entry->flags.full_name_provided)
+ path = concat (search->name, "/", entry->filename,
+ (const char *) NULL);
+ else
+ path = concat (search->name, "/lib", entry->filename, arch, ".a",
+ (const char *) NULL);
+
if (!ldfile_try_open_bfd (path, entry))
{
free (path);
NULL, /* list_options */
NULL, /* recognized_file */
NULL, /* find potential_libraries */
- NULL /* new_vers_pattern */
+ NULL, /* new_vers_pattern */
+ NULL /* extra_map_file_text */
};
EOF