diff options
Diffstat (limited to 'contrib/binutils/ld/emultempl/sunos.em')
-rw-r--r-- | contrib/binutils/ld/emultempl/sunos.em | 185 |
1 files changed, 80 insertions, 105 deletions
diff --git a/contrib/binutils/ld/emultempl/sunos.em b/contrib/binutils/ld/emultempl/sunos.em index 64e5ea5..358bc9a 100644 --- a/contrib/binutils/ld/emultempl/sunos.em +++ b/contrib/binutils/ld/emultempl/sunos.em @@ -1,6 +1,6 @@ # This shell script emits a C file. -*- C -*- # It does some substitutions. -if [ -z "$MACHINE" ]; then +if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH} else OUTPUT_ARCH=${ARCH}:${MACHINE} @@ -9,8 +9,8 @@ cat >e${EMULATION_NAME}.c <<EOF /* This file is is generated by a shell script. DO NOT EDIT! */ /* SunOS emulation code for ${EMULATION_NAME} - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 - Free Software Foundation, Inc. + Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, + 2003, 2004 Free Software Foundation, Inc. Written by Steve Chamberlain <sac@cygnus.com> SunOS shared library support by Ian Lance Taylor <ian@cygnus.com> @@ -61,45 +61,31 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ # endif #endif -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static void gld${EMULATION_NAME}_set_symbols PARAMS ((void)); -static void gld${EMULATION_NAME}_create_output_section_statements - PARAMS ((void)); static void gld${EMULATION_NAME}_find_so - PARAMS ((lang_input_statement_type *)); + (lang_input_statement_type *); static char *gld${EMULATION_NAME}_search_dir - PARAMS ((const char *, const char *, boolean *)); -static void gld${EMULATION_NAME}_after_open PARAMS ((void)); + (const char *, const char *, bfd_boolean *); static void gld${EMULATION_NAME}_check_needed - PARAMS ((lang_input_statement_type *)); -static boolean gld${EMULATION_NAME}_search_needed - PARAMS ((const char *, const char *)); -static boolean gld${EMULATION_NAME}_try_needed - PARAMS ((const char *, const char *)); -static void gld${EMULATION_NAME}_before_allocation PARAMS ((void)); + (lang_input_statement_type *); +static bfd_boolean gld${EMULATION_NAME}_search_needed + (const char *, const char *); +static bfd_boolean gld${EMULATION_NAME}_try_needed + (const char *, const char *); static void gld${EMULATION_NAME}_find_assignment - PARAMS ((lang_statement_union_type *)); -static void gld${EMULATION_NAME}_find_exp_assignment PARAMS ((etree_type *)); + (lang_statement_union_type *); +static void gld${EMULATION_NAME}_find_exp_assignment + (etree_type *); static void gld${EMULATION_NAME}_count_need - PARAMS ((lang_input_statement_type *)); + (lang_input_statement_type *); static void gld${EMULATION_NAME}_set_need - PARAMS ((lang_input_statement_type *)); -static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile)); + (lang_input_statement_type *); static void -gld${EMULATION_NAME}_before_parse() +gld${EMULATION_NAME}_before_parse (void) { - const bfd_arch_info_type *arch = bfd_scan_arch ("${OUTPUT_ARCH}"); - if (arch) - { - ldfile_output_architecture = arch->arch; - ldfile_output_machine = arch->mach; - ldfile_output_machine_name = arch->printable_name; - } - else - ldfile_output_architecture = bfd_arch_${ARCH}; - config.dynamic_link = true; - config.has_shared = true; + ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); + config.dynamic_link = TRUE; + config.has_shared = TRUE; } /* This is called after the command line arguments have been parsed, @@ -108,7 +94,7 @@ gld${EMULATION_NAME}_before_parse() list. */ static void -gld${EMULATION_NAME}_set_symbols () +gld${EMULATION_NAME}_set_symbols (void) { EOF if [ "x${host}" = "x${target}" ] ; then @@ -131,7 +117,7 @@ cat >>e${EMULATION_NAME}.c <<EOF if (c != NULL) *c++ = '\0'; if (*l != '\0') - ldfile_add_library_path (l, false); + ldfile_add_library_path (l, FALSE); if (c == NULL) break; l = c; @@ -154,7 +140,7 @@ cat >>e${EMULATION_NAME}.c <<EOF search it after including the .so file. */ static void -gld${EMULATION_NAME}_create_output_section_statements () +gld${EMULATION_NAME}_create_output_section_statements (void) { lang_for_each_input_file (gld${EMULATION_NAME}_find_so); } @@ -162,8 +148,7 @@ gld${EMULATION_NAME}_create_output_section_statements () /* Search the directory for a .so file for each library search. */ static void -gld${EMULATION_NAME}_find_so (inp) - lang_input_statement_type *inp; +gld${EMULATION_NAME}_find_so (lang_input_statement_type *inp) { search_dirs_type *search; char *found = NULL; @@ -179,7 +164,7 @@ gld${EMULATION_NAME}_find_so (inp) for (search = search_head; search != NULL; search = search->next) { - boolean found_static; + bfd_boolean found_static; found = gld${EMULATION_NAME}_search_dir (search->name, inp->filename, &found_static); @@ -202,7 +187,7 @@ gld${EMULATION_NAME}_find_so (inp) /* Turn off the search_dirs_flag to prevent ldfile_open_file from searching for this file again. */ - inp->search_dirs_flag = false; + inp->search_dirs_flag = FALSE; free (found); @@ -234,10 +219,8 @@ gld${EMULATION_NAME}_find_so (inp) /* Search a directory for a .so file. */ static char * -gld${EMULATION_NAME}_search_dir (dirname, filename, found_static) - const char *dirname; - const char *filename; - boolean *found_static; +gld${EMULATION_NAME}_search_dir + (const char *dirname, const char *filename, bfd_boolean *found_static) { int force_maj, force_min; const char *dot; @@ -252,7 +235,7 @@ gld${EMULATION_NAME}_search_dir (dirname, filename, found_static) int statval; struct stat st; - *found_static = false; + *found_static = FALSE; force_maj = -1; force_min = -1; @@ -284,7 +267,7 @@ gld${EMULATION_NAME}_search_dir (dirname, filename, found_static) if (dir == NULL) return NULL; dirnamelen = strlen (dirname); - + while ((entry = readdir (dir)) != NULL) { const char *s; @@ -297,14 +280,14 @@ gld${EMULATION_NAME}_search_dir (dirname, filename, found_static) if (dot == NULL && strcmp (entry->d_name + 3 + len, ".a") == 0) { - *found_static = true; + *found_static = TRUE; continue; } /* We accept libfoo.so without a version number, even though the - native linker does not. This is more convenient for packages - which just generate .so files for shared libraries, as on ELF - systems. */ + native linker does not. This is more convenient for packages + which just generate .so files for shared libraries, as on ELF + systems. */ if (strncmp (entry->d_name + 3 + len, ".so", 3) != 0) continue; if (entry->d_name[6 + len] == '\0') @@ -373,17 +356,17 @@ gld${EMULATION_NAME}_search_dir (dirname, filename, found_static) between after_open and check_needed. */ static struct bfd_link_needed_list *global_needed; -static boolean global_found; +static bfd_boolean global_found; /* This is called after all the input files have been opened. */ static void -gld${EMULATION_NAME}_after_open () +gld${EMULATION_NAME}_after_open (void) { struct bfd_link_needed_list *needed, *l; /* We only need to worry about this when doing a final link. */ - if (link_info.relocateable || link_info.shared) + if (link_info.relocatable || link_info.shared) return; /* Get the list of files which appear in ld_need entries in dynamic @@ -412,7 +395,7 @@ gld${EMULATION_NAME}_after_open () /* See if this file was included in the link explicitly. */ global_needed = l; - global_found = false; + global_found = FALSE; lang_for_each_input_file (gld${EMULATION_NAME}_check_needed); if (global_found) continue; @@ -513,15 +496,13 @@ cat >>e${EMULATION_NAME}.c <<EOF /* Search for a needed file in a path. */ -static boolean -gld${EMULATION_NAME}_search_needed (path, name) - const char *path; - const char *name; +static bfd_boolean +gld${EMULATION_NAME}_search_needed (const char *path, const char *name) { const char *s; if (path == NULL || *path == '\0') - return false; + return FALSE; while (1) { const char *dir; @@ -542,7 +523,7 @@ gld${EMULATION_NAME}_search_needed (path, name) } if (gld${EMULATION_NAME}_try_needed (dir, name)) - return true; + return TRUE; if (dircopy != NULL) free (dircopy); @@ -552,41 +533,39 @@ gld${EMULATION_NAME}_search_needed (path, name) path = s + 1; } - return false; + return FALSE; } /* This function is called for each possible directory for a needed dynamic object. */ -static boolean -gld${EMULATION_NAME}_try_needed (dir, name) - const char *dir; - const char *name; +static bfd_boolean +gld${EMULATION_NAME}_try_needed (const char *dir, const char *name) { char *file; char *alc; - boolean ignore; + bfd_boolean ignore; bfd *abfd; file = gld${EMULATION_NAME}_search_dir (dir, name, &ignore); if (file == NULL) - return false; + return FALSE; alc = (char *) xmalloc (strlen (dir) + strlen (file) + 2); sprintf (alc, "%s/%s", dir, file); free (file); abfd = bfd_openr (alc, bfd_get_target (output_bfd)); if (abfd == NULL) - return false; + return FALSE; if (! bfd_check_format (abfd, bfd_object)) { (void) bfd_close (abfd); - return false; + return FALSE; } if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0) { (void) bfd_close (abfd); - return false; + return FALSE; } /* We've found the needed dynamic object. */ @@ -595,7 +574,7 @@ gld${EMULATION_NAME}_try_needed (dir, name) if (! bfd_link_add_symbols (abfd, &link_info)) einfo ("%F%B: could not read symbols: %E\n", abfd); - return true; + return TRUE; } /* See if we have already included a needed object in the link. This @@ -603,15 +582,14 @@ gld${EMULATION_NAME}_try_needed (dir, name) dynamic object more than once. */ static void -gld${EMULATION_NAME}_check_needed (s) - lang_input_statement_type *s; +gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s) { if (s->filename == NULL) return; if (strncmp (global_needed->name, "-l", 2) != 0) { if (strcmp (s->filename, global_needed->name) == 0) - global_found = true; + global_found = TRUE; } else { @@ -651,7 +629,7 @@ gld${EMULATION_NAME}_check_needed (s) || (smin != lmin && smin != -1 && lmin != -1)) return; - global_found = true; + global_found = TRUE; } } @@ -659,7 +637,7 @@ gld${EMULATION_NAME}_check_needed (s) to lang_for_each_statement. Ick. */ static const char *find_assign; -static boolean found_assign; +static bfd_boolean found_assign; /* We need to use static variables to pass information around the call to lang_for_each_input_file. Ick. */ @@ -679,7 +657,7 @@ static bfd_byte *need_pnames; sections, but before any sizes or addresses have been set. */ static void -gld${EMULATION_NAME}_before_allocation () +gld${EMULATION_NAME}_before_allocation (void) { struct bfd_link_hash_entry *hdyn = NULL; asection *sneed; @@ -689,11 +667,11 @@ gld${EMULATION_NAME}_before_allocation () /* The SunOS native linker creates a shared library whenever there are any undefined symbols in a link, unless -e is used. This is pretty weird, but we are compatible. */ - if (! link_info.shared && ! link_info.relocateable && ! entry_from_cmdline) + if (! link_info.shared && ! link_info.relocatable && ! entry_from_cmdline) { struct bfd_link_hash_entry *h; - - for (h = link_info.hash->undefs; h != NULL; h = h->next) + + for (h = link_info.hash->undefs; h != NULL; h = h->und_next) { if (h->type == bfd_link_hash_undefined && h->u.undef.abfd != NULL @@ -702,11 +680,11 @@ gld${EMULATION_NAME}_before_allocation () && strcmp (h->root.string, "__GLOBAL_OFFSET_TABLE_") != 0) { find_assign = h->root.string; - found_assign = false; + found_assign = FALSE; lang_for_each_statement (gld${EMULATION_NAME}_find_assignment); if (! found_assign) { - link_info.shared = true; + link_info.shared = TRUE; break; } } @@ -718,7 +696,7 @@ gld${EMULATION_NAME}_before_allocation () lang_output_section_statement_type *os; /* Set the .text section to start at 0x20, not 0x2020. FIXME: - This is too magical. */ + This is too magical. */ os = lang_output_section_statement_lookup (".text"); if (os->addr_tree == NULL) os->addr_tree = exp_intop (0x20); @@ -730,10 +708,10 @@ gld${EMULATION_NAME}_before_allocation () one. We need to create the symbol before calling size_dynamic_sections, although we can't set the value until afterward. */ - if (! link_info.relocateable) + if (! link_info.relocatable) { - hdyn = bfd_link_hash_lookup (link_info.hash, "__DYNAMIC", true, false, - false); + hdyn = bfd_link_hash_lookup (link_info.hash, "__DYNAMIC", TRUE, FALSE, + FALSE); if (hdyn == NULL) einfo ("%P%F: bfd_link_hash_lookup: %E\n"); if (! bfd_sunos_record_link_assignment (output_bfd, &link_info, @@ -823,7 +801,7 @@ gld${EMULATION_NAME}_before_allocation () /* We must assign a value to __DYNAMIC. It should be zero if we are not doing a dynamic link, or the start of the .dynamic section if we are doing one. */ - if (! link_info.relocateable) + if (! link_info.relocatable) { hdyn->type = bfd_link_hash_defined; hdyn->u.def.value = 0; @@ -842,8 +820,7 @@ gld${EMULATION_NAME}_before_allocation () symbols which are referred to by dynamic objects. */ static void -gld${EMULATION_NAME}_find_assignment (s) - lang_statement_union_type *s; +gld${EMULATION_NAME}_find_assignment (lang_statement_union_type *s) { if (s->header.type == lang_assignment_statement_enum && (find_assign == NULL || ! found_assign)) @@ -853,8 +830,7 @@ gld${EMULATION_NAME}_find_assignment (s) /* Look through an expression for an assignment statement. */ static void -gld${EMULATION_NAME}_find_exp_assignment (exp) - etree_type *exp; +gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp) { switch (exp->type.node_class) { @@ -862,7 +838,7 @@ gld${EMULATION_NAME}_find_exp_assignment (exp) if (find_assign != NULL) { if (strcmp (find_assign, exp->assign.dst) == 0) - found_assign = true; + found_assign = TRUE; return; } @@ -902,8 +878,7 @@ gld${EMULATION_NAME}_find_exp_assignment (exp) for more information. */ static void -gld${EMULATION_NAME}_count_need (inp) - lang_input_statement_type *inp; +gld${EMULATION_NAME}_count_need (lang_input_statement_type *inp) { if (inp->the_bfd != NULL && (inp->the_bfd->flags & DYNAMIC) != 0) @@ -924,8 +899,7 @@ gld${EMULATION_NAME}_count_need (inp) /* Fill in the contents of the .need section. */ static void -gld${EMULATION_NAME}_set_need (inp) - lang_input_statement_type *inp; +gld${EMULATION_NAME}_set_need (lang_input_statement_type *inp) { if (inp->the_bfd != NULL && (inp->the_bfd->flags & DYNAMIC) != 0) @@ -974,8 +948,7 @@ gld${EMULATION_NAME}_set_need (inp) } static char * -gld${EMULATION_NAME}_get_script(isfile) - int *isfile; +gld${EMULATION_NAME}_get_script (int *isfile) EOF if test -n "$COMPILE_IN" @@ -986,14 +959,14 @@ then sc="-f stringify.sed" cat >>e${EMULATION_NAME}.c <<EOF -{ +{ *isfile = 0; - if (link_info.relocateable == true && config.build_constructors == true) + if (link_info.relocatable && config.build_constructors) return EOF sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c +echo ' ; else if (link_info.relocatable) 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 @@ -1007,12 +980,12 @@ else # Scripts read from the filesystem. cat >>e${EMULATION_NAME}.c <<EOF -{ +{ *isfile = 1; - if (link_info.relocateable == true && config.build_constructors == true) + if (link_info.relocatable && config.build_constructors) return "ldscripts/${EMULATION_NAME}.xu"; - else if (link_info.relocateable == true) + else if (link_info.relocatable) return "ldscripts/${EMULATION_NAME}.xr"; else if (!config.text_read_only) return "ldscripts/${EMULATION_NAME}.xbn"; @@ -1027,7 +1000,7 @@ fi cat >>e${EMULATION_NAME}.c <<EOF -struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = +struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = { gld${EMULATION_NAME}_before_parse, syslib_default, @@ -1047,6 +1020,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* place orphan */ gld${EMULATION_NAME}_set_symbols, NULL, /* parse args */ + NULL, /* add_options */ + NULL, /* handle_option */ NULL, /* unrecognized file */ NULL, /* list options */ NULL, /* recognized file */ |