diff options
Diffstat (limited to 'contrib/binutils/ld')
104 files changed, 0 insertions, 36408 deletions
diff --git a/contrib/binutils/ld/ChangeLog b/contrib/binutils/ld/ChangeLog deleted file mode 100644 index 6baf1f4c8944..000000000000 --- a/contrib/binutils/ld/ChangeLog +++ /dev/null @@ -1,7787 +0,0 @@ -Mon Apr 27 11:56:21 1998 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Set version number to 2.9.1. - * configure: Rebuild. - - Based on patch from H.J. Lu <hjl@gnu.org>: - * emultempl/elf32.em (global_vercheck_needed): New file static - variable. - (global_vercheck_failed): New file static variable. - (gld${EMULATION_NAME}_after_open): Check for shared libraries - twice, once with force set to 0 and once with it set to 1. - (gld${EMULATION_NAME}_check_ld_so_conf): Add force parameter. - Change all callers. - (gld${EMULATION_NAME}_search_needed): Likewise. - (gld${EMULATION_NAME}_try_needed): Likewise. If not force, check - whether the libraries needs any incompatible versions. - (gld${EMULATION_NAME}_vercheck): New static function. - -Tue Apr 7 13:35:29 1998 H.J. Lu <hjl@gnu.org> - - * configure.in (TESTBFDLIB): New. Defined and substituted. - * Makefile.am (TESTBFDLIB): Changed to @TESTBFDLIB@. - * configure, Makefile.in: Rebuild. - -Mon Apr 6 15:33:39 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (ld.info): Invoke makeinfo with -I options directly - rather than relying on default rule. Don't depend upon - bfdsumm.texi. - (ld.dvi): Likewise. - (bfdsumm.texi): Remove target. - (CLEANFILES): Take bfdsumm.texi out of value. - * Makefile.in: Rebuild. - -Sun Apr 5 13:07:57 1998 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Use shell variables to avoid depending upon - how $ is handled when expanding a shell substitution. - -Fri Apr 3 13:31:46 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (MOSTLYCLEANFILES): Add ld.log and ld.sum. - (DISTCLEANFILES): Define with site.exp and site.bak. - * Makefile.in: Rebuild. - - * Makefile.am (DISTCLEANFILES): Remove. - (distclean-local): New target. - * Makefile.in: Rebuild. - -Mon Mar 30 16:12:48 1998 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Set version number to 2.9. - * configure: Rebuild. - -Sat Mar 28 16:48:19 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (MOSTLYCLEANFILES): Remove tmpdir. - (mostlyclean-local): New target to remove tmpdir. - * Makefile.in: Rebuild. - - Fix some gcc -Wall warnings: - * ldcref.c (output_cref): Add casts to avoid warnings. - * ldfile.c (ldfile_add_arch): Likewise. - * ldlang.c (lang_leave_overlay_section): Likewise. - * lexsup.c (OPTION_COUNT): Likewise. - (parse_args): Likewise. - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): - Likewise. - * emultempl/sunos.em (gld${EMULATION_NAME}_search_dir): Likewise. - * ldlang.c (lang_check): Initialize variables to avoid warnings. - * ldwrite.c (build_link_order): Likewise. - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Likewise. - * emultempl/armcoff.em (gld${EMULATION_NAME}_before_allocation): - Remove unused variables. - - * Makefile.am (MOSTLYCLEANFILES): Correct name (was - MOSTCLEANFILES). - * Makefile.in: Rebuild. - -Fri Mar 27 16:39:25 1998 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Put - ARM code inside ifdef TARGET_IS_armpe. - -Wed Mar 25 11:34:13 1998 Ian Lance Taylor <ian@cygnus.com> - - Based on patch from H.J. Lu <hjl@gnu.org>: - * Makefile.am (LDDISTSTUFF): New variable. - (diststuff): New target. - * Makefile.in: Rebuild. - - * scripttempl/pe.sc: Only include .idata\$[0-7] in .idata when - relocating. - -Tue Mar 24 15:59:29 1998 Nick Clifton <nickc@cygnus.com> - - * scripttempl/pe.sc (.text): Add .glue_7 and .glue_7t sections to - hold Arm/Thumb stubs. - - * emultempl/pe.em (gld_pe_before_allocation): Call - arm_process_before_allocation (for ARM/Thumb targets) in order to - gather interworking stb information. - -Mon Mar 23 18:54:15 1998 Joel Sherrill <joel@OARcorp.com> - - * configure.tgt: (sh*-*-rtems*): Switched from ELF to COFF. - -Fri Mar 20 19:17:13 1998 Ian Lance Taylor <ian@cygnus.com> - - * aclocal.m4, configure: Rebuild with libtool 1.2. - -Thu Mar 19 14:54:45 1998 Geoffrey Noer <noer@cygnus.com> - - * scripttempl/pe.sc: The Cygwin32 library uses a .data$nocopy - section to avoid copying certain data on fork. The linker used to - include this between __data_start__ and __data_end__, but that - breaks building the cygwin32 dll. The fix is to rename the - section ".data_cygwin_nocopy" and explictly include it after - __data_end__. - -Wed Mar 18 09:42:24 1998 Nick Clifton <nickc@cygnus.com> - - * configure.tgt (targ_extra_emuls): Add thumb-pe target. - -Sun Mar 8 23:34:14 1998 Stan Cox <scox@equinox.cygnus.com> - - * configure.tgt (sparclite*-*-elf): Added. - -Mon Mar 2 19:24:08 1998 Michael Meissner <meissner@cygnus.com> - - * ldlang.c (lang_size_sections): If the default memory region is - *default*, see if there is a memory region that could be used. - -Mon Feb 23 17:46:51 1998 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (sort_sections): Permit the wildcard to include - a trailing '*' when sorting grouped sections. - * scripttempl/pe.sc: Include grouped sections using NAME\$*. Only - include them when relocating. - -Wed Feb 18 23:39:46 1998 Richard Henderson <rth@cygnus.com> - - * Makefile.am (install-exec-local): Install properly when ln - fails or tooldir == prefix. - -Fri Feb 13 15:24:06 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (AUTOMAKE_OPTIONS): Define. - * configure, Makefile.in, aclocal.m4: Rebuild with automake 1.2e. - -Thu Feb 12 14:10:44 1998 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elf.sc: Align the _end symbol according to the ELF - format size. From Gordon W. Ross <gwr@mc.com>. - - NetBSD patches from Gordon W. Ross <gwr@mc.com>: - * configure.host (alpha*-*-netbsd*): New host. - * configure.tgt (alpha*-*-netbsd*, powerpc-*-netbsd*): New - targets. - - * lexsup.c (help): Update bug-gnu-utils address. - * ld.texinfo (Bug Reporting): Likewise. - -Tue Feb 10 18:05:56 1998 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_size_sections): Warn if some memory regions were - defined, but a loadable section is going into the default memory - region. - -Tue Feb 10 16:17:20 1998 H.J. Lu <hjl@gnu.org> - - * ldlex.l (V_IDENTIFIER): Allow '.' as symbol prefix. - -Tue Feb 10 15:09:45 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (Makefile): Add target, for dependencies on - configure.host and configure.tgt. - * configure.host, configure.tgt: Change -linux* to -linux-gnu*. - * Makefile.in: Rebuild. - -Mon Feb 9 13:44:40 1998 Andrew Cagney <cagney@b1.cygnus.com> - - * scripttempl/elfd10v.sc (.stack): Move stack to 0x00..7FFE. - - * emulparams/d10velf.sh (READONLY_START_ADDR): Read only section - moved to 0x00.....4. - -Sat Feb 7 15:41:26 1998 Ian Lance Taylor <ian@cygnus.com> - - * configure, aclocal.m4: Rebuild with new libtool. - -Thu Feb 5 12:16:11 1998 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Remove ${RELOCATING-0} from all sections. - From Thomas de Lellis <tdel@wrs.com>. - - * configure, Makefile.in, aclocal.m4: Rebuild with new libtool. - -Wed Feb 4 13:02:32 1998 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (ld_new_LDADD): Remove @LEXLIB@. - * Makefile.in: Rebuild. - -Mon Feb 2 19:34:54 1998 Steve Haworth <steve@pm.cse.rmit.EDU.AU> - - Add tms320c30 support: - * configure.tgt (tic30-*-*aout*, tic30-*-*coff*): New targets. - * emulparams/tic30aout.sh: New file. - * emulparams/tic30coff.sh: New file. - * scripttempl/tic30aout.sc: New file. - * scripttempl/tic30coff.sc: New file. - * Makefile.am (ALL_EMULATIONS): Add etic30aout.o and - etic30coff.o. - (etic30aout.c, etic30coff.c): New targets. - * Makefile.in: Rebuild. - -Mon Feb 2 14:10:59 1998 Ian Lance Taylor <ian@cygnus.com> - - * configure.host: Correct HOSTING_CRT0 in alpha*-*-linux* case to - accept either ld.so or ld-linux.so. - -Fri Jan 30 19:16:28 1998 Doug Evans <devans@canuck.cygnus.com> - - * Makefile.am ({CC,CXX}_FOR_TARGET): Change program_transform_name - to transform. - * Makefile.in: Regenerate. - -Fri Jan 30 19:15:17 1998 Geoff Keating <geoffk@ozemail.com.au> - - * scripttempl/elfppc.sc: Put .dynsbss in .sbss. - -Fri Jan 30 11:43:49 1998 H.J. Lu <hjl@gnu.ai.mit.edu> - - * Makefile.am (eelf32bsmip.c, eelf32lsmip.c): New targets. - * Makefile.in: Rebuild. - -Thu Jan 29 16:04:21 1998 Mumit Khan <khan@xraylith.wisc.edu> - - * ldfile.c (slash): Set to backslash if _WIN32 but not - __CYGWIN32__. - (ldfile_open_file_search): If __MSDOS__ or _WIN32, accept a - leading backslash or a leading x: as an absolute path. - (ldfile_find_command_file): Use slash rather than / when - generating name to try. - * lexsup.c (PATH_SEPARATOR): Define. - (set_default_dirlist): Use PATH_SEPARATOR rather than ':'. - -Wed Jan 28 14:06:30 1998 Richard Henderson <rth@cygnus.com> - - * emulparams/elf64_sparc.sh (ELFSIZE): 64 - (TEXT_START_ADDR): Round off, since SIZEOF_HEADERS is added later. - (DATA_PLT): Needed by v9 abi. - -Wed Jan 28 16:37:27 1998 J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl> - - * configure.tgt (i[3456]86-*-mingw32*): New entry. - -Wed Jan 28 15:51:58 1998 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elf.sc: Only include linkonce sections in final - sections when relocating. - -Wed Jan 28 14:10:01 1998 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Options): Add a brief description of the types of - information included in a link map. - - * ld.texinfo (Options): Mention LDEMULATION in description of -m. - (Environment): Mention LDEMULATION. - - * ld.texinfo (Options): Clarify --export-dynamic a bit. - -Thu Jan 22 16:07:23 1998 Richard Henderson <rth@cygnus.com> - - * ldlex.l (<SCRIPT>{WILDCHAR}*): Take care for the comments this - pattern could match. - -Wed Jan 21 22:26:46 1998 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): When doing - a relocateable link, set the image base to 0, and don't define the - various symbols. - * emulparams/i386pe.sh (RELOCATEABLE_OUTPUT_FORMAT): Define. - * scripttempl/pe.sc: Swap the .data and .bss sections so that - .data comes first. If doing a relocateable link, use - RELOCATEABLE_OUTPUT_FORMAT if it is defined, and start the - sections at 0, and don't define any symbols. - - * ldlang.c (lang_memory_default): Correct parenthisization of - expression. - -Wed Jan 21 21:20:32 1998 Manfred Hollstein <manfred@s-direktnet.de> - - * emultempl/sunos.em: Don't include sys/types.h and sys/stat.h - here; they are included already via sysdep.h. - -Tue Jan 6 13:40:02 1998 Richard Henderson <rth@cygnus.com> - - * scripttempl/i960.sc: Don't explicitly set .data and .bss start. - -Fri Jan 2 20:15:37 1998 Michael Meissner <meissner@cygnus.com> - - * ldgram.y (attributes_opt): Pass region pointer to - lang_set_flags, not ®ion->flags. - - * ldlang.c (lang_memory_default): New function to figure out a - default memory region for a section if it was not specified. - (lang_memory_region_lookup): Zero flags, not_flags field. - (lang_map{,_flags}): Print attribute flags in memory map. - (lang_size_sections): Call lang_memory_default to get default - memory region. - (lang_set_flags): Implement attribute flags for real. Take new - argument to give the flags we are to skip for this region. - - * ldlang.h (memory_region_struct): Add not_flags field, make both - flags fields flagword type. - (lang_output_section_state): Make flags field flagword type. - (lang_set_flags): Update prototype to match new calling sequence. - (lang_memory_region_default): Add prototype. - -Thu Jan 1 18:04:51 1998 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300h.sc: Fix typo. - * scripttempl/h8300s.sc: Likewise. - -Sun Dec 21 12:51:49 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldexp.c (fold_name): Don't crash if the symbol is defined in a - section with no output section, such as a shared library section. - -Wed Dec 17 12:14:11 1997 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Keep track of where we are in the option - parsing before calling ldemul_parse_args, so that we don't call it - multiple times on the same argument and confuse the getopt - internals. - -Wed Dec 10 17:40:08 1997 Nick Clifton <nickc@cygnus.com> - - * scripttempl/armcoff.sc: Add glue sections (code taken from Arm - branch). - - * emulparams/armcoff.sh (TEMPLATE_NAME): Set to armcoff. - - * emultempl/armcoff.em: New file, imported from Arm branch. - -Tue Dec 9 15:28:17 1997 Michael Meissner <meissner@cygnus.com> - - * Makefile.am: Add Oct 23 changes to Makefile.in here. - - * Makefile.{am,in}: (ALL_EMULATIONS): Add ed10velf.o. - - - -Tue Dec 2 10:14:47 1997 Nick Clifton <nickc@cygnus.com> - - * configure.tgt (targ_extra_emuls): Add support for Thumb target. - -Sat Nov 22 15:23:19 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlex.l: Don't define hex_mode. Correct number regexp to not - accept hex digits without a leading $ or 0x. Handle leading $ - correctly. Pass 0 rather than hex_mode to bfd_scan_vma. - * ldlex.h (hex_mode): Don't declare. - -Thu Nov 13 13:45:00 1997 Andrew Cagney <cagney@b1.cygnus.com> - - * configure.tgt (targ_extra_emuls): Make FreeBSD a i386bsd - variant. - -Sun Nov 2 14:51:36 1997 H.J. Lu <hjl@gnu.ai.mit.edu> - - * configure.host (alpha*-*-linux*): Correct HOSTING_CRT0. Set - HOSTING_LIBS. - -Thu Oct 30 12:25:55 1997 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (args_type): Add warn_mismatch field. - * ldmain.c (main): Initialize warn_mismatch field. - * lexsup.c (parse_args): Handle --no-warn-mismatch option. - * ldlang.c (ignore_bfd_error): New static function. - (lang_check): If warn_mismatch is false, don't warn about - mismatched input files. - * ld.texinfo, ld.1: Document new option. - -Thu Oct 23 14:38:18 1997 Nick Clifton <nickc@cygnus.com> - - * scripttempl/v850.sc: Rename linker symbol '_stack' to '__stack' - to avoid conflicts with C code which is defining a variable called - 'stack'. - -Thu Oct 23 00:57:45 1997 Richard Henderson <rth@dot.cygnus.com> - - * Makefile.in (ALL_EMULATIONS): Move eelf64_sparc.o ... - (ALL_64_EMULATIONS): ... here. - (eelf64_sparc.c): Template should be elf32 not generic. - * emulparams/elf64_sparc.sh (TEMPLATE_NAME): New definition. - -Thu Oct 23 00:44:20 1997 Richard Henderson <rth@dot.cygnus.com> - - * configure.tgt: Add sparc64-*-linux*. - * emulparams/elf64_sparc.sh (GENERATE_SHLIB_SCRIPT, NOP): New. - -Wed Oct 22 11:29:25 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Put .eh_frame in .rdata. - -Fri Oct 17 00:00:13 1997 Richard Henderson <rth@cygnus.com> - - * ldlang.c (lang_register_vers_node): Only check globals<=>locals, - since we need to be able to export different versions of the same - symbol. - -Wed Oct 15 14:52:36 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Put .stab and .stabstr sections at end. - -Wed Oct 8 12:37:05 1997 Richard Henderson <rth@cygnus.com> - - * configure.tgt, configure.host: Change alpha-*-* to alpha*-*-*; - config.guess now recognizes alphaev5 etc. - -Fri Oct 3 14:23:02 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Don't treat - -s and -u as -static and -unix. - -Thu Oct 2 18:40:28 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (wild_doit): Rewrite flag handling for clarity. If we - are not adding the first input section, and SEC_READONLY is clear - on the output section, then don't copy it from the input section. - If SEC_READONLY is not set on the input section, then clear it on - the output section. - - * configure.tgt (mips*-sgi-irix[56]*): Use elf32bsmip rather than - elf32bmip. - (mips*el-*-linux*): Change elf32lmip to elf32lsmip and elf32bmip - to elf32bsmip. - (mips*-*-linux*): Likewise. - * emulparams/elf32bsmip.sh: New file; just like elf32bmip.sh, but - setting ENTRY to __start. - * emulparams/elf32lsmip.sh: New file; just like elf32lmip.sh, but - setting ENTRY to __start. - * scripttempl/elf.sc: Always set ENTRY to _start if it was not - already set. - -Wed Oct 1 16:41:00 1997 Nick Clifton <nickc@cygnus.com> - - * emulparams/v850.sh (ROZDATA_START_ADDR, ROSDATA_START_ADDR): New - Variables. - - * scripttempl/v850.sc: Move read only areas out of zero and small - data sections and into their own sections. - -Wed Sep 24 16:59:15 1997 Joel Sherrill <joel@oarcorp.com> - - * configure.tgt (sh*-*-rtems*): New target, like sh-*-elf*. - -Wed Sep 24 11:33:14 1997 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Section Options): Improve documentation of NOLOAD - directive. - - * aclocal.m4: Rebuild with new libtool. - * configure: Rebuild. - -Mon Sep 22 17:24:06 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (wild_doit): Revert patch of September 3. - -Wed Sep 17 16:45:34 1997 Nick Clifton <nickc@cygnus.com> - - * Makefile.am, Makefile.in: Add rule for ev850.c - * configure.tgt (targ_extra_emuls): Add v850 target. - -Tue Sep 9 07:49:56 1997 Fred Fish <fnf@ninemoons.com> - - * ldlang.c (lang_memory_region_lookup): Remove extraneous - initialization of p. - -Thu Sep 4 09:03:33 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): In - expression produced for -bpT and -bpD options, align to a 32 byte - boundary rather than an 8 byte boundary. - * scripttempl/aix.sc: Put .tocbss at start of .bss section. - - * ldmisc.h, ldmisc.c, ldcref.c: Rename finfo to lfinfo, to avoid - function name conflict with AIX 4.2 unistd.h header file. - -Wed Sep 3 15:12:32 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (wild_doit): Clear SEC_HAS_CONTENTS from a - noload_section. - -Fri Aug 29 00:32:31 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (ld_new_DEPENDENCIES): Remove @LEXLIB@. - * Makefile.in: Rebuild. - -Thu Aug 28 10:12:10 1997 Doug Evans <dje@canuck.cygnus.com> - - * configure.tgt (arc-*-elf*): Recognize. - * Makefile.am (ALL_EMULATIONS): Add earcelf.o. - * Makefile.in: Regenerate. - * emulparams/arcelf.sh: New file. - -Wed Aug 20 11:14:13 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (wildcardp): Don't let a backslash by itself cause a - pattern to be treated as a wildcard pattern. - - * ldgram.y (atype): Accept parentheses with no type. - - * ld.texinfo (Section Definition): Clarify use of whitespace. - (Section Placement): Likewise. - - -Sat Aug 9 00:42:27 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.am (ld.info): Change dependency from - $(BFDDIR)/doc/bfdsumm.texi to bfdsumm.texi. - (ld.dvi): Likewise. - (bfdsumm.texi): New target. - (CLEANFILES): Add bfdsumm.texi. - * Makefile.in: Rebuild. - - * Makefile.am: New file, based on old Makefile.in. - * acinclude.m4: New file, from old aclocal.m4. - * configure.in: Call AM_INIT_AUTOMAKE and AM_PROG_LIBTOOL. Remove - shared library handling; now handled by libtool. Replace - AC_CONFIG_HEADER with AM_CONFIG_HEADER. Call AC_PROG_YACC, - AC_PROG_LEX, and AC_DECL_YYTEXT. Call AM_MAINTAINER_MODE, - AM_CYGWIN32, and AM_EXEEXT. Don't call CY_CYGWIN32 or CY_EXEEXT. - * configure.host: Don't set HLDFLAGS, HLDENV, or RPATH_ENVVAR. - * acconfig.h: Mention PACKAGE and VERSION. - * stamp-h.in: New file. - * ldver.c (ld_program_version): Set ld_program_version from - VERSION. - * ldgram.y, ldlex.l: Replace VERSION with VERSIONK. - * Makefile.in: Now built with automake. - * aclocal.m4: Now built with aclocal. - * configure, config.in: Rebuild. - -Mon Jul 28 19:04:50 1997 Rob Savoye <rob@chinadoll.cygnus.com> - - * configure.in: Use CYGWIN and EXEEXT autoconf macro to look for - win32 dependencies. - * configure: Regenerated with autoconf 2.12. - * Makefile.in: Add $(EXEEXT) to executable. - -Tue Jul 22 18:50:38 1997 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE> - - * emulparams/i386go32.sh (OUTPUT_FORMAT): Set to "coff-go32". - (SEGMENT_SIZE): Set to 0x200. - * scripttempl/i386go32.sc: Rewrite. - * configure.tgt (i[3456]86-*-msdosdjgpp*): New target. - -Mon Jul 7 12:39:42 1997 Ian Lance Taylor <ian@cygnus.com> - - From Manfred Hollstein <manfred@s-direktnet.de>: - * configure.host (i[3456]86-*-linux*libc1*): Renamed from - i[3456]86-*-linux*. - (i[3456]86-*-linux*): New host. - -Thu Jun 26 13:54:03 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Put .rsrc after .reloc. Put input .rsrc - sections in the output .rsrc section. - -Wed Jun 25 12:48:41 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * configure.host (m68*-*-linux*libc1*): Renamed from - `m68*-*-linux*'. - (m68*-*-linux*): New configuration for use with GNU libc 2. - -Mon Jun 16 19:18:21 1997 Geoff Keating <geoffk@ozemail.com.au> - - * scripttempl/elfppc.sc: Correct .rela.sdata entries. - - * scripttempl/elfppc.sc: Put the PLT between the small and large - BSS segments. - * emulparams/elf32ppc.sh (TEXT_START_ADDR): The ABI says `A - program base of 0x02000000 is recommended...' because otherwise - shared libraries are less efficient. We use 0x01800000 because - otherwise it's impossible to branch to location 0, for instance if - you have an undefined weak symbol. - -Mon Jun 16 12:49:36 1997 H.J. Lu <hjl@gnu.ai.mit.edu> - - * ldlang.c (lang_place_undefineds): Add \n in einfo call. - (lang_size_sections): Likewise. - * ldlex.l: Likewise. - * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Likewise. - * emultempl/mipsecoff.em (gld${EMULATION_NAME}_after_open): - Likewise. - (check_sections): Likewise. - (gld${EMULATION_NAME}_after_allocation): Likewise. - * emultempl/pe.em (gld_$${EMULATION_NAME}_before_allocation): - Likewise. - * mpw-eppcmac.c (gldppcmacos_read_file): Likewise. - * mpw-idtmips.c (gldmipsidt_after_open): Likewise. - (check_sections): Likewise. - (gldmipsidt_after_allocation): Likewise. - - * ldemul.c (ldemul_choose_mode): Remove unused einfo argument. - -Fri Jun 6 23:47:42 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/pe.sc: Add zeroes after .idata$3 to mark the end of - the import list. - -Thu May 29 13:13:22 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Don't - crash if an output section has no BFD section. - -Fri May 23 15:23:25 1997 Fred Fish <fnf@cygnus.com> - - * lexsup.c (ld_options): Add entry for the new "task-link" option. - (parse_args): Handle the "task-link" option. - (OPTION_TASK_LINK): Add define. - -Wed May 21 17:44:15 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Correct check of fclose return value when - handling --force-exe-suffix. - -Thu May 15 11:35:29 1997 Nick Clifton <nickc@cygnus.com> - - * ldlang.c (lang_check): Add test of the return value from the - call to bfd_merge_private_bfd_data(). - -Mon May 12 23:22:58 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elfmips.sc: Remove. - * scripttempl/elf.sc: Set ENTRY based on target. Permit - TEXT_DYNAMIC to control .dynamic segment. Permit - SHLIB_TEXT_START_ADDR to set start of shared object. Support - INITIAL_READONLY_SECTIONS. Put .stub in .text. Only put - .gnu.linkonce.t* in .text when relocating. Support - OTHER_TEXT_SECTIONS. Support SHLIB_DATA_ADDR as well as - DATA_ADDR. Support OTHER_GOT_SYMBOLS and OTHER_GOT_SECTIONS. - * emulparams/elf32b4300.sh (SCRIPT_NAME): Set to elf. - (DATA_ADDR): Don't set. - (INITIAL_READONLY_SECTIONS): Rename from OTHER_READONLY_SECTIONS. - (OTHER_TEXT_SECTIONS): Set. - (OTHER_GOT_SECTIONS): Rename from OTHER_READWRITE_SECTIONS. - (MACHINE): Set to empty string. - * emulparams/elf32l4300.sh: Likewise. - * emulparams/elf32ebmip.sh: Likewise. - * emulparams/elf32elmip.sh: Likewise. - * emulparams/elf32bmip.sh: Likewise. Also: - (TEXT_DYNAMIC): Set. - * emulparams/elf32lmips.sh: Likewise. - * Makefile.in (eelf32bmips.c): Depend upon elf.sc rather than - elfmips.sc. - (eelf32ebmips.c, eelf32elmips.c, eelf32lmip.c): Likewise. - -Mon May 12 11:11:06 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * scripttempl/elf.sc: Don't align the data segment on the next 8 - byte boundary, instead let the linker use whatever the individual - sections require. - -Fri May 9 17:45:46 1997 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (i[3456]86-*-gnu*): Don't include Mach support. - -Tue May 6 13:21:19 1997 Ian Lance Taylor <ian@cygnus.com> - - From Sean McNeil <sean@mcneil.com>: - * emultempl/pe.em (sort_by_file_name): Sort by archive name - first. - (sort_sections): Sort all sections, not just sections in the same - archive. - -Mon May 5 18:19:55 1997 Philip Blundell <pjb27@cam.ac.uk> - - * configure.tgt, configure.host: cope with '*-*-linux-gnuaout' - targets. - -Wed Apr 30 12:23:21 1997 Manfred Hollstein <manfred@s-direktnet.de> - - * scripttempl/m88kbcs.sc (__.initp.end, _etext): Added whitespace - around assignment of current location pointer. - -Thu Apr 17 13:07:18 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldctor.c (ldctor_build_sets): Make sure the set is aligned - appropriately. - -Tue Apr 15 13:19:26 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (INSTALL): Set to @INSTALL@. - (INSTALL_XFORM, INSTALL_XFORM1): Remove. - (install): Depend upon ld.new and installdirs. Use - $(program_transform_name) directly, rather than using - $(INSTALL_XFORM) and $(INSTALL_XFORM1). - (installdirs): New target. - (install-info): Run mkinstalldirs. - -Mon Apr 14 12:06:15 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (INSTALL): Change install.sh to install-sh. - - From Thomas Graichen <graichen@rzpd.de>: - * configure.in: Use ${CONFIG_SHELL} when running $ac_config_sub. - * configure: Rebuild. - -Fri Apr 4 11:42:41 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em: Include "libiberty.h". - (sort_sections_1): Use xmalloc rather than alloca. - - * ldlex.l: Recognize SQUAD. - * ldgram.y (length): Add SQUAD. - * ldctor.c (ldctor_build_sets): Use SQUAD for a signed 8 byte - reloc. - * ldlang.c (print_data_statement): Handle SQUAD. - (lang_size_sections, lang_do_assignments): Likewise. - * ldexp.c (exp_print_token): Add SQUAD to table. - * ldwrite.c (build_link_order): Handle SQUAD. - * ld.texinfo (Section Data Expressions): Document SQUAD. - -Thu Apr 3 13:19:40 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldver.c (ld_program_version): Set to 2.8.1. - - * Branched binutils 2.8. - -Wed Apr 2 11:55:27 1997 Ian Lance Taylor <ian@cygnus.com> - - * mpw-idtmips.c: Rename from mpw-emipsidt.c. - * mpw-elfmips.c: Rename from mpw-emipself.c. - * mpw-config.in: Update accordingly. - - * ldlang.c (lang_process): Call lang_check immediately after - opening the input files, rather than at the end of the link. - -Mon Mar 31 23:44:00 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (init): Fully bracket initializer. - (set_pe_stack_heap): Remove locals begin_commit and end. - (gld_${EMULATION_NAME}_after_open): Remove unused local i. - (gld${EMULATION_NAME}_place_orphan): Remove unused local ptr. - -Mon Mar 31 16:35:51 1997 Joel Sherrill <joel@oarcorp.com> - - * configure.tgt (hppa*-*-rtems*): New target, like hppa-*-*elf*. - -Fri Mar 28 15:29:23 1997 H.J. Lu <hjl@gnu.ai.mit.edu> - - Contributed by David S. Miller <davem@caip.rutgers.edu>: - * configure.tgt (sparc*-*-linuxaout*): New target. - (sparc*-*-linux*): New target. - * emulparams/sparclinux.sh: New file. - * Makefile.in (ALL_EMULATIONS): Add esparclinux.o. - (esparclinux.c): New target. - -Fri Mar 28 14:30:12 1997 Ian Lance Taylor <ian@cygnus.com> - - From Ralf Baechle <ralf@gnu.ai.mit.edu>: - * configure.tgt: Set targ_extra_emuls for mips*el-*-linux* and - mips*-*-linux*. Use elf32bmip and elf32lmip, not elf32ebmip and - elf32elmip. - -Thu Mar 27 17:14:32 1997 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Update copyright date in version - message. - -Fri Mar 21 12:28:41 1997 Philippe De Muyter <phdm@info.ucl.ac.be> - - * emulparams/delta68.sh (OUTPUT_FORMAT): Set to "coff-m68k-sysv". - -Tue Mar 18 11:16:23 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in: Rebuild dependencies. - - * emultempl/aix.em: Include "obstack.h". - -Mon Mar 17 19:26:06 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c: Include "obstack.h". - -Sat Mar 15 23:23:46 1997 Fred Fish <fnf@cygnus.com> - - * configure.tgt (powerpc-*-beos*): Use aixppc for targ_emul. - -Sat Mar 15 18:10:38 1997 H.J. Lu <hjl@lucon.org> - - * ldemul.h (ldemul_list_emulations): Use full prototype. - * ldlang.c (print_one_symbol): Add declaration. - * ldlang.h (dprint_statements): Declare. - * ldmain.c (remove_output): Declare. - * ldmisc.c (vfinfo): Declare. - * ldwrite.c (clone_section): Declare. - (split_sections): Make static. Declare. - * mri.c: Include libiberty.h. - (strdup): Don't declare. - (mri_alias): Use xstrdup rather than strdup. - -Fri Mar 14 21:30:06 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elfmips.sc: Change handling of data area when - generating a shared library to not skip a large block of memory. - From Per Fogelstrom <pefo@cvs.openbsd.org>. - -Wed Mar 12 21:33:09 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (multiple_definition): Only skip the warning if the - output section is absolute when the input section is not - absolute. - - * ldlex.l: Accept whitespace in VERS_START state. Warn about - invalid characters in VERS_* states. - -Tue Mar 11 13:51:31 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Don't let a - trailing space lead us to think that there is a zero address. - -Sun Mar 9 23:06:35 1997 Eric Youngdale <eric@andante.jic.com> - - * ldgram.y (vers_node): Correct typo of '(' for '{'. - -Sun Mar 2 22:59:49 1997 Fred Fish <fnf@cygnus.com> - - * Makefile.in (ld.dvi): Set MAKEINFO environment variable as well - as TEXINPUTS. Needed for building in separate build dir. - * ldint.texinfo (SCRIPT_NAME): Fix typo. - -Fri Feb 28 17:42:27 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Call bfd_set_default_target. - * Makefile.in (ldmain.o): Define TARGET when compiling. - -Thu Feb 27 11:41:03 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Don't initialize link_info.lprefix or - link_info.lprefix_len. - * emultempl/hppaelf.em (hppaelf_before_parse): Likewise. - - * emultempl/m88kbcs.em: Remove. - * emulparams/m88kbcs.sh (TEMPLATE_NAME): Don't set. - * Makefile.in (em88kbcs.c): Depend upon generic.em rather than - m88kbcs.em. - - * mri.c (mri_draw_tree): Pass noload_section, not SEC_NEVER_LOAD, - to lang_enter_output_section_statement. From Mark Rasin - <mark.rasin@telrad.co.il>. - -Wed Feb 26 11:51:44 1997 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_one_common): Clear SEC_IS_COMMON from common - section. - -Tue Feb 25 20:38:11 1997 Stan Shebs <shebs@andros.cygnus.com> - - * configure.tgt (mips*-*-lnews*): New target. - * Makefile.in (emipslnews.c): New target. - * emulparams/mipslnews.sh: New file. - -Tue Feb 25 16:04:09 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (hold_interp): New static variable. - (gld${EMULATION_NAME}_place_orphan): Put loadable .note sections - after hold_interp. Choose a unique output section name. - (gld${EMULATION_NAME}_place_section): Don't set hold_use if the - SEC_LOAD or SEC_ALLOC flags differ. Set hold_interp. - -Mon Feb 24 18:16:09 1997 Ian Lance Taylor <ian@cygnus.com> - - From Eric Youngdale <eric@andante.jic.com>: - * ldlex.l (V_TAG, V_IDENTIFIER): New macros. - (VERS_START, VERS_SCRIPT, VERS_NODE): New states to parse version - information. - (ldlex_version_script, ldlex_version_file): New functions. - * ldlex.h (enum input_enum): Add input_version_script. - (ldlex_version_script): Declare. - (ldlex_version_file): Declare. - * ldgram.y (%union): Add deflist, versyms, and versnode. - (VERS_TAG, VERS_IDENTIFIER): New terminals. - (GLOBAL, LOCAL, VERSION, INPUT_VERSION_SCRIPT): New terminals. - (file): Accept INPUT_VERSION_SCRIPT. - (ifile_p1): Accept version. - (version_script_file): New nonterminal. - (version, vers_nodes, vers_node): Likewise. - (verdep, vers_tag, ver_defns): Likewise. - * ldlang.c (lang_elf_version_info): New global variable. - (lang_new_vers_regex): New function. - (lang_new_vers_node): New function. - (version_index): New static variable. - (lang_register_vers_node): New function. - (lang_add_vers_depend): New function. - * ldlang.h (lang_elf_version_info): Declare. - (lang_new_vers_regex, lang_new_vers_node): Declare. - (lang_add_vers_depend, lang_register_vers_node): Declare. - * lexsup.c (OPTION_VERSION_SCRIPT): Define. - (ld_options): Add "version-script". - (parse_args): Handle OPTION_VERSION_SCRIPT. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Pass lang_elf_version_info to size_dynamic_sections. - * scripttempl/elf.sc: Add .gnu.version sections. - * ld.texinfo: Document symbol versioning. - -Fri Feb 14 18:28:31 1997 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Option Commands): Document the INCLUDE command. - -Thu Feb 13 20:31:37 1997 Philippe De Muyter <phdm@info.ucl.ac.be> - - * configure.in: Call BFD_NEED_DECLARATION on getenv. - * acconfig.h (NEED_DECLARATION_GETENV): New macro. - * sysdep.h (getenv): Declare if NEED_DECLARATION_GETENV. - * ldemul.c (ld_emul_default_target): Do not cast getenv return - value. - * ldmain.c (get_emulation): Likewise. - * configure, config.in: Rebuild. - -Tue Feb 11 15:34:26 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elfmips.sc: When relocating, put .mips16.fn.* and - .mips16.call.* in .text. - -Fri Jan 31 13:16:53 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Search for - ".so" in the name, not ".so.". - (gld${EMULATION_NAME}_search_dir): Accept a plain .so file. - - * Makefile.in (ld.info): Add -I$(srcdir). From Alan Modra - <alan@spri.levels.unisa.edu.au>. - -Thu Jan 30 11:31:52 1997 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em: Include <ctype.h>. - (gld${EMULATION_NAME}_find_so): Skip the directory name when - searching for ".so.". - (gld${EMULATION_NAME}_search_dir): Make sure that the library name - has a version number, and that only version numbers follow .so. - -Wed Jan 29 18:15:00 1997 Geoffrey Noer <noer@cygnus.com> - - * scripttempl/pe.sc: - * scripttempl/ppcpe.sc: add *(.gcc_except_table) to the text - section so Win32 executables are valid. - -Mon Jan 27 12:28:43 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elf.sc: Put linkonce reloc section in other - appropriate reloc sections. - * scripttempl/elfmips.sc: Add linkonce support. - * scripttempl/elfppc.sc: Likewise. - -Fri Jan 24 10:44:09 1997 Jeffrey A Law (law@cygnus.com) - - * emulparms/mn10200.sh (OTHER_RELOCATING_SECTIONS): Move the - stack up to 0x80000. - * emulparms/mn10300.sh (OTHER_RELOCATING_SECTIONS): Likewise. - -Tue Jan 21 12:11:10 1997 Doug Evans <dje@seba.cygnus.com> - - * emulparams/m32relf.sh (OTHER_RELOCATING_SECTIONS): Use PROVIDE - to define `_stack'. - -Thu Jan 16 17:07:52 1997 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (args_type): Rename auxiliary_filter_shlib to - auxiliary_filters, and make it char **. - * lexsup.c (parse_args): Handle -f by setting up an array. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Use - new name of auxiliary_filters. - - * ld.texinfo (Options): Improve documentation of --filter and - --auxiliary. - -Tue Jan 14 15:44:28 1997 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Options): Clarify that the normal usage is -T. - (Commands): Likewise. - -Thu Jan 9 11:26:27 1997 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/armcoff.sc: Correct mask used for .data address. - -Wed Jan 8 15:14:59 1997 Geoffrey Noer <noer@cygnus.com> - - * emultempl/pe.em: make default executable a.exe instead of - a.out - -Fri Jan 3 17:33:34 1997 Richard Henderson <rth@tamu.edu> - - * scripttempl/elf.sc: Move .got closer to .sdata and .sbss by - shifting .plt back. Rumour has it that the NetBSD ld.so depends - on .dynamic being after .got, so we leave that. - -Fri Jan 3 14:04:40 1997 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (clean): Don't remove configdoc.texi. - (maintainer-clean): Do remove configdoc.texi. - - * ld.texinfo (Operators): Remove '@' from @smallexmple in comment - to avoid confusing texi2roff. - -Fri Jan 3 11:27:02 1997 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/v850.sc (.zdata): Add .zcommon section. - (.tdata): Add .tcommon and .tcommon_byte sections. - -Thu Jan 2 18:14:32 1997 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (mips*el-*-linux*, mips*-*-linux*): New targets. - * scripttempl/elfmips.sc: Use __start as the entry address for - mips*-*-linux*. - -Tue Dec 31 14:48:30 1996 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (ALL_CFLAGS): Add -D_GNU_SOURCE. - - * ld.h (args_type): Add filter_shlib and auxiliary_filter_shlib - fields. - * lexsup.c (parse_args): Recognize --auxiliary/-f and - --filter/-F. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Pass filter_shlib and auxiliary_filter_shlib to - size_dynamic_sections. - * ld.texinfo, ld.1: Document --filter/-F and --auxiliary/-f. - -Mon Dec 30 13:55:57 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/v850.sc (.tdata) Add .tbss and .tbyte sections. - -Wed Dec 18 22:57:35 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-make.sed: Use NewFolderRecursive for installation. - -Fri Dec 13 14:08:50 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/v850.sc: Make sure __{e,g}p start relative to the - {s,t}data sections. Do not emit any linker generated symbols if - -r. Use {TEXT,{Z,S,T}DATA}_START_ADDR variables to initialize - where the different sections go. Change some whitespace. - - * emulparams/v850.sh ({TEXT,{Z,S,T}DATA}_START_ADDR): Define - appropriately. Remove crud not used anymore. - -Fri Dec 13 10:19:57 1996 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (emn10200.c): Add dependencies. - * configure.tgt: Handle mn10200. - * emulparms/mn10200.sh: New file. - -Thu Dec 12 17:04:55 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/gld960c.em: Include <ctype.h>. - (gld960_set_output_arch): Get the machine type from the -A option - if there is one, rather than always using core. - -Sat Dec 7 10:07:51 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/mn10300.sh: Handle leading underscores. - -Thu Dec 5 13:45:58 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Only - set hold_rel if SEC_ALLOC is set. - -Tue Dec 3 11:29:20 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (section_already_linked): Set the output_offset as well - as the output_section when only reading symbols from a file. - -Mon Dec 2 11:43:50 1996 Ian Lance Taylor <ian@cygnus.com> - - * emulparams/*.sh: Make sure that each set of parameters which - uses the elf.sc script sets MACHINE. - -Wed Nov 27 03:22:05 1996 Jason Merrill <jason@yorick.cygnus.com> - - * scripttempl/elf{,mips,ppc}.sc: Add the remaining DWARF sections. - * scripttempl/elfd10v.sc: Likewise. - * scripttempl/v850.sc: Likewise. - -Tue Nov 26 16:58:33 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure: Rebuild with autoconf 2.12. - -Mon Nov 25 12:17:55 1996 Jim Wilson <wilson@cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Add case - for bfd_vma to init loop. - -Mon Nov 25 09:55:07 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/mn10300.sh: Remove bogus '_' prefix for - entry symbol and ctor/dtor stuff. - -Fri Nov 15 13:00:18 1996 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (emn10300.c): Add dependencies. - * configure.tgt: Handle mn10300. - * emulparms/mn10300.sh: New file. - -Tue Nov 5 10:57:50 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * emulparams/d10velf.sh (READONLY_START_ADDR): Changed to 0x2000004. - (EMBEDDED): Define. - -Fri Nov 1 10:01:27 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo: Add section on reporting bugs. - - * scripttempl/m68kcoff.sc: Make sure the etext and __CTOR_LIST__ - symbols are correctly aligned. - -Thu Oct 31 09:28:59 1996 Jeffrey A Law (law@cygnus.com) - - * scriptempl/v850.sc (zdata): Handle reszdata, romzdata and - romzbss too. - -Tue Oct 29 12:33:05 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * emulparams/d10velf.sh: Changes needed for D10V-EVA board. - Set TEXT_START_ADDR to 0x1000000. Set READONLY_START_ADDR to - 0x2000000. - - * scripttempl/elfd10v.sc: Fix calculation of .text. Change - .stack to start at 0x2007ffe. - -Mon Oct 28 15:37:00 1996 Doug Evans <dje@canuck.cygnus.com> - - * configure.tgt (sparclet*-*-aout*): Delete, use sparc*-*-aout*. - -Wed Oct 23 16:17:22 1996 Jeffrey A Law (law@cygnus.com) - - * scriptempl/v850.sc (zdata): Fix typo "zrodata" -> "rozdata". - - * scriptempl/v850.sc (zdata): Make sure this stays - in lo-memory. - -Tue Oct 22 11:36:47 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/v850.sc (__ep): Put it at the start - of the tda section. - - * scriptempl/v850.sc: Move all "normal" sections into - the external memory region (0x100000 - 0x200000). - -Mon Oct 21 17:16:59 1996 Michael Meissner <meissner@wogglebug.tiac.net> - - * scripttempl/elfd10v.sc: Clone from elf.sc, move .text to - 0x10000, so that is more room for data. - - * emulparams/d10velf.sh (TEXT_START_ADDR): Now 0x100000. - (READONLY_START_ADDR): Now 0x0. - (SCRIPT_NAME): Now elfd10v. - - * Makefile.in (ed10velf.c): Depend on elfd10v.sc, not elf.sc. - -Fri Oct 18 22:12:49 1996 Doug Evans <dje@canuck.cygnus.com> - - * emulparams/m32relf.sh (TEXT_START_ADDR): Change from 0 to 0x100. - -Fri Oct 18 15:43:38 1996 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (ALL_EMULATIONS): Remove eelf64alpha.o. - (ALL_64_EMULATIONS): New variable. - * configure.in: Accept --enable-64-bit-bfd option. If it is set - with --enable-targets=all, include ALL_64_EMULATIONS in - EMULATION_OFILES. - * configure: Rebuild. - -Fri Oct 18 12:58:35 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/v850.sc (__gp, __ep): Define. - -Thu Oct 17 18:14:07 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo: Try to consistently use a single or a double dash - for each option. - -Thu Oct 17 10:17:20 1996 Doug Evans <dje@canuck.cygnus.com> - - * emulparams/m32relf.sh (EMBEDDED): Define. - -Thu Oct 17 10:56:49 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/v850.sc (.zdata): Add this before .text. - (.sdata): Also include .rosdata as part of the .sdata. - (.tdata): Include this just before .sdata. - - * emulparms/v850.sh (SCRIPT_NAME): Use "v850" not "elf". - * scripttempl/v850.sc: Wrap script with a "cat << EOF". - -Wed Oct 16 23:10:01 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/v850.sc: New linker script for the V850. - * Makefile.in: Use it. - -Thu Oct 10 17:57:00 1996 Ian Lance Taylor <ian@cygnus.com> - - * emulparams/elf32b4300.sh: Define _gp in OTHER_GOT_SYMBOLS, not - OTHER_READWRITE_SECTIONS. - * emulparams/elf32l4300.sh: Likewise. - -Wed Oct 9 14:36:18 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (ld_config_type): Add warn_section_align field. - * lexsup.c (OPTION_WARN_SECTION_ALIGN): Define. - (ld_options): Add --warn-section-align. - (parse_args): Handle --warn-section-align. - * ldlang.c (lang_size_sections): If warn_section_align, warn if - the start of a section changes due to alignment. - * ld.texinfo, ld.1: Document --warn-section-align. - * ld.texinfo: Change some single dashes to double dashes. - - * emultempl/pe.em (set_pe_subsystem): Record entry symbol for each - subsystem type. Ifdef out os2 type. Recognize a version number. - -Tue Oct 8 12:07:13 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (set_pe_subsystem): When setting the subsystem - to windows, set the entry point. - - * Makefile.in (ldlex.c): Don't pass any options to $(LEX). - -Mon Oct 7 17:29:05 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Options): Mention .so extensions for shared - libraries. - -Sun Oct 6 22:35:36 1996 Jason Merrill <jason@yorick.cygnus.com> - - * scripttempl/elf{,mips,ppc}.sc: Add DWARF 2 sections. - -Fri Oct 4 18:49:31 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/m68kcoff.sc: Only set the address of .text if - RELOCATING. - -Fri Oct 4 10:59:52 1996 Doug Evans <dje@canuck.cygnus.com> - - * emulparams/sparcaout.sh ({BIG,LITTLE}_OUTPUT_FORMAT): Define. - * scripttempl/aout.sc ({BIG,LITTLE}_OUTPUT_FORMAT): Provide default. - (OUTPUT_FORMAT): Support bi-endian targets. - -Thu Oct 3 13:52:03 1996 Ian Lance Taylor <ian@cygnus.com> - - * fnmatch.h, fnmatch.c: Remove (now in libiberty). - * Makefile.in: Rebuild dependencies. - (CFILES): Remove fnmatch.c. - (HFILES): Remove fnmatch.h. - (OFILES): Remove fnmatch.o. - -Thu Oct 3 15:41:24 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (mostlyclean): Move config.log to distclean. - -Wed Oct 2 23:45:25 1996 Geoffrey Noer <noer@cygnus.com> - - * emultmpl/pe.em: increase size of stack reserve to 0x2000000 - (necessary in order to compile parse.c in gcc sources under NT) - -Wed Oct 2 14:49:10 1996 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (ld_options): Fix typo in --rpath-link description. - * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Suggest - --rpath if a needed library is not found. - -Tue Oct 1 16:17:33 1996 Joel Sherrill <joel@oarcorp.com> - - * configure.tgt (mips*-*-rtems*): New target, like mips*-*-elf*. - -Tue Oct 1 15:50:34 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo (Options): Give more detail on -l option. - - * scripttempl/elfmips.sc: Handle CREATE_SHLIB the same way that - elf.sc does, so that glibc works better. - - * ldver.c (ld_program_version): New variable. - (ldversion): Use it. - * ldver.h (ld_program_version): Declare. - * lexsup.c (ld_options): Handle --dll-verbose like --verbose, not - --version. Change --version handling to match current GNU - standards. - (help): Print bug report address. - -Mon Sep 30 12:14:43 1996 Doug Evans <dje@canuck.cygnus.com> - - * Makefile.in (em32relf.c): Add rule for. - * configure.tgt (m32r-*-*): Recognize. - * emulparams/m32relf.sh: New file. - -Thu Sep 26 13:58:47 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-make.sed: Add symbolic doublequoting to ldmain compile edit. - * mpw-config.in: Add mips-*-* case as mips-elf, and use more - wildcards in matching. - * mpw-emipself.c: New file, pregenerated mips elf emulation. - -Tue Sep 17 12:18:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldint.texinfo: Rewrote. - - * configure.tgt: Add cases for MIPS 5000 like MIPS 4300. - -Mon Sep 16 17:55:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/armcoff.sc: Only define symbols if RELOCATING. Fix - syntax error on __end__ line. - - * scripttempl/armcoff.sc: For -N or -n, don't align .data. From - Chris Hadley <Christopher.Hadley@cl.cam.ac.uk> - -Sun Sep 15 22:09:56 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/v850.sh: Fix OTHER_RELOCATING_SECTIONS. - -Sun Sep 15 10:38:16 1996 Mark Alexander <marka@cygnus.com> - - * emulparms/d10v.sh: Set OTHER_RELOCATING_SECTIONS to put - stack at top of simulator memory. - -Fri Sep 13 15:49:45 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlex.l (SYMBOLCHARN): Add $, _, and ~. - -Wed Sep 11 23:30:42 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (get_emulation): Check for -mips4 like -mips1, et. al. - -Thu Sep 5 15:24:12 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (section_already_linked): Accept a lang_input_statement - as the PTR argument. If the file is symbols only, discard all - input sections. - (ldlang_add_file): Pass entry to bfd_map_over_sections. - -Wed Sep 4 15:53:43 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (alpha-*-gnu*): New target. From Fila Kolodny - <fila@ibi.com>. - -Tue Sep 3 00:52:54 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/v850.sh: Set OTHER_RELOCATING_SECTIONS - -Sun Sep 1 21:48:58 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/v850.sh: Set EMBEDDED. - -Fri Aug 30 22:30:30 1996 Jeffrey A Law (law@cygnus.com) - - * emulparms/v850.sh: Entry symbol is "_start", tweak - ctor/dtor support. - -Fri Aug 30 18:32:31 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (sh-*-elf*): New target. - * emulparams/shelf.sh: New file. - * emulparams/shlelf.sh: New file. - * Makefile.in (ALL_EMULATIONS): Add eshelf.o and eshlelf.o. - (eshelf.c, eshlelf.c): New targets. - * scripttempl/elf.sc: If EMBEDDED is defined, then don't add - SIZEOF_HEADERS to TEXT_START_ADDR. Expand CTOR_START and CTOR_END - around .ctors, and DTOR_START and DTOR_END around .dtors. Expand - OTHER_RELOCATING_SECTIONS if RELOCATING. - -Thu Aug 29 16:57:46 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * configure.{host,tgt} (i[345]86-*-*): Recognize i686 for pentium - pro. - -Mon Aug 26 12:58:11 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (section): Add opt_nocrossrefs; pass value to - lang_enter_overlay. - (opt_nocrossrefs): New nonterminal. - * ldlex.l: Recognize NOCROSSREFS keyword in EXPRESSION mode. - * ldlang.c (overlay_nocrossrefs): New static variable. - (lang_enter_overlay): Add nocrossrefs parameter. - (lang_leave_overlay): Only add nocrossrefs if overlay_nocrossrefs - is set. Initialize overlay_nocrossrefs. - * ldlang.h (lang_enter_overlay): Update declaration. - * ld.texinfo (Overlays): Update documentation. - - * ldver.c (ldversion): Print GNU ld in the version message. - -Thu Aug 22 17:10:40 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.host: Set HLDENV. - * configure.in: Substitute HLDENV. - * configure: Rebuild. - * Makefile.in (HLDENV): New variable. - ($(LD_PROG)): Use $(HLDENV). - -Thu Aug 22 16:29:28 1996 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (ev850.c): New target. - * configure.tgt (v850-*-*): New target. - * emulparams/v850.sh: New file. - -Thu Aug 22 11:16:02 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-make.sed: Add @DASH_C_FLAG@ to compiler edit. - -Wed Aug 21 11:26:37 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elf.sc: Put .gnu.linkonce* sections in appropriate - containing sections. - -Mon Aug 19 13:01:42 1996 Ian Lance Taylor <ian@cygnus.com> - - * fnmatch.c: Include sysdep.h. - -Mon Aug 19 11:28:29 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * genscripts.sh: Undo 8/16 change. - - * emulparams/d10velf.sh (MACHINE): Explicitly set to nothing. - -Fri Aug 16 19:18:08 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * genscripts.sh: Explicitly reset any shell variables set or used - by the various .sc scripts to allow inadvertant use of these - names as normal environment variables by the person running - configure. - - * Makefile.in (ed10velf.c): Use tdir_d10v, not tdir_arcelf. - -Fri Aug 16 14:15:41 1996 James G. Smith <jsmith@cygnus.co.uk> - - * scripttempl/armcoff.sc (__bss_start__, __bss_end__, - __data_start__, __data_end__): Added to keep in sync. with the - default ARM crt0.s. Added __CTOR_LIST__ and __DTOR_LIST__ support. - -Thu Aug 8 14:24:56 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldcref.c (check_reloc_refs): If info->same, look for any symbol - defined in info->defsec, not just the section symbol. - -Wed Aug 7 14:40:48 1996 Philippe De Muyter <phdm@info.ucl.ac.be> - - * configure.in: Call BFD_NEED_DECLARATION on strstr and sbrk. - * acconfig.h (NEED_DECLARATION_STRSTR): New macro. - (NEED_DECLARATION_SBRK): New macro. - * configure, config.in: Rebuild. - * sysdep.h (strstr): Declare if NEED_DECLARATION_STRSTR. - * ldmain.c (sbrk): Declare if HAVE_SBRK and - NEED_DECLARATION_SBRK. - - * ldlang.c (lang_record_phdrs): Cast xmalloc and xrealloc return. - -Mon Aug 5 16:26:14 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlex.l: Recognize OVERLAY. - * ldgram.y: Add section_phdr field to %union. - (section): Handle phdr_opt result. Add OVERLAY case. - (opt_exp_without_type): New nonterminal. - (phdr_opt): Return list of phdrs. - (overlay_section): New nonterminal. - * ldlang.c: Include <ctype.h>. - (lang_leave_output_section_statement): Add phdrs parameter. - Change all callers. - (lang_section_in_phdr): Remove. - (overlay_vma, overlay_lmn, overlay_max): New static variables. - (struct overlay_list): Define. - (overlay_list): New static variable. - (lang_enter_overlay, lang_enter_overlay_section): New functions. - (lang_leave_overlay_section, lang_leave_overlay): New functions. - * ldlang.h (lang_leave_output_section_statement): Update - declaration for new parameter. - (lang_section_in_phdr): Don't declare. - (lang_enter_overlay, lang_enter_overlay_section): Declare. - (lang_leave_overlay_section, lang_leave_overlay): Declare. - * ld.texinfo (Overlays): New node under SECTIONS, documenting - overlays. - - * ldlex.l: Recognize MAX and MIN. - * ldgram.y (MAX, MIN): New terminals. - (exp): Recognize MAX and MIN. - * ldexp.c (fold_binary): Handle MAX and MIN. - * ld.texinfo (Arithmetic Functions): Document MAX and MIN. - - * ld.texinfo (PHDRS): Use @cindex, not @kindex, for program header - index entries. - - * ldgram.y (SIZEOF, ADDR): Do not specify type. - - * ldcref.c (check_nocrossref): Skip symbols with no output - sections. - -Fri Aug 2 14:57:49 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (LOADADDR): New terminal. - (exp): Handle LOADADDR. - * ldlex.l: Recognize LOADADDR. - * ldexp.c (exp_print_token): Add LOADADDR. - (fold_name): Implement LOADADDR. - * ldlang.c (exp_init_os): Treat LOADADDR like ADDR. - * ld.texinfo (Arithmetic Functions): Document LOADADDR. - -Thu Aug 1 12:52:19 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (check_nocrossrefs): Declare. - * ldlang.h (struct lang_nocrossref): Define. - (struct lang_nocrossrefs): Define. - (nocrossref_list): Declare. - (lang_add_nocrossref): Declare. - * ldlex.l: Recognize NOCROSSREFS keyword. - * ldgram.y (%union): Add nocrossref field. - (NOCROSSREFS): New terminal. - (ifile_p1): Recognize NOCROSSREFS. - (nocrossref_list): New nonterminal. - * ldlang.c (nocrossref_list): Define. - (lang_add_nocrossref): New function. - * ldmain.c (main): If nocrossref_list is not NULL, call - check_nocrossrefs. - (warning_callback): Free symbols if there is no place to store - them. - (notice): Call add_cref if nocrossref_list is not NULL. - * ldcref.c: Include "ldexp.h" and "ldlang.h". - (check_nocrossrefs): New function. - (check_nocrossref): New static function. - (struct check_refs_info): Define. - (check_refs, check_reloc_refs): New static functions. - * Makefile.in: Rebuild dependencies. - * ld.texinfo (Option Commands): Document NOCROSSREFS. - - * ld.texinfo (Section Placement): Improve the wording of the - wildcard documentation. Mention that wildcards are only searched - for on the command line, not in the file system. - - * emultempl/sunos.em (gld${EMULATION_NAME}_after_open): Move - definition of lib_path inside condition where it is used. - -Wed Jul 31 13:17:10 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * emulparams/d10velf.sh: Now works with elf.sc. - -Wed Jul 31 11:52:03 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * emulparams/d10velf.sh (SCRIPT_NAME): Change to vanilla. - -Tue Jul 30 14:46:42 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_size_sections): Add the section VMA to the result - value when computing the address of a section. - - * ld.h (args_type): Add cref field. - * lexsup.c (parse_args): Set command_line.cref. - * ldmain.c (main): Check command_line.cref rather than - link_info.notice_all. - (notice): Likewise. - - * ldcref.c (output_one_cref): Don't crash if a symbol is defined - in a section without an owner. - -Mon Jul 29 17:23:33 1996 Ian Lance Taylor <ian@cygnus.com> - - * fnmatch.h, fnmatch.c: New files. - * ldlex.l: Remove unused definition of FILENAME. Add definition - of WILDCHAR. In SCRIPT mode, accept any sequence of WILDCHAR as a - NAME. - * ldgram.y (file_NAME_list): Accept '*' and '?' specially. - (input_section_spec): Accept '?' specially. - (statement): Change exp to mustbe_exp in length and FILL cases. - (section): Call ldlex_script before section statements, and call - ldlex_popstate after them. - * ldlang.c: Include "fnmatch.h". - (wildcardp): New static function. - (wild_section): Permit the section name to be a wildcard. - (wild_file): New static function, broken out of wild. - (wild): Call wild_file. Permit the file name to be a wildcard. - (open_input_bfds): Don't call lookup_name for a wildcard pattern. - * Makefile.in: Rebuild dependencies. - (CFILES): Add fnmatch.c. - (HFILES): Add fnmatch.h. - (OFILES): Add fnmatch.o. - * ld.texinfo: Document that file and section names can now be - wildcard patterns. - - * ldlang.c (lang_place_orphans): Correct condition: place a common - section if not relocateable or if common definitions are forced. - -Wed Jul 24 12:16:38 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * emulparams/d10velf.sh (SCRIPT_NAME): Change to elf. - -Wed Jul 24 13:38:22 1996 Michael Meissner <meissner@wogglebug.tiac.net> - - * configure.tgt (d10v-*-*): Don't require the -elf, allow plain d10v. - -Tue Jul 23 10:36:19 1996 Martin M. Hunt <hunt@pizza.cygnus.com> - - * Makefile.in (ed10velf.c): New target. - * configure.tgt (d10v-*-elf*): New target. - * emulparams/d10velf.sh: New file. - -Thu Jul 18 16:25:39 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (sparc*-*-sysv4*): New target. From Andrew Gierth - <ANDREWG@microlise.co.uk>. - - * configure.host: Change irix5 to irix[56]*. - * configure.tgt: Likewise. - -Wed Jul 17 10:52:46 1996 Kim Knuttila <krk@cygnus.com> - - * emultempl/pe.em (sort_sections): Pay attention to return code. - - * ldmisc.c (demangle): Remove all prefix '.'s from a name. - -Mon Jul 15 11:49:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Round - the value of __start_SECNAME to the alignment required by the - section to be placed. - -Tue Jul 9 12:09:02 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (mips*el-*-elf*): Use elf32elmip. - (mips*-*-elf*): Use elf32ebmip. - * emulparams/elf32bmip.sh (EMBEDDED): Don't define. - * emulparams/elf32lmip.sh (EMBEDDED): Don't define. - * emulparams/elf32elmip.sh: New file; copy of elf32lmip.sh with - EMBEDDED defined. - * emulparams/elf32ebmip.sh: New file; copy of elf32bmip.sh with - EMBEDDED defined. - * emulparams/elf32b4300.sh (EMBEDDED): Define. - * emulparams/elf32l4300.sh (EMBEDDED): Define. - * Makefile.in (ALL_EMULATIONS): Add eelf32ebmip.o eelf32elmip.o. - (eelf32ebmip.c, eelf32elmip.c): New targets. - -Thu Jul 4 12:01:03 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldver.c (ldversion): Set version to cygnus-2.7.1. - - * Released binutils 2.7. - - * emulparams/pc532macha.sh: Rename from pc532machaout.sh to avoid - System V file name limitations. - * configure.tgt (nc32k-pc532-mach*, ns32k-pc532-ux*): Use - pc532macha rather than pc532machaout. - * Makefile.in (ALL_EMULATIONS): Change epc532machaout.o to - epc532macha.o. - (epc532macha.c): Rename target from epc532machaout.c. - -Wed Jul 3 11:40:10 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (print_padding_statement): Use %u, not %x, to print - fill value. - -Sun Jun 30 11:16:43 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-eppcmac.c: Update to reflect May 23 change to aix.em. - -Thu Jun 27 14:03:42 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Put the .sa - file just before the .so file, rather than just after. - - * configure.host: Use -print-file-name=FILE rather than piping - -print-libgcc-file-name through sed. - (i[345]86*-*-sco*, i[345]86-*-isc*): Create crtbegin.o and - crtend.o files, in case gcc doesn't use them. - * Makefile.in (mostlyclean): Remove crtbegin.o and crtend.o. - -Wed Jun 26 15:57:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (mips*-dec-osf*): New target. - -Tue Jun 25 22:15:29 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir, - INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values. - (docdir): Removed. - * configure.in (AC_PREREQ): autoconf 2.5 or higher. - (AC_PROG_INSTALL): Added. - * configure: Rebuilt. - -Mon Jun 24 18:48:16 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc (_GLOBAL_OFFSET_TABLE_): Don't do a - PROVIDE of _GLOBAL_OFFSET_TABLE_, since it needs to be at a - non-fixed location. - -Mon Jun 24 17:55:31 1996 Jouke Numan <jnuman@bazis.nl> - - * ldlang.h (enum section_type): Define. - (lang_output_section_statement_type): Remove loadable field. Add - sectype field. - (lang_enter_output_section_statement): Change flags parameter in - prototype to sectype. - * ldgram.y (typebits): Remove. - (sectype): New static variable. - (opt_at): Use sectype rather than typebits. - (type): Set sectype rather than typebits. - (atype): Likewise. - * ldlex.l: Recognize DSECT, COPY, INFO, and OVERLAY in - EXPRESSION mode. - * ldlang.c (lang_output_section_statement_lookup): Set sectype - field rather than loadable field. - (wild_doit): Check sectype rather than loadable. - (lang_record_phdrs): Likewise. - (lang_enter_output_section_statement): Rename flags parameter to - sectype. Set sectype field rather than loadable field. Set flags - field based on sectype. - -Mon Jun 24 12:00:32 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elf.sc: Force .stab* and .comment sections to start - at 0. - - * configure.in: On alpha*-*-osf*, link against libbfd.a if not - using shared libraries. - * configure: Rebuild with autoconf 2.10. - -Fri Jun 21 17:40:56 1996 Joel Sherrill <joel@merlin.gcs.redstone.army.mil> - - * configure.tgt: Add support for *-*-rtems* configurations. - -Fri Jun 21 13:05:51 1996 Richard Henderson <rth@tamu.edu> - - * configure.tgt (alpha-*-linuxecoff*): New target. - (alpha-*-linux*): Use elf64alpha. - * emulparams/elf64alpha.sh: New file. - * emultempl/elf32.em: If ELFSIZE is not set, set it to 32. Use - ${ELFSIZE} rather than 32 when calling BFD routines. - (hold_rodata): New static variable. - (gld${EMULATION_NAME}_place_orphan): Use hold_rodata for a - readonly section that is not code. - (gld${EMULATION_NAME}_place_section): Set hold_rodata. Don't use - a .rel section unless its bfd_section field is not NULL. - * Makefile.in (ALL_EMULATIONS): Add eelf64alpha.o. - (eelf64alpha.c): New target. - -Fri Jun 21 12:45:46 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldmisc.c (vfinfo): Correct handling of 0 in %W case. - -Thu Jun 20 13:55:28 1996 Ian Lance Taylor <ian@cygnus.com> - - Add enough support to understand the gcc svr3.ifile script: - * ldlex.l: Recognize BLOCK and GROUP in EXPRESSION context. Add - BIND keyword. - * ldgram.y: Add BIND token. - (section): Recognize GROUP. - (opt_ext_with_type): Recognize a couple of cases of BIND. - * ldlang.c (init_os): Don't do anything if section is already - initialized. Call exp_init_os on addr_tree field. - (exp_init_os): New static function. - (map_input_to_output_sections): Call exp_init_os on assignment - expression. - (lang_place_orphans): Check for common sections by name COMMON - rather than by common_section field. Don't warn about absence of - [COMMON] command. - - * ldlang.h (lang_input_statement_type): Remove useless fields - common_section, common_output_section, and complained, as well as - all references to them. - - * ldexp.c: Reindent a lot of code. - (exp_fold_tree): Call FAIL rather than einfo in default case. - -Wed Jun 19 11:40:14 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.host (m88*-*-dgux*): Quote HOSTING_CRT0. From - <randall.hron@medaphis.com>. - -Tue Jun 18 15:53:09 1996 Jeffrey A. Law <law@rtl.cygnus.com> - - * scripttempl/h8300s.sc: New file for H8/S. - * emulpararms/h8300s.sh: New file for H8/S. - * Makefile.in (ALL_EMULATIONS): Add H8/S. - (e_h8300s.c): Add dependencies. - * configure.tgt: Add H8/S to targ_extra_emuls. - -Tue Jun 18 17:55:39 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (i[345]86*-*-isc*): New target. From - <uddeborg@carmen.se>. - -Wed Jun 12 12:46:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c: Include "libiberty.h". - (parse_args): Copy the -Y argument into memory. - (set_default_dirlist): Don't put the ':' back into the directory - list. - -Fri Jun 7 11:27:42 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em: Include libiberty.h. - (gld${EMULATION_NAME}_set_symbols): New static function to add - LD_LIBRARY_PATH to the list of search directories. - (ld_${EMULATION_NAME}_emulation): Add new set_symbols routine. - -Thu Jun 6 11:50:31 1996 Ian Lance Taylor <ian@cygnus.com> - - * emulparams/elf32bmip.sh (OTHER_GOT_SYMBOLS): Use ALIGN(16) - rather than . when computing _gp value. From Per Fogelstrom. - * emulparams/elf32lmip.sh (OTHER_GOT_SYMBOLS): Likewise. - - * ldmain.c (main): Don't close and unlink the file on error, since - remove_output will do it anyhow. - * ldlang.c (open_output): Set boolean variable to true, not 1. - -Wed Jun 5 18:34:14 1996 James G. Smith <jsmith@cygnus.co.uk> - - * emulparams/{elf32b4300.sh,elf32l4300.sh} (SCRIPT_NAME): Use - elfmips instead of elf. - -Tue Jun 4 18:43:07 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldcref.c: New file. - * ld.h (add_cref, output_cref): Declare. - * ldmain.c (main): Initialize notice_all field. If it is set at - end of link, call output_cref. - (notice): Rename from notice_ysym. Check notice_all. - * ldmisc.c (finfo): Make globally visible. - * ldmisc.h (finfo): Declare. - * lexsup.c (OPTION_CREF): Define. - (ld_options): Add "cref". - (parse_args): Handle OPTION_CREF. - * Makefile.in: Rebuild dependencies. - (CFILES): Add ldcref.c. - (OFILES): Add ldcref.o. - * ld.texinfo, ld.1: Document --cref. - -Tue Jun 4 12:12:25 1996 Tom Tromey <tromey@csk3.cygnus.com> - - * Makefile.in (install): Make $(tooldir) and $(tooldir)/bin. - -Fri May 31 12:40:55 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (sort_sections): Don't assume that a - wild_statement has a section name. - -Wed May 29 13:13:35 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/elfmips.sc: Quote test -z argument. - - * ld.texinfo: Clarify the CONSTRUCTORS command. - -Thu May 23 16:07:44 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_read_file): Initialize - file, not impfile. - -Wed May 22 11:31:30 1996 Doug Evans <dje@seba.cygnus.com> - - * ldlang.c (wild_doit): Don't copy over SEC_LINK_{ONCE,DUPLICATES} - if final link. - * emultempl/pe.em (sfunc): Renamed to sort_by_file_name. - (sort_by_section_name, sort_sections_1): New functions. - (sort_sections): Only sort by file name sections in .idata. - Add "Grouped Sections" support. - (gld${EMULATION_NAME}_place_orphan): Rewrite to support Grouped - Sections. - (gld${EMULATION_NAME}_place_section): Delete. - * scripttempl/pe.sc (.text,.data,.rdata): Add *(.foo\$). - (.CRT,.rsrc): Rewrite to use Grouped Section support. - -Tue May 21 14:31:48 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-eppcmac.c: Update to reflect changes to aix.em. - -Sun May 19 16:59:44 1996 Doug Evans <dje@seba.cygnus.com> - - * ldlang.c (dprint_statement): Stop printing at end of list. - -Sat May 18 13:12:05 1996 Steve Chamberlain <sac@slash.cygnus.com> - - Support for --force-exe-suffix - * ld.h (args_type): Add force_exe_suffix. - * ld.texinfo: Add documentation. - * ldmain.c (main): Add support for option. - * lexsup.c (OPTION_FORCE_EXE_SUFFIX): New. - (ld_options, parse_args): Add support for option. - -Wed May 15 12:50:25 1996 Jim Wilson <wilson@chestnut.cygnus.com> - - * emultempl/pe.em (set_pe_value): Pass 0 not 16 to strtoul call. - -Fri May 10 16:28:44 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc (__stack): Make __stack 0 if it was - referenced but not defined. - -Thu May 9 08:52:23 1996 Rob Savoye <rob@chinadoll.cygnus.com> - - * emulparams/{elf32bmip.sh,elf32lmip.sh,mipsidt.sh,mipsidtl.sh}: - Set a new variable to signify if the final target is an embedded - system. - * scripttempl/{mips.sc,elfmips.sc}: Don't add SIZEOF_HEADERS to - .text for an embedded system. - -Tue May 7 10:56:11 1996 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/pe.em (gld${EMULATION_NAME}_place_orphan): New function. - (gld${EMULATION_NAME}_place_section): New function. - (hold_{section,use,text,rdata,data}): New static locals. - (ld_${EMULATION_NAME}_emulation): Update orphan field. - * scripttempl/pe.sc: Whitespace cleanup. Semicolon usage cleanup. - (INIT,FINI): Delete, unused. - (.text): Document orphan .text.foo sections. - (.rdata): Document orphan .rdata.foo sections. - (.data): Document orphan .data.foo sections. - -Tue May 7 11:35:46 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300.sc: Place ".tiny" sections right - after ".data" sections. - * scripttempl/h8300h.sc: Place ".tiny" sections into - the "tiny" memory region, 0xff8000 through 0xffff00. - - * scripttempl/h8300.sc: Set the entry point to the value of - "_start" rather than the start of the text segment. - * scripttempl/h8300h.sc: Likewise. - - * scripttempl/h8300.sc: Place .rodata sections before .text - sections in main ram. - * scripttempl/h8300h.sc: Likewise. - -Mon May 6 23:32:30 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300h.sc: Use "eight", not "eightbit" for the - 8-bit region and 8-bit sections. - -Wed May 1 17:50:06 1996 Doug Evans <dje@canuck.cygnus.com> - - * ldlang.c (section_already_linked): Fix typos. - -Mon Apr 29 20:31:06 1996 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/pe.sc (.endjunk): Define __end__. - -Mon Apr 29 17:05:13 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (longest_section_name): Remove. - (SECTION_NAME_MAP_LENGTH): Define. - (print_size, print_alignment, print_fill, print_section): Remove. - (print_flags): Remove. - (lang_map): Rewrite. - (print_output_section_statement): Rewrite. - (print_assignment): Rewrite. - (print_one_symbol): Rewrite. - (print_input_section): Rewrite. - (print_fill_statement): Rewrite. - (print_data_statement): Rewrite. - (print_address_statement): New static function. - (print_reloc_statement): Rewrite. - (print_padding_statement): Rewrite. - (print_wild_statement): Rewrite. - (print_statement_list): Clean up. - (print_statement): Clean up. Some minor output changes. - (print_statements): Clean up. - (load_symbols): Put another - before -whole-archive. - * ldexp.c (exp_print_tree): Change etree_value and etree_rel to - print 0x and to omit leading zeroes. For etree_rel, use %B to - print the BFD. For etree_assign, remove the space after the - destination name. - * ldwrite.c: Include "libiberty.h". - (clone_section): Call xstrdup, not strdup. - (ldwrite): Don't print any map information. - (print_symbol_table, print_file_stuff, print_symbol): Remove. - * ldmain.c (main): Call lang_map when appropriate. - * ldmisc.c (vfinfo): Add support for %W. - (print_address): Remove. - * ldmisc.h (print_address): Don't declare. - * Makefile.in: Rebuild dependencies. - -Mon Apr 29 10:29:07 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * configure.host (m68*-*-linux*): Add -dynamic-linker to - HOSTING_CRT0. Search -lgcc both before and after -lc in - HOSTING_LIBS. Look for crt{begin,end}.o in the compiler directory - at first. - (i[345]86-*-linux*): Look for crt{begin,end}.o in the compiler - directory at first. - -Fri Apr 26 14:42:27 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldmisc.h (demangle): Declare. - * ldmisc.c: Include "libiberty.h". Include demangle.h with "", - not <>. - (demangle): Make non-static. Remove remove_underscore paramter. - Always return an allocated string. - (vfinfo): Free result of demangle. Add case 'G'. Use %T to print - functionname, rather than calling demangle. Print a colon between - the BFD(section+offset) and the line number. - * ldmain.c (add_archive_element): Improve format of archive - information in map file. - (constructor_callback): Don't print anything to the map file. - * ldlang.c (lang_one_common): Improve format of common symbol - information in map file. - * ldctor.c (ldctor_build_sets): If producing a map file, print set - information. - * ldwrite.c (print_symbol_table): Print a newline before the - header in the map file. - * Makefile.in: Rebuild dependencies. - - * ldmisc.c (vfinfo): Reindent. - -Mon Apr 22 12:07:32 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_size_sections): If _cooked_size is not 0, then - don't clobber it when not relaxing. - - * ld.h (ld_config_type): Remove traditional_format field. - * ldmain.c (main): Use link_info.traditional_format rather than - config.traditional_format. - * ldlang.c (ldlang_open_output): Likewise. - * lexsup.c (parse_args): Likewise. - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Likewise. - * mpw-eppcmac.c (gldppcmacos_parse_args): Likewise. - - * ldlang.c (wild_doit): Discard debugging sections if we are - stripping debugging information. - - * emulparams/z8002.sh (ARCH): Set to z8002, not z8k. - -Tue Apr 16 16:38:32 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldexp.c (fold_binary): Correct handling of subtraction with - absolute values. - (fold_name): Permit symbols in lang_allocating_phase_enum. - - * scripttempl/aout.sc: Only PROVIDE __stack when RELOCATING. Undo - accidental changes in last patch. - -Tue Apr 16 10:25:42 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * configure.tgt (powerpc*-*-{sysv,linux}): Add aliases. - (powerpcle*-*-{sysv,solaris}): Ditto. - -Mon Apr 15 14:50:56 1996 Rob Savoye <rob@chinadoll.cygnus.com> - - * scripttempl/aout.sc: Add PROVIDE (__stack = 0) so I can use it - in m68k/crt0.S without things blowing up. - -Fri Apr 12 16:40:56 1996 Rob Savoye <rob@chinadoll.cygnus.com> - - * scripttempl/m68kcoff.sc: Remove default address for .data so - .text, .data, and .bss are all sequential. - -Thu Apr 11 12:05:35 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/m68kcoff.sc: Remove regions and simplify. - -Wed Apr 10 14:41:53 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300.sc: Add the "8-bit area" in the upper 256 - bytes of the address space. Put data from the ".eight" sections - into the 8-bit area. - * scripttempl/h8300h.sc: Likewise. - -Tue Apr 9 14:10:42 1996 Doug Evans <dje@canuck.cygnus.com> - - * emultempl/generic.em (gld${EMULATION_NAME}_before_parse): - Pass $ARCH to ldfile_set_output_arch instead of setting - ldfile_output_architecture directly. - -Tue Apr 9 14:22:15 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc (.init,.fini): Put .init, .fini section - next to .text. Put _etext after .text, .init, .fini, and - .rodata{,2} sections. - -Tue Apr 9 12:18:57 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo: Rearrange option documentation. - - * lexsup.c (ld_options): New static array. - (parse_args): Build shortopts and longopts from ld_options array. - (help): New static function. - * ldver.h (help): Don't declare. - * ldver.c (ldversion): Reindent. - (help): Remove. - - * ld.texinfo, ld.1: Mention -E as a synonym for -export-dynamic. - -Mon Apr 8 11:56:23 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em: When checking for a native emulation, check - that the current emulation is the default emulation. - * emultempl/sunos.em: Likewise. - - * configure.in: Permit --enable-shared to specify a list of - directories. - * configure: Rebuild. - - * lexsup.c (parse_args): Add -E as a synonym for -export-dynamic, - for HP/UX compatibility. - -Fri Apr 5 14:30:14 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_check_ld_so_conf): New - static function, if ${host} = ${target}. - (gld${EMULATION_NAME}_after_open): Call check_ld_so_conf to find a - needed shared library if ${host} = $[target}. - - * configure.host (i[345]86-*-linux*): Add -dynamic-linker to - HOSTING_CRT0. Search -lgcc both before and after -lc in - HOSTING_LIBS. - - * configure.tgt: Add i[345]86-*-freebsdelf* target; from John - Polstra <jdp@polstra.com>. - -Fri Apr 5 18:11:25 1996 James G. Smith <jsmith@cygnus.co.uk> - - * emulparams/elf32{b,l}4300.sh (MACHINE): Add explicit - architecture number. - * scripttempl/elf.sc: Use $MACHINE definition if present. - * configure.tgt (targ_extra_emuls): Force 4100 build to use same - template as 4300. - -Mon Apr 1 17:35:40 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_size_sections): Change region check to handle - regions which end at the highest possible address correctly. - From Roland Weber <roweber@ira.uka.de>. - - * ldlang.c (section_already_linked): New static function. - (wild_doit): Discard sections with SEC_EXCLUDE set if not doing a - relocateable link. Don't worry about section being NULL, since it - never should be. Don't call init_os unless the section is going - to be added. - (ldlang_add_file): Call section_already_linked for each section. - * ldmain.c (multiple_definition): Don't warn about multiple - definitions in sections which are being discarded. - -Sun Mar 31 00:30:47 1996 steve chamberlain <sac@slash.cygnus.com> - - * scripttempl/{ppcpe.sc, pe.sc} (.junk): Remove and use /DISCARD/. - * emultempl/pe.em (init): Remove special case PPC code. - -Fri Mar 29 00:01:29 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300.sc: Make vectors section 0xc4 bytes long - so as not to overwrite the magic syscall entry at 0xc4. - * scripttempl/h8300h.sc: Likewise. - -Thu Mar 28 11:05:47 1996 Doug Evans <dje@canuck.cygnus.com> - - * configure.tgt (sparc64-*-solaris2*): Delete. - Stick with sparc-*-solaris2*. - -Wed Mar 27 12:33:24 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (DISCARD_SECTION_NAME): Define to "/DISCARD/". - * ldlang.c (init_os): Fail on an attempt to initialize any section - named DISCARD_SECTION_NAME. - (wild_doit): Discard input sections assigned to an output section - named DISCARD_SECTION_NAME. - * ld.texinfo: Document use of /DISCARD/. - - * ldlang.c: Fix some indentation and comments. - -Tue Mar 26 18:14:49 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Call bfd_set_error_program_name. - -Thu Mar 21 13:17:34 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo: Fix a couple of indexing entries. Mention that - --verbose displays builtin linker scripts. - - * ldmisc.c (vfinfo): case 'I': If the file is not in an archive, - and the local symbol name does not match the filename, print the - filename as well. - - Patches from John Polstra <jdp@polstra.com> for FreeBSD ELF: - * lexsup.c (parse_args): -Bshareable is a synonym for -shared. - * emulparams/elf_i386.sh (NONPAGED_TEXT_START_ADDR): Make the same - as TEXT_START_ADDR. - -Wed Mar 20 18:18:25 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * ld.texinfo: Fix typos. Use @pxref only inside parentheses. - -Wed Mar 20 16:56:15 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (add_wrap): New function. - * ldmain.h (add_wrap): Declare. - * lexsup.c (parse_args): Call add_wrap. - -Tue Mar 19 16:44:20 1996 Doug Evans <dje@canuck.cygnus.com> - - * configure.host (sparc*-*-solaris2* host): Accept any sparc variant. - -Wed Mar 13 17:47:31 1996 Jeffrey A Law (law@cygnus.com) - - * scripttempl/h8300.sc: Change name of page zero memory - from "null" to "vectors". Create an output section for - vectors. Add comments on how to explicitly place items - in the vector table. - * scripttempl/h8300h.sc: Likewise. - -Wed Mar 13 12:40:18 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/lnk960.em (machine_table): Add jx and hx. - - * genscripts.sh: Don't use ${9:-xx}, since Ultrix /bin/sh doesn't - support it. - -Tue Mar 12 12:43:59 1996 David Mosberger-Tang <davidm@koala.azstarnet.com> - - * ld.h (ld_config_type): Add warn_multiple_gp field. - * lexsup.c (parse_args): Handle --warn-multiple-gp. - * ldmain.c (warning_callback): Suppress multiple gp values warning - if --warn_multiple_gp was not used. - * ld.texinfo, ld.1: Document --warn-multiple-gp. - -Tue Mar 12 12:02:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Handle --wrap. - * ldmain.c (main): Initialize link_info.wrap_hash. - * ldexp.c (fold_name): Use bfd_wrapped_link_hash_lookup in DEFINED - and NAME cases. - * ld.texinfo, ld.1: Document --wrap. - - * configure: Rebuild with autoconf 2.8. - - Don't do SunOS style dynamic linking for sparc-aout: - * configure.tgt (sparc64-*-aout*): Use sparcaout, not sun4. - (sparclite*-fujitsu-*, sparc*-*-aout): Likewise. - (sparc*-wrs-vxworks*): Likewise. - * emulparams/sparcaout.sh: New file. - * Makefile.in (ALL_EMULATIONS): Add esparcaout.o. - (esparcaout.c): New target. - -Wed Mar 6 16:06:52 1996 J.T. Conklin <jtc@rtl.cygnus.com> - - * scripttempl/elfppc.sc (.sdata2, .sbss2): Implement Feb 2 change - in a different manner to work around differences in shell variable - expansion. - -Wed Mar 6 18:08:18 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldemul.h (ldemul_unrecognized_file): Declare. - (ldemulation_xfer_type): Add unrecognized_file field. - * ldemul.c (ldemul_unrecognized_file): New function. - * ldlang.c (load_symbols): If a file can not be recognized, call - ldemul_unrecognized_file before trying it as a linker script. - * aix.em (gld${EMULATION_NAME}_unrecognized_file): New static - function. - (gld${EMULATION_NAME}_read_file): Use FOPEN_RT, not "r". - (ld_${EMULATION_NAME}_emulation): Initialize unrecognized_file. - -Mon Mar 4 14:11:17 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (wild): Handle foo.a(.text) by mapping each included - member of foo.a separately. From Jouke Numan <jnuman@bazis.nl>. - -Fri Mar 1 10:24:59 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment): - Search trinary.cond rather than searching trinary.lhs twice. - -Tue Feb 27 15:08:43 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-make.sed: Edit out shared library support. - (@TDIRS@): Edit out, can't use genscripts. - -Tue Feb 27 15:09:21 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * configure.tgt (m68k-*-linuxaout*, m68k-*-linux*): New targets. - * emulparams/m68klinux.sh: New file. - * emultempl/linux.em (gld${EMULATION_NAME}_before_allocation): - Call bfd_${EMULATION_NAME}_size_dynamic_sections instead of - bfd_linux_size_dynamic_sections. - * Makefile.in (ALL_EMULATIONS): Add em68klinux.o. - (em68klinux.c): New target. - * configure.host (m68*-*-linuxaout*, m68*-*-linux*): New hosts. - -Tue Feb 27 12:55:46 1996 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (ALL_EMULATIONS): Sort into alphabetical order. - Fill in missing entries. - - * lexsup.c (parse_args): Recognize --no-whole-archive. - * ldlang.h (lang_input_statement_type): Add whole_archive field. - * ldlang.c (new_afile): Set whole_archive field. - (load_symbols): Check input file specific whole_archive field - rather than global variable. - * ld.texinfo, ld.1: Document --no-whole-archive. - -Tue Feb 20 16:07:00 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt: Correct gldi960 to gld960. - -Mon Feb 19 11:16:44 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Check - the SONAME if it is available. - (gld${EMULATION_NAME}_stat_needed): Use the SONAME, not the - filename, when checking for conflicting library versions. Don't - assume that the suffix is only numbers and dots. - - * ld.texinfo: Mention that -R can be used for -rpath. - -Sun Feb 18 15:05:17 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.host: Check for 'do not mix' from native linker before - trying to use -rpath. - -Thu Feb 15 13:58:06 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Remove explicit substitution of CFLAGS; autoconf - does it anyhow. - * configure: Rebuild. - * Makefile.in (LDFLAGS): Set to @LDFLAGS@. - - * configure.in: Call AC_PROG_CC before configure.host. - * configure: Rebuild. - * configure.host: Remove go32 host, since it should no longer be - necessary. Don't set CC for romp host. - - * scripttempl/elf.sc: Don't skip a page in virtual memory space if - the text segment ends exactly on a page boundary. - - * configure.in: Substitute RPATH_ENVVAR. - * configure: Rebuild. - * configure.host: Set RPATH_ENVVAR. - * Makefile.in (RPATH_ENVVAR): New variable. - (check): Use $(RPATH_ENVVAR) rather than LD_LIBRARY_PATH. - -Wed Feb 14 18:49:01 1996 Alan Modra <alan@spri.levels.unisa.edu.au> - - * configure.in: Redo emulation handling so that each emulation - searches the correct tool directory, based on the target alias. - For example, "configure --enable-targets=m68k-coff i386-linux" - will search /usr/local/i386-linux/lib for linux and - /usr/local/m68k-coff/lib for m68k-coff. - * configure: Rebuild. - * configure.tgt: Add special tdir settings for Linux. - * Makefile.in: Add @TDIRS@. Pass "$(tdir_EMUL)" to ${GENSCRIPTS} - for each eEMUL.c target. - * genscripts.sh: Accept specific alias as 9th argument, and use it - in LIB_PATH. - -Wed Feb 14 16:38:36 1996 Martin Anantharaman <martin@mail.imech.uni-duisburg.de> - - * ldlang.c (lang_set_startof): Don't do anything for a - relocateable link. - - * ldgram.y (mri_script_file): Call mri_draw_tree. - * mri.c (mri_draw_tree): Make globally visible. Don't bother to - create memory regions. - (mri_load): Don't call mri_draw_tree. - * mri.h (mri_draw_tree): Declare. - - * configure.tgt (m68*-*-psos): New target. - * emulparams/m68kpsos.sh: New file. - * scripttempl/psos.sc: New file. - * Makefile.in (ALL_EMULATIONS): Add em68kpsos.o. - (em68kpsos.c): New target. - -Wed Feb 14 11:09:25 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.tgt (*-*-ieee*): New target; use vanilla. - - * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Strip - `:foo' from ${ARCH}. - -Tue Feb 13 15:58:58 1996 Bryan Ford <baford@snake.cs.utah.edu> - - * scripttempl/i386msdos.sc: Don't pad the .text section. Put - .rodata in .data. - -Tue Feb 13 14:04:19 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.host: Set HDLFLAGS for *-*-hpux with --enable-shared. - - * emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Warn if - it looks like we might be linking in two different versions of the - same shared library. Based on a patch from H J Lu <hjl@zoom.com>. - -Thu Feb 8 19:25:54 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_size_sections): Increment the section size when a - padding statement is encountered. - -Wed Feb 7 14:01:33 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Look for --enable-shared. Change the value of - BFDLIB when linking against a shared library on SunOS. - * configure: Rebuild. - * configure.host: If using a shared BFD library, try to pass a - reasonable -rpath option when linking. - * Makefile.in (BFDLIB): Set to @BFDLIB@. - -Tue Feb 6 12:29:14 1996 Doug Evans <dje@charmed.cygnus.com> - - * emulparams/elf64_sparc.sh (ARCH): Change to `sparc:v9'. - * emultempl/generic.em: Strip `:foo' from ${ARCH}. - -Mon Feb 5 16:25:30 1996 Ian Lance Taylor <ian@cygnus.com> - - Support for building bfd and opcodes as shared libraries, based on - patches from Alan Modra <alan@spri.levels.unisa.edu.au>: - * configure.in (HLDFLAGS): New substitution. - * configure: Rebuild. - * configure.host: Set HLDFLAGS on SunOS. - * Makefile.in (HLDFLAGS): New variable. - (BFDDEP): New variable. - (BFDLIB): Change to -L../bfd -lbfd. - ($(LD_PROG)): Depend upon $(BFDDEP) rathern than $(BFDLIB). Use - $(HLDFLAGS) in link. - (check): Set LD_LIBRARY_PATH in the environment. - -Fri Feb 2 19:26:25 1996 Michael Meissner <meissner@wogglebug.tiac.net> - - * scripttempl/elfppc.sc (.sdata2, .sbss2): Put .sdata2 and .sbss - in the read-only section, not read/write unless we are making a - shared library. - (.debug*): Add dwarf debug sections. - (.rela.{sdata*,sbss*}): Add sections. - -Fri Feb 2 16:50:21 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure: Regenerate. - -Thu Feb 1 10:50:46 1996 Ian Lance Taylor <ian@cygnus.com> - - * emulparams/elf_i386.sh (TEXT_START_ADDR): Change to 0x8048000, - for SVR4 compatibility. - - * ldexp.c (exp_fold_tree): Correct handling of ABSOLUTE. - -Wed Jan 31 17:30:19 1996 Steve Chamberlain <sac@slash.cygnus.com> - - * configure.tgt (i[345]86-*-cygwin32, powerpcle-*-cygwin32): New. - * emultempl/pe.em (definfo init): Make the default stack reserve - of a PPC larger. - -Wed Jan 31 14:34:23 1996 Richard Henderson <rth@tamu.edu> - - * configure.tgt (m68*-apple-aux*): New target. - * emulparams/m68kaux.sh: New file. - * scripttempl/m68kaux.sc: New file. - * Makefile.in (ALL_EMULATIONS): Add em68kaux.o. - (em68kaux.c): New target. - -Tue Jan 30 13:18:56 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Ignore - -bnoentry, since the right thing tends to happen anyhow. - -Mon Jan 29 12:29:26 1996 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo, ld.1: Document -export-dynamic. - -Fri Jan 26 11:11:55 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * emultempl/sunos.em: Check for native compile by comparing - ${target} and ${host}. - -Thu Jan 25 16:46:58 1996 James G. Smith <jsmith@cygnus.co.uk> - - * emulparams/{elf32b4300.sh, elf32l4300.sh}: Changed - TEXT_START_ADDR to allow use on IDT and PMON systems. - -Wed Jan 24 20:59:40 1996 Steve Chamberlain <sac@slash.cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): - correct spelling. - -Wed Jan 24 16:59:19 1996 Doug Evans <dje@charmed.cygnus.com> - - * configure.tgt (sparc64-*-solaris2*): New configuration. - (sparc64-*-aout*): Renamed from sparc64*. - -Mon Jan 22 13:01:35 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * Makefile.in (GENSCRIPTS): Pass @host@ @target@ @target_alias@. - * genscripts.sh: Set host, target and target_alias variables. - Check for native compile by comparing ${target} and ${host}. - * emultempl/elf32.em: Likewise. - * scripttempl/elfmips.sc: Test ${target}, not ${target_alias}. - -Mon Jan 22 11:03:23 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc: Refine eabi support to better support - .sdata, .sdata2, .sbss, etc. sections. - -Tue Jan 16 15:16:58 1996 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (%union): Add phdr field. - (phdr): Use phdr_qualifiers rather than opt_hdrs and opt_at. - (phdr_qualifiers): New nonterminal. Add support for FLAGS. - (opt_hdrs, hdr): Remove. - (phdr_val): New nonterminal. - * ldlang.c (lang_new_phdr): Replace hdrs parameter with filehdr - and phdrs parameters. Add flags parameter. - (lang_record_phdrs): Update for changes to lang_phdr. Pass flags - to bfd_record_phdr. - * ldlang.h (struct lang_phdr): Replace hdrs field with filehdr and - phdrs fields. Add flags field. - (LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Remove. - (lang_new_phdr): Update declaration. - * ld.texinfo: Document FLAGS. - -Mon Jan 15 15:07:19 1996 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): - Don't make a shared library because of an undefined reference to - __GLOBAL_OFFSET_TABLE_. - - Add some Irix 5 support, mostly from Kazumoto Kojima - <kkojima@info.kanagawa-u.ac.jp>: - * emulparams/elf32bmip.sh (SCRIPT_NAME): Change to elfmips. - (SHLIB_TEXT_START_ADDR): Define. - (OTHER_GOT_SYMBOLS): Define. - (OTHER_READWRITE_SECTIONS): Remove initialization of _gp. - (EXECUTABLE_SYMBOLS): Don't define. - (DYNAMIC_LINK): Don't define. - * emulparams/elf32lmip.sh: Same changes as elf32bmip.sh. - * scripttempl/elfmips.sc: New file. - * configure.host (mips*-dec-bsd*): Change mips to mips*. - (mips*-sgi-irix4*): Likewise. - (mips*-sgi-irix5*): New entry. - * Makefile.in (eelf32bmip.c): Depend upon elfmips.sc rather than - elf.sc. - (eelf32lmip.c): Likewise. - -Sat Jan 13 09:41:43 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc: Remove support for .rel.* sections. Add - .rela.got.neg section. - -Fri Jan 12 14:56:19 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/sh.sc: Only build constructors when CONSTRUCTING. - - * ldmisc.c: Include <stdarg.h> rather than <varargs.h> if - ANSI_PROTOTYPES is defined. Remove special handling of - WINDOWS_NT. Various indendation fixes. - (vfinfo): Change fmt parameter to const char *. - (info_msg): Write <stdarg.h> version. - (einfo, minfo, finfo): Likewise. - (info_assert): Change file parameter to const char *. - * ldmisc.h (einfo, minfo, info_msg): If ANSI_PROTOTYPES is - defined, use a real prototype. - (info_assert): Change first parameter to be const char *. - -Fri Jan 12 13:29:55 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc: Add support for .sdata2/.sbss2, etc. Add - in old support that 2.7.2 needs, but the current compiler does - not. - - * Makefile.in (eelf32{,l}ppc.c): Fix up dependencies to use the - correct Linker script template. - - * emulparams/elf32{,l}ppc.sh (TEXT_START_ADDR): Set to 0x40000, - not 0x400000. - (DATA_ADDR,NONPAGED_TEXT_START_ADDR): Delete. - -Tue Jan 9 15:53:02 1996 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/alpha.sc: Put .rconst right after .rdata. - -Fri Jan 5 14:07:45 1996 Steve Chamberlain <sac@slash.cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): - sort using right pointer. - -Fri Jan 5 12:25:47 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc: Remove support for creating special - labels for eabi section begin/end here. The compiler now uses - crt{i,n}.o to create these symbols. - -Thu Jan 4 17:08:58 1996 Ian Lance Taylor <ian@cygnus.com> - - * configure.host: Change existing Linux HOSTING_CRT0 to be used - for a.out only, and put in appropriate HOSTING_CRT0 and - HOSTING_LIBS values for Linux ELF. - -Thu Jan 4 12:02:05 1996 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/h8300.sc: Use all 64K for ram. - * scripttempl/h8300h.sc: Define 256K ram size. - -Thu Dec 21 15:57:18 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Pass - export_defines as true to bfd_xcoff_size_dynamic_sections if -unix - was used, regardless of whether -bE was used. - -Tue Dec 19 17:35:38 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set - relocateable before calling ldctor_build_sets if the output file - is in an XCOFF format. - -Fri Dec 15 16:34:36 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldwrite.c (build_link_order): When handling a data statement, if - the endianness of the output file is unknown, use the endianness - of the input file. - -Tue Dec 12 13:55:41 1995 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-config.in: Recognize mips-*-* as equivalent to - mips-idt-ecoff. - * mpw-eppcmacos.c: Rename to shorter mpw-eppcmac.c. - * mpw-ld.r: Add version resources. - (cfrg): Use symbolic instead of literal name for executable. - -Mon Dec 11 15:13:41 1995 Kim Knuttila <krk@cygnus.com> - - * scripttempl/ppcpe.sc (FINI): Moved the .reloc section. - -Wed Dec 6 14:33:50 1995 Doug Evans <dje@canuck.cygnus.com> - - * ldlang.c (print_statement{,s}): Delete duplicate prototype. - (print_statement_list): Renamed from print_statement. All callers - updated. - (print_statement): New function to print just one statement. - (print_{data,reloc,padding}_statement): Don't crash if - output_section == NULL. - (dprint_statement): New function. - - * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix - call to sort_sections. - -Wed Dec 6 14:59:06 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (unix_ld): New static variable. - (gld${EMULATION_NAME}_parse_args): Handle -unix. - (gld${EMULATION_NAME}_before_allocation): If unix_ld, pass - gc as false and export_defineds as true to size_dynamic_sections. - - * ldexp.c (exp_fold_tree): Permit assignments to dot in the final - phase if the current section is abs_output_section. - - -Tue Dec 5 09:49:39 1995 Doug Evans <dje@canuck.cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix call - to sort_sections. - -Fri Dec 1 16:48:36 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (PHDRS): New token. - (ifile_p1): Accept phdrs. - (section): Accept phdr_opt at the end of the section definition. - (phdr_op): New nonterminal. - (phdrs, phdr_list, phdr, phdr_type, opt_hdrs, hdr): Likewise. - * ldlex.l: Accept PHDRS. - * ldlang.h (struct lang_output_section_phdr_list): Define. - (lang_output_section_statement_type): Add phdrs field. - (struct lang_phdr): Define. - (LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Define. - (lang_new_phdr): Declare. - * ldlang.c (lang_phdr_list): New static variable. - (lang_output_section_statement_lookup): Initialize phdrs field. - (lang_process): Call lang_record_phdrs. - (lang_new_phdr): New function. - (lang_section_in_phdr): New function. - (lang_record_phdrs): New static function. - * ld.texinfo: Document PHDRS. - -Thu Nov 30 13:14:30 1995 Kim Knuttila <krk@cygnus.com> - - * scripttempl/ppcpe.sc: Moved .edata into its own section to - expose it. - -Thu Nov 30 11:32:34 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de> - - * configure.host (m68*-motorola-sysv): Define HOSTING_CRT0 and - HOSTING_LIBS for testing. - (m88*-motorola-sysv3): Define HOSTING_CRT0 and HOSTING_LIBS for - testing. - -Tue Nov 28 12:14:53 1995 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Set config.dynamic_link to false for -N - and -n. - -Mon Nov 27 13:12:09 1995 Ian Lance Taylor <ian@cygnus.com> - - * configure: Rebuild with autoconf 2.7. - -Fri Nov 24 18:35:35 1995 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/pe.sc: Two .junk's is too much junk. - -Tue Nov 21 16:14:32 1995 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Use BFD_NEED_DECLARATION. - * acconfig.h: Put NEED_DECLARATION_FREE in @TOP@ section. - * configure, config.in: Rebuild with autoconf 2.6. - - * ldmain.c (constructor_callback): Don't warn about BFD_RELOC_CTOR - being unsupported if this is not a relocateable link and the input - BFD supports it, since ldctor_build_sets can cope with that case. - -Fri Nov 17 16:23:15 1995 Stan Shebs <shebs@andros.cygnus.com> - - * configure.tgt (powerpc-*-macos*): New target. - * emulparams/ppcmacos.sh: New file, PowerMac emulation. - * Makefile.in (ALL_EMULATIONS): Add eppcmacos.o. - (eppcmacos.c): New target. - * mpw-eppcmacos.c: Update. - * mpw-make.sed: Edit out attempts to use {GENSCRIPTS}. - -Fri Nov 17 10:37:27 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (CC_FOR_TARGET): Use @host@ and @target@, not - $(host_canonical) and $(target_canonical). - (CXX_FOR_TARGET): Likewise. - -Thu Nov 16 11:23:42 1995 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/pe.sc (.endjunk): Move definition of `end' to here - so the malloc heap begins at a sane place. - -Thu Nov 16 03:09:32 1995 Ken Raeburn <raeburn@cygnus.com> - - Version 2.6 released. - * ldver.c (ldversion): Update to 2.6. - - * Makefile.in (mostlyclean): Delete ldemul-list.h here, but not - $(GENERATED_*FILES), since they need to be retained by distclean. - (maintainer-clean, realclean): Delete them here. - -Tue Nov 14 17:08:06 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Open the - base file with FOPEN_WB, not "w". - - * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Use the - environment variable LD_RUN_PATH if neither -rpath nor -rpath-link - were used. - (gld${EMULATION_NAME}_before_allocation): Use the environment - variable LD_RUN_PATH if -rpath was not used. - * ld.texinfo, ld.1: Document LD_RUN_PATH. - -Thu Nov 9 13:09:29 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Recognize - -bl and -bloadmap options. - - * ldfile.c (ldfile_try_open_bfd): If bfd_error_invalid_target, - report a better error. - - * emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Add - new local variable special_sections, and pass it to - size_dynamic_sections. Look through the results, and move the - sections around in the mapping so that they are defined correctly. - -Wed Nov 8 11:40:59 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldemul.c (ldemul_default_target): Cast getenv return value. - -Tue Nov 7 11:15:36 1995 Kim Knuttila <krk@cygnus.com> - - * emulparams/ppcpe.sh (ARCH): New file for PowerPC Portable - Executable support. - * scripttempl/ppcpe.sc: New file for PowerPC Portable Executable - support. - - * configure.tgt (targ_extra_emuls): Added powerpcle-pe target. - * Makefile.in (ALL_EMULATIONS): Added eppcpe.o target. - - * emultempl/pe.em (TARGET_IS_ppcpe): file tailoring macro - (gld_$_before_allocation): added hooks for toc construction based - on the above macro. - -Tue Nov 7 11:47:23 1995 Ian Lance Taylor <ian@cygnus.com> - - * ld.texinfo: The linker does not use _main as an entry point. - -Tue Nov 7 11:46:11 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de> - - * scripttempl/m88kbcs.sc (.data): Calculate next boundary modulo - 0x2000 not 0x200. - -Mon Nov 6 10:59:21 1995 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Add test for whether free must be declared. - * sysdep.h: Declare free if necessary. Include "ansidecl.h". - * acconfig.h: Explain NEED_DECLARATION_FREE. - * configure, config.in: Rebuild. - - * lexsup.c (parse_args): Take B:: out of shortopts. - -Sun Nov 5 03:08:28 1995 Ken Raeburn <raeburn@cygnus.com> - - * emulparams/i386nbsd.sh (EXECUTABLE_SYMBOLS): Set __DYNAMIC to 0 - for now, as with m68k4kbsd, until shared library support gets - done. - - * configure.host: For i386 BSD variants, crt0.o lives in - /usr/lib. (True for NetBSD at least, unconfirmed for others.) - -Wed Nov 1 15:42:45 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de> - - * Makefile.in (ALL_EMULATIONS): Add edelta68.o. - (edelta68.c): New target. - * configure.tgt (m68*-motorola-sysv*): New target. - * emulparams/delta68.sh: New file. - * scripttempl/delta68.sc: New file. - - * scripttempl/m88kbcs.sc: Handle .init and .fini. Change section - addresses. - -Wed Nov 1 11:41:56 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (mri_script_command): Accept ',' as well as '=' in - ALIGN and ALIGNMOD statements. - - * emultempl/aix.em: Include ldgram.h. - (gld${EMULATION_NAME}_parse_args): Handle -pD and -pT, as used on - AIX 4.1. - * Makefile.in ($(EMULATION_OFILES)): Depend upon ldgram.h. - -Tue Oct 31 18:22:24 1995 David Mosberger-Tang <davidm@azstarnet.com> - - * configure.host (alpha-*-linux*): New host. - * configure.tgt (alpha-*-linux*): New target. - -Tue Oct 31 12:36:52 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (export_files): Remove. - (import_files): Make static. - (struct export_symbol_list): Define. - (export_symbols): New static variable. - (gld${EMULATION_NAME}_parse_args): Handle an initial -b option - correctly. Call read_file for an export file. - (gld${EMULATION_NAME}_before_allocation): Call - bfd_xcoff_export_symbol for each export symbol, rather than - calling read_file for each export file. - (gld${EMULATION_NAME}_read_file): For an export file, make the - exported symbols undefined, and store them on the export_symbols - list. - -Sat Oct 28 00:10:03 1995 steve chamberlain <sac@slash.cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): - Don't hang if last option is unrecognised. - (gld_${EMULATION_NAME}_set_symbols): Insert created - symbols into ABS output section. - -Fri Oct 27 18:03:17 1995 Niklas Hallqvist <niklas@appli.se> - - * Makefile.in (ALL_EMULATIONS): Added support for the NetBSD - m68k4k arch. - (em68k4knbsd.c): New rule. - - * configure.tgt: Added support for the NetBSD m68k4k arch. - - * genscripts.sh, ldint.texinfo, - emulparams/{a29k,armaoutb,armaoutl,coff_sparc,ebmon29k,gld960, - gld960coff,go32,h8300,h8300h,h8500,h8500b,h8500c,h8500m,h8500s, - hp300bsd,hp3hpux,hppaelf.sh,i386aout,i386bsd,i386coff,i386go32, - i386linux,i386lynx,i386nbsd,lnk960,m68kaout,m68kcoff,m68klynx, - m88kbcs,mipsbig,mipsbsd,mipsidt,mipsidtl,mipslit,news,ns32knbsd, - pc532machaout,riscix,sa29200,sh,shl,sparclynx,sparcnbsd, - st2000,sun3,sun4,vanilla,vax,vsta,w65,z8001,z8002}.sh: Changed - PAGE_SIZE to TARGET_PAGE_SIZE. - - * emulparams/m68knbsd.h: Ditto. - (TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR): We have 8K pagesize. - (EXECUTABLE_SYMBOLS): Hardcode __DYNAMIC to zero for the time - being. - - * emulparams/m68k4knbsd.sh: New file. - - * scripttempl/aout.sc: Expand EXECUTABLE_SYMBOLS if relocating. - -Fri Oct 27 17:59:09 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em: Include ldctor.h. - (gld${EMULATION_NAME}_after_open): New static function. - (gld${EMULATION_NAME}_before_allocation): Call find_relocs. - (gld${EMULATION_NAME}_find_relocs): New static function. - (gld${EMULATION_NAME}_find_exp_assignment): New static function. - (ld_${EMULATION_NAME}_emulation): Use new after_open function. - * scripttempl/aix.sc: Use CONSTRUCTORS in .data. - * ldctor.c (struct set_info): Move definition into ldctor.h. - (struct set_element): Likewise. - (sets): Make non-static. - (ldctor_add_set_entry): Add name parameter. Save it in the new - set element. - (ldctor_build_sets): Avoid being called twice. Pass set element - name to lang_add_reloc. - * ldctor.h (struct set_info): Move definition here from ldctor.c. - (struct set_element): Likewise. Add new field name. - (sets): Declare. - (ldctor_add_set_entry): Declare new name parameter. - * ldwrite.c (build_link_order): Don't insist that either name or - section be NULL in a lang_reloc_statement. - * ldmain.c (add_to_set): Pass NULL to ldctor_add_new_set_entry for - new name parameter. - (constructor_callback): Pass name to ldctor_add_new_set_entry for - new name parameter. - - * ldmisc.c (demangle): Fix indentation. Remove a leading period. - -Thu Oct 26 22:22:49 1995 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-config.in: Add PowerMac target support, generate config.h. - * mac-ld.r: New file, Mac resources. - * mpw-make.sed: New file, edits Makefile.in into MPW syntax. - * mpw-make.in: Remove. - * mpw-eppcmacos.c: Prebuilt version of PowerMac linking script. - -Thu Oct 26 14:11:26 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Treat - -static as a synonym for -bnso. - - * scripttempl/aix.sc: Move special symbols inside sections. - Always start .data at 0. - -Wed Oct 25 11:52:12 1995 Per Bothner <bothner@kalessin.cygnus.com> - - * Makefile.in (diststuff): Also make info. - (maintainer-clean realclean): Also delete *.info*. - -Wed Oct 25 11:27:25 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/aix.em: Add support for various AIX linker options, - for AIX import and export files, and for AIX shared objects. - * scripttempl/aix.sc: Add .pad. Put .ds just before the TOC. - - * ldmain.c (main): Initialize new field link_info.static_link. - - * ldmain.c (add_keepsyms_file): Add \n at end of einfo calls. - (constructor_callback): Likewise. - * ldmisc.c (vfinfo): Likewise. - * ldwrite.c (build_link_order): Likewise. - - * ld.texinfo: The MRI ALIGN directive is supported. - -Mon Oct 23 11:46:43 1995 James G. Smith <jsmith@pasanda.cygnus.co.uk> - - * emulparams/elf32vr4300.sh: Deleted. - * emulparams/elf32vr4300el.sh: Deleted. - * emulparams/elf32b4300.sh: Added. - * emulparams/elf32l4300.sh: Added. - * configure.tgt, Makefile.in: Updated the build to use the - new 8.3 unique names. - -Thu Oct 19 17:41:46 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (entry_symbol): Make non-static. - * ldlang.h (entry_symbol): Declare. - - * ldlex.l: Treat PROVIDE as a keyword in expression state. - -Wed Oct 18 17:34:06 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttempl/pe.sc (.bss): Move to be after .text - -Tue Oct 17 12:22:05 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_exp_assignment): - Search trinary.cond rather than searching trinary.lhs twice. From - linli@ihp.PHys.ethz.CH. - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Move - directory searching code into gld${EMULATION_NAME}_search_dir. - (gld${EMULATION_NAME}_search_dir): New static function, extracted - from gld${EMULATION_NAME}_find_so. - (global_needed, global_found): New static variables. - (gld${EMULATION_NAME}_after_open): New static function. - (gld${EMULATION_NAME}_search_needed): New static function. - (gld${EMULATION_NAME}_try_needed): New static function. - (gld${EMULATION_NAME}_check_needed): New static function. - (ld_${EMULATION_NAME}_emulation): Use new after_open function. - * ld.texinfo, ld.1: Mention -rpath-link on SunOS. - - * Makefile.in (eelf32ppc.c): Depend upon elf32.em, not generic.em. - (eelf32lppc.c): Likewise. - * emulparams/elf32lppc.sh (TEMPLATE_NAME): Define as elf32. - (GENERATE_SHLIB_SCRIPT): Define as yes. - -Mon Oct 16 19:11:13 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em: Struct bfd_elf_link_needed_list is now named - bfd_link_needed-list; make appropriate changes. - - * configure.tgt (powerpc-*-aix*): New target; use aixppc. - (rs6000-*-aix*): New target; use aixrs6. - * emulparams/aixppc.sh, emulparams/aixrs6.sh: New files. - * emultempl/aix.em: New file. - * scripttempl/aix.sc: New file. - * Makefile.in (ALL_EMULATIONS): Add eaixppc.o and eaixrs6.o. - (eaixppc.c, eaixrs6.c): New targets. - -Fri Oct 13 14:00:37 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttemp/pe.sc (.reloc): Move to the end. - -Tue Oct 10 17:53:22 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_finish): Don't try to use an entry_symbol from a - section which was not linked into the final output. - -Tue Oct 10 10:17:22 1995 steve chamberlain <sac@slash.cygnus.com> - - * emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Fix - fatal typos. - -Tue Oct 10 01:01:51 1995 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (args_type): Add rpath_link field. - * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Search for - required dependencies in rpath_link path. Only search - LD_LIBRARY_PATH when configured native. - * lexsup.c (parse_args): Recognize -rpath-link. - * ld.1, ld.texinfo: Document -rpath-link. - -Sat Oct 7 17:07:17 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't - bother searching for needed libraries unless doing a final link. - -Fri Oct 6 16:26:16 1995 Ken Raeburn <raeburn@cygnus.com> - - Mon Sep 25 22:49:32 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * ld/ld.1: Fix formatting bugs. - -Wed Oct 4 17:37:46 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldexp.c (exp_get_abs_int): Return bfd_vma, not int. - * ldexp.h (exp_get_abs_int): Update declaration. - * ldlang.c (print_output_section_statement): Use fprintf_vma to - print return value of exp_get_abs_int. - -Mon Oct 2 13:56:09 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (global_stat): New file static variable. - (gld${EMULATION_NAME}_try_needed): Call stat_needed to make sure - that the file has not already been included under another name. - (gld${EMULATION_NAME}_stat_needed): New static function. - -Fri Sep 29 12:00:18 1995 Doug Evans <dje@deneb.cygnus.com> - - * scripttempl/armcoff.sc: Start .text at 0x8000. - Start .data at 0x40000. - -Fri Sep 29 11:09:46 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): If - command_line.rpath is set, use it, rather than the -L options, to - build the rules section. - * ld.texinfo: Document this use of -rpath. - - * lexsup.c (parse_args): Don't set link_info.shared for -assert - pure-text. Pass true, not 1, to lang_add_entry. - * emultempl/sunos.em (find_assign): New static variable. - (found_assign): New static variable. - (gld${EMULATION_NAME}_before_allocation): Rename local h to hdyn. - If not a relocateable link, and no start symbol was specified on - the command line, and there are any undefined symbols, set - link_info.shared. If link_info.shared is set, set the address of - the .text section to 0x20. - (gld${EMULATION_NAME}_find_assignment): Rename from - gld${EMULATION_NAME}_find_statement_assignment. If find_assign is - set, then just set found_assign based on whether an assignment is - found to find_assign. - (gld${EMULATION_NAME}_get_script): Don't use a special script when - producing a shared library. - * emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Remove. - * scripttempl/aout.sc: Remove CREATE_SHLIB tests. - * ldlang.c (entry_from_cmdline): New global variable. - (lang_add_entry): Change cmdline parameter from int to boolean. - Use global entry_from_cmdline rather than function static - from_cmdline. - * ldlang.h (entry_from_cmdline): Declare. - (lang_add_entry): Change declaration of second parameter from int - to boolean. - * ldgram.y: Pass false, not 0, to lang_add_entry. - -Thu Sep 28 12:34:13 1995 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (parsing_defsym): Declare. - * ldlex.h (lex_string): Declare. - * ldlex.l (lex_string): Define. - * lexsup.c (parsing_defsym): Define. - (parse_args): In OPTION_DEFSYM case, set lex_string before calling - lex_redirect, and clear it after calling yyparse. Set - parsing_defsym around call to yyparse. - * ldmain.c (main): Set lex_string before calling lex_redirect, and - clear it after calling yyparse. - * ldmisc.c (vfinfo): For %S, handle --defsym arguments and built - in linker scripts correctly. - - * scripttempl/sparccoff.sc: Add .ctors/.dtors handling like other - COFF targets, allowing for the leading underscore used on SPARC - COFF. - - * lexsup.c (parse_args): Handle -assert. - * emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Define. - * emultempl/sunos.em (gld${EMULATION_NAME}_get_script): Use the - shared library script when appropriate. - * scripttempl/aout.sc: If CREATE_SHLIB is set, start the .text - section at SIZEOF_HEADERS. - -Thu Sep 28 01:40:37 1995 Doug Evans <dje@deneb.cygnus.com> - - * Makefile.in (earmcoff.c): Build. - * configure.tgt (arm-*-coff): New target - * emulparms/armcoff.sh: New file. - * scripttempl/armcoff.sc: New file. - -Tue Sep 26 10:59:32 1995 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/i386coff.sc: Remove .data2; no longer needed. - -Fri Sep 22 18:09:02 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldfile.c (ldfile_set_output_arch): Make arch const. - -Thu Sep 21 17:55:24 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc: Correctly locate __bss_start at the - beginning of the .bss area, not at the end of data. Add - __sbss_{start,end} symbols. - -Wed Sep 20 12:29:36 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (CC_FOR_TARGET): Quote $(program_transform_name). - (CXX_FOR_TARGET, install): Likewise. - -Mon Sep 18 14:53:22 1995 Ian Lance Taylor <ian@cygnus.com> - - Based on patches by Alan Modra <alan@spri.levels.unisa.edu.au>: - * Makefile.in (CC_FOR_TARGET): Remove brokensed stuff. - (CXX_FOR_TARGET): Likewise. - (install): Likewise. - (GENERATED_HFILES): Remove config.h. - (.dep): Depend upon config.h. - -Mon Sep 18 14:39:38 1995 Arne H. Juul <arnej@pvv.unit.no> - - * configure.tgt (mips*-dec-netbsd*): New target. - -Fri Sep 15 20:01:52 1995 Ken Raeburn <raeburn@cygnus.com> - - * configure.host (m88*-*-dgux*): Fix another shell syntax error. - -Fri Sep 15 23:28:05 1995 Andrew Cagney <cagney@highland.com.au> - - * configure.host (i[345]86-*-bsd*): Fix shell syntax error. - -Thu Sep 12 12:50:49 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttemp/pe.sc: Allow both spellings of .ctors/.dtors. - Start .text section on the right boundary. Always align - stabs. - -Tue Sep 12 12:24:17 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (maintainer-clean): New target. - - * ldmain.c (struct warning_callback_info): Define. - (warning_callback): Add new parameter symbol. Call - warning_find_reloc to try to find the section and VMA. - (warning_find_reloc): New static function. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Pass NULL as symbol parameter to warning callback. - - * ld.texinfo: Clarify -L option. - - * ldlang.c (lang_one_common): Add cast to avoid warning. - (topower): Likewise. Also, reindent. - * ldwrite.c (clone_section): Change i to unsigned int. - * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Add - cast to avoid warning. - -Fri Sep 8 16:32:43 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (config.status): Depend upon configure.tgt. - - * ldemul.h (ldemul_set_symbols): Declare. - (ldemul_parse_args): Declare. - * ldemul.c (ldemul_parse_args): Fix indentation. - - * configure.in: Call AC_HEADER_DIRENT. - * configure, config.in: Rebuild. - * emultempl/sunos.em: Use autoconf recommend mechanism to define - DIR and struct dirent. - - * configure.tgt (mips*-*-bsd*): New case. - - * configure.host (i[345]86-sequent-ptx* | i[345]86-sequent-sysv*) - New case. - * configure.tgt (i[345]86-*-ptx*): New case. - -Thu Sep 7 10:48:26 1995 Ian Lance Taylor <ian@cygnus.com> - - * config.in: Rename from config.h.in. - * configure.in: Call AC_CONFIG_HEADER with config.h:config.in. - Check for config.h:config.in when creating stamp-h. - * configure: Rebuild. - * Makefile.in (stamp-h): Depend upon config.in rather than - config.h.in. Set CONFIG_HEADERS to config.h:config.in when - calling config.status. - - * Makefile.in (distclean): Remove config.h and stamp-h. - - * configure.host (sparc-*-sunos64*): Remove. - * ldlang.c (lang_map): Check BFD64, not HOST_64_BIT. - - * ldexp.c (exp_fold_tree): Don't warn about moving the location - counter backward in the absolute section. - -Wed Sep 6 14:42:11 1995 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Rewrite to use autoconf. - * configure.host: New file. - * configure.tgt: New file. - * aclocal.m4: New file. - * configure: New file, built by autoconf. - * acconfig.h: New file. - * config.h.in: New file, built by autoheader. - * sysdep.h: New file. - * ld.h: Incorporate old contents of config.h. - * config.h: Remove. - * Makefile.in: Various changes for new configure script. Also: - (CC_FOR_BUILD): Remove. - (ldmain.o): Don't bother to ensure that EMUL is non-empty. - (dep.sed): Use @SRCDIR@, not @srcdir@. - * dep-in.sed: Use @SRCDIR@, not @srcdir@. - * genscripts.sh: Create ldscripts if it does not exist. - * ldemul.c, lexsup.c, mpw-emipsidt.c: Don't include "config.h". - * mpw-esh.c, emultemp/*.em: Likewise. - * ldmain.c: Likewise. Include <ctype.h>. Don't try to set - HAVE_SBRK here. - * config/*.mt, config/*.mh: Remove. - -Tue Sep 5 14:55:24 1995 Ken Raeburn <raeburn@cygnus.com> - - * configure.in: Treat ns32k-pc532-ux* like ns32k-pc532-mach*, and - ns32k-pc532-lites* like ns32k-pc532-netbsd*. From Ian Dall. - -Fri Sep 1 22:29:52 1995 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/pe.sc: Fix typo in spelling of .ctors/.dtors. - -Fri Sep 1 13:13:29 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (warning_callback): Add abfd, section, and address - parameters. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Change call to warning accordingly. - - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): If not - relocateable and not shared, put .gnu.warning.SYMBOL sections into - the .text section. - -Fri Sep 1 08:35:16 1995 James G. Smith <jsmith@beauty.cygnus.com> - - * configure.in: Added mips*vr4300-idt-elf* and - mips*vr4300el-idt-elf* targets. - * Makefile.in: Added eelf32vr4300* targets. - * emulparams/{elf32vr4300.sh, elf32vr4300el.sh}: Added. - * config/{mips-vr4300.mt, mips-vr4300el.mt}: Added. - -Fri Sep 1 10:51:45 1995 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/a29k.sc: Fix to be reasonable. From Brendan Kehoe - <brendan@cygnus.com>. - -Thu Aug 31 16:37:07 1995 steve chamberlain <sac@slash.cygnus.com> - - * ldemul.c (ldemul_parse_args): New. - * ldemul.h (ld_emulation_xfer_struct): Add parse_args. - * lexsup.c (all pe stuff): Moved into pe.em - (parse_args): Call emulation arg parser. - * emultempl/pe.em (parse_args): handle PE specfic args. - -Thu Aug 31 17:01:37 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_memory_region_lookup): Don't use the first region - as the default region. Create a new region instead. - -Tue Aug 29 14:21:41 1995 steve chamberlain <sac@slash.cygnus.com> - - * ldemul.c (ldemul_set_symbols): New function. - * ldemul.h (ld_emulation_xfer_struct): Add set_symbols. - * ldmain.c (main): Add call to ldemul_set_symbols. - * lexsup.c (set_pe_value): New args. - (set_pe_name): New. - (parse_args): Cope with new set_pe_value args. - * emultempl/pe.em (set_symbols): New function. - (ld_emulation_xfer_struct): Add set_symbols. - * scripttempl/pe.sc: Use new symbols. - -Thu Aug 24 18:12:18 1995 Ian Lance Taylor (ian@cygnus.com) - - * lexsup.c (parse_args): Don't call set_default_dirlist for -O. - For -Y, ignore a leading `P,', and only call set_default_dirlist - after processing all the other arguments. - -Tue Aug 22 07:36:58 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttempl/pe.sc: Keep .edata, don't base stabs at 0. - * emulparams/armpe.sh: Run PE script. - -Mon Aug 21 18:30:42 1995 steve chamberlain <sac@slash.cygnus.com> - - * ldmain.c (main): Remove PE stuff. - * lexsup.c (options): Load more PE options. - (set_pe_value): New function. - -Thu Aug 17 13:35:49 1995 steve chamberlain <sac@slash.cygnus.com> - - - * emultempl/{armpe.sc, i386pe.sc}: Deleted. - * emultempl/pe.sc: New file performs generic PE support and sorts - archive members. - * emulparams/{armpe.sh,i386pe.sh}: Use new file. - * scripttempl/{armpe.sc, i386pe.sc}: Deleted - * scripttempl/pe.sc: New. - * Makefile.in: Use new files. - -Thu Aug 17 14:46:34 1995 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/h8500s.sc (.rdata): All data must go in data segment. - (.strings,.ctors,.dtors): Likewise. - -Wed Aug 16 11:38:59 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttempl/armpe.sc: Always start code at 0x401000, even - if -r. - * ldwrite.c (strdup): New extern declaration. - * ldgram.y (atype): New rule to clarify type parsing. - * ldlang.c (init_os): Remove commented out code. - (lang_size_sections): Set SEC_ALLOC and SEC_LOAD bits - unless told not to by the link script. - -Wed Aug 16 11:45:11 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_set_startof): New static function. - (lang_process): Call it. - - * ldgram.y: Tweak casesymlist to avoid bison errors. - - * lexsup.c (parse_args): Accept -h as a synonym for --soname, for - Solaris compatibility. - -Tue Aug 15 17:31:16 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldgram.y (YYDEBUG): If not defined, define as 1. - (CASE, EXTERN, START): New tokens. - (mri_script_command): Handle CASE, EXTERN, INCLUDE, START. - (casesymlist): New nonterminal. - (extern_name_list): New nonterminal. - * ldlex.l: Accept lower case trailing base specifiers. Don't - ignore the first digit when the base is a suffix. Accept many - EXPRESSION state tokens in MRI state. Support MRI continuation - lines and MRI semicolon comments. Accept all MRI keywords in - lower case. Add CASE, EXTERN, and START MRI keywords. - -Tue Aug 8 19:14:58 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Use xmalloc - instead of alloca. - -Tue Aug 8 15:24:05 1995 J.T. Conklin <jtc@rtl.cygnus.com> - - * Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): Don't use - $r/../gcc/xgcc unless it is present. - -Thu Aug 3 11:56:22 1995 Ian Lance Taylor <ian@cygnus.com> - - * scripttempl/m68kcoff.sc: Only put .ctors and .dtors in .text - when CONSTRUCTING. - * scripttempl/m68klynx.sc: Likewise. - * scripttempl/nw.sc: Likewise. - * scripttempl/sa29200.sc: Likewise. - * scripttempl/sparclynx.sc: Likewise. - -Fri Jul 28 12:02:23 1995 steve chamberlain <sac@slash.cygnus.com> - - * emulparams/{z8001.sh, z8002.sh}: Fix typo. - -Thu Jul 27 21:06:21 1995 Ken Raeburn <raeburn@cygnus.com> - - * configure.in (i[345]86-*-linuxoldld): Treat like linuxaout*. - -Thu Jul 27 15:26:28 1995 steve chamberlain <sac@slash.cygnus.com> - - * scripttempl/i386pe.sc: Cope with constructors. - * scripttempl/z8ksim.sc: Deleted. - * scripttempl/z8000.sc: Resurrected as this, but - can handle z8001 and z8002 formats. - * emulparams/z8ksim.sh: Deleted. - * emulparams/{z8001.sh, z8002.sh}: New files. - * config/z8ksim.mt: Deleted - * config/z8k-coff.mt: New, generates both emulations. - -Tue Jul 25 14:53:02 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmisc.c (vfinfo): In %C and %D case, always print the BFD using - %B, in case it is in an archive. - -Mon Jul 24 15:23:39 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_process): Call reset_memory_regions for each - relaxation pass. - -Fri Jul 21 22:49:44 1995 Michael Meissner <meissner@cygnus.com> - - * scripttempl/elfppc.sc: Add support for .sdata, .sbss, and - _SDA_BASE. - -Thu Jul 20 16:26:55 1995 Ken Raeburn <raeburn@cygnus.com> - - * ldmain.c (constructor_callback): Allocate set_name in stack - frame, rather than always calling alloca with a fixed size. - -Wed Jul 19 16:21:43 1995 Doug Evans <dje@canuck.cygnus.com> - - * emulparams/armpe.sh (OUTPUT_FORMAT): Change to pei-arm-little. - (LITTLE_OUTPUT_FORMAT, BIG_OUTPUT_FORMAT): Define. - -Mon Jul 17 13:57:00 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldwrite.c (clone_section): Set the alignment of the clone - section to that of the section being cloned. - - * ldwrite.c (split_sections): Don't split the first input section - into a new output section. - -Sat Jul 15 00:26:35 1995 Michael Meissner <meissner@cygnus.com> - - * emulparams/elf32ppc.sh (TEMPLATE_NAME): Define as elf32. - (GENERATE_SHLIB_SCRIPT): Define as yes. - -Fri Jul 14 12:11:46 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/mipsecoff.em (check_sections): Use %P, not %F. - - * ldver.c (help): Update list of options to match currently - supported list. - -Thu Jul 13 13:52:10 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/lnk960.em (ld_lnk960_emulation): Initialize - after_open field. - - * ldexp.c (exp_intop): Don't cast stat_alloc arg to bfd_size_type; - it takes a size_t anyhow. - (exp_binop): Likewise. - (exp_trinop): Likewise. - (exp_unop): Likewise. - (exp_nameop): Likewise. - (exp_assop): Likewise. - * ldlang.c (lang_memory_region_lookup): Likewise. - (init_os): Likewise. - (ldlang_add_undef): Likewise. - (insert_pad): Likewise. - * ldfile.c (ldfile_add_arch): Don't cast xmalloc arg to - bfd_size_type. - - * Makefile.in (ALL_EMULATIONS): It's earmaoutb.o, not earmoutb.o. - -Wed Jul 12 11:32:22 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldemul.h (ldemul_open_dynamic_archive): Add search parameter to - declaration. - (ld_emulation_xfer_type): Add search parameter to - open_dynamic_archive entry point. - * ldemul.c (ldemul_open_dynamic_archive): Add search parameter. - * ldfile.c (ldfile_try_open_bfd): Rename from try_open_bfd, and - make non-static. Change all callers to use new name. - (ldfile_open_file_search): Make static. If entry is dynamic, call - ldemul_open_dynamic_archive. - (ldfile_open_file): Don't call ldemul_open_dynamic_archive. - * ldfile.h (ldfile_open_file_search): Don't declare. - (ldfile_try_open_bfd): Declare. - * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive): - Accept search parameter. Don't search for a library, just look in - a single place. - * emultempl/linux.em (gld${EMULATION_NAME}_open_dynamic_archive): - Likewise. - -Tue Jul 11 16:44:21 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (set_scripts_dir): Don't base script directory on - current directory. - -Tue Jul 11 12:29:02 1995 Rick Sladkey <jrs@world.std.com> - - * ldmisc.c (vfinfo): Don't print the line number if it isn't - meaningful. - -Mon Jul 10 13:38:28 1995 Ian Lance Taylor <ian@cygnus.com> - - * ld.h (ld_config_type): Add field warn_constructors. - * ldmain.c (add_to_set): Warn if config.warn_constructors. - (constructor_callback): Likewise. - * lexsup.c (parse_args): Handle -warn-constructors. - * ld.texinfo, ld.1: Document -warn-constructors. - - * emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Don't - get confused by directory names if we searched for the file. - - Based on patches from H.J. Lu <hjl@nynexst.com>: - * ldlang.h (lang_input_statement_type): Add new field dynamic. - * ldlang.c (new_afile): Set dynamic from config.dynamic_link. - * ldfile.c: Include bfdlink.h. - (ldfile_open_file): Check dynamic field of entry, not global - dynamic_link field. Don't do a dynamic search when doing a - relocateable link. - * ldmain.c (main): Don't warn about dynamic_link for a - relocateable link. - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Skip file if - dynamic is false. - (gld${EMULATION_NAME}_create_output_section_statements): Always - loop over input files. - * Makefile.in: Rebuild dependencies. - - * ld.texinfo, ld.1: Document -Bstatic, -Bdynamic, -Bshared, and - -shared. - -Mon Jul 10 13:29:43 1995 Eric Youngdale <eric@aib.com> - - * ldmain.c (main): Set link_info.symbolic to false. - * lexsup.c (parse_args): Handle -Bsymbolic. - -Wed Jul 5 00:12:11 1995 Fred Fish (fnf@cygnus.com) - - * ldmain.c (HAVE_SBRK): Define for everything except - specific systems that are known to not support sbrk. - (main): Use HAVE_SBRK to decide whether or not to use sbrk. - -Tue Jul 4 12:55:48 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment): - Handle etree_provide. - - * emultempl/elf32.em (global_needed): New static variable. - (global_found): Likewise. - (gld${EMULATION_NAME}_after_open): New static function. - (gld${EMULATION_NAME}_search_needed): Likewise. - (gld${EMULATION_NAME}_try_needed): Likewise. - (gld${EMULATION_NAME}_check_needed): Likewise. - (ld_${EMULATION_NAME}_emulation): Replace after_open_default with - gld${EMULATION_NAME}_after_open. - -Mon Jul 3 14:26:37 1995 Steve Chamberlain <sac@slash.cygnus.com> - - * configure.in (i386-*-win32): New target. - -Mon Jul 3 14:39:22 1995 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Let -G either set the small data size or - be equivalent to --shared, depending on the next argument. Accept - and ignore -z for Solaris compatibility. - -Sun Jul 2 17:52:34 1995 Ian Lance Taylor <ian@cygnus.com> - - * lexsup.c (parse_args): Cast fopen result to PTR before storing - it in link_info.base_file. Fix indentation. - -Wed Jun 28 17:11:25 1995 Steve Chamberlain <sac@slash.cygnus.com> - - * ldmain.c (main): Always initialize PE info in link_info. - * lexsup.c (OPTION_BASE_FILE): New option. - (parse_args): Handle new option. - * emulparams/armpe.sh: Output pei. - * emultempl/i386pe.em: Add newline to end. - * scripttempl/armpe.sc: Change output and quote the $s. - * scripttempl/i386pe.sc: Change output and quote the $s. - -Thu Jun 22 19:55:41 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - Sun May 7 11:53:41 MDT 1995 Bryan Ford <baford@cs.utah.edu> - - * configure.in (i386-*-msdos*, i386-*-moss*): New targets. - * Makefile.in (ALL_EMULATIONS): Added i386msdos.o. - (i386msdos.o): New target. - * config/i386-msdos.mt: Created. - * emulparams/i386msdos.sh: Created. - * scripttempl/i386msdos.sc: Created. - -Thu Jun 22 15:06:35 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * scripttempl/elfppc.sc (.fixup): Add support for a .fixup section - that contains pointers to be relocated. - -Tue Jun 20 17:47:20 1995 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-esh.c: New file, modified for MPW from esh.c. - * scripttempl/sh.sc: Reformatted to simplify MPWification, - use *() to concat stab sections instead of []. - -Thu Jun 15 08:48:16 1995 Steve Chamberlain <sac@slash.cygnus.com> - - * scripttempl/armpe.sc: Add constructor support. - -Tue Jun 13 09:11:20 1995 Steve Chamberlain <sac@slash.cygnus.com> - - * ldlang.c (lang_size_sections): Any section with a DATA - statement has contents. - -Sun Jun 11 15:20:46 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - * emulparams/m68kelf.sh (NOP): Define. - (DYNAMIC_LINK): Don't define. - (TEXT_START_ADDR): Set to 0x80000000; the extra 0x100 for headers - will come from the linker script. - -Thu Jun 8 14:17:33 1995 Steve Chamberlain <sac@slash.cygnus.com> - - * emulparams/armpe.sh, scriptempl/armpe.sc: Add end and stack. - -Mon Jun 5 02:16:24 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com> - - * configure.in (i[345]86-*-gnu*): Use GNU elf config. - -Thu May 25 11:49:28 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - From Andrew Cagney <cagney@highland.com.au> - * Makefile.in: Fixup more gotchas from renaming elf32ppcle to - elf32lppc. - -Wed May 24 11:23:21 1995 Steve Chamberlain <sac@slash.cygnus.com> - - Add support for ARM-PE. - * Makefile.in (ALL_EMULATIONS): Add armpe.o - * configure.in: Recognize armpe. - * config/arm-pe.mt: New file. - * emulparams/armpe.sh: New file. - * scripttempl/armpe.sc: New file. - - -Mon May 22 15:19:26 1995 Doug Evans <dje@chestnut.cygnus.com> - - * configure.in (h8300h-*-hms): Deleted - * config/cf-h8300h.mt: Deleted. - -Thu May 18 04:26:10 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com> - - Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk) - - From David Taylor (dtaylor@armltd.co.uk) - * Makefile.in (ALL_EMULATIONS): Add earmout[lb].o - * configure.in: Recognize arm{,e[lb]-*-aout. - * config/arm[lb]-aout.mt: New files. - * emulparams/armaout[lb].sh: New files. - * scripttempl/armaout.sc: New file. - -Tue May 16 18:27:11 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * config/ppcle-elf32.mt (EMUL): Use elf32lppc, not elf32ppcle, to - be unique in 8 characters for DOS. - - * emulparams/elf32lppc.sh: New file, renamed from elf32ppcle.sh. - * emulparams/elf32ppcle.sh: Deleted. - -Fri May 12 11:03:55 1995 Steve Chamberlain <sac@slash.cygnus.com> - Tom Griest <griest@cs.yale.edu> - - Initial support for PE executables (eg NT, win32) - - * Makefile.in (configure.in, ei386pe): Add support. - * ldmain.c (main): Initialize PE argument info. - * ldwrite.c (print_file_stuff): Don't print out .drectve - and .debug section info. - * lexsup.c (set_subsystem, set_stack_heap, OPTION_HEAP, - OPTION_SUBSYSTEM, parse_argsm set_subsystem, set_stack_heap): - Handle new arguments. - * config/i386-pe.mt, emultempl/i386pe.em, scripttempl/i386pe.sc: - New files - -Wed May 10 18:37:59 1995 Stu Grossman (grossman@andros.cygnus.com) - - * scripttempl/hppaelf.sc: Remove .PARISC.unwind section from text - segment. This allows ld -r to preserve unwind sections. - -Tue May 9 17:19:57 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * configure.in: Add little endian PowerPC support. - - * Makefile.in (ALL_EMULATIONS): Add eelf32ppcle.o. - (eelf32ppcle.c): Support for little endian PowerPC. - - * config/ppcle-elf32.mt: New file for little endian PowerPC. - * emulparams/elf32ppcle.sh: Ditto. - -Wed May 3 12:56:32 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - * ldlang.c (print_output_section_statement): Check - subsection_alignment, instead of checking section_alignment twice. - Noticed by Alan Modra <alan@spri.levels.unisa.edu.au>. - -Tue May 2 16:36:07 1995 Jeff Law (law@snake.cs.utah.edu) - - * configure.in (hppa*-*-lites*): Handle like hppa*-*-*elf*. - -Mon Apr 24 19:21:02 1995 Michael Meissner <meissner@cygnus.com> - - * ldwrite.c (ldwrite): Before doing anything, reset the error - code. If bfd_final_link returns an error, but the error code is - unset, don't issue an extra message. Assume a correct error - message was already set. - -Fri Apr 14 16:31:24 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - * Makefile.in (ALL_EMULATIONS): Added em68kelf.o. - (em68kelf.o): New target. - * config/m68k-elf.mt, emulparams/m68kelf.sh: New files. - * configure.in: Use them for m68*-*-elf. - -Tue Apr 11 12:02:03 1995 Stan Shebs <shebs@andros.cygnus.com> - - Merge in support for Mac MPW as a host. - (Old change descriptions retained for informational value.) - - * mpw-config.in (i386-unknown-aout): Change to i386-unknown-go32. - (i386-unknown-coff): Remove. - (sh-hitachi-hms): New target. - (emulation_ofiles): Set correctly for each target. - (version, TDEFINES): Add to makefile fragment. - * mpw-make.in (BISON): Use byacc instead of bison. - (em_*.c): Replace with e*.c everywhere. - (ldgram.h): Separate action from ldgram.c generation. - (LD_PROG): Depend on Version.r. - (Version.r): generate from version info. - * mpw-emipsidt.c: New file, modified for MPW from emipsidt.c. - - * mpw-config.in (m68k-apple-macos, ppc-apple-macos, - i386-unknown-aout, i386-unknown-coff): New targets. - (m68k-aout, m68k-coff): Remove targets. - (mk.tmp): Add definition of EMUL. - - * mpw-config.in (emulname): Set based on target. - (ldemul-list.h): Construct. - * mpw-make.in (install-only): New target. - (install): Depend on install-only. - - * mpw-make.in (bindir): Fix pathname. - (install): Move here from mpw-build.in. - - * mpw-config.in: New file, MPW configuration fragment. - * mpw-make.in: New file, MPW makefile fragment. - (This file is semi-automatically generated from Makefile.in.) - * ldfile.c (slash): If MPW, set to `:'. - * ldlex.l (TRUE_FALSE_ALREADY_DEFINED): If MPW, set this to - prevent redefinition errors. - -Tue Apr 4 17:55:18 1995 Steve Chamberlain <sac@bang.hack.com> - - * ldwrite.c (clone_section): Align clone sections on even - boundaries. - -Thu Mar 30 14:32:26 1995 H.J. Lu (hjl@nynexst.com) - - * configure.in: Change linux to default to elf. Using - i[345]86-*-linuxaout will build a linker which defaults to a.out. - * config/i386-laout.mt: Rename from old config/i386-linux.mt. - * config/i386-linux.mt: Rename from old config/i386-lelf.mt. - * config/i386-lelf.mt: Remove. - -Thu Mar 30 13:09:46 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): If opening the map file fails, call - bfd_set_error before calling einfo. - - * ld.texinfo, ld.1: Document the -no-keep-memory option. - -Mon Mar 27 11:10:08 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Revert patch of March 10, since the SVR4 linker - does mark shared libraries as executable. - -Tue Mar 21 15:15:38 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_common): Change power to int. Pass larger values - before smaller values. - (lang_one_common): Treat info as int *. Don't bother to check for - last value, since it is now zero. - -Sat Mar 18 01:49:14 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (load_symbols): An empty archive is OK. - -Fri Mar 17 16:15:31 1995 Stan Shebs <shebs@andros.cygnus.com> - - * ldmain.c (progress.h): Include. - (main): Call START_PROGRESS and END_PROGRESS. - -Thu Mar 16 17:17:33 1995 Michael Meissner <meissner@cygnus.com> - - * scripttempl/elfppc.sc: Move _GOT2_END_ after the .ctors and - .dtors sections, so that these pointers get relocated also. - Define the symbols __{C,D}TOR_{LIST,END}__ to mark the beginning - and end of the constructors/destructors. - -Thu Mar 16 13:59:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> - - * ldlang.c (load_symbols): If whole_archive is true and ENTRY - describes an archive, call bfd_link_add_symbols on each member. - * ldmain.c (whole_archive): New variable. - (main): Initialize it to false. - * ldmain.h: Declare whole_archive. - * lexsup.c (parse_args): Grok --whole-archive switch. - * ld.texinfo, ld.1: Document --whole-archive. - -Thu Mar 16 11:38:48 1995 Ian Lance Taylor <ian@cygnus.com> - - * genscripts.sh (EMULATION_NAME): Set LIB_PATH to empty when not - using the default emulation. - - * config/dgux.mh (HOSTING_EMU): Use -m rather than trying to set - LDEMULATION. - * config/hppaelf.mh (HOSTING_EMU): Likewise. - -Tue Mar 14 12:28:03 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Set force_maj - for -lc.N. From H.J. Lu <hjl@nynexst.com>. - -Fri Mar 10 14:43:48 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): Don't set EXEC_P if link_info.shared is set. - - * ldlex.l: Return -lFILENAME as the token LNAME. - * ldgram.y: Add token LNAME. - (input_list): Treat LNAME like NAME, but pass it to - lang_add_input_file as lang_input_file_is_l_enum. - * ld.texinfo: Document using -lFILENAME in INPUT. - -Thu Mar 9 12:21:51 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * ldlang.c (lang_check): If the architectures are compatible call - bfd_merge_private_bfd_data to let the backend do additional - checks. - -Tue Mar 7 00:53:08 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldemul.c (ldemul_choose_mode): If emulation not recognized, list - all supported emulations. - -Mon Mar 6 14:03:50 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldemul.c (ldemul_list_emulations): New function. - * ldemul.h (ldemul_list_emulations): Declare. - * ldver.c (help): List supported targets and emulations. - -Fri Mar 3 15:40:36 1995 Doug Evans <dje@canuck.cygnus.com> - - * scripttempl/elf.sc (.debug): Relocate to address 0. - (.debug_srcinfo, .debug_aranges, .debug_pubnames, - .debug_sfnames, .line): Likewise. - -Fri Mar 3 17:07:14 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (hold_rel): New static variable. - (gld${EMULATION_NAME}_place_orphan): Place readonly sections with - contents whose names begin with ".rel" after hold_rel. Remove the - assertion which checked for unplaced .rel sections. Don't try to - sort the section into place if place->bfd_section is NULL. - (gld${EMULATION_NAME}_place_section): Set hold_rel to the first - section beginning with ".rel". - -Thu Mar 2 14:34:43 1995 Ian Lance Taylor <ian@cygnus.com> - - Doc note from pierre@phi.la.tce.com (Pierre Willard): - * ld.texinfo: -X and -x work even if -s or -S are not specified. - * ld.1: Similar change. - -Wed Mar 1 13:51:16 1995 Ian Lance Taylor <ian@cygnus.com> - - * emulparams/gld960coff.sh (COFF_CTORS): Define. - * scripttempl/i960.sc: Use COFF_CTORS if CONSTRUCTING. - -Tue Feb 28 12:42:56 1995 Ian Lance Taylor <ian@cygnus.com> - - * configure.in (i[345]86-*-linuxelf*): New target. Use i386-lelf. - (i[345]86-*-gnuelf*): New target. Use i386-gelf. - * config/i386-lelf.mt: New file. - * config/i386-gelf.mt: New file. - -Tue Feb 28 10:27:54 1995 Rob Savoye <rob@darkstar.cygnus.com> - - * configure.in: Match on mips-ecoff, and default to the IDT - configuration. - -Fri Feb 17 13:06:47 1995 Michael Meissner <meissner@cygnus.com> - - * scripttempl/elfppc.sc: Add support for .got1 and .got2 sections. - Offset _GLOBAL_OFFSET_TABLE_ 32768 from the start of the GOT area - to double the size of the table. - -Thu Feb 9 18:29:43 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - * Makefile.in (distclean): Do recursive deletion, since ldscripts - is a directory. - -Thu Feb 9 11:38:22 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (main): If trace_file_tries is true, and we are using - an internal linker script, print out the script. - * ldfile.c (try_open): Reindent function. Make the messages about - opening script files more informative. - - * lexsup.c (parse_args): For -V, call ldversion with 1, not 0. - * ld.texinfo, ld.1: Update accordingly. - -Wed Feb 8 17:34:45 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldlang.c (lang_one_common): Adjust references to common symbol - information for new structure. - -Mon Feb 6 12:17:24 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldmain.c (undefined_symbol): Handle section being NULL. - - * ldctor.c (ldctor_build_sets): Handle bfd_link_hash_defweak. - * ldexp.c (fold_name): Likewise. - * ldlang.c (print_one_symbol): Likewise. - (lang_finish): Likewise. - * ldmain.c (multiple_common): Likewise. - * ldwrite.c (print_symbol): Likewise. Also, bfd_link_hash_weak - renamed to bfd_link_hash_undefweak. - - * scripttempl/alpha.sc: Set address of .data section correctly - when -n or -N is used. Patch from Chris G Demetriou - <Chris_G_Demetriou@LAGAVULIN.PDL.CS.CMU.EDU>. - * scripttempl/mips.sc: Similar change. - -Tue Jan 31 16:20:52 1995 Doug Evans <dje@canuck.cygnus.com> - - * ldlang.c (lang_size_sections): Clarify error message when user - specified start addr conflicts with region. Fix resetting of - region pointer. - -Tue Jan 31 12:37:09 1995 Ian Lance Taylor <ian@cygnus.com> - - * ldexp.c (fold_name): In case NAME, permit an absolute symbol - in lang_allocating_phase_enum. - -Mon Jan 30 11:33:25 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (distclean): Depend upon clean. Don't bother to - remove files which will be removed by clean. From patch by - alan@SPRI.Levels.UniSA.Edu.Au (Alan Modra). - -Fri Jan 27 16:27:34 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): For - a MIPS target, clobber the size of all but the first input - .reginfo section to be 0, so that lang_size_sections sets the - correct size for the output .reginfo section. - -Thu Jan 26 19:53:37 1995 Ian Lance Taylor <ian@cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Remove unused variable is. - -Thu Jan 26 12:33:05 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * configure.in: Add support for powerpc-*-eabi. - - * scripttempl/elfppc.sc: New file for PowerPC embedded ABI - support. - - * emulparams/elf32ppc.sh (SCRIPT_NAME): Use elfppc.sc instead of - elf.sc, which defines some new symbols PowerPC elf needs. - -Tue Jan 24 10:32:15 1995 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldctor.c (ldctor_add_set_entry): Don't dump core if a - constructor entry is in the absolute section. - -Mon Jan 23 13:58:13 1995 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * configure.in (i[345]86-*-gnu*): Set ld_target to i386-gnu. - * config/i386-gnu.mt: New file. Include ELF support. - -Thu Jan 19 16:22:11 1995 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): If - there are any input sections named .gnu.warning, treat them as - containing a warning message to be printed by the linker, and - clobber the size so that the message is not copied into the output - file. - * scripttempl/elf.sc: Put .gnu.warning sections into the .text - section. - -Sun Jan 15 16:45:00 1995 Steve Chamberlain <sac@splat> - - * configure.in (w65-*-*): New target. - * Makefile.in: Update. - * scripttempl/w65.sc: New. - * config/coff-w65.mt: New. - -Thu Jan 12 01:32:25 1995 Ian Lance Taylor <ian@tweedledumb.cygnus.com> - - * ldlang.c (lang_place_orphans): Don't ignore files with - just_syms_flag set. Instead, put all their sections in - bfd_abs_section_ptr, using the section VMA as the output_offset. - -Wed Jan 11 22:59:09 1995 Ken Raeburn <raeburn@cujo.cygnus.com> - - * ldctor.c (ldctor_build_sets): Don't use `const' with typedef - name `reloc_howto_type', since it's now defined to be const. - * ldlang.c (lang_add_reloc): Ditto. - * ldlang.h (lang_reloc_statement_type, lang_add_reloc): Ditto. - -Wed Jan 11 11:24:45 1995 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldexp.c (fold_binary): Adding or subtracting an absolute value - to a relative value does not require forcing the relative value to - be absolute. Also, reindent function. - -Wed Dec 28 22:05:52 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ldwrite.c (clone_section): Create a symbol with the - same name as the section. - -Mon Dec 19 14:02:13 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ld.h (split_by_reloc, split_by_file): New flags. - * ldwrite.c (clone_section, split_sections): New functions. - * lexsup.c (parse_args): Understand new split options. - -Fri Dec 9 17:22:55 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * scripttempl/elf.sc: Move .ctors and .dtors from .text segment to - .data segment. They must be writable when creating a shared - library. From H.J. Lu <hjl@nynexst.com>. - -Fri Dec 2 14:09:00 1994 Ian Lance Taylor <ian@rtl.cygnus.com> - - * emultempl/miposecoff.em: New file. - * emulparams/mipsidt.sh (TEMPLATE_NAME): Set to mipsecoff. - * emulparams/mipsidtl.sh (TEMPLATE_NAME): Likewise. - * scripttempl/mips.sc: Put .rel.sdata sections in .text, and - provide __runtime_reloc_start and __runtime_reloc_stop if they are - used. Align _fdata to a 16 byte boundary. - * Makefile.in (emipsidt.c): Depend upon mipsecoff.em rather than - generic.em. - (emipsidtl.c): Likewise. - (check): Pass CC_FOR_HOST and CFLAGS_FOR_HOST to runtest. - - * ld.h (args_type): Add new field embedded_relocs. - * ldemul.h (ldemul_after_open, after_open_default): Declare. - (ld_emulation_xfer_struct): Add new field after_open. - * ldemul.c (ldemul_after_open): New function. - (after_open_default): New function. - * ldlang.c (lang_process): Call ldemul_after_open. - * lexsup.c (parse_args): Handle --embedded-relocs. - * emultempl/elf32.em (ld_${EMULATION_NAME}_emulation): Initialize - new after_open field to after_open_default. - * emultempl/generic.em, emultempl/gld960.em: Likewise. - * emultempl/gld960c.em, emultempl/hppaelf.em: Likewise. - * emultempl/linux.em, emultempl/m88kbcs.em: Likewise. - * emultempl/sunos.em, emultempl/vanilla.em: Likewise. - * ld.texinfo, ld.1: Mention -embedded-relocs. - -Wed Nov 23 22:04:47 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * Makefile.in: Add eshl.o. - * config/coff-sh.mt: Add shl emulation. - -Tue Nov 22 11:55:37 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * scripttempl/elf.sc: Fill .text section with NOPS. From Eric - Youngdale <eric@aib.com>. - -Thu Nov 17 14:39:48 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - Patches from pirker@eiunix.tuwien.ac.at (Martin Pirker). - * config/i386linux.mh: New file; set HOSTING_CRT0. - * genscripts.sh: Don't put ${libdir} in LIB_PATH if it is - /usr/lib, since that is already in LIB_PATH. - -Wed Nov 16 10:03:03 1994 Jeff Law (law@snake.cs.utah.edu) - - * scripttempl/hppaelf.sc (.text): Handle a use rdefined text start - address. - (.data, .bss): If "-N", then place the data/bss just after the end - of the .text section rather than at the default 0x40000000. - - * scripttempl/hppaelf.sc (.text): Place unwind descriptors in the - text segment. - -Sat Nov 12 15:55:56 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Patches from Eric Youngdale <eric@aib.com>: - * ldlang.c (lang_finish): Don't warn if entry symbol not found - when generating a shared library. - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Warn if - attempting to place an orphaned relocation section when generating - a dynamically linked object. - - * scripttempl/elf.sc: Add ENTRY(${ENTRY}), and default ${ENTRY} to - _start. - -Fri Nov 11 14:27:23 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ld.h (args_type): Add field export_dynamic. - * lexsup.c (parse_args): Recognize --export-dynamic. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Pass export_dynamic argument to bfd_elf32_size_dynamic_sections. - -Wed Nov 9 12:47:11 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldlang.c (lang_one_common): Set SEC_ALLOC in any section where - we allocate common symbols. - -Tue Nov 8 17:50:43 1994 Eric Youngdale (eric@aib.com) - - * scripttempl/elf.sc: Add .rel.init, .rela.init, .rel.fini, and - .rela.fini to the list of .rel* sections. - -Tue Nov 8 17:47:45 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldlang.c (load_symbols): Add new argument place. Only accept - linker scripts if place is not NULL. Put commands found in an - assumed linker script into place. - (lookup_name): Pass NULL as place argument to load_symbols. - (open_input_bfds): In lang_input_statement_enum case, pass a place - argument to load_symbols, and store any new statements after the - current one. - -Mon Nov 7 15:53:02 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * ldver.c (ldversion): Bump to 2.5.3. - -Fri Nov 4 15:11:26 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * Makefile.in (e*nbsd.c): Fix typo in dependencies. - -Thu Nov 3 19:35:44 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * Makefile.in (check): Add missing "else true" clause. - - * emulparams/vax.sh (OUTPUT_FORMAT): Use "a.out". - - * scripttempl/go32coff.sc: Changes from DJ Delorie: Change default - entry point to "start". Align at end of each section to 0x200. - Start .text section 0x1000 later. Add _etext, _edata, _end - symbols. - -Wed Nov 2 12:17:49 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldctor.c (ldctor_add_set_entry): Don't permit a set to be - composed of different object file formats. - (ldctor_build_sets): If the output format does not support the - reloc, and we are not generating a relocateable link, try getting - the reloc from the input format. - -Tue Nov 1 10:30:19 1994 J.T. Conklin (jtc@rtl.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Added em68knbsd.o. - (em68knbsd.c): New target. - - * config/m68k-nbsd.mt: New file. - * emulparams/m68knbsd.sh: New file. - * configure.in (m68*-*-netbsd*): Use above configs. - -Mon Oct 31 19:35:17 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): If we find an - appropriately named static library, stop the search at that - directory. - -Wed Oct 26 13:59:12 1994 J.T. Conklin (jtc@phishhead.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Added ei386nbsd.o, ens32knbsd.o - and esparcnbsd.o; sorted entries. - (ei386nbsd.c,ens32knbsd.c,esparcnbsd.c): New targets. - - * config/netbsd532.mt: Removed. - * emulparams/netbsd532.sh: Removed. - - * config/{i386-nbsd.mt,ns32k-nbsd.mt,sparc-nbsd.mt}: New files. - * emulparams/{i386nbsd.sh,ns32knbsd.sh,sparcnbsd.sh}: New files. - * configure.in (i[345]86-*-netbsd*, ns32k-pc532-netbsd*, - sparc*-*-netbsd*): Use above configs. - -Tue Oct 25 11:47:10 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldmain.c (multiple_common): One of the types may now be - bfd_link_hash_indirect. The old BFD argument may be NULL. - -Thu Oct 20 22:01:39 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * configure.in: Add * at the end of m68k-hp-hpux. - -Tue Oct 18 15:58:39 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * ldlex.l: Cast assignment to yy_ch_buf field to char *, not to - YY_CHAR *. - -Mon Oct 17 14:53:16 1994 J.T. Conklin (jtc@phishhead.cygnus.com) - - * scripttempl/nw.sc: Gather constructors and destructors and - define __CTOR__LIST__ and __DTOR_LIST__ appropriately. - -Fri Oct 14 14:35:38 1994 J.T. Conklin (jtc@rtl.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Add ei386nw.o and eppcnw.o. - (ei386nw.c, eppcnw.c): New targets. - - * config/{i386,ppc}-nw.mt, emulparams/{i386,ppc}nw.sh, - scripttempl/nw.sc: New files, for i386 and powerpc netware. - - * configure.in: Changed netware ld_target name to be {i386,ppc}-nw - instead of {i386,ppc}-elf. - - * configure.in (sparc*-*-netware): Removed. There is no such - thing anymore. - - * ldint.texinfo: Move misplaced `@end iftex'. - -Fri Oct 14 12:02:18 1994 Eric Youngdale (eric@aib.com) - - * scripttempl/elf.sc: Add .rel.ctors, .rela.ctors, .rel.dtors, and - .rela.dtors to the list of .rel* sections. - -Thu Oct 13 14:16:27 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * ldver.c (ldversion): Update to version 2.5. - * Version 2.5 released. - - * configure.in (all_targets): Handle i386-linux*. - -Thu Oct 13 11:24:33 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * scripttempl/aout.sc: Set _etext and __etext to ., not - ${DATA_ALIGNMENT}. This is compatible with SunOS, and, with luck, - will not break any other system. From Eric Valette - <ev@chorus.fr>. - -Wed Oct 12 16:22:58 1994 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * lexsup.c (parse_args): Change -V to be a synonym for -v. Add - --verbose to get the old -V behaviour. - * ld.1, ld.texinfo: Document this change. - -Tue Sep 27 14:56:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove - assertion, since it could fail with a user defined linker script. - - * ldexp.c (fold_name): For DEFINED case, don't try to look up the - name in the hash table during the first phase--the hash table does - not even exist at that point, much less have the right value. - - * Makefile.in (CC): Define. - (CXX): Move definition, change from g++ to gcc. - (EXPECT, RUNTEST): Copy definitions from top level Makefile.in. - (RUNTEST_CC, RUNTEST_CFLAGS): Remove. - (RUNTEST_CXX, RUNTEST_CXXFLAGS): Remove. - (CC_FOR_TARGET, CXX_FOR_TARGET): Copy from top level Makefile.in. - (.cc.o): Comment out. - (testdir): Remove. - (site.exp): Don't create testdir or set tmpdir. - (check): Run checks even if not running native. Use CC_FOR_TARGET - instead of RUNTEST_CC, and likewise for CXX. - (cdtest targets): Comment out. - * config/solaris2.mh (HOSTING_LIBS): Only mention crtend.o once. - * cdtest-bar.cc, cdtest-foo.cc, cdtest-foo.h: Remove. - * cdtest-main.cc, cdtest.exp: Remove. - -Mon Sep 26 11:40:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * emulparams/elf32bmip.sh: Rename from elf32mipb.sh to avoid DOS - file naming problems. - * emulparams/elf32lmip.sh: Rename from elf32mipl.sh. - * Makefile.in (ALL_EMULATIONS): Rename eelf32mipb.o to - eelf32bmip.o and eelf32mipl.o to eelf32lmip.o. - (eelf32bmip.c): Rename from eelf32mipb.c. Use elf32bmip.sh. - (eelf32lmip.c): Rename from eelf32mipl.c. Use elf32lmip.sh. - * config/mipsb-elf32.mt (EMUL): Use elf32bmip, not elf32mipb. - * config/mipsl-elf32.mt (EMUL): Use elf32lmip, not elf32mipl. - - * genscripts.sh: Always search /usr/local/TARGET/lib. - - * scripttempl/elf.sc: If -N is set, force DATA_ADDR to be ".". - -Fri Sep 23 15:05:49 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * configure.in: Handle i386-bsdi* targets like i386-bsd. - -Fri Sep 23 00:06:59 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * lexsup.c (parse_args): Add support for -a for HP/UX - compatibility. - - * lexsup.c (parse_args): -c takes an argument. - -Tue Sep 20 14:35:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ld.h (args_type): Add new field endian. - * lexsup.c (parse_args): Handle -EB and -EL by setting - command_line.endian. - * ldgram.y (ifile_p1): Accept OUTPUT_FORMAT with three arguments. - * ldlang.c (lang_add_output_format): Add arguments big and little. - If command_line.endian is set, use it to select big or little - rather than the default. Changed all callers. - * ldlang.h (lang_add_output_format): Update declaration. - * emulparams/elf32mipb.sh: Define BIG_OUTPUT_FORMAT and - LITTLE_OUTPUT_FORMAT. - * emulparams/elf32mipl.sh: Likewise. - * emulparams/mipsbig.sh: Likewise. - * emulparams/mipsbsd.sh: Likewise. - * emulparams/mipsidt.sh: Likewise. - * emulparams/mipsidtl.sh: Likewise. - * emulparams/mipslit.sh: Likewise. - * scripttempl/elf.sc: Define BIG_OUTPUT_FORMAT and - LITTLE_OUTPUT_FORMAT if not already defined. Pass them to - OUTPUT_FORMAT. - * scripttempl/mips.sc: Pass BIG_OUTPUT_FORMAT and - LITTLE_OUTPUT_FORMAT to OUTPUT_FORMAT. - * scripttempl/mipsbsd.sc: Likewise. - - * Makefile.in (ldgram.h): Make separate target from ldgram.c, - depending upon ldgram.c, so that a parallel make does not try to - build both at once. - - * configure.in (mips*el-elf*): New target. - * Makefile.in (ALL_EMULATIONS): Add eelf32mipb.o and eelf32mipl.o. - (eelf32mipl.c): New target. - - * config/mipsl-elf32.mt: New file. - * emulparams/elf32mipl.sh: New file. - -Fri Sep 16 12:16:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldmain.c (main): Rather than prohibiting ld -r -s, treat it as - ld -r -S -x. - -Thu Sep 15 13:05:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldmisc.c (vfinfo): Print BFD file name as well as file name - returned by find_nearest_line, in case the file name is something - unhelpful such as a .h file. Handle %u. - -Wed Sep 14 12:49:12 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ldlang.c (lang_do_assignments): Make sure output statement - has an attached bfd_section before trying to dereference it. - -Wed Sep 14 12:48:09 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ld.h (ld_config_type): Add new field warn_once. - * ldmain.c (undefined_symbol): Handle -warn-once. - * lexsup.c (parse_args): Recognize -warn-once. - * ld.texinfo (Options): Document -warn-once. - * ld.1: Likewise. - - * ldmisc.c (vfinfo): Handle %D as %C, but never print the function - name. For %C, print the function name on a separate line, to keep - the length of error messages under control. - * ldmain.c (multiple_definition): Use %D for ``first defined - here.'' - (undefined_symbol): Use %D for ``more undefined references - follow''. - - * ldmisc.c (multiple_warn): Remove; no longer used. - * ldmisc.h (multiple_warn): Don't declare. - -Tue Sep 13 20:47:58 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ldlang.c (print_output_section_statement): Print all lines - to the map file. - -Tue Sep 13 16:30:11 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldlang.c (load_symbols): Check for archive before object. Use - bfd_check_format_matches, and, if ambiguous, print a list of - matching formats. If file format is not recognized, treat file as - a linker script. - * ldgram.y (yyerror): If assuming an object file is a script, - mention that. Tweak the format of the error messages. - * ldlex.l (lex_warn_invalid): If assuming an object is a script, - guess that this is not actually a script, and just report that the - file format was not recognized. - * ld.texinfo (Options): Admit that -( may be used more than once. - Add note that unrecognized object files are now treated as linker - scripts. - - * ldfile.c (ldfile_input_filename): Make const. - (ldfile_assumed_script): New variable. - (try_open): Change arguments types to const. - (ldfile_find_command_file): Likewise. - (ldfile_open_command_file): Likewise. Also, set lineno to 1. - * ldfile.h: Update declarations for ldfile.c changes. - * ldlex.l: Include <ctype.h>. - (file_name_stack): Change to be const char *. - (lineno_stack): New static variable. - (<<EOF>>): Set lineno as well as ldfile_input_filename. - (lex_push_file): Make name argument const. Initialize - lineno_stack entry. - (lex_redirect): Initialize lineno_stack entry. - (lex_warn_invalid): Handle non printable characters nicely. - * ldlex.h (lex_push_file): Declare second argument as const. - - * ldgram.y (ifile_p1): Recognize GROUP. - * ldlex.l: Recognize GROUP. - * ld.texinfo (Option Commands): Document GROUP. - -Mon Sep 12 17:04:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * config/m68klynx.mh: New file. - -Mon Sep 12 01:50:03 1994 Jeff Law (law@snake.cs.utah.edu) - - * emultempl/hppaelf.em: Add newlines to the error messages. - -Sat Sep 10 16:05:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * config/i386lynx.mh: New file. - * scripttempl/i386lynx.sc: Don't put .ctors and .dtors in .text - unless CONSTRUCTING. - -Thu Sep 8 13:25:24 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * emulparams/elf32mipb.sh (TEMPLATE_NAME): Define as elf32. - (GENERATE_SHLIB_SCRIPT): Define as yes. - (DYNAMIC_LINK): Define as false. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): - Initialize config.dynamic_link to DYNAMIC_LINK if it is defined. - (gld${EMULATION_NAME}_place_orphan): Reset stat_ptr at end. - * Makefile.in (eelf32mipb.c): Depend upon elf32.em rather than - generic.em. - -Thu Sep 8 16:30:37 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * scripttempl/h8500b.sc: Put rdata stuff into own segment. - -Thu Sep 8 13:25:24 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Don't define; - .got section is now explicitly handled in elf.sc. - -Wed Sep 7 13:08:34 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * scripttempl/alpha.sc: Redo script to set . outside of sections - and not bother to explicitly specify section addresses. - Explicitly place .sdata section. - -Tue Sep 6 23:51:45 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/m68kcoff.sc: Put .bss in data segment. - - * scripttempl/h8300.sc: Change .stab and .stabstr to use a VMA of - 0, and to only be marked as NOLOAD if relocating. - * scripttempl/h8500.sc, scripttempl/h8500b.sc: Likewise. - * scripttempl/h8500c.sc, scripttempl/h8500m.sc: Likewise. - * scripttempl/h8500s.sc, scripttempl/i386coff.sc: Likewise. - * scripttempl/i386go32.sc, scripttempl/i386lynx.sc: Likewise. - * scripttempl/m68kcoff.sc, scripttempl/m68klynx.sc: Likewise. - * scripttempl/sh.sc, scripttempl/sparccoff.sc: Likewise. - * scripttempl/sparclynx.sc: Likewise. - -Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org) - - * Makefile.in, configure.in: Add support (disabled) the ARM/RISCiX. - * config/riscix.mt, emulparams/riscix.sh, scripttempl/riscix.sc: - New files. - -Tue Aug 30 11:48:08 1994 Eric Youngdale (ericy@cais.cais.com) - - * ld.h (args_type): Add field soname. - * lexsup.c (parse_args): Handle -soname argument. - * emultempl/elf32.em: In call to bfd_elf32_size_dynamic_sections, - pass soname. - * ld.texinfo: Document -soname. - -Mon Aug 29 15:21:50 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldlang.c (lang_check): Don't try to set the architecture if the - input and output files are incompatible. Just warn. - -Wed Aug 24 12:52:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * configure.in: Change i[34]86 to i[345]86. - -Sun Aug 21 16:17:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * emulparams/hp3hpux.sh: Define __DYNAMIC to be 0. - -Thu Aug 18 15:37:45 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - Make the ELF linker handle orphaned sections reasonably. Also, - define __start_SECNAME and __stop_SECNAME around sections whose - names can be represented in C, for the benefit of symbol sets in - glibc. - * ldemul.h (ldemul_place_orphan): Declare. - (ld_emulation_xfer_type): Add place_orphan field. - * ldemul.c (ldemul_place_orphan): New function. - * ldlang.h (wild_doit): Declare. - * ldlang.c (wild_doit): Make nonstatic. - (lang_place_orphans): Call ldemul_place_orphan. - * emultempl/elf32.em: Include <ctype.h> and "ldgram.h". - (hold_section, hold_use, hold_text, hold_data, hold_bss): New - static variables. - (gld${EMULATION_NAME}_place_orphan): New static function. - (gld${EMULATION_NAME}_place_section): New static function. - (ld_${EMULATION_NAME}_emulation): Initialize place_orphan field. - -Tue Aug 16 00:17:20 1994 Eric Youngdale (ericy@cais.cais.com) - - * scripttempl/aout.sc: Add .linux-dynamic after .data. - -Tue Aug 16 00:08:22 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * lexsup.c (parse_args) Treat --dll-verbose as --version, for - Linux compatibility. From hjl@nynexst.com (H.J. Lu). - -Mon Aug 15 17:17:33 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldexp.h (exp_get_abs_int): Declare. - -Sat Aug 6 01:45:39 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ldlang.c (lang_do_assignments): Handle complex AT's better. - * ldexp.c (exp_get_abs_int): New function. - -Fri Aug 5 20:55:55 1994 Jason Molenda (crash@phydeaux.cygnus.com) - - * configure.in: add i960-nindy-coff support. - -Thu Aug 4 14:45:50 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldlex.l (yy_create_string_buffer): Handle change to internal - interface in flex 2.4.7. - -Tue Aug 2 11:52:06 1994 Eric Youngdale (ericy@cais.cais.com) - - * emultempl/linux.em (gld${EMULATION_NAME}_find_address_statement): - New function; add 0x20 to any use of -Ttext. - (gld${EMULATION_NAME}_create_output_section_statements): New - function. - (ld_${EMULATION_NAME}_emulation): Use the new function - gld${EMULATION_NAME}_create_output_section_statements. - -Mon Aug 1 15:50:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * scripttempl/mips.sc: Redo script to set . outside of sections - and not bother to explicitly specify section addresses. - -Tue Jul 26 11:02:35 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * scripttempl/elf.sc: Copy several more relocation sections into - the output. Put .got.plt sections into .got. - -Fri Jul 22 12:15:36 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * scripttempl/elf.sc: Use PROVIDE to define etext, edata, and end. - - Add a new script operator, PROVIDE, to define a symbol only if it - is needed. - * ldgram.y (PROVIDE): New token. - (assignment): Accept PROVIDE. - * ldlex.l (PROVIDE): New token. - * ldexp.h (node_type): Add etree_provide to node_class enum. - (exp_provide): Declare. - * ldexp.c (exp_fold_tree): Handle etree_provide. - (exp_provide): New function. - (exp_print_tree): Handle etree_provide. - * ld.texinfo: Document PROVIDE. - - * ldlang.c (lang_common): Pass desired alignment to - lang_one_common as power of two. - (lang_one_common): Get common symbol alignment from linker hash - table entry. Treat desired alignment as a power of two. - - * ldlang.c (wild_section): Attach all section with the given name, - not just the first one. If there is no name, attach all sections - even if the SEC_IS_COMMON flag is set. - -Wed Jul 20 15:49:27 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ld.h (args_type): Add field rpath. - * lexsup.c (S_ISDIR): Define if not already defined. - (parse_args): Add support for -rpath. If -R is used to name a - directory, treat it as -rpath for Solaris compatibility. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): - Pass command_line.rpath to bfd_elf32_size_dynamic_sections. - * ldmain.c (main): Initialize command_line.rpath to NULL. - * ld.texinfo: Document -rpath option. - -Sun Jul 10 00:33:24 1994 Ian Dall (dall@hfrd.dsto.gov.au) - - * emulparams/pc532machaout.sh: New file. Pc532 mach script - parameters. - - * emulparams/netbsd532.sh: New file. Netbsd 532 script parameters. - - * config/pc532mach.mt: New file. Pc532 mach target support. - - * config/pc532mach.mh: New file. Pc532 mach host support. - - * config/netbsd532.mt: New file. Netbsd 532 target support. - - * configure.in: Add ns32k-pc532-mach and ns32k-pc532-netbsd support. - - * Makefile.in: Add epcmachaout.c dependency and enetbsd532.c - dependency. - -Fri Jul 8 10:57:02 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Use - bfd_abs_section_ptr, not &bfd_abs_section. - - * lexsup.c (parse_args): Changed "retain-symbols-file" from - no_argument to required_argument. From djm. - -Thu Jul 7 12:29:53 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * scripttempl/elf.sc: Explicitly mention .stab and .stabstr - sections to force a VMA of 0; needed for ELF backends which have - not been converted to the new linker style. - -Mon Jul 4 19:35:45 1994 Jeff Law (law@snake.cs.utah.edu) - - * scripttempl/hppaelf.sc (__stack_zero): Don't define this name, - it was for the HPUX dynamic loader's use and it creates problems - with ELF GDB. - -Fri Jul 1 12:53:47 1994 Jeff Law (law@snake.cs.utah.edu) - - * ldlang.c (lang_do_assignments): No longer static. Delete decl. - * ldlang.h (lang_do_assignments): Put external decl here. - * emultempl/hppaelf.em: Minor cleanups throughout file. - (hppa_elf_create_output_section_statements): Rewrite. - (hppaelf_finish): Rewrite. - -Wed Jun 29 16:50:00 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * config/solaris2.mh (NATIVE_LIB_DIRS): Define as /usr/ccs/lib. - - * lexsup.c (parse_args): Accept -Bstatic and -Bdynamic. Do not - accept plain -B. - * ld.texinfo: -Bstatic is not ignored. - -Tue Jun 28 12:13:34 1994 Stan Shebs (shebs@andros.cygnus.com) - - * ldlex.l: Recognize \r the same as \n. - -Thu Jun 23 17:53:04 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - Preliminary support for generating shared libraries, from Eric - Youngdale <ericy@cais.cais.com>. - * genscripts.sh: If the emulation parameter file sets - GENERATE_SHLIB_SCRIPT, generate a .xs script file with - CREATE_SHLIB defined. - * emultempl/elf32.em (gld${EMULATION_NAME}_get_script): If - link_info.shared is set, use the .xs script file. - * scripttempl/elf.sc: If CREATE_SHLIB is set, don't create a - .interp section, and don't include TEXT_START_ADDR in the starting - address of the first section. - * emulparams/elf_i386.sh (GENERATE_SHLIB_SCRIPT): Likewise. - * emulparams/elf32_sparc.sh (GENERATE_SHLIB_SCRIPT): Define. - -Thu Jun 23 12:52:22 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * configure.in: Change --with-targets to --enable-targets. - -Wed Jun 22 13:42:14 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * lexsup.c (parse_args): Add support for new options -( -) with - synonyms --start-group --end-group. - * ldlang.h (enum statement_enum): Add lang_group_statement_enum. - (lang_group_statement_type): Define new struct. - (lang_statement_union_type): Add group_statement field. - (lang_enter_group, lang_leave_group): Declare. - * ldlang.c (lang_for_each_statement_worker): Handle - lang_group_statement_enum. - (map_input_to_output_sections, print_statement): Likewise. - (lang_size_sections, lang_do_assignments): Likewise. - (open_input_bfds): Completely rewrite. Now does its own looping, - rather than using lang_for_each_statement. Handle groups. - (lang_process): Update call to open_input_bfds. - (print_group): New static function. - (lang_enter_group, lang_leave_group): New static functions. - * ldfile.c (ldfile_open_file): If the file has already been - opened, just return rather than taking an assertion failure. - * ldver.c (help): Mention new options. - * ld.texinfo: Document new options. - - * ldlang.c (end_of_data_section_statement_list): Don't define. - (lang_leave_output_section_statement): Don't set obsolete variable - end_of_data_section_statement_list. - - * scripttempl/go32coff.sc: Don't put ${DATA_ALIGNMENT} inside an - ALIGN. - - * ldlang.c (lang_size_sections): Adjust current region address - even for sections with an explicit address. From - ralphc@pyramid.com (Ralph Campbell). - - * emulparams/i386linux.sh (NONPAGED_TEXT_START_ADDR): Set to 0. - From jrs@world.std.com (Rick Sladkey). - - * scripttempl/mipsbsd.sc: Let sections align to their natural - boundaries. - -Tue Jun 21 11:27:04 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ldlang.c (lang_init): Use new bfd_abs_section_ptr, not - &bfd_abs_section. - (lang_abs_symbol_at_beginning_of): Likewise. - (lang_abs_symbol_at_end_of): Likewise. - (lang_size_sections): Use bfd_is_abs_section to check for the - absolute section. Don't try to set the VMA or output_offset or - size of the absolute section. - * ldmain.c (notice_ysym): Use bfd_is_und_section to check for the - undefined section. - -Thu Jun 16 22:48:41 1994 Jeff Law (law@snake.cs.utah.edu) - - * scripttempl/hppaelf.sc: Place .data and .bss at 0x40000000 - when generating relocatable objects. - -Thu Jun 16 14:25:22 1994 Eric Youngdale (ericy@cais.cais.com) - - * emultempl/linux.em: New file providing support for linking - against Linux shared libraries. - * config/i386-linux.mt (ei386linux.c): Depend upon linux.em. - * emulparams/i386linux.sh (TEMPLATE_NAME): Define as linux. - -Thu Jun 16 12:22:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * lexsup.c (parse_args): Add -shared to longopts, and handle it. - * ldmain.c (main): Initialize link_info.shared to false. Give - error if link_info.relocateable and link_info.shared are both set. - - * configure.in: If EMUL_EXTRA* is defined in a config file, treat - it as naming an emulation to be added to EMULATION_OFILES. - * config/i386-linux.mt (EMUL_EXTRA1): Define as elf_i386. - - * Makefile.in: Rebuilt dependencies. - (ALL_EMULATIONS): Add ei386linux.o, eelf32_sparc.o, - eelf64_sparc.o. Remove $(OTHER_EMULATIONS). - (ei386linux.c, eelf32_sparc.c, eelf64_sparc.c): New targets. - * config/i386-linux.mt (OTHER_EMULATIONS): Don't define. - (ei386linux.c): Remove; now in Makefile.in. - * config/i386-lynx.mt (OTHER_EMULATIONS): Don't define. - * config/m68k-lynx.mt (OTHER_EMULATIONS): Don't define. - * config/sparc-lynx.mt (OTHER_EMULATIONS): Don't define. - * config/sparc64-elf.mt (OTHER_EMULATIONS): Don't define. - (eelf64_sparc.c): Remove; now in Makefile.in. - * config/sun4sol2.mt (OTHER_EMULATIONS): Don't define. - (eelf32_sparc.c): Remove; now in Makefile.in. - - * ldexp.c (exp_print_tree): Don't crash if etree_rel section has - no owner--it might be bfd_abs_section. From Eric Youngdale - <ericy@cais.cais.com>. - - * scripttempl/aout.sc: Let sections align to their natural - boundaries. - -Wed Jun 15 01:54:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldemul.h (ldemul_open_dynamic_archive): Declare. - (ld_emulation_xfer_type): Add new field open_dynamic_archive. - * ldemul.c: Include ldexp.h and ldlang.h. - (ldemul_open_dynamic_archive): New function. - * ldfile.h (ldfile_open_file_search): Declare. - * ldfile.c: Include ldemul.h. - (try_open_bfd): Rename from cache_bfd_openr. Return boolean - argument, not bfd *. Change all callers. - (ldfile_open_file_search): Rename from open_a. Return boolean - argument, not bfd *. Clean up. Change all callers. - (ldfile_open_file): If doing a dynamic link, call - ldemul_open_dynamic_archive rather than assuming the extension of - a dynamic object is ".so". - * emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive): - New function. - (ld_${EMULATION_NAME}_emulation): Initialize open_dynamic_archive - field. - * emultempl/sunos.em (ld_${EMULATION_NAME}_emulation): Likewise. - - * ldmain.c (get_emulation): Ignore -m486 for Linux compatibility. - * lexsup.c (parse_args): Ignore -qmagic for Linux compatibility. - Accept -static as a synonym for -non_shared. - - Let the user change the dynamic linker used by ELF code. - * ld.h (args_type): Add new field interpreter. - * lexsup.c (parse_args): Add dynamic-linker to longopts, and - handle it. - * ldmain.c (main): Initialize command_line.interpreter to NULL. - * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Get - the ELF backend to return the .interp section. If - command_line.interpreter is not NULL, set the contents of .interp - to it. - * ld.texinfo: Mention -dynamic-linker. - - * config/sun4sol2.mt (eelf32_sparc.c): Depend upon elf32.em, not - generic.em. - - * lexsup.c (parse_args): Sort out the option macros and change the - definitions to make it easier to add a new option. - - * scripttempl/aout.sc: Define __etext and __edata to go along with - _etext and _edata. - - * ld.h (ld_config_type): Add new field traditional_format. - * lexsup.c (parse_args): Add traditional-format to longopts, and - handle it. - * ldmain.c (main): Initialize config.traditional_format to false. - * ldlang.c (ldlang_open_output): Set BFD_TRADITIONAL_FORMAT in BFD - flags of output_bfd according to config.traditional_format. - * ldver.c (help): Mention -traditional-format. - * ld.texinfo: Document -traditional-format. - -Tue Jun 14 23:10:07 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldctor.c (ldctor_add_entry): Add entries to a set in the order - they are encountered. - -Tue Jun 14 18:05:09 1994 Eric Youngdale (ericy@cais.cais.com) - - * emulparams/i386linux.sh (TEXT_START_ADDR): Define as 0x1000. - (NONPAGED_TEXT_START_ADDR): Define as 0x20. - -Mon Jun 13 15:46:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/alpha.sc: Define _ftext, _etext and _fdata insted of - _FTEXT, _ETEXT and _FDATA. Dont define _END. - - * ldfile.c (open_a): If this is not an archive, try to open it in - the current directory before searching for it. - - * lexsup.c (parse_args): Treat -i as a synonym for -r. - - * ldgram.y (exp): Treat BLOCK as a synonym for ALIGN, so that - BLOCK works in a section address as documented. - - * ldgram.y (YYDEBUG): Don't define. - -Fri Jun 10 16:45:39 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * emultempl/gld960.em: Pass false for new argument to - ldfile_add_library_path. - * emultempl/gld960c.em, emultempl/lnk960.em: Likewise. - - * emultempl/sunos.em: Only look for .so files if doing a dynamic - link. - -Thu Jun 9 08:35:17 1994 Ian Lance Taylor (ian@cygnus.com) - - * scripttempl/i960.sc: Add CONSTRUCTORS to .data. - -Thu Jun 9 06:52:29 1994 Bill Cox (bill@rtl.cygnus.com) - - * Makefile.in (check): Delete ld.new dependency so that a regression - test doesn't trigger a rebuild of the linker. - -Thu Jun 9 00:17:20 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (map_input_to_output_sections): For lang_address, call - init_os if it hasn't already been called. - -Thu Jun 2 17:24:08 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Add support for SunOS shared libraries. - * aout.sc: Don't define __DYNAMIC here. Add new sections used by - shared library support code. - * emultempl/sunos.em: New file. - * emulparams/sun4.sh (TEMPLATE_NAME): Define as sunos. - * emulparams/sun3.sh (TEMPLATE_NAME): Likewise. - * Makefile.in (esun4.c): Depend upon sunos.em, not generic.em. - (esun3.c): Likewise. - - * ldlang.c: Minor formatting cleanups. - (lang_for_each_input_file): New function. - * ldlang.h (lang_for_each_input_file): Declare. - - * ldfile.h (search_dirs_type): Move from ldfile.c, and add cmdline - field. - (search_head): Declare. - (ldfile_add_library_path): Add new cmdline argument in prototype. - * ldfile.c (search_head): Make non-static. - (search_dirs_type): Move to ldfile.h. - (ldfile_add_library_path): Accept cmdline argument, and save it. - * lexsup.c (parse_args): Pass true for new cmdline argument of - ldfile_add_library_path. - (set_default_dirlist): Likewise. - * ldmain.c (check_for_scripts_dir): Pass false for new cmdline - argument of ldfile_add_library_path. - * ldgram.y (ifile_p1): Likewise. - -Wed Jun 1 14:24:08 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.h (lang_input_statement_type): Remove fields subfiles, - total_size, superfile and chain. - * ldfile.c (open_a): Don't clear search_dirs_flag. - (ldfile_open_file): Don't try to open superfile. Assert that file - has not already been opened. - * ldlang.c (new_afile): Don't initialize superfile. - * ldmain.c (add_archive_element): Don't initialize subfiles or - chain or superfile. Initialize search_dirs_flag to false. - -Fri May 27 12:25:33 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * ldver.c (ldversion): Changed version to "cygnus-2.4.1". - - Changes from binutils-2.4 release: - - * genscripts.sh (RELOCATING, CONSTRUCTING): When setting - variables, use whitespace, so scripts don't break. - - * config/alphaosf.mh (HDEFINES, CFLAGS): Deleted. - - * emultempl/generic.em: Find emultempl/stringify.sed in ${srcdir}. - - * cdtest-bar.cc: Renamed from cdtest-func.cc. - * Makefile.in: Noted change. - - * scripttempl/a29k.sc: Don't include /lab3/u3/..../segments.o; I - don't know where that's supposed to come from, or why it's - necessary. - - Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com) - - * configure.bat: update to latest makefile.in - * emulpara/go32.sh: set to coff-go32 not aout - * emultemp/generic.em: strength-reduce the structure of - this shell script, since the only available shell for - DOS can't handle complex syntax. - * emultemp/stringify.sed: for "sed -f" instead of inline. - * makefile.in: depend on stringify.sed as well as genscripts.sh - * scripttemp/go32coff.sc: correct for djgpp 1.11's COFF format - * genscripts.sh: empty variables aren't always considered "set", - so set them to "y" instead. - -Fri May 27 01:08:14 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (entry_symbol): Make static. - (lang_add_entry): Add cmdline argument. - * ldlang.h (lang_add_entry): Change prototype. - * ldgram.y (statement_anywhere): Change lang_add_entry call. - * lexsup.c (parse_args): Likewise. - -Tue May 24 16:13:43 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * emulparams/elf32mipb.sh (OTHER_READONLY_SECTIONS): Don't give - .reginfo an address. - (OTHER_READWRITE_SECTIONS): Don't give .lit4 or .lit8 an address. - (OTHER_SECTIONS): Define for .gptab.sdata and .gptab.sbss. - * scripttempl/elf.sc: Use OTHER_SECTIONS at end of script. - -Thu May 19 13:31:33 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Add support for ELF shared libraries. - * ld.h (ld_config_type): Add field dynamic_link. - * ldmain.c (main): Initialize config.dynamic_link to false. Warn - on attempts to use -r with -relax, -call_shared or -s. - * lexsup.c (longopts): Separate OPTION_CALL_SHARED from - OPTION_NON_SHARED. Add OPTION_IGNORE. Adjust macro values - accordingly. Add "dy" and "non_shared" options. Change "Qy" to - OPTION_IGNORE for now. Handle OPTION_CALL_SHARED and - OPTION_NON_SHARED by setting dynamic_link field accordingly. - Handle OPTION_IGNORE by ignoring it. Clear dynamic_link field for - -r and -Ur. - * ldfile.c (ldfile_open_file): If config.dynamic_link is true, try - opening a file with a .so extension first. - * emultempl/elf32.em: New file. - * emulparams/elf32_sparc.sh (TEXT_START_ADDR): Change to 0x10000. - (NONPAGED_TEXT_START_ADDR): Likewise. - (TEMPLATE_NAME): Define as elf32. - (DATA_PLT): Define. - * emulparams/elf_i386.sh (TEMPLATE_NAME): Define as elf32. - * scripttempl/elf.sc: Add placement for new dynamic sections. - Don't use CREATE_OBJECT_SYMBOLS. Define _etext, _edata and _end - outside of any section. Don't use ALIGN(8); just let one section - VMA follow another. Put .dynbss in .bss. Don't mention debugging - sections; they'll be handled correctly anyhow. - * Makefile.in (eelf_i386.c): Depend upon elf32.em, not generic.em. - -Wed May 18 10:15:39 1994 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (install): Redirect output of ln to /dev/null. - -Mon May 16 13:35:08 1994 Jeff Law (law@snake.cs.utah.edu) - - * emultempl/hppaelf.em: Change all references of - .hppa_linker_stubs to .PARISC.stubs. - * scripttempl/hppaelf.sc: Likewise. - -Fri May 13 13:00:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (print_output_section_statement): Change ``no attached - output section'' message slightly. - (lang_do_assignments): Don't recurse down if there is no real - section. - - * config/i386-linux.mt (OTHER_EMULATIONS): Change em_ to e to - match corresponding change in emulation templates. - * config/i386-lynx.mt, config/m68k-lynx.mt: Likewise. - * config/sparc-lynx.mt, config/sun4sol2.mt: Likewise. - -Wed May 11 18:16:46 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * ldver.c (ldversion): Updated version number. - - * cdtest-foo.cc: Use explicit "#pragma implementation". - * cdtest-bar.cc: Renamed from cdtest-func.cc. - * Makefile.in: References to cdtest-func.o changed to - cdtest-bar.o. - -Wed May 11 16:24:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Don't create unnecessary output sections. - * ldlang.c (out_bfd_get_section_by_name): Remove. - (wild_section): Call bfd_get_section_by_name rather than - our_bfd_get_section_by_name. Don't call wild_doit if there is no - section. - (lang_create_output_section_statements): Remove. - (map_input_to_output_sections): For several cases, call init_os if - it has not already been called. - (lang_size_sections): If output section was not created, skip it. - (lang_process): Don't call lan_create_output_section_statements. - (lang_place_orphans): Skip files with just_syms_flags set to true. - * ld.texinfo: Document change. - -Tue May 10 14:31:16 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (wild_doit): Don't bother initializing the vma and - section size. Don't special case SEC_SHARED_LIBRARY. - (lang_size_sections): Handle SEC_COFF_SHARED_LIBRARY sections - specially. - -Fri May 6 12:24:27 1994 Steve Chamberlain (sac@cygnus.com) - - * config/go32.mh : New file for Xgo32X. - -Fri May 6 15:15:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldfile.c (ldfile_open_command_file): Set bfd_error_system_call - before calling einfo, since we are reporting an fopen failure. - From jrs@world.std.com (Rick Sladkey). - - * configure.in: Use "e" rather than "em_" as prefix for - emulations. - -Fri May 6 01:08:14 1994 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * emultempl/generic.em: Use "e" rather than "em_" as prefix for - filename. - * emultempl/gld960.em, emultempl/gld960c.em, emultempl/lnk960.em, - emultempl/hppaelf.em, emultempl/m88kbcs.em, emultempl/vanilla.em: - Ditto. - * Makefile.in: Changed all generated file names. - (ldemul-list.h): Depend on Makefile, not config.status. Changed - sed patterns to handle new filenames. - - * config/mipsl-idt.mt: Renamed from mips-idtl.mt. - * configure.in: Adjusted. - -Thu May 5 15:07:32 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * Makefile.in (install-info): Don't use "$<*", it doesn't always - work. Instead, check build dir and $srcdir explicitly, and use - `echo' to get all the filenames. - - * configure.in (h8300h-*-hms): Changed ld_target name to - cf-h8300h. - * config/cf-h8300h.mt: Renamed from coff-h8300h.mt, to make it - unique in 8.3. - - * config/i960coff.mt: New file. - * emulparams/gld960coff.sh: New file. - * emultempl/gld960c.em: New file. - * configure.in (i960-*-vxworks5* except -vxworks5.0*): Use - i960coff configuration. - * Makefile.in (em_gld960coff.c): Added dependencies, build rule. - - * Makefile.in (ALL_EMULATIONS): Remove em_delta68.o, since the - code isn't included in FSF releases, and it can still be - explicitly selected. - (distclean): Remove site.bak and tmpdir. - (STAGESTUFF): Removed $(GENERATED_CFILES) $(GENERATED_HFILES). - (mostlyclean): Delete them explicitly here. Also remove tmpdir. - - Patches from Ralph Campbell: - * config/mipsbsd.mh: New file. - * Makefile.in (em_mipsbsd.c): Use mipsbsd.sc, not aout.sc. - * scripttempl/mipsbsd.sc: Don't define __DYNAMIC. - * emulparams/mipsbsd.sh (OUTPUT_FORMAT): Fix name to have `a.out' - instead of `aout'. - - * configure.in (i386-*-gnu*): Treat like i386-*-mach*. - -Wed May 4 11:59:40 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * config/m68k.mt (EMUL): Set to m68kaout. - * emulparams/m68kaout.sh: New file. - * Makefile.in (ALL_EMULATIONS): Add em_m68kaout.o. - (em_m68kaout.c): New target. - - * ldlang.c (lang_size_sections): If dot moves because of an - assignment, don't try to insert a pad into the absolute output - section, just change the address of the default memory region - instead. - - * Makefile.in (mostlyclean): Remove cdtest.tmp, cdtest-ur, - cdtest-ur.out, and cdtest-ur.tmp. - -Wed Apr 27 16:03:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/sa29200.sc: Align all sections to four byte - boundaries. - -Wed Apr 27 10:48:03 1994 Steve Chamberlain (sac@cygnus.com) - - * Makefile.in, configure.in: Support for go32 coff. - * config/i386-go32.mt: New file - * emulparams/i386go32.sh: New file - * scripttempl/i386go32.sc: New file - -Tue Apr 26 17:20:03 1994 Stan Shebs (shebs@andros.cygnus.com) - - * Makefile.in (em_m68klynx.c, em_i386lynx.c, em_sparclynx.c): Use - Lynx-specific script templates. - * configure.in (sparclite*-*-coff): Use coff-sparc. - * emulparams/i386lynx.sh (SCRIPT_NAME): Set to i386lynx. - * emulparams/sparclynx.sh (SCRIPT_NAME): Set to sparclynx. - (ENTRY): Set to __main. - * scripttempl/i386lynx.sc: New file, script for I386 Lynx. - * scripttempl/m68klynx.sc: Add insertion of ctor/dtor sections. - * scripttempl/sparclynx.sc: New file, script for uSparc Lynx. - -Tue Apr 26 12:41:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/mips.sc: Force _gp and .lit8 to be aligned to a 16 - byte boundary, in case the global constructors do not take up an - even 16 bytes. - - * config/i386v4.mh (HOSTING_CRT0): If ../gcc/crtbegin.o does not - exist, get crtbegin based on gcc -print-libgcc-file-name. - (HOSTING_LIBS): Similar change for ../gcc/crtend.o. - -Mon Apr 25 15:27:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (lang_size_sections): When no address is given for a - section, align it according to its requirements. - -Thu Apr 21 17:24:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * Makefile.in (clean, distclean): Remove configdoc.texi. - -Tue Apr 19 12:12:15 1994 Bill Cox (bill@rtl.cygnus.com) - - * configure.in: Add i[34]86-*-bsd386 to the patterns recognized. - -Fri Apr 15 14:35:42 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (lang_size_sections): When relaxing, adjust the - position of a padding statement, and adjust dot accordingly. - -Mon Apr 11 17:37:09 1994 Bill Cox (bill@rtl.cygnus.com) - - * Makefile.in (EXPECT, RUNTEST): Set these for the check goal. - -Mon Apr 11 12:32:57 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/i386coff.sc: If relocating, don't put .init and - .fini sections into .text; keep them separate. - * config/i386sco.mh (HOSTING_CRT0): If ../gcc/crtbegin.o does not - exist, get crtbegin based on gcc -print-libgcc-file-name. - (HOSTING_LIBS): Similar change for ../gcc/crtend.o. - -Mon Apr 11 10:31:00 1994 Bill Cox (bill@rtl.cygnus.com) - - * Makefile.in (check): Set TCL_LIBRARY for runtest. - -Wed Apr 6 00:09:37 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * configure.in (hppa*-*-*elf*): Don't require "-hp-" for the - manufacturer. - - * emultempl/hppaelf.em (hppaelf_finish): Only resize sections - if building a final executable. - -Tue Apr 5 12:17:30 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (main): Check the return value of bfd_close. - -Thu Mar 31 18:07:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/alpha.sc: Clean up section alignment to ensure that - sections never overlap when using -r. - -Wed Mar 30 15:51:15 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmisc.c (vfinfo): Change symbol reading slightly for recent BFD - changes: get_symtab_upper_bound renamed and returns long, - bfd_canonicalize_symtab returns long, check for error indications. - -Fri Mar 25 17:20:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (print_input_section): For section size, use - _cooked_size if it is non-zero, size otherwise. - (size_input_section): Likewise. - (lang_do_assignments): Likewise (case lang_input_section_enum). - -Thu Mar 24 15:20:47 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (new_afile): Add new argument add_to_list. Don't set - real to true for lang_input_file_is_marker_enum. Clear the_bfd. - (lang_add_input_file): Pass true to new_afile for add_to_list. - (lookup_name): Remove force_load argument. Changed all callers. - Pass false to new_afile for add_to_list. Split loading of symbols - out into separate function. - (load_symbols): New function split out of lookup_name. Don't load - the symbols if they are already loaded. - (open_input_bfds): For lang_input_statement_enum call load_symbols - rather than lookup_name. - (lang_process): Pass abs_output_section rather than NULL to - lang_size_sections. - (lang_startup): Set real field of first_file to true. - -Wed Mar 23 14:15:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (had_relax): Removed. - (relax_again): New static variable. - (lang_size_sections): Change call to bfd_relax_section to - correspond to BFD changes. Set relax_again appropriately. - (lang_process): Remove #if 0 code. When relaxing, keep calling - lang_do_assignments and lang_size_sections until relax_again - becomes false. - - * emultemp/gld960.em: Include libiberty.h - (gld960_before_parse): Pass NULL as final argument to concat. - -Tue Mar 22 13:08:28 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/aout.sc: Force _end and __end to be aligned to a - four byte boundary. - - * ldwrite.c (build_link_order): Handle lang_data_statement_enum by - building a bfd_data_link_order, rather than by setting the section - contents immediately. - -Mon Mar 21 18:28:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Changes to make -Ur work again. - * ldmain.c (add_to_set): Now takes reloc argument rather than - bitsize. Check config.build_constructors here. If an new hash - table entry is created, mark it as undefined. - (constructor_callback): No longer takes bitsize argument. Pass - BFD_RELOC_CTOR to ldctor_add_set_entry, but first make sure the - BFD backend supports it. - (reloc_overflow): Handle a NULL abfd argument. - (reloc_dangerous, unattached_reloc): Likewise. - * ldctor.c: Include ldmain.h. - (struct set_info): Change bitsize field to reloc. - (ldctor_add_set_entry): Now takes reloc argument rather than - bitsize. Don't bother to check config.build_constructors here. - (ldctor_build_sets): Get the size from the reloc howto. If - generating relocateable output, call lang_add_reloc rather than - lang_add_data. - * ldctor.h (ldctor_add_set_entry): Change declaration to use reloc - instead of bitsize. - * ldlang.h (statement_enum): Add lang_reloc_statement_enum. - (lang_reloc_statement_type): New structure. - (lang_statement_union_type): Add reloc_statement field. - (lang_add_reloc): Declare new function. - * ldlang.c (lang_for_each_statement_worker): Handle - lang_reloc_statement_enum. - (map_input_to_output_sections, print_statement): Likewise. - (lang_size_sections, lang_do_assignments): Likewise. - (print_reloc_statement): New function. - (lang_add_reloc): New function. - * ldwrite.c (build_link_order): Handle lang_reloc_statement_enum. - - * Makefile.in (cdtest.out, cdtest-ur.o): New targets. - (cdtest-ur, cdtest-ur.out): New targets. - (check-cdtest): Now also check that -Ur works correctly. - - * scripttemp/alpha.sc: Align all sections to 16 byte boundaries. - -Thu Mar 17 12:45:41 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (lang_process): Move lang_common call before - map_input_to_output_sections, to ensure that any alignment - constraints set by common symbols are copied over to the output - sections. - -Fri Mar 11 22:17:34 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * emulparams/elf32ppc.sh (TEMPLATE_NAME): Don't define. - (OTHER_READWRITE_SECTIONS): Rename .toc to .got. - * Makefile.in (em_elf32ppc.c): Depend upon generic.em, not ppc.em. - * emultempl/ppc.em: Remove ugly stub code; turns out not to be - needed for ELF. - -Tue Mar 8 04:22:27 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * config/i386bsd.mh: New file. - -Mon Mar 7 15:23:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * elf.sc: Permit TEXT_START_SYMBOLS and DATA_START_SYMBOLS to be - defined. - * emulparams/elf32mipb.s (TEXT_START_SYMBOLS): Define _ftext. - (DATA_START_SYMBOLS): Define _fdata. - -Mon Feb 28 10:59:14 1994 Stan Shebs (shebs@andros.cygnus.com) - - * ldlang.c (cat): Define using ANSI style if ALMOST_STDC defined. - -Sun Feb 27 16:29:38 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * emultempl/hppaelf.em (hppaelf_finish): Update comments. This - works again. Attach some output symbols to the stub file bfd. - - * emultempl/hppaelf.em: Include elf32-hppa.h. - (file_chain): Add decl. - (hppa_look_for_stubs_in_section): Delete decl. - (hppaelf_finish): Reenable code. Do not pass symbols - down to hppa_look_for_stubs_in_section. - -Sat Feb 26 10:58:25 1994 Ian Lance Taylor (ian@cygnus.com) - - * ldmain.c (write_map): Don't define. Removed all references. - Just use map_file or map_filename instead. - (add_archive_element): Use minfo to write map information, not - info_msg. - (constructor_callback): Use fprintf to write map information, not - info_msg. - * ldmain.h (write_map): Don't declare. - * ldgram.y (mri_script_command): Removed reference to write_map. - * ldlang.c (lang_one_common): Likewise. - * lexsup.c (parse_args): Likewise. - -Fri Feb 25 19:12:03 1994 Ian Lance Taylor (ian@cygnus.com) - - * scripttempl/elf.sc: Force all sections to be aligned. - - * ldgram.y (section): Reverse the order of memspec_opt and - fill_opt to avoid an ambiguity when both are used. - * ld.texinfo: Changed accordingly. - - * ldgram.y: Move include of ldlex.h back with other includes. - * ldlex.h (input_type): Don't initialize enum constants to - particular values. - * ldlex.l: Use a switch to return the right token based on - input_type, rather than knowing that input_type has a value based - on a token type. - - * ldgram.y (dirlist_ptr): Removed; not used. - * lexsup.c: Include ldver.h. - * Makefile.in: Rebuilt dependencies. - -Fri Feb 25 18:55:54 1994 Ted Lemon (mellon@pepper.ncd.com) - - * ldlang.c (lookup_name): don't call bfd_set_gp_size. - (ldlang_add_file): call it here instead. - -Fri Feb 25 18:13:46 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * ldgram.y: Include ldlex.h after %token decls, for byacc. - -Fri Feb 25 10:47:25 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * emultempl/hppaelf.em: First attempt to clean this file up. - Add comments in several functions as to their purpose and - how they function (or my current best guess). Clean up horrible - spacing and indention that never should have been accepted in the - first place. Add FIXMEs for issues which need to be resolved. - Disable linker-stub generation until it gets fixed. This allows - the linker to at least work on simple code for testing purposes. - - * ldlang.c (lang_size_sections): No longer static (PA ELF calls - it via hppaelf_finish). Prototype moved into ldlang.h. - (lang_process): Move problematic extra call to lang_size_sections - into the PA ELF specific code. - * emultempl/hppaelf.em (hppaelf_finish): Extra call to - lang_size_sections moved here. - -Thu Feb 24 16:47:33 1994 Ian Lance Taylor (ian@cygnus.com) - - * configure.in (powerpc-*-elf*): New target; use ppc-elf32. - * config/ppc-elf32.mt: New file. - * emulparams/elf32ppc.sh: New file. - * emultempl/ppc.em: New file. - * Makefile.in (ALL_EMULATIONS): Added em_elf32ppc.o. - (em_elf32ppc.c): New target; uses elf32ppc.sh, ppc.em and elf.sc. - (EMULATION_OFILES): Added dependencies on ldexp.h and ldlang.h. - -Thu Feb 24 12:27:07 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * lexsup.c (parse_args): Use symbolic numbers for long options. - Fix misunderstanding in -Y and -call_shared et al. - - Use getopt instead of lex and yacc to parse the command line. - - * ld.texinfo (Options): Document changes to option syntax. - * Makefile.in: Update dependencies. - * ldver.c (help): Tweak dashes in usage message. - * ldgram.y (%union): Remove unused members. - Remove %tokens for command line options; add ones for input types. - (command_line): Rules removed. - (file): Instead of command line, recognize an - input type indicator, then use the nonterminal for that type. - (defsym_expr): New nonterminal from code formerly in command_line. - * ldlex.h: Declare parser input type enum and variable. - Don't declare parse_line. - * ldlex.l: Remove unused variables. Make some used ones static - and comment them. - (COMMAND): Start state and its rules removed. - At start of yylex, return input state token if at start of input. - (lex_redirect): Don't need to set yyout. - (ldlex_command): Function removed. - * ldmain.c (main): Instead of calling parse_line, set up the - redirections and call yyparse directly. - * ldmisc.c (vfinfo): If there's no input filename, print nothing, not - "command line". - * lexsup.c: Remove #if 0'd code. - (parse_line): Function removed. - (parse_args): Rewrite to use getopt_long_only. - (set_default_dirlist): New function from code formerly in - ldgram.y:command_line. - (set_section_start): New function. - * emultempl/generic.em, emultempl/gld960.em, emultempl/hppaelf.em, - emultempl/lnk960.em, emultempl/m88kbcs.em: Don't enclose - compiled-in link scripts in "{" and "}", as the grammar no longer - wants them to be. - -Thu Feb 24 08:43:26 1994 Ken Raeburn (raeburn@rtl.cygnus.com) - - * Makefile.in (ld.dvi): Depend on configdoc.texi, but don't - require that it be in $(srcdir). - -Tue Feb 22 09:21:18 1994 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (lang_size_sections): Only align section to alignment - required by linker script, not to maximum alignment of input - sections. - - * ldlang.h (largest_section): Don't declare. - * ldlang.c (largest_section): Don't define. - (size_input_section): Don't set largest_section; not used. - -Mon Feb 21 15:15:29 1994 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (new_afile): Pass NULL as last argument to concat. - -Thu Feb 17 15:51:23 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c, ldmain.c: Include libiberty.h. - - * ldmisc.h (concat): Don't declare. - * ldmisc.c (concat): Don't define; just use the one in libiberty. - - * ld.h (as_output_section_statement): Removed; not used. - -Thu Feb 17 09:32:14 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldlang.c, ldmain.c, ldmisc.c: Use bfd_get_error and - bfd_set_error and new error names. - -Tue Feb 15 20:14:53 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * ldwrite.c (build_link_order): If the cooked size of the section - has been set, use it, for determining link_order size. - (ldwrite): In the error message displayed if bfd_final_link fails, - indicate that it was in fact the final link step that failed. - - * ldlang.c (lang_size_sections): Clear bfd_error before calling - bfd_relax_section, in case it returns false but doesn't flag an - error. If an error is returned, indicate which one it is in the - error message. - - * Makefile.in (install-info): Depend on ld.info, and use "$<*" so - it'll get picked up from $(srcdir) if appropriate. - -Tue Feb 15 16:32:04 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * scripttempl/aout.sc: Only pad .text if PAD_TEXT is set. - * emulparams/i386mach.sh (PAD_TEXT): Set PAD_TEXT. - -Fri Feb 11 17:02:49 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldlex.l (comment): Increment line number when newline is read. - -Fri Feb 11 17:36:20 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (lookup_name): Take new argument, force_load. If true, - reload the file even if it is already loaded. - (wild): Call lookup_name with force_load argument of 0. - (open_input_bfds): Call lookup_name with force_load argument of 1. - (print_symbol): Remove declaration of non-existent function. - (print_one_symbol): Return true rather than falling off end. - -Thu Feb 10 11:52:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (main): Use %ld when printing long values. - - * scripttempl/elf.sc: Move _edata after the .sdata section. - Permit OTHER_BSS_SYMBOLS to be defined. - * emulparams/elf32mipb.s (OTHER_BSS_SYMBOLS): Define _fbss. - -Mon Feb 7 16:31:15 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * Rename all "hppaosf" files to "hppaelf". - * Change all "osf" references to "elf" in hppaelf files. - * Makefile.in: Likewise. - * configure.in: Likewise. - -Sun Feb 6 20:31:56 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmain.c (main): Call xatexit, not atexit. - Call xmalloc_set_program_name. - - * ldlang.c (lang_size_sections): Check if bfd_relax_section set - bfd_errno. - -Sat Feb 5 03:54:34 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * emultempl/lnk960.em (append), emultempl/hppaosf.em - (hppaosf_finish): Call xmalloc, not ldmalloc. - * ldmain.c (preserve_output): Function removed. - (main): Do it here instead. - -Fri Feb 4 23:02:19 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * ldlang.h (LANG_FOR_EACH_{INPUT,OUTPUT}_SECTION): Delete (unused) - GNU C specific macros. - - * emultempl/hppaosf.em (hppaosf_finish): Expand the only remaining - call to LANG_FOR_EACH_INPUT_SECTION. - -Fri Feb 4 16:26:08 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmisc.c (ldmalloc, xmalloc, ldrealloc, xrealloc): Functions - deleted; will use libiberty versions instead. - * ldctor.c ldfile.c ldlang.c ldmain.c ldmisc.c ldmisc.h lexsup.c - mri.c Makefile.in: Change callers. - - * ldmisc.c (vfinfo): Remove cleanup code. - * ldmain.c (remove_output): Put it here (new function). - (preserve_output): New function. - (main): Register remove_output and preserve_output with atexit. - * ldmain.c ldgram.y: Call xexit instead of exit. - * ldmisc.h: Declare xexit. - -Fri Feb 4 15:19:01 1994 Steve Chamberlain (sac@cygnus.com) - - * Makefile.in: Lots of new H8/500 memory models. - -Sun Jan 30 14:33:40 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * ldlex.l: Removed duplicate rules. - (yywrap): Provide default definition, needed with some versions of - flex. - -Fri Jan 28 09:12:56 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmisc.c (vfinfo): For `%I', if the file is in an archive, print - the archive filename too. - - * ldlex.l: Add rule to catch invalid input characters instead of - printing them. Include "ldmain.h" for program_name decl. - (lex_warn_invalid): New function. - * Makefile.in: Add dependency. - -Fri Jan 28 12:58:45 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * Makefile.in (check): Don't bother running any tests of - cross-linker until the test suite no longer assumes native mode. - -Thu Jan 27 17:19:54 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * ldlang.c (print_one_symbol, print_input_section): Print - global symbols in symbol table again. - -Thu Jan 27 12:35:01 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmain.c ldmain.h ldgram.y: If -v -V or --version was given, - exit successfully instead of complaining if no input files are - given. - -Tue Jan 25 13:19:41 1994 Stan Shebs (shebs@andros.cygnus.com) - - * Makefile.in: Format variable definitions consistently. - (LD_PROG): Remove unnecessary variables from link command, - change variable LOADLIBES to EXTRALIBS. - - * ldmain.c (main): Compute and display total execution time. - * ld.texinfo (-stats): Document the option. - -Mon Jan 24 12:56:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (reloc_overflow): Added name, reloc_name and addend - arguments. - - * ldlang.c (lookup_name): Set BFD GP size to -G argument value - after opening BFD. - - * ldlang.c (relaxing): Removed global variable. - (lang_size_sections): If the canonical symbols have not already - been read in, read them in before relaxing. - * ldlang.h (relaxing): Removed declaration. - -Fri Jan 21 00:44:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (new_afile): Initialize loaded field to false. - (lookup_name): If file was already loaded, don't call the - add_symbols entry point again. - -Wed Jan 19 13:57:00 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ld.texinfo: Clarify what -T option does. - -Tue Jan 18 16:18:15 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * scripttempl/m88kbcs.sc: Don't use CREATE_OBJECT_SYMBOLS, that's - for a.out. - -Tue Jan 11 13:22:04 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (add_archive_element): If trace_files or - trace_file_tries, print file name. - * ldlang.c (lookup_name): Likewise. - (ldlang_add_file): Don't put files on input_bfds list in reverse - order. - - * scripttempl/elf.sc: Correct typo. - -Mon Jan 10 19:49:05 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldgram.y, ldlex.l: Make the space between -e, -u, and -y and - their arguments optional, for compatibility with the old GNU ld. - -Fri Jan 7 20:00:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/elf.c: Define __bss_start before the .sbss section. - -Thu Jan 6 00:13:10 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (add_to_set): Add bitsize argument. - (constructor_callback): New function. - (link_callbacks): Add constructor_callback. - * ldctor.c (struct set_info): Add bitsize field. - (ldctor_add_set_entry): Add bitsize argument. - (ldctor_build_sets): Base the size of the elements of the set on - the bitsize, rather than always using LONG. - * ldctor.h (ldctor_add_set_entry): Add bitsize to declaration. - - * ld.h (QUAD_SIZE): Define. - * ldgram.y (QUAD): New token. - (length): Handle it. - * ldlex.l: Return QUAD. - * lexsup.c (keywords): Add QUAD. - * ldwrite.c (build_link_order): Handle QUAD. - * ldlang.c (print_data_statement): Handle QUAD. - (lang_size_sections): Likewise. - (lang_do_assignments): Likewise. - * ldexp.c (exp_print_token): Add QUAD to table. - * ld.texinfo: Describe QUAD. - - * scripttempl/alpha.sc: Don't create .lit4 or .sdata sections, - since the Alpha doesn't use them. - -Wed Jan 5 17:42:16 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldemul.h (ld_emulation_xfer_struct): Comment the members. - -Sat Jan 1 13:39:31 1994 Rob Savoye (rob@darkstar.cygnus.com) - - * Makefile.in, configure.in: Add support for VSTa micro-kernel. - * config/vsta.mt, emulparams/vsta.sh: New files for VSTa. - -Sat Jan 1 10:53:35 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * scripttempl/aout.sc: Pad .text to DATA_ALIGNMENT if relocating; - needed for i386mach. (Should be a no-op on other systems.) - - * emulparams/i386mach.sh (SEGMENT_SIZE): Fix again. - (PAGE_SIZE): Don't define; not used. - -Fri Dec 31 16:12:06 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldgram.y (yyerror): Make argument const char *, and actually - print it out rather than assuming it is a syntax error. - * ldmisc.h: Change declaration of yyerror. - * ldemul.c, ldwrite.c: Add /*ARGSUSED*/ as appropriate. - -Fri Dec 31 11:37:28 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * emulparams/i386mach.sh (NONPAGED_TEXT_START_ADDR): Don't include - exec header offset, since the exec header isn't loaded. - (PAGE_SIZE, SEGMENT_SIZE): Agree with bfd/i386mach3.c. - -Thu Dec 30 13:01:43 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - A major rewrite to move the bulk of the linker into BFD so that - more efficient backend code can be written for specific object - files. - * lderror.c, lderror.h, ldindr.c, ldindr.h, ldsym.c, ldsym.h, - ldwarn.c, ldwarn.h, relax.c, relax.h: Removed. - * ldctor.c, ldctor.h: Complete rewrite. - * ldwrite.c, ldwrite.h: Complete rewrite. - * ld.h (strip_symbols_type, strip_symbols): Removed. Use - link_info.strip instead. Changed all uses. - (discard_locals_type, discard_locals): Removed. Use - link_info.discard instead. Changed all uses. - (ld_config_type): Removed relocateable_output field; use - link_info.relocateable instead; changed all uses. Added stats - field. - (set_asymbol_chain, get_asymbol_chain, get_loader_symbol, - set_loader_symbol): Removed. - * ldexp.h (node_class): Added etree_rel. - (etree_type): Added rel field. - * ldexp.c (exp_print_token): Bracketed table initialization. - (exp_relop): New function. - (fold_name): Use linker hash table rather than ldsym functions. - (exp_fold_tree): Likewise. Also, handle etree_rel case. - (exp_print_tree): Handle etree_rel. - * ldgram.y (strip_symbols, discard_locals): Removed. - (OPTION_stats, OPTION_no_keep_memory): New tokens. Handle them. - (REL): New token. Does not appear in grammar, but needed for - expression code. - (file): Don't call lang_final; it's called by main anyhow. - * ldlex.l: Accept -stats and -no-keep-memory options. - * ldlang.h (fill_type): Make unsigned int, not unsigned short. - * ldlang.c: Consistently use fill_type for fill argument. - (lang_init_script_file, script_file): Removed. - (create_object_symbols): Removed. Use - link_info.create_object_symbols_section instead. Changed all - uses. - (lang_add_keepsyms_file): Removed. - (lookup_name): Call bfd_link_add_symbols instead of - ldmain_open_file_read_symbol. - (wild): Don't iterate over script_file. - (open_output): Create link hash table. - (lang_place_undefineds): Rewrote. - (lang_size_sections): Handle relaxing (doesn't work yet). - (lang_relocate_globals): Removed. - (lang_finish): Use link hash table rather than ldsym functions. - (lang_common): Rewrote. - (lang_one_common): New function. - (ldlang_add_file): Add file to link_info.input_bfds list. Set - usrdata. - (create_symbol): Removed. - (lang_process): Don't call lang_init_script_file. Call - ldctor_build_sets rather than find_constructors. Don't call - lang_relocate_globals. - (lang_abs_symbol_at_beginning_of): Rewrote. - (lang_abs_symbol_at_end_of): Rewrote. - * ldmain.c (had_y): Removed. - (lprefix, lprefix_len): Removed; use link_info fields instead. - Changed all uses. - (multiple_def_count, commons_pending, undefined_global_sym_count, - total_symbols_seen, total_files_seen): Removed. - (link_callbacks, link_info): New variables. - (main): Initialize link_info. Don't call init_bfd_error_vector or - ldsym_init. Don't set now unused variables. Handle -stats. - (get_emulation): Removed obsolete and nonfunctional GNU960 code. - (add_ysym): Rewrote. - (read_entry_symbols, refize, enter_global_ref, enter_file_symbols, - search_library, gnu960_check_format, decode_library_subfile, - linear_library, symdef_library, clear_syms, subfile_wanted_p): - Removed. - (add_keepsyms_file, add_archive_element, multiple_definition, - multiple_common, add_to_set, warning_callback, undefined_symbol, - reloc_overflow, reloc_dangerous, unattached_reloc, notice_ysym): - New functions. - * ldmisc.c (vfinfo): Accept a string for %T, not a symbol. Don't - require symbols for %C; look them up instead. - * emultempl/hppaosf.em: Pass link_info to - hppa_look_for_stubs_in_section. - * Makefile.in: Rebuilt dependencies. - (CFILES): Removed lderror.c, ldindr.c, ldsym.c, ldwarn.c, and - relax.c. - (HFILES): Removed lderror.h, ldindr.h, ldsym.h, ldwarn.h, and - relax.h. - (EMULATION_OFILES): Depend on bfdlink.h, ldmain.h, ldexp.h, - ldlang.h and ldctor.h. - - * Makefile.in (ldlex.c): Don't depend on ldgram.h. Remove - declarations of free and malloc from flex output. Change malloc - to ldmalloc in flex output. - -Thu Dec 16 21:19:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - * ldmain.c (lprefix): Change default from a char to a string - with only one character. - (lprefix_len): Set default to one. - - * ldmain.h (lprefix_len): Declare. - - * ldsym.c (write_file_locals): Use strncmp rather than a character - comparison for lprefix. - - * emultmpl/m88kbcs.em (before_parse): Set lprefix and lprefix_len - correctly. - - * emultmpl/hppaosf.em: Include ldexp.h. - (before_parse): Set lprefix and lprefix_len correctly. - -Tue Dec 14 17:19:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlex.h: Don't declare yywrap if it is a macro. - * ldlex.l: Include sysdep.h. - * ldlang.c (lang_for_each_statement_worker, - lang_for_each_statement): Forgot to use PARAMS. - -Mon Dec 13 14:30:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * Makefile.in: Added .PHONY targets where appropriate. Added some - comments. Also: - (gcclibdir, version): Removed unused variables. - (DEP): New variable, set to mkdep. - (ALL_CFLAGS): New variable. Used in .c.o target. - (CFILES, HFILES, GENERATED_CFILES, GENERATED_HFILES): New - variables. - (HEADERS, MANSOURCES, LDCSOURCES, GENERATED_SOURCES, - GENERATED_HEADERS, LDSOURCES, BFD_SOURCES, SOURCES): Removed - mostly obsolete variables. Adjusted remaining uses. - (DEF_EMUL): Removed variable. - (ldmain.o): Handle undefined EMUL error correctly. - (ldemul-list.h): Depend on config.status rather than Makefile. - Create via temporary file. - (ver960.c, roll, make): Removed obsolete targets. - (.dep, .dep1, dep.sed, dep, dep-in): New targets. Used to rebuild - dependencies. - * dep-in.sed: New file, used when rebuilding dependencies. - -Sat Dec 11 14:43:44 1993 Ian Lance Taylor (ian@deneb.cygnus.com) - - Made many changes to eliminate gcc warnings. Made various - cosmetic changes, declared various things in header files, removed - various extern declarations from .c files. No substantive - changes. - - * ldlang.c (lang_process): Ifdef out final call to - lang_size_sections again (reverting change of Nove 2), since it - breaks the Sun4 linker. - -Thu Dec 2 16:31:47 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * configure.in (alpha-*-netware*): New target; use alpha. - -Wed Dec 1 14:04:20 1993 Ken Raeburn (raeburn@cygnus.com) - - * configure.in: Group targets by CPU. Merge some m68k target - entries with different CPU specs that use the same ld_target - values. - - * configure.in: Add sparc*-*-coff. - * config/coff-sparc.mt, emulparams/coff_sparc.sh: New files. - * Makefile.in (ALL_EMULATIONS): Add em_coff_sparc.o. - (em_coff_sparc.c): Add dependencies and build rules. - - * ldmisc.c (errno, sys_nerr, sys_errlist): Don't declare. - -Wed Dec 1 12:19:55 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldgram.y (OPTION_call_shared, OPTION_non_shared, OPTION_Oval): - New tokens. - (command_line_option): Accept and ignore them (for now). - * ldlex.l (<COMMAND>): Handle -non_shared, -call_shared, and -On - where n is a number. - -Mon Nov 22 14:14:29 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (subfile_wanted_p): If merging a common symbol which is - not in bfd_com_section, create the section in the BFD so that it - can be placed in the right output section. - -Fri Nov 19 14:12:39 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * configure.in (mips*-sgi-irix5*): New target. Use mipsb-elf32. - * emulparams/elf32mipsb.sh (DATA_ADDR): Define. - (OTHER_READONLY_SECTIONS): Define for .reginfo. - (EXECUTABLE_SYMBOLS): Define for _DYNAMIC_LINK. - * scripttempl/elf.sc: Use EXECUTABLE_SYMBOLS when not relocating. - Move OTHER_READONLY_SECTIONS after all the other readonly - sections. Don't use DATA_ADDR twice. - - * ldmain.c (enter_file_symbols): Removed duplicate tests of p. If - p is in a common section, make sure the BFD has a section of that - name. - - * ldlang.c (lang_common): Add newline to error message. - -Thu Nov 11 15:54:41 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * emulparams/m68klynx.sh (SCRIPT_NAME): Define to use a - Lynx-specific script instead of m68kcoff. - (OUTPUT_FORMAT): Define as "coff-m68k-lynx". - (ENTRY): Define as __main. - (TEXT_START_ADDR): Define as 0. - (PAGE_SIZE): Define as 0x1000. - * emulparams/i386lynx.sh, emulparams/sparclynx.sh: Fix comment. - * scripttempl/m68klynx.sc: New file. - -Mon Nov 8 12:00:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (get_emulation): Ignore -mips1, -mips2 and -mips3 - arguments rather than treating them as emulation names. - -Fri Nov 5 09:02:52 1993 D. V. Henkel-Wallace (gumby@blues.cygnus.com) - - * configure.in: Support x86 unixware and netware plus generic netware. - -Fri Nov 5 21:47:55 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * emulparams/i386mach.sh (TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR): - Correct values (?). - -Wed Nov 3 15:10:15 1993 Ken Raeburn (raeburn@rover.cygnus.com) - - * Makefile.in (distclean): Don't delete dvi or info files. - (ld.info): Update dependency list. - (ld.dvi): Ditto. Extend TEXINPUTS to get bfdsumm.texi. - -Wed Nov 3 12:07:39 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldlang.c (lang_add_output): Take new arg, FROM_SCRIPT. - Set output_filename instead of creating a new node. - (open_output): Don't set output_filename. - (lang_final): Create the new node here. - * ldlang.c, ldlang.h, ldgram.y, mri.c: pass FROM_SCRIPT. - -Tue Nov 2 15:45:51 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - From Pete Hoogenboom (hoogen@cs.utah.edu): - - * scripttempl/hppaosf.sc: (___stack_zero, etext, _etext, - edata, _edata, end): Add definitions of these symbols. - (__end): Remove definition of this symbol. - (__data_start): Move definition of this symbol. - - * emultempl/hppaosf.em: Various fixes and support for linker stub - generation. - (hppaosf_finish, hppaosf_search_for_padding_statements, - hppaosf_create_output_section_statements): New functions in - support of linker stub generation. - (ld_hppaosf_emulation): Redefine to include new - emulation-specific routines. - - * ldlang.c (lang_process): Re-enable last call lang_size_sections. - Pass abs_output_section rather than NULL to avoid invalidating - absolute symbols. - -Thu Oct 28 21:16:42 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Add em_i386mach.o. - (em_i386mach.c): New rule. - * configure.in (i[34]86-*-mach*): New case. - * config/i386-mach.mt: New file. - * emulparams/i386mach.sh: New file. - -Fri Oct 29 14:55:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ld.h (flag_is_*): Removed macros. - * ldmain.c (enter_global_ref), ldsym.c (write_file_locals): - Consistently check the BFD symbol flags directly, rather than - using file_is_* macros. - -Thu Oct 28 19:08:42 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * configure.in (sparc*-*-lynxos*): New target. - * Makefile.in: Add rule for em_sparclynx.c. - (ALL_EMULATIONS): Add Lynx emulations. - * config/sparc-lynx.mt: New file. - * emulparams/sparclynx.sh: New file. - * scripttempl/sparccoff.sc: New file. - -Thu Oct 28 13:50:25 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * Makefile.in: Add dependency for $(EMULATION_OFILES). - -Mon Oct 25 16:09:24 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * relax.c (write_relax): Check return value of bfd_seclet_link. - -Mon Oct 25 09:31:21 1993 Ken Raeburn (raeburn@cygnus.com) - - * ldlang.c (delete_output_file_on_failure): New variable. - (open_output): Set it after bfd open succeeds. - * ldmisc.c (vfinfo): Test it. - - Changes from Peter Hoogenboom, hoogen@cs.utah.edu: - - * ldsym.c (write_file_locals): Set the BSF_FILE flag for object - symbols. - - * ldemul.c: Support was added to allow emulation-specific - processing to occur. This support was added primarily for linker - stub generation in the elf32-hppa gld. - (ldemul_finish, ldemul_create_output_section_statements): New - functions. - * ldemul.h: Support was added to allow emulation-specific - processing to occur. (As described above.) Added finish and - create_output_section_statements fields to - ld_emulation_xfer_struct structure. - * ldlang.c: Add calls to emulation-specific routines. - (lang_process): Add call to - ldemul_create_output_section_statements function. - (lang_process): Add call to a emulation-specific routine (and - some processing after the call). - -Fri Oct 22 20:54:13 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * configure.in: mips*- instead of mips-, mips*el changes - -Tue Oct 19 15:46:28 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * configure.in (alpha-*-osf*): New target; use alpha.mt. - * Makefile.in (ALL_EMULATIONS): Added em_alpha.o. - (em_alpha.c): New target; use alpha.sh and alpha.sc. - * config/alphaosf.mh (NATIVE_LIB_DIRS, HOSTING_CRT0): Define. - * config/alpha.mt: New file. - * emulparams/alpha.sh: New file. - * scripttempl/alpha.sc: New file. - -Fri Oct 15 02:20:04 1993 Doug Evans (dje@canuck.cygnus.com) - - * ldlang.c (lang_size_sections, lang_common): ALIGN_N can't handle - types of different sizes (eg: 64 and 32 bits), so coerce. - * ld.h (ALIGN_N): Add warning about usage. - -Wed Oct 13 16:02:39 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldmain.c (enter_global_ref): Just ignore any weak symbol for - which we already have a definition, rather than checking in - several different places whether the symbol is weak. - -Tue Oct 12 17:30:51 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * configure.in (mips-*-elf*): New target; use mipsb-elf32. - * scripttempl/elf.sc: Only use OTHER_READONLY_SECTIONS and - OTHER_READWRITE_SECTIONS if relocating. Shell variables are not - expanded within them. - * config/mipsb-elf32.mt: New file. - * emulparams/elf32mipb.sh: New file. - * Makefile.in (em_elf32mipb.c): New target. - -Thu Sep 30 17:00:36 1993 Rob Savoye (rob@darkstar.cygnus.com) - - * ldgram.y: In input_list, change lang_input_file_is_file_enum to - lang_input_file_is_search_file_enum so objects brought in using - INPUT() do a path lookup. - -Tue Sep 28 13:31:23 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * configure.in: Change Lynx ld_target to be {i386,m68k}-lynx - instead of {i386,m68k}-coff. - * Makefile.in (em_i386lynx.c, em_m68klynx.c): New targets. - * config/i386-lynx.mt: New file. - * config/m68k-lynx.mt: New file. - * emulparams/i386lynx.sh: New file. - * emulparams/m68klynx.sh: New file. - - * scripttempl/i386coff.sc: Make ENTRY get its value from ${ENTRY}, - but defaulting to _start. - - * ldemul.c, ldfile.c, ldlang.c, ldmain.c, ldmisc.c, ldmisc.h, - ldsym.c, ldwarn.c: Rename info to info_msg, to avoid conflict with - LynxOS libc. - -Thu Sep 23 14:51:03 1993 Ian Lance Taylor (ian@cygnus.com) - - * config/solaris2.mh: New file. Define HOSTING_CRT0 and - HOSTING_LIBS for testing. - -Fri Sep 17 17:52:24 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Finish up support for i386-sysv4 (without shared libraries): - * ld.h (flag_is_weak): Define. - * ldlang.c (print_symbol): Mention whether symbol is weak. - (print_input_section): Print weak symbols as globals. - * ldmain.c (refize): Do not zero out BSF_WEAK flag. - (enter_global_ref): Do not warn if a weak symbol redefines a - global symbol. Do not let a weak symbol redefine a common symbol. - (enter_file_symbols): Treat weak symbols as global symbols. - (subfile_wanted_p): Do not pull in an object file from a archive - just to resolve an undefined weak symbol. - * ldmisc.c (vfinfo): Don't needlessly malloc space after a fatal - error; the error might be that malloc has run out of space. - * ldsym.c (write_file_locals): Treat weak symbols as global. - * configure.in (i[34]86-*-sysv4*, i[34]86-*-elf*): New targets; - use i386-elf. - * config/i386v4.mh: New file; set NATIVE_LIB_DIRS to /usr/ccs/lib. - * config/i386-elf.mt: New file; set EMUL to elf_i386. - * emulparams/elf_i386.sh: New file. - * scripttempl/elf.sc: Use ${NOP} as filler (defaults to 0). - * Makefile.in (NATIVE_LIB_DIRS): Define to be empty. - (ALL_EMULATIONS): Add em_elf_i386.o. - (GENSCRIPTS): Pass NATIVE_LIB_DIRS as sixth argument. - (em_elf_i386.c): New target, like other em_*.c targets. - ($(LD_PROG)): Pass $(CFLAGS) to $(CC). - * genscripts.sh: Accept NATIVE_LIB_DIRS as sixth argument. If - nonempty, and configured for native, add it to LIB_PATH. - -Fri Sep 17 13:07:39 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * scripttempl/{h8300.sc,h8500.sc,i386coff.sc,m68kcoff.sc,sh.sc}: - Added statements to pass stab and stabstr sections through and - mark them as NOLOAD, which makes GDB happier. - -Wed Sep 15 16:02:29 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * configure.in: Accept m68k-lynx-lynxos config. - - * Makefile.in: Use $(SHELL) to run genscripts.sh. - -Sun Sep 12 16:04:40 1993 Doug Evans (dje@cygnus.com) - - * config/coff-h8300.mt: Add EMUL=h8300h. - - * ldmain.c (main): Call set_scripts_dir after argv has been processed. - -Fri Sep 10 09:36:29 1993 Jeffrey Wheat (cassidy@cygnus.com) - - * Makefile.in: Changed CXX back to g++. - -Fri Sep 10 09:34:29 1993 Jeffrey Wheat (cassidy@cygnus.com) - - * Makefile.in: Fixed RUNTEST* CXX CXXFLAGS macros and check rule. - -Fri Sep 10 07:26:57 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * Makefile.in (TAGS): Use shell wildcards. - -Tue Sep 7 18:04:54 1993 Jeffrey Osier (jeffrey@cygnus.com) - - * Makefile.in: add TEXINPUTS variable and use it in ld.dvi target - -Fri Sep 3 16:46:41 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * ld.texinfo: re-enable included config file; conditionalize doc - for -oformat to interact properly with SingleFormat doc config - var; rename @up/@down to @raisesections/@lowersections. - -Wed Aug 25 16:29:56 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * configure.in: recognize m88110. - -Tue Aug 24 18:49:40 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - From Peter Hoogenboom <hoogen@shafer.cs.utah.edu>: - * emultempl/hppaosf.em (ld_hppaosf_emulation): Correct name for PA - ELF emulation is "elf32-hppa" not "elf-big". - (hppaosf_before_parse): Remove unneeded processing of environment - variables. - * scripttempl/hppaosf.sc: Include .hppa_linker_stubs sections in - .text segment of output file. - * emulparams/hppaosf.sh (OUTPUT_FORMAT): Use elf32-hppa. - -Tue Aug 24 16:17:00 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * ld.h: define BYTE_SIZE, SHORT_SIZE, and LONG_SIZE which are no - longer in bfd.h. - - * ldlang.c, ld.h: updated copyright. - -Tue Aug 17 15:22:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldlang.c (open_output, lang_check): Check return value of - bfd_set_arch_mach. - -Tue Aug 17 07:02:19 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - * scripttempl/h8500.sc: Start all sections in a different segment. - * scripttempl/z8ksim.sc: Handle constructors - -Thu Aug 12 16:05:37 1993 Jeffrey Wheat (cassidy@cygnus.com) - - * Makefile.in: revert earlier changes back to execute runtest - with make check. cdtest and bootstrap now function as they - did within the Makefile. - -Thu Aug 12 10:20:05 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * Makefile.in: Update dependencies. - - * configure.in: Set EMULATION_OFILES in Makefile based on - --with-targets option. - -Thu Aug 12 08:52:29 1993 Jeffrey Wheat (cassidy@cygnus.com) - - * Makefile.in: check targets reimplemented to old way. - -Wed Aug 11 08:26:11 1993 Ian Lance Taylor (ian@cygnus.com) - - * config/i386v.mh, config/irix4.mh: Use gcc - -print-libgcc-file-name rather than $(libdir)/libgcc.a. - * config/i386sco.mh: New file; copy of i386v.mh to correspond to - bfd/configure.host change. - -Mon Aug 9 14:25:35 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * scripttempl/elf.sc: Handle .line and .debug* sections. - - * ldlex.l: Use bfd_scan_vma, not strtoul. - -Fri Aug 6 08:57:39 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldexp.c, ldfile.c, ldlang.c, lexsup.c, ldmain.c, ldemul.c: - Remove inital caps in some error messages, change "can't" to - "cannot", add missing colons. - * ldmisc.c (vfinfo): Print "%%" as a single %. - For '%' followed by unrecognized character, print them both - verbatim instead of expecting a char * arg. - For '%C', don't put the function name in parens. - - * ldexp.c (invalid): Pass "%%", not "% ". - -Fri Aug 6 14:31:22 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * scripttempl/mips.sc: Always define _ftext, _fdata, _fbss. - (BSS_VAR): Removed; now always define _fbss. - * emulparams/mipsidt.sh, emulparams/mipsidtl.sh (BSS_VAR): - Removed. - -Thu Aug 5 15:55:19 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * configure.in: z8k-coff is the same as z8k-sim - -Wed Aug 4 21:00:18 1993 Jeffrey Wheat (cassidy@cygnus.com) - - * testsuite/lib/ld.exp: new file - * testsuite/config/unix-ld.exp: new file - * testsuite/ld.bootstrap/bootstrap.exp: new file - * Makefile.in: add dejagnu support for make check - -Wed Aug 4 17:52:32 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldlex.l (comment): Add missing newline in message. - * ldindr.c (add_indirect): Ditto. - * ldexp.c (exp_fold_tree): Ditto. - -Tue Aug 3 10:57:41 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldgram.y, ldlex.l, mri.c, ldwrite.c: Change multiple commons - into externs. - - * ldmisc.c (multiple_warn): New function. - * ldmisc.h: Declare it. - * ldmain.c (enter_global_ref): Call it. - * ld.h (ld_config_type): Add warn_common. - * ldlex.l, ldgram.y: Set it with -warn-common option. - * ldver.c (help): Document it. - -Mon Aug 2 12:04:36 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * scripttempl/elf.sc: Add hooks for .sdata, .sbss, and - target-specific sections, and for changing data section vma. - -Mon Jul 26 14:00:02 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * ldgram.y (OPTION_Qy, OPTION_Y, OPTION_dn, OPTION_YP): New - terminals, for Solaris. - (dirlist_ptr): New static variable. - (command_line_option): Accept new options. - - * ldlex.l: Accept command-line options "-Qy", "-dn", "-Y", and - "-YP,...". - - * config/sun4sol2.mt: Pass emulation name without ".sh". - - * emulparams/elf32_sparc.c: Renamed from elf32-sparc.c. - * config/sun4sol2.mt (em_elf32_sparc.c): Adjusted accordingly. - -Fri Jul 23 13:51:09 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * scripttempl/elf.sc: Add support for .init, .fini, .ctors, - .dtors, .data1, .rodata1 sections, instead of combining them into - other sections. For `-r', set all section start addresses to - zero. - - * emulparams/elf32-sparc.sh (TEXT_START_ADDR, - NONPAGED_TEXT_START_ADDR): Value should be 0x10100. - (MAXPAGESIZE): Renamed from PAGE_SIZE. - -Wed Jul 21 14:28:42 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * genscripts.sh: If this is the default emulation, set - COMPILE_IN. - * emultempl/*.em: Use it to determine whether to compile in the - scripts. - - * Makefile.in (GENSCRIPTS): Pass the default emulation name to - genscripts.sh. Pass the current emulation name without ".sh" on - the end. - * genscripts.sh: Take an default emulation arg. - Use the current emulation name as EMULATION_NAME. - Make default lib path for cross-compiling ':', not null. - * emulparams/*.sh: Don't set EMULATION_NAME. - * ldemul.c (ldemul_get_script): Take isfile arg. - Pass it to emulation's get_script function. - * ldemul.h: Adjust get_script prototypes. - * ldfile.c (ldfile_find_command_file): Renamed from find_a_name. - No longer static. - * ldfile.h: Declare it. - * ldgram.y: Accept a script on the command line again, - for parsing compiled-in scripts. - * ldmain.c (main): If ld script is a file, parse it as a -T - option, otherwise parse it directly. - * emultempl/*.em (*get_script): Return the scripts themselves if - this is the default emulation; otherwise return their file names. - * emultempl/m88kbcs.em: New file, to take m88kbcs #ifdef out of - generic.em. - * emulparams/m88kbcs.sh: Use it. - - * ld.h (ld_config_type::unix_relocate): Remove unused element. - -Tue Jul 20 12:01:49 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Delete em_i386linux.o (for which - there's no change log entry yet, tsk tsk) from the list of - emulations compiled in until Mark gets around to checking in - emulparams/i386linux.sh. - (ldemul-list.h): Depend on Makefile, so if EMULATION_OFILES is - changed, this file gets updated. - -Fri Jul 16 14:14:32 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldgram.y (OPTION_Lfile): New token. - (command_line_option): Accept OPTION_L NAME (whitespace after -L). - * ldlex.l (<COMMAND>): Accept -L without FILENAME. - -Fri Jul 16 13:44:26 1993 Doug Evans (dje@canuck.cygnus.com) - - * configure.in: h8/300h support needs own .mt file. - config/coff-h8300h.mt: New file. - -Thu Jul 15 12:44:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmain.c: Don't include sys/stat.h; it already got included - somewhere along the way. - -Thu Jul 15 14:43:34 1993 Doug Evans (dje@canuck.cygnus.com) - - * Makefile.in: Add h8300h support. - emulparams/h8300h.sh: New file. - scripttempl/h8300h.sc: New file. - -Thu Jul 15 12:44:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldfile.c (ldfile_open_file): In error message, use the name the - user gave (e.g., "-lc"), rather than the base file name. - - * ldexp.c (exp_fold_tree): Don't assign an int to an enum. - - * ldmain.[ch]: Remove initial Q_ from function names. - * ldexp.c, ldindr.c, ldlang.c: Change callers. - - * ldfile.c, ldmain.c, ldgram.y: Rename option_v to trace_file_tries. - - * ldlang.c (lang_process): Move loading of default script from - here to main. Add a "/" to start of script name to prevent - finding it in "." first. - - * ldmain.c (set_scripts_dir): Don't look in "." first. - - * ldgram.y, ldlang.c, ldsym.c: Remove traces of unused var - option_longmap. - -Thu Jul 15 10:55:59 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (em_m88kbcs.c): Correct dependency. - * scripttempl/m88kbcs.sc: It's ARCH, not arch. Removed TARGET - statement. Changed OUTPUT_FORMAT to use ${OUTPUT_FORMAT}. - * emulparams/m88kbcs.sh: It's coff-m88kbcs, not m88kbcs. - -Wed Jul 14 21:42:53 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldfile.c (ldlang_open_file, ldfile_open_command_file), - main.c (main): Print the errno string in the error message. - -Tue Jul 13 20:00:30 1993 Doug Evans (dje@canuck.cygnus.com) - - * configure.in: Accept h8300h for target cpu. - - * ldmisc.c (vfinfo): Have demangle remove leading underscore if - present (demangle is smart enough to know whether to do it or not). - -Mon Jul 12 11:45:48 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldmain.c (set_scripts_dir): Check . and <ld bin dir>/../lib for - ldscripts, as well as <ld bin dir> and SCRIPTDIR. - - * ldlang.c (lang_process): Use sizeof instead of magic constant. - - * ldmain.c (get_emulation, check_for_scripts_dir, - set_scripts_dir): New functions. - (main): Call them. - -Mon Jul 12 10:57:03 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * scripttempl/elf.sc: Include .init, .fini, .rodata sections. - Create symbol "end" instead of "__end". Comment out some parts - that may not be needed (yet) for elf. - - * configure.in: Accept sparc-elf and sparc-solaris2 configs. - -Thu Jul 8 15:33:32 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * Makefile.in (ALL_EMULATIONS): Include $(OTHER_EMULATIONS). - - * ldmisc.h (einfo, minfo, info): Don't bother with PARAMS macro - when no prototype is being supplied. - (ldmalloc, ldrealloc): Size argument is now size_t. - - * ldmisc.c (finfo): New function, accepts FILE* argument. - (vfinfo, case 'v'): New format character; displays bfd_vma in hex - without leading zeros. - (vfinfo, cases 'R' and 'C'): Use finfo(%v) when displaying a - bfd_vma value, instead of fprintf(%x) which won't hold a long long - value. - (concat, buystring): String lengths are size_t. - (ldmalloc, ldrealloc, xrealloc): Size argument is now size_t. - - * ldlang.c (new_statement): Size argument is now size_t. Added - forward declaration with prototype. - -Thu Jul 8 10:53:47 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldgram.y (OPTION_v): Don't turn on verbose output. - -Wed Jul 7 17:10:45 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * ldlex.l: Get rid of local typedef for bfd_vma! Get it from - bfd.h instead. - -Wed Jul 7 11:33:12 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (install): Don't install as $(tooldir)/bin/gld; - collect2 doesn't look for gld any more anyhow. - -Mon Jul 5 14:29:48 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (lang_relocate_globals): Skip indirect symbols, which - now have a non NULL srefs_chain. - - * config/hp300hpux.mt: Use emulation hp3hpux rather than - hp300hpux, since the latter does not exist. - -Fri Jul 2 18:06:05 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * genscripts.sh: Put the scripts in the ldscripts directory, not - emulations. - * configure.in (ldscripts): Make, instead of emulations. - * Makefile.in (scriptdir): Take off the "ld" part. - (install, clean, distclean): Use ldscripts, not emulations. - In tests, don't pass -Lemulations. - Don't pass tooldir/lib to genscripts.sh. - * genscripts.sh: Don't take tooldir/lib arg. - * ldlang.c (lang_process): Add "ldscripts/" to the name of the - default script file. - -Fri Jul 2 17:13:35 1993 Doug Evans (dje@canuck.cygnus.com) - - * scripttempl/h8300.sc: Add .tors section for constructor/destructors. - -Thu Jul 1 16:38:45 1993 Doug Evans (dje@canuck.cygnus.com) - - * config/coff-h8300.mt: EMUL=h8300hms -> h8300. - -Wed Jun 30 15:45:55 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * Makefile.in (.y.c): skip default .y.c rules. gnu make can now - run in parallel without colliding on yacc's static file names. - Without the stub rule, make will try to start two yacc's - concurrently which fails because of yacc's static file names. - -Tue Jun 29 12:20:36 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldmain.c (subfile_wanted_p): Don't dump core if there are no - symbols. - -Mon Jun 28 12:22:11 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * genscripts.sh (LIB_PATH): Only add /usr/local/lib if it's - different from libdir. - - * Makefile.in (scriptdir): Base on tooldir, not datadir. - -Sat Jun 26 12:03:57 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldver.c (help): New function. - * ldver.h: Declare it. - * ldlex.l, ldgram.y: Recognize new options --help and --version. - -Mon Jun 21 20:39:48 1993 Ken Raeburn (raeburn@poseidon.cygnus.com) - - * Makefile.in (INCLUDES): Don't need ../include any more. - -Mon Jun 21 16:38:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldlex.l, ldgram.y: Support new -oformat option. - Remove attempt at supporting script fragments on the command line. - * ldlang.c (lang_add_output_format): Take new arg, FROM_SCRIPT. - * mri.c (mri_format), ldgram.y: Change callers. - * ldlang.h: Change prototype. - -Thu Jun 17 16:53:56 1993 david d `zoo' zuhn (zoo@cygnus.com) - - * Makefile.in: canonicalize install.sh; for use within - this directory (and subdirs) - -Thu Jun 17 14:33:09 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldgram.y: Tweak grammar to make reporting of invalid options work. - - * Makefile.in (.cc.o): Restore .SUFFIXES entry for .cc - and .cc.o rule. - -Wed Jun 16 11:45:32 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldfile.c (ldfile_open_command): Don't try .ld extension. - It wasn't documented (or likely used) and wastes time. - (try_open): If EXTEN is empty, don't try it. - - * ldctor.c, lderror.c, ldexp.c, ldfile.c, ldindr.c, ldlang.c, - ldlex.l, ldmain.c, ldmisc.c, ldsym.c, ldver.c, ldwarn.c, - ldwrite.c, lexsup.c, mri.c, relax.c: Replace DEFUN macro calls - with normal function declarations. - - * Move *.em to emultempl/*.em. Move *.sh to emulparams/*.sh. - Move *.sc-sh to scripttempl/*.sc. - * {emultempl,emulparams,scripttempl}/README: New files. - * sh.em, st2000.em, z8ksim.em, h8300hms.em, h8500hms.em: Files - removed, replaced with generic.em. - * h8300.sh, h8500.sh, h8300.sc, h8500.sc: Renamed from - h8[35]00hms.s[ch]. Change their contents to omit the "hms". - - * *.em (*_get_script): Return script name instead of script contents. - * ldlang.c (lang_process): Change caller. - - * ldlex.l, ldgram.y: Recognize -m option. - Check for input files after *all* options in grammar. - * ldmain.c (main): Check for -m options. Add default directory - for -m. - - * mkscript.c: File removed. - * genscripts.sh: Take two more parameters, tooldirlib and libdir, - to add to the default LIB_PATH. - Look for input files in the new subdirectories. - Create the scripts in emulations subdirectory and don't filter - them through mkscript. - * configure.in: Make the emulations subdirectory. - - * Makefile.in: Account for all of the above changes. - Remove unused .SUFFIXES. Get libgcc.a path with gcc - -print-libgcc-file-name instead of $(libdir)/libgcc.a. - Put CFLAGS last in the compilation rules. - Add -I../bfd to INCLUDES so sysdep.h is found. - -Tue Jun 15 23:04:46 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * Makefile.in (INCLUDES): Look in ../include, not ../bfd. - - * aout.sc-sh: Add SHLIB_PATH like STACKZERO. Make STACKZERO - dependent on RELOCATING, not RELOCATION. - * hp3hpux.sh (SHLIB_PATH): Define it. - -Mon Jun 14 19:06:15 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * ldfile.c (try_open): If opening without the extension fails, - try with the extension even if -v or -V was given. - had_script is imported (from ldgram.y), not exported. - -Mon Jun 14 16:26:10 1993 david d `zoo' zuhn (zoo at rtl.cygnus.com) - - * Makefile.in: remove parentdir support, use INSTALL_XFORM - -Thu Jun 10 14:00:06 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldexp.c (exp_fold_tree): Don't lose the old flag bits. - * ldgram.y (statement_list_opt): New nonterminal, either empty or - statement_list. - (section): Use statement_list_opt, not statement_list. - * m68kcoff.sc-sh: Gather constructors and destructors and define - __CTOR_LIST__ and __DTOR_LIST__ appropriately. - * sa29200.sc-sh: Gather constructors and destructors and define - ___CTOR_LIST__ and ___DTOR_LIST__ appropriately. - -Mon Jun 7 12:53:28 1993 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in (INCLUDES): Add -I../bfd for sysdep.h and bfd.h. - * configure.in: No longer need to configure to get sysdep.h. - -Fri Jun 4 16:18:24 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: remove install:all and install-info:info - dependencies (these cause some spurious rebuilds at 'make install' - time) - -Fri Jun 4 08:50:14 1993 Ian Lance Taylor (ian@cygnus.com) - - * configure.in (mips-idt-ecoffl*): New target; use mips-idtl. - (mips-idt-ecoff*): Added trailing '*'. - * config/mips-idtl.mt: New file; use EMUL of mipsidtl. - * mipsidtl.sh: New file; like mipsidt.sh, but little endian. - * Makefile.in (ALL_EMULATIONS): Added em_mipsidtl.o. - - * config/sun3.mh (HOSTING_LIBS, HOSTING_EMU): Removed obsolete and - incorrect definitions. - -Tue Jun 1 14:56:10 1993 Per Bothner (bothner@rtl.cygnus.com) - - * ldsym.c (write_file_locals): Write BSF_CONSTRUCTOR - symbols, unless stripping. - -Tue May 25 15:34:25 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: configure looks for ####, so remove lines with many - '#' characters. - * config/irix4.mh, config/i386v.mh: New files; set HOSTING_CRT0 - and HOSTING_LIBS correctly so that ``make check'' will work. - -Thu May 20 13:56:16 1993 Per Bothner (bothner@deneb.cygnus.com) - - * mips.sc-sh: Define _etext, _edata, and _end, in addition - to etext, edata, and end. Needed for IRIX 4.0.5F. - Patch from mwp@iconix.oz.au (Michael Paddon). - - * Version 2.2.1 released. - -Thu May 20 11:42:06 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * mipsbsd.sc-sh: Renamed from aout-mipsbsd.sc-sh. - * mipsbsd.sh (EMULATION_NAME): Use new file name. - -Tue May 18 17:10:24 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * Makefile.in (LDDISTSTUFF): Remove ld.mm since we can't build it - properly right now. - - * Version 2.2 released. - -Mon May 17 15:37:28 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * ldver.c (ldversion): Bump version number to 2.2. - -Mon May 17 12:44:31 1993 Per Bothner (bothner@cygnus.com) - - * NEWS: New file. - -Fri May 14 11:26:24 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.sc-sh: Don't define BSS_VAR unless relocating. - -Wed May 12 13:33:29 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (mkscript.o, mkscript): Build mkscript via - mkscript.o, rather than directly from mkscript.c. - -Tue May 4 21:58:56 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * configure.in: Look for ${target_makefile_frag} relative to - ${srcdir}, not relative to build directory. - - * hppaosf.em, hppaosf.sc-sh, hppaosf.sh: New files. - * configure.in: Recognize hppa*-hp-osf. - * Makefile.in (ALL_EMULATIONS): Include hppaosf emulation. - (em_hppaosf.c): Build it. - * config/hppaosf.mh, hppaosf.mt: New files. - - * ld.h (ALIGN_N): Renamed from ALIGN, because that conflicted with - some system header files. All uses changed. - - * configure.in: Recognize i386-aix configurations as i386-coff - targets. - - * configure.in: Recognize m68*-*-hpux. - * aout.sc-sh: If STACKZERO and RELOCATING are both defined, output - the value of STACKZERO. - * Makefile.in (ALL_EMULATIONS): Include hp300-hpux emulation. - (em_hp3hpux.c): Build it. - * hp3hpux.sh, config/hp300hpux.mt: New files. - -Tue May 4 12:37:35 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.sc-sh: Put constructors in the .data section. - * Makefile.in (cdtest): Added dependency on ld.new. - -Mon May 3 19:43:39 1993 Per Bothner (bothner@cygnus.com) - - * Makefile.in: Change definition of $(tooldir) to match FSF. - * vax.sh, config/vax.mt, configure.in, Makefile.in: - Support VAX Ultrix and BSD. - -Mon Apr 26 18:35:47 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * sh.em, sh.sh, sh.sc-sh: New files supporting Hitachi SH. - -Wed Apr 14 21:01:51 1993 John Gilmore (gnu@cygnus.com) - - * ldlang.h (struct memory_region): Change `length' and - `old_length' fields to bfd_size_type. Eliminate use of bfd_offset. - * ldlang.c, mri.c: Corresponding changes, plus lint. - -Thu Apr 8 22:08:18 1993 Ian Lance Taylor (ian@cygnus.com) - - * configure.in: For all i386 targets, accept i486 as well. - -Mon Apr 5 17:33:39 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (wild_doit): Preserve all flags for a - SEC_SHARED_LIBRARY section. - (size_input_section): Consider any SEC_HAS_CONTENTS section when - computing largest_section. - -Fri Apr 2 14:33:52 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (lang_output_section_statement_lookup): Initialize all - fields of newly created structure. - -Wed Mar 31 18:19:15 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldmain.c (g_switch_value): New variable. - * ldgram.y (OPTION_G, OPTION_Gval): New tokens. - (command_line_option): Accept -G and set g_switch_value. - * ldlex.l (COMMAND): Accept -G. - * ldlang.c (open_output): Call bfd_set_gp_size on new BFD. - -Tue Mar 30 09:40:25 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - Support for linking and loading at different places: - - * ldlex.l: Add "AT" keyword. - * ldgram.y: Cleanup, and parse AT. - * ldlang.c (print_output_section_statement): Print output address - of section in map. (lang_size_sections): Fill sections' lma with - load address. - * ldlang.h (lang_output_section_statement_type): Add load_base - information. - - * ldindr.c (add_indirect): Keep more information in the alias - symbol chain. - * ldlang.c (wild_doit): Don't inherit NEVER_LOAD section - attribute from an input section. - * ldmain.c (Q_enter_file_symbols): Common section is NEVER_LOAD by - default. (Q_enter_file_symbos): Indirect symbols now are known by - their section, not a special symbol flag. - * ldsym.c (write_file_locals): Indirect symbols aren't local. - (write_file_globals): Write the mapping for an indirect symbol. - * relax.c (build_it): When forced to write a NEVER_LOAD section, - fill it with zeros. - -Tue Mar 23 13:24:10 1993 Jeffrey Osier (jeffrey@fowanton.cygnus.com) - - * ld.texinfo: changes for q1 - -Tue Mar 23 00:13:29 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: add dvi target, define & use TEXI2DVI, add installcheck - -Mon Mar 8 20:30:35 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: rename HOST_CC to CC_FOR_BUILD - -Thu Mar 4 12:44:33 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.sc-sh: Added variables which may be overridden by a - specific emulation. - * mipsidt.sh: New file; emulation for IDT MIPS board. - * Makefile.in (ALL_EMULATIONS): Added em_mipsidt.o. - (em_mipsidt.c): New target. Uses mipsidt.sh and mips.sc-sh. - * config/mips-idt.mt: New file; sets EMUL to mipsidt. - * configure.in (mips-idt-ecoff): New target; uses mips-idt. - -Sat Feb 27 00:00:14 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * aout-mipsbsd.sc-sh, mipsbsd.sh: New files from Ralph Campbell, - ralphc@pyramid.com. - * i386bsd.sh, config/i386bsd.mt: New files. - * configure.in, Makefile.in: Added support for mipsbsd and 386bsd. - -Thu Feb 25 15:33:10 1993 Per Bothner (bothner@rtl.cygnus.com) - - * mri.c: Add extern declaration of strdup. - * ldsym.c (KEEP macro): Add spaces around '=' for the - sake of old (e.g. PCC) compilers. - -Wed Feb 24 19:49:31 1993 Per Bothner (bothner@rtl.cygnus.com) - - * ldver.c: Bump to version 2.1. - -Fri Feb 12 08:09:11 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldgram.y: allow section types without address expressions. - * ldlang.c (lang_relocate_globals): avoid possible hang with - undefined but unreferenced symbols. - * relax.c (relax_section): don't complain if the script file isn't - relaxable but -relax is set - -Thu Feb 18 17:58:45 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: go32 is the 3rd part of the triple, not the 2nd - -Wed Feb 3 09:05:56 1993 Ian Lance Taylor (ian@cygnus.com) - - * mipsbig.sh: New file. Big endian MIPS emulation. - * config/mips-big.mt: New file. Use mipsbig emulation. - * configure.in (mips-sgi-irix*): Use target mips-big. - * Makefile.in (ALL_EMULATIONS): Added em_mipsbig.o. - (em_mipsbig.c): New target. Uses mipsbig.sh. - -Tue Feb 2 11:32:27 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.sc-sh: Put .scommon sections into .sbss section. - - * ldmain.c (subfile_wanted_p): Preserve section of common symbols, - rather than always putting them in bfd_com_section. - * ldlang.c (lang_common): If a common symbol is not in - bfd_com_section, put in a section of the same name, rather than - always putting it in section COMMON. - -Fri Jan 29 09:57:58 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldmain.c (subfile_wanted_p): If we already have a common - definition of a symbol, don't necessarily pull in an object file - that provides a non-common definition. - - * ldlex.l (COMMAND): Accept -EB and -EL command line arguments, - returning OPTION_EB and OPTION_EL. gcc passes these to a MIPS - linker. - * ldgram.y (OPTION_EB, OPTION_EL): New tokens. - (command_line_option): Accept and ignore OPTION_EB and OPTION_EL. - -Thu Jan 28 15:12:04 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (install): Remove $(tooldir)/bin/gld before creating - the link to it. - -Tue Jan 26 11:49:50 1993 Ian Lance Taylor (ian@cygnus.com) - - * ldmain.c, ldsym.c: Use new bfd_is_com_section macro rather than - checking for equality to bfd_com_section. - -Fri Jan 22 14:22:44 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.sc-sh: New file. Ultrix, and hopefully other MIPS ECOFF - targets, linker script. - * mipslit.sh: New file. Little endian MIPS emulation. - * config/mips-lit.mt: New file. Use mipslit emulation. - * configure.in (mips-dec-ultrix*): Use target mips-lit. - * Makefile.in (ALL_EMULATIONS): Added em_mipslit.o. - (em_mipslit.c): New target. Uses mipslit.sh. - -Thu Jan 14 15:30:27 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (install): Install ld as both $(tooldir)/bin/ld and - $(tooldir)/bin/gld, so that gcc can find it with or without - collect2. - -Mon Jan 11 18:50:07 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ldwrite.c: Removed perform_relocation, copy_and_relocate, and - write_norel. All linking is now done via write_relax. Call - ldsym_write before calling write_relax. - * relax.c: Added copyright. - (write_relax): Renamed from write_relaxnorel. Added relocateable - argument. seclet_dump renamed to bfd_seclet_link. - * relax.h: Added copyright. - -Mon Jan 11 15:41:56 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmain.c (decode_library_subfile): Patch from - hoogen@shafer.cs.utah.edu, don't reread library symbol tables. - -Fri Jan 8 18:04:33 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * config/vxworks960.mt renamed to config/i960.mt - - * configure.in: sparc-aout emulates a sun4, as does - sparc*-vxworks, i960-nindy uses gld960 emulation - -Fri Jan 8 14:39:07 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - Fix support for NOLOAD, add INCLUDE - * ldfile.c (ldfile_open_command_file): pass file name to - lex_push_file. - * ldlex.l, ldgram.y: tidy up, parse INCLUDE and NOLOAD - * ldlang.c (wild_doit): make output sections inherit NEVER_LOAD - attribute. - -Thu Jan 7 10:22:19 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in, config.h: no more default emulation. Make the lack - of emulation a compile time error - -Wed Jan 6 01:08:37 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: recognise all sparclite variants, not just 'sparclite' - -Mon Dec 28 11:15:35 1992 Ian Lance Taylor (ian@cygnus.com) - - * m68kcoff.sc-sh: define _end as well as end, for consistency with - aout.sc-sh. - - * configure.in: accept *-ericsson-ose for any m68k CPU. - - * ldwrite.c (write_rel): don't always set SEC_HAS_CONTENTS flag - for each output section. - -Mon Dec 21 16:06:59 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldexp.c, ldlang.c, ldmain.c, ldsym.c, ldwarn.c: Use new - macro bfd_asymbol_bfd as appropriate. - * Makefile.in: Un-duplicate ldlex.c dependency. - * condigure.in: Replace my_host case table by sourcing - ../bfd/configure.host. Allow std-host as the default. - * ldmisc.c: Change logic for C++ name demangling: There is - no initial '_' to remove from stab-derived function names. - -Sun Dec 13 16:31:26 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlang.c (lang_init_script_file): don't attach the output file - sections to the script file. - -Wed Dec 9 08:38:05 1992 Steve Chamberlain (sac@thepub.cygnus.com) - * ldlang.c (wild): run expansion loop over command line bfd too. - (lang_ini_script_file): initialize more parts of the command line - bfd. - * ldlex.l: fix DEFINED start states. - -Mon Dec 7 08:43:41 1992 Steve Chamberlain (sac@thepub.cygnus.com) - -y support - * ld.texinfo: new doc. - * ldgram.y, ldlex.l: understand -y<symbol> - * ldmain.c (Q_enter_file_symbols): if had -y, lookup symbol and - print info. (add_ysym): new function. - * ldsym.h: (ldsym_type): new define SYM_Y. - -Sat Nov 21 03:15:27 1992 John Gilmore (gnu@cygnus.com) - - * ldctor.h, lderror.h, ldexp.h, ldfile.h, ldindr.h, ldlang.c, - ldlang.h, ldlex.h, ldmain.h, ldmisc.h, ldsym.h, ldver.h, ldwarn.h, - ldwrite.h, relax.h: Replace all uses of EXFUN and PROTO ansi-glue - macros with PARAMS. Recreational cleanup. Update copyrights. - -Tue Nov 10 00:23:37 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: pass down the bfd source directory for includes - -Thu Nov 5 15:41:55 1992 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (lang_size_sections): don't change size and address for - SEC_SHARED_LIBRARY sections rather than for SEC_NEVER_LOAD - sections. - -Thu Nov 5 11:33:57 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * relax.c (build_it): re-enable the processing of data_statements - in scripts, makes counted contructor lists work again. - -Thu Nov 5 05:43:01 1992 John Gilmore (gnu@cygnus.com) - - * ldemul.h: Remove uses of SDEF and PROTO macros (use PARAMS). - -Tue Oct 20 10:56:06 1992 Ian Lance Taylor (ian@cygnus.com) - - * m68kcoff.sc-sh: don't use initial underscores for etext, edata - and end. - -Mon Oct 19 09:45:38 1992 Ian Lance Taylor (ian@cygnus.com) - - * Support for i386-sysv. - configure.in: check for i386-*-sysv* and i386-*-sco*. - i386coff.sc-sh: rewrote to support SVR3 by default. - ldctor.c (find_constructors): preserve stat_ptr. - ldlang.c (wild_doit): initialize vma and size of new output - section to corresponding input section. This is required for - shared library support. - (lang_size_sections): don't modify vma and size of sections which - are never loaded (for shared libraries). - ldwrite.c (copy_and_relocate): copy the contents of any section - which has contents, not just sections which are loaded (for shared - libraries). - -Thu Oct 15 15:20:26 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlang.c (size_input_section): count the sizes of all sections - we allocate. - -Thu Oct 8 09:05:25 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmisc.c (demangle,vfinfo): use the new underscore in bfd to - to demangle symbols better - -Tue Oct 6 13:08:54 1992 Ian Lance Taylor (ian@cygnus.com) - - * ldlang.c (lang_finish): don't warn if -e start symbol does not - exist when linking with -r. - -Mon Oct 5 14:07:37 1992 Ian Lance Taylor (ian@cygnus.com) - - * aout.sc-sh, m68kcoff.sc-sh: set __bss_start to the start of the - .bss segment. - -Mon Oct 5 08:55:14 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmain.c (linear_library): don't even think about processing - an object file if it's already been done - -Thu Oct 1 23:14:59 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: the hp9000/300 config file is now hp300 - -Wed Sep 30 07:34:09 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * config/z8ksim.mt: new file - -Fri Sep 25 13:49:52 1992 Ken Raeburn (raeburn@kyriath.cygnus.com) - - * Makefile.in (ldexp.o, ldctor.o, ldlang.o, ldmain.o, ldwrite.o, - lexsup.o, mri.o, relax.o): Indicate dependence on ldgram.h. - - * ld.h (strip_symbols_type): Add value STRIP_SOME. - * ldgram.y (OPTION_RETAIN_SYMBOLS_FILE): New terminal token. - * ldlang.c (lang_add_keepsyms_file): New function. - * ldlex.l: Handle "-retain-symbols-file". - * ldsym.c (keepsyms_file, kept_syms): New vars. - (process_keepsyms): New functihon; reads file, marks symbols for - saving. - (write_file_locals): File symbols should always be kept. - (ldsym_write): Warn about "-retain-symbols-file" overriding "-S" - and "-s". Process retain-symbols file before setting symtab. - * ldsym.h (SYM_KEEP): New flag for ldsym_type flags. - (keepsyms_file, kept_syms): Declare them. - - * ldmain.c (main): Non-fatal errors should still cause non-zero - exit status even with -r. - -Fri Sep 25 11:08:01 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - Added initial support for the z8k - * z8ksim.em, z8ksim.sc-sh, z8ksim.sh: new files - * configure.in, Makefile.in: modified to reflect above - - * ldlang.c (lang_check): when linking conflicting architectures, - make the output file reflect at least one of the bad inputs. - -Tue Sep 15 15:35:38 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (install): if $(tooldir) exists, install ld in - $(tooldir)/bin. - -Fri Sep 11 10:24:22 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * Makefile.in, configure.in: modified to support i386-coff - * i386coff.sh: new file - -Wed Sep 9 11:52:58 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in, m68kcoff.sh, m68kcoff.sc-sh, config/m68k-coff.mt: - added m68k-coff emulation mode, stolen from a29k emulation. - Almost certainly wrong, but perhaps better than sun3. - -Thu Sep 3 14:19:30 1992 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in, Makefile.dos, generic.em, genscripts.sh, - gld960.em, h8300hms.em, h8300xray.em, lnk960.em, st2000.em, - vanilla.em: Rename all (generated) ld__*.c files to em_.c. - This is one character shorter, and lets people build on - SVR3 system. (ld__h8300xray.[co] was the killer there; - h8300xray.sc-sh is also overlong, but seems harmless.) - Based on a patch from Jonathan Ryshpan <hitachi!amito!jon>. - * Makefile.in (clean): Fix typo mostclean -> mostlyclean. - * configure.in: Add host isc. - - * ldver.c: Call it version 2.0. - -Wed Sep 2 00:21:33 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldver.c: Bump to version 0.98. - * TODO: New file. - - * Makefile.in: Added mostlyclean, distclean, realclean rules. - -Tue Sep 1 23:42:16 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldmisc.c (xrealloc): New (needed by ../libiberty/cplus.dem.c). - * ldlex.l: Moved comment() to end, since some compilers - otherwise have problems with input() used before it is defined. - -Tue Sep 1 17:45:51 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: added Solaris 2 and Irix 4 host support. - -Mon Aug 31 19:27:11 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: remove -S flag from the FLEX definition - - * configure.in: rewrote, using new style case statement. use - m68k.mt for m68k-aout systems - -Sun Aug 30 21:38:53 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: map "ld" through program_transform_name when - installing. - -Sun Aug 30 18:12:13 1992 Per Bothner (bothner@rtl.cygnus.com) - - * cplus-dem.c: Removed. Use the version in libiberty now. - * ldmisc.c: Use new libiberty version of cplus_demangle(). - -Thu Aug 27 16:38:42 1992 Ian Lance Taylor (ian@cygnus.com) - - * gld960.em (gld960_choose_target): default to little endian, not - big endian. - -Wed Aug 26 17:28:51 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlang.c (lang_process): don't pass null pointers when - abs_output_section is what is required. - * ldwrite.c (ldwrite): use malloc to allocate the largest space - used, and pass that down. - * relax.c,relax.h (write_relaxnorel): use the passed malloc area rather - than alloca. - -Mon Aug 24 14:42:06 1992 Ian Lance Taylor (ian@cygnus.com) - - * configure.in, config/ose68.mt: renamed OSE to ose. - -Thu Aug 20 19:55:22 1992 Ken Raeburn (raeburn@cygnus.com) - - * ldsym.c (write_file_locals): Reorder check for common or - undefined symbols so that it works. - -Tue Aug 18 13:41:36 1992 Ian Lance Taylor (ian@cygnus.com) - - * configure.in: accept all m68K family members. - - * Makefile.in: always create installation directories. - -Thu Aug 13 11:49:34 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlex.l: now parses comment correctly, added ~ to acceptable - chars in filenames - - * ldexp.c (exp_unop): pass down abs_output_section - now can have - unary -ve constants. - - * ldlang.c (lang_finish): warn when an entry symbol supplied on - the command line can't be found. - -Fri Aug 7 12:31:10 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlang.h: add new field "loadable" to output_section_statement. - * ldlang.c (lang_output_section_statement_lookup): initilize new - field. (wild_doit): if new field is not set, then stop output - section from being loadable. - (lang_enter_output_section_statement): set the field from the - NOLOAD keyword - * ldgram.y: new synax for NOLOAD. Removes a shift/reduce too. - * h8300hms.sc-sh, h8300hms.em: get -r right. - -Thu Aug 6 18:35:21 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldint.texinfo: New internals manual (beginnings thereof). - * PORTING: Removed, merged into ldint.texinfo. - -Tue Aug 4 21:12:29 1992 Per Bothner (bothner@rtl.cygnus.com) - - * cdtest-main.cc, cdtest-func.cc, cdtest-foo.h, cdtest-foo.cc, - cdtest.exp: A test program (copied from libg++/test-install) - that tests that constructor and destructors are handled - corrrectly. - -Mon Aug 3 14:58:19 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in (install): install from ld.new, renaming during the - copy, or else the next 'make install' needs to re-link ld. - -Mon Jul 20 03:37:06 1992 D. V. Henkel-Wallace (gumby@cygnus.com) - - * configure.in: generalise hp recognition (from sef). - -Sat Jul 18 14:46:04 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: recognize bsd and hpux hppa configurations. - error messages echo to stderr, not stdout - -Fri Jul 17 22:06:11 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.dos, gld.1, ld.texinfo, ldemul.c, ldfile.c, ldlang.c, - ldmisc.c: removed rcsid's. - -Tue Jul 14 08:34:34 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlang.c (lang_map): print changes in sizes due to relaxing - (size_input_section): maintain the delta information. - * ldlang.h: add new field to struct to contain delta info. - * relax.c (relax_section): complain if input not relaxable. - * ldlex.l : add '_', ',' and '$' to chars which can appear at the - start of a filename - -Mon Jul 13 17:33:00 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmain.c(main): prevent -r and -relax from being on at the same - time. - -Wed Jul 1 17:51:19 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmain.c (Q_enter_global_ref), ldindr.c (add_indirect): fix for - aliasing problems - - -Thu Jun 18 09:38:56 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * h8300hms.em, h8300hms.sc-sh: do the right thing for -r - * ldexp.c: lint - * ldlang.c(open_output): set the target arch and machine as soon - as we can. (lang_size_sections): use new macros for setting vma - * ldwrite.c: lint - -Mon Jun 15 08:47:43 1992 Michael Tiemann (tiemann@rtl.cygnus.com) - - * configure.in (my_target): Accept m680?0 for wrs as vxworks68. - Also deleted an unreachable path to wrs. - -Wed May 27 23:24:19 1992 Michael Tiemann (tiemann@rtl.cygnus.com) - - * Makefile.in (install): use -d test for $tooldir before - installing ld there so that $tooldir can be inherited from - top-level Makefile. - -Wed May 27 16:56:48 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldlang.c: Two non-substantial changes for the sake of - the old Portable C Compiler. - -Wed May 27 15:15:58 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldgram.y, ldlex.l: parse ABSOLUTE - * ldexp.c: add support for ABSOLUTE - -Wed May 27 13:07:20 1992 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in: Added default definitions for HOSTING_CRT0, - HOSTING_LIBS, and HOSTING_EMU, based on those in config/*.mh. - * config/*.mh: Miscellaneous clean-up: Removed definitions - of YACC (since it is not longer used in the Makefile). - Remove HOSTING_* definitions that are subsumed by the - ones added to Makefile.in. Removed most definitions of CC. - * config/{sparc,news,hp300bsd,decstation}.mh: Removed; - These are no longer needed. - -Fri May 22 13:47:19 1992 Per Bothner (bothner@cygnus.com) - - * Makefile.in: Use srcdir instead of VPATH in ldgram/ldlex - rules, since these are used when building a distribution. - * Makefile.in (ldlex.c): Don't re-direct output, since that - leaves a bogus output files if it fails. - - * config/sparc.mh: Fix HOSTING_LIBS so it has a chance of working. - * ldlex.c: Fix some unnecessary flex-specific-isms. - -Fri May 8 11:49:43 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldgram.y: move spurious semicolon - * ldexp.h: fix prototype - -Thu May 7 17:01:12 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * ld.texinfo: references to linker now say "ld" not "gld". - -Wed May 6 13:26:19 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - changed calling convention for Q_enter_global_ref - * ldexp.c, ldlang.c, ldmain.c: reflect this - * ldver.c: bump version to 1.97.1 - * ldindr.c (add_indirect): when an edict declaring an indirect - symbol is found, make sure that any ideas about the symbol being - common are changed if it now known to be defined. - * ldmain.c (linear_library): complain once if archive isn't - ranlibbed. - * ldlang.h, ldlang.c: make room for and initialize the complain - once field. - -Wed May 6 11:07:35 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.in: use flex & bison from ../ if they exist. - -Tue May 5 17:47:33 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * relax.c (build_it): don't allocate space in the output file for - stuff if -R flag applys to it. - * ldfile.c: merge in VMS filename support - * ldmain.c (main): take out ./ from library path, and close file - before unlinking. Make multiple defs of a symbol create an - unexecable file. - * ldmisc.c: fatal errosrs delete output file - -Tue May 5 14:05:05 1992 Per Bothner (bothner@rtl.cygnus.com) - - * ldver.c: Increase version number to 1.97, for consistency - with ../binutils. - -Tue May 5 12:12:24 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: FLEX -> LEX. - - * ld.texinfo: {} -> @{@}. - -Mon May 4 17:52:41 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * ld.texinfo: describe alternate, MRI-compatible linker scripts - (and associated change in -c option, now used for these scripts) - -Mon May 4 16:10:10 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldver.c: Bumped version to 1.96 - new release, resync with the - bfd too #. - * ldexp.c, ldlang.c: now build memory shape tree in obstacks - rather than with raw malloc, makes it easier to track where memory - is going. - * ldsym.h, ldsym.c: create obstack for all global symbols too. - * ldwrite.c (ldwrite): moved malloc so only used when needed. - * sa29200-sc.sh: added support for .lit, data1 and data2 sections. - - -Fri May 1 18:17:52 1992 K. Richard Pixley (rich@cygnus.com) - - * config/sparc.mh: use ../gcc/libgcc.a on check if it exists. - - * Makefile.in: use bootstrap for check. - -Fri May 1 13:03:41 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldgram.y, ldlex.c, mri.c: added more compatible words; BASE, ALIAS and - PUBLIC. - * Makefile.in: now use flex, not lex - * ldlex.l, ldlang.c, ldctor.c: lint - -Wed Apr 22 12:48:42 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlex.l: added CMDFILENAMECHAR state so that you can lex - different sorts of filenames on the command line than in a script. - -Mon Apr 20 22:37:04 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.in: rework CFLAGS so that they can be passed on the - make command line. Remove MINUS_G. Default CFLAGS to -g. - -Fri Apr 17 08:57:17 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * relax.c: added handling for new "padding" seclet type, used to - fill out gaps between section. - * ldgram.y, ldlex.l: now -defsym on the command line is done - properly. - -Wed Apr 15 21:20:07 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.in: the tooldir copy of ld goes directly in tooldir. - -Wed Apr 15 16:09:33 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * mri.c, ldgram.y, ldlex.l: added support for minimal strange link - scripts. - -Thu Apr 9 05:52:02 1992 Ken Raeburn (Raeburn@Cygnus.COM) - - * Makefile.in (install): Install second copy in $(tooldir)/bin - without $(program_prefix), since that's what gcc expects. - -Sat Apr 4 17:44:06 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldlex.l, ldgram.y, ldlex.h: Rewrote lexer. Now it's much nicer. - * h8300*: fix bit rot and add support for h8300xray target - * go32.sh: target emulation for go32. - -Mon Mar 16 14:53:29 1992 Steve Chamberlain (sac@rtl.cygnus.com) - - * gld960.em, i960.sc-sh. Fix i960 bit rot - -Fri Mar 13 19:47:22 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: install man page. - -Fri Mar 13 08:23:59 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * config/mt-<foo> renamed to <foo>.mt - * config/mh-<foo> renamed to <foo>.mt - * configure.in changed to reflect this - * genscripts.sh now make .xbn files rather than .xN files - -Sat Mar 7 03:40:40 1992 K. Richard Pixley (rich@cygnus.com) - - * ldver.h: fix decl of ldversion. - -Fri Mar 6 22:00:35 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: added check target. - -Fri Mar 6 06:59:04 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldmain.c (Q_enter_file_symbols): now aliases work again - -Thu Mar 5 21:39:29 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: added clean-info target. - -Thu Mar 5 16:55:56 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * ldexp.c (exp_print_tree): don't try and follow null pointers - around. - * ldgram.y: remove 11 shift reduce errors - -Tue Mar 3 15:46:39 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.in: added tooldir and program_prefix. - -Fri Feb 28 08:17:45 1992 Steve Chamberlain (sac at thepub.cygnus.com) - - * ldlang.c (size_input_section): don't move absolute sections - around! - - -Thu Feb 27 09:20:41 1992 Steve Chamberlain (sac at thepub.cygnus.com) - - * cplus-dem.c: yet another copy of this - maybe it should go into - libiberty ? - * ldgram.y: now -V and -v have different actions - * ldver.c: if -V, prints list of emulations compiled in - * ldmisc.c: support for cplus demangling - - -Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in, configure.in: removed traces of namesubdir, - -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced - copyrights to '92, changed some from Cygnus to FSF. - -Thu Feb 20 17:43:46 1992 Per Bothner (bothner at cygnus.com) - - * Makefile.in: Change mkscript rule into one for ./mkscript - (for the sake of makes that don't realize they're the same). - * PORTING: Add more details. - * genscripts.sh: Add more tailorability of DATA_ALIGNMENT. - -Mon Feb 17 12:04:36 1992 Per Bothner (bothner at cygnus.com) - - * Makefile.in, and new files hp300bsd.sh, config/mh-hp300bsd, - config/mt-hp300bsd: New port to hp300 running BSD. - -Sat Feb 15 13:59:54 1992 Per Bothner (bothner at cygnus.com) - - Major rewrite of how ld is configured. The major idea - is to use shell scripts to generate everything. - * generic.em replaces ldtemplate. - * Other *.em files replace various *.c files. - A *.em file is a shell script that generates the corresponding - ld__*.c file that implements an emulation. This is usually - a straight 'cat' of a here-document, possibly with substitutions. - * Script files (*.sc) are places by *.sc-sh scripts. - Again, these are simple shell scripts that 'cat' - here-documents, usually with some substitutions. - The output a *.sc-sh is a script file. - * Each emulation is defined by a short shell script with - extension *.sh that specifies the emulation-specific - parameters (such as the name of the *.sh-sc and *.em - files to use). - * genscript.sh is the master shell script used to generate - an emulation. It is passed various argument, including - the name a the emulation-speciic *.sh file that it - "sources" to set variables to emulation-specifc parameters. - * config/mt-foo: Changed EMUL=GLDFOO_EMULATION_NAME - to EMUL=foo. (The GLDFOO_EMULATION_NAMEs have bee removed.) - * config/mh-foo: Rename LDEMULATION names as appropriate - (usually 'gldfoo' -> plain 'foo'). - * ldwrite.c: Fixed a typo in a comment. - * Makefile.in: Major changes. Removed some the sed - magic to converts scripts, since that is now handled - by genscripts.sh and the *.sc-sh scipt generators. - * config.h: Remove a bunch of macros defining emulations - and targets. This becomes one less file to edit when - adding emulations or targets. - * ldemul.h (struct ld_emulation_xfer_struct): Add - emulation_name and target_name fields. - * ldemul.c, ldemul.h: Define some default functions used - by most emulations (and remove from the *.em scripts). - * ldemul.c (ldemul_choose_target): Search the new - ld_emulations array using a loop (instead of a hardwired - nested if statement). - Define the ld_emulation from the automatically-geenrated - ldemul-list.h. This means you no longer have to edit ldemul.c - to add a new emulation. - * ldmain.c: Replace {GLD,LNK}960_EMULATION_NAME by - their expansions, since the former no longer exist. - * PORTING: A very rough first draft of a porting guide. - - * ldgram.y, ldlex.l, lexsup.c: Changes to allow an assignment - to be terminated by a new-line (instead of requiring a semicolon). - -Mon Feb 10 16:21:02 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * ldexp.c, ldlang.c: added new idea "abs_output_section", removes - tests for NULL pointers all over the place. - * ldlang.c (lang_process): remember to relocate global symbols - *after* relaxing has done it stuff. - -Thu Feb 6 11:40:15 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * config/mt-coff-h8300: use EMUL like everything else - * ldlang.c: (print_padding_statement): print the right address. - * Makefile.in, config.h, ldemul.c: renamed h8300hds to h8300hms - - -Tue Feb 4 15:28:01 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * ldlex.l: Put pack -noinhibit-exec and -sort-common - * ldlang.c (print_data_statement): print the right address. - -Thu Jan 30 17:51:53 1992 Per Bothner (bothner at cygnus.com) - - * Makefile.in: The rule for testing ld by re-linking itself - via an intermediate -r link was moved to the ld1 rule - instead of the ld2 rule. This allows ld2 and ld3 to be identical, - which allows the bootstrap rule to work. - * ldctor.c (find_constructors): Don't create a constructor - list if it is already defined (as would happen if ld is - invoked by collect). - -Wed Jan 29 08:35:39 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * config/mh-sparc.h: now uses libgcc.a - * ldmain.c: quit using exit - * *sc: use *(COMMON) rather than [COMMON] - * ldlex.l, lexsup.c: much thinking moved from .l and put into .c, - to allow preprocessing of .l file. - * Makefile.in: New ldlex.l mangling - * ldexp.c (fold_binary): perform expressions with % and / in - integer. - * ldfile.c (open_a): open archives on VMS in a special way - - -Tue Jan 28 10:18:16 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * ldgram.y: map -M behave in the same way as -Map (sets file name - to be "-". - * ldsym.c, ldlang.c: remember that size of a section is dependent on - whether or not relaxing has been done. - * ldmain.c: don't open a map file if it doesn't have a name - * relax.c: all the brains have moved into bfd. - * ldwrite.c: ammend comment - -Fri Jan 24 14:23:46 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * Makefile.in: added relax, also made three stage go through a - partial link stage. - * relax.c : added - * config.h: if GNU960 defined, then default emulation mode is - GLD960 - * ldexp.h, ldexp.c: map to file hooks - * ldlang.c: map to file hooks - * ldgram.y: added -Map -relax - * ldlex.l: added -relax, -Map - * ldmain.c: open map file - * ldmisc.c: support for map file - * ldwrite.c: new relax magic - -Thu Dec 19 18:49:51 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in, config/tm-*.h: Clean up make output, only - pass DEFAULT_EMULATION to ldmain.c. - -Wed Dec 18 15:02:47 1991 Per Bothner (bothner at cygnus.com) - - * ldver.c: Bump to version 1.94. - -Tue Dec 10 04:07:23 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: infodir belongs in datadir. - -Mon Dec 9 16:26:43 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in: Pass -y to bison. (Again; - accidentally deleted by Rich.) - * news.sc, ldgld68k.sc: Define __end as well as _end. - -Sat Dec 7 17:19:26 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * ldindr.h: added to contain prototypes of ldindr.c - * ldfile.c: include ctype.h - * ldmain.c: include the requried prototype headers - * ldwrite.c: get_reloc_upper_bound has been renamed - bfd_get_reloc_upper_bound - -Fri Dec 6 23:29:26 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: punt "fundamental" mode because it breaks my emacs - macros. install using INSTALL_PROGRAM and INSTALL_DATA. remove - spaces following hyphens, bsd make can't cope. added - standards.text support and made it look like all the other - makefiles. - - * configure.in: configure now runs entirely in objdir so make file - existence checks against ${srcdir}. Mark this directory as - target dependent. - -Thu Dec 5 22:46:16 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: idestdir and ddestdir go away. Added copyrights - and shift gpl to v2. Added ChangeLog if it didn't exist. docdir - and mandir now keyed off datadir by default. - -Wed Dec 4 23:36:55 1991 Per Bothner (bothner at cygnus.com) - - * ldver.c: Bumped version to 1.93. - * Makefile.in: Pass -y to bison. - -Mon Nov 25 18:28:40 1991 Steve Chamberlain (sac at cygnus.com) - - * config.h: h8 is now coff, not ieee - * h8300hds.sc: reflect the same - -Thu Nov 14 19:55:09 1991 Per Bothner (bothner at cygnus.com) - - * ldver.c (ldversion()): Update to 1.92. - * ldctor.c: There are two places constructor sets - can be defined. One of them checked for an existing - duplicate, the other didn't. Unfortunately, the latter - was called after the former ... - So, factor out code for inserting a new element into - constructor_name_list (after checking for a duplicate) - into a new function add_constructor_name, and call - it from both aforementioned places (ldlang_add_constructor - and ldlang_check_for_constructors). - -Wed Nov 13 15:17:43 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in: Rename .c files generated from ldtemplate - to have names starting with ld__. This helps 'make clean'. - -Tue Nov 12 18:36:50 1991 Steve Chamberlain (sac at cygnus.com) - - * Makefile.in: Take out the version number for install - * m88kbcs.sc: put in contructor blocks. - -Mon Nov 11 18:47:33 1991 Per Bothner (bothner at cygnus.com) - - * ldmisc.c, ldmisc.h: Re-write info() to take a filename - parameter, a format, and an arg pointer, and rename it to - vfinfo(). Write info() in terms of new vfinfo(). - New einfo() is the same as info(), except it writes to stderr. - * ldemul.c, ldexp.c, ldlang.c, ldlnk960.c, ldmain.c, ldwrite.c, - ldmisc.c: Replace "error" calls to info() by new einfo(). - -Mon Nov 11 09:57:32 1991 Steve Chamberlain (steve at cygnus.com) - - * ldlex.l ldgram.y: made -V option do same as -v - * Makefile.in: Added $(MINUS_G) flag so debugging can be - turned off - -Sun Nov 3 16:37:37 1991 Steve Chamberlain (steve at cygnus.com) - i386 aout changes from Bob Kukura - * Makefile.in, config.h: added i386aout support - * configure.in: fixed /h-{myhost} typo - * ldgram.y: -MM now gives more boring map. - * ldlang.c: now does D_PAGED flag the right way. - * ldsym.c: -MM flags does the right thing. - -Sun Nov 3 15:00:03 1991 Per Bothner (bothner at cygnus.com) - - * configure.in: Fixed typo. Also, a fix for hp300bsd. - * ldlang.c (init_os): Compensate for BFD change, - where bfd_make_section now returns NULL for a duplicate - section request, instead of the old section. - -Thu Oct 17 15:27:13 1991 Per Bothner (bothner at cygnus.com) - - * ldver.c: Bump to version 1.91 (consistent with binutils). - -Wed Oct 16 12:27:08 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in, config.h, ld.h, ldemul.c, ldexp.c, ldexp.h, - ldgram.y, ldlex.l, ldlnk960.c, ldmain.c, ldmisc.c, ldmisc.h, - ldsym.c, ldsym.h, ldtemplate, ldvanilla.c, ldver.c, ldver.h, - ldwarn.c, ldwarn.h, ldwrite.c, ldwrite.h, mkscript.c: - Add or update copyright notices. - -Mon Oct 14 23:55:27 1991 Per Bothner (bothner at cygnus.com) - - * README: New file. - * Makefile.in: Changed installation directory name scheme - to be consistent with gcc. Also changed 'install'. - -Mon Oct 14 17:30:02 1991 Roland H. Pesch (pesch at cygnus.com) - - * Makefile.in: new targets ld.mm, ld.me - -Mon Oct 14 17:27:24 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in, ldtemplate: Need to use separate scripts - for -n and -N options. Yet more complication. - -Fri Oct 11 22:40:46 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Avoid using $< in explicit Make rules (it doesn't - work). Add some lines to avoid Sun Make VPATH bugs. - -Fri Oct 11 16:42:22 1991 Per Bothner (bothner at cygnus.com) - - * news.sc: Add alignment for data segment. - * ldtemplate: Add (yet another) script to get for -n or -N - options. (These need different alignment than ZMAGIC files.) - * Makefile.in: Add stuff for new foo.xn scripts. - These are generated by replacing "ALIGN(0x...00)" by ".". - -Fri Oct 11 15:43:04 1991 Roland H. Pesch (pesch at cygnus.com) - - * Makefile.in: new targets ld.ms, ld-index.ms - ld.texinfo: remove tabs, other cleanups for texi2roff - -Fri Oct 11 13:51:54 1991 Per Bothner (bothner at cygnus.com) - - * ldmain.c (main): Make config.magic_demand_paged be true - by default. Don't the WP_TEXT and D_PAGED flags of - output_bfd here; it's too late, so set it when output_bfd - is created (in ldlang.c). Also fix setting of EXEC_P flag - * ldlang.c (ldlang_open_output): Set output_bfd->flags here. - * ldlang.c: Remove some duplicate extern declarations. - * ldgram.y: Fixes to -N and -n options. - * Makefile.in: Recognize upper case letters in sed script - to remove assignments from script files. - * ldtemplate: Don't assukme that -N or -n options - imply use of -r script. - * mkscript.c: Tweaking to correctly handle \n and \\ in input. - -Fri Oct 11 10:29:27 1991 Steve Chamberlain (steve at cygnus.com) - - * ldtemplate: include bfd.h before sysdep.h. - -Fri Oct 11 04:24:45 1991 John Gilmore (gnu at cygnus.com) - - Restructure configuration scheme for bfd, binutils, ld. - - * include/sys/h-*.h: Move to bfd/hosts/h-*.h. - * configure.in: Revise to symlink sysdep.h to ../bfd/hosts/h-xxx.h. - Change some config names to match other dirs. - * *.c: Include bfd.h before sysdep.h, so ansidecl and PROTO() - get defined first. - * config/: Rename some config files to match up h-*.h names. - Remove all the HOST_SYS definitions from the config files. - -Tue Oct 8 16:00:57 1991 Per Bothner (bothner at cygnus.com) - - * ldexp.h, ldlang.h: Change enum boolean -> enum bfd_boolean. - * ldtemplate: Remove ldfile_add_library_path calls; - just use the SEARCH_DIR commands in the script files. - * Makefile.in: Add LIB_PATH macro, which if set is used to replace - the SEARCH_DIR commands in the scripts (using ugly sed magic). - This is primarily intended for cross-linking, where you would - place libaries in a different place than native libraries. - Also, emulations made from ldtemplate now use $(srcdir). - * ldglda29k.sc: Change SEARCH_DIR commands to a conventional - form; people can use the Makefile's LIB_PATH to override. - -Tue Oct 8 14:51:21 1991 Roland H. Pesch (pesch at cygnus.com) - - * Makefile.in: fix target ld.dvi, add target ld.info - ld.texinfo: make info filename ld.info - -Fri Oct 4 21:51:58 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Avoid using $< in non-suffix rules (breaks on Sun - Make). - * ldfile.c, ldlang.c, ldmain.c, ldwrite.c: Cope with renames of a - few BFD types & enums. - - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/contrib/binutils/ld/Makefile.am b/contrib/binutils/ld/Makefile.am deleted file mode 100644 index e5be23d708b9..000000000000 --- a/contrib/binutils/ld/Makefile.am +++ /dev/null @@ -1,778 +0,0 @@ -## Process this file with automake to generate Makefile.in - -AUTOMAKE_OPTIONS = cygnus dejagnu - -tooldir = $(exec_prefix)/$(target_alias) - -YACC = `if [ -f ../bison/bison ] ; then echo ../bison/bison -y -L../bison/bison ; else echo bison -y ; fi` -YFLAGS = -d -LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo flex ; fi` - -# We put the scripts in the directory $(scriptdir)/ldscripts. -# We can't put the scripts in $(datadir) because the SEARCH_DIR -# directives need to be different for native and cross linkers. -scriptdir = $(tooldir)/lib - -EMUL = @EMUL@ -EMULATION_OFILES = @EMULATION_OFILES@ - -# Search path to override the default search path for -lfoo libraries. -# If LIB_PATH is empty, the ones in the script (if any) are left alone. -# (The default is usually /lib:/usr/lib:/usr/local/lib, unless building -# a cross-linker, in which case the default is empty. See genscripts.sh.) -# Otherwise, they are replaced with the ones given in LIB_PATH, -# which may have the form: LIB_PATH=/lib:/usr/local/lib -LIB_PATH = - -BASEDIR = $(srcdir)/.. -BFDDIR = $(BASEDIR)/bfd -INCDIR = $(BASEDIR)/include -DEP = mkdep - -# What version of the manual to build -DOCVER = gen - -#stuff for self hosting (can be overridden in config file). -HOSTING_CRT0 = @HOSTING_CRT0@ -HOSTING_LIBS = @HOSTING_LIBS@ -HOSTING_EMU = -m $(EMUL) - -# Setup the testing framework, if you have one -EXPECT = `if [ -f $$r/../expect/expect ] ; \ - then echo $$r/../expect/expect ; \ - else echo expect ; fi` - -RUNTEST = `if [ -f $${srcroot}/../dejagnu/runtest ] ; \ - then echo $${srcroot}/../dejagnu/runtest ; \ - else echo runtest ; fi` - -RUNTESTFLAGS = - -CC_FOR_TARGET = ` \ - if [ -f $$r/../gcc/xgcc ] ; then \ - if [ -f $$r/../newlib/Makefile ] ; then \ - echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \ - else \ - echo $$r/../gcc/xgcc -B$$r/../gcc/; \ - fi; \ - else \ - if [ "@host@" = "@target@" ] ; then \ - echo $(CC); \ - else \ - echo gcc | sed '$(transform)'; \ - fi; \ - fi` - -CXX = gcc -CXX_FOR_TARGET = ` \ - if [ -f $$r/../gcc/xgcc ] ; then \ - if [ -f $$r/../newlib/Makefile ] ; then \ - echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \ - else \ - echo $$r/../gcc/xgcc -B$$r/../gcc/; \ - fi; \ - else \ - if [ "@host@" = "@target@" ] ; then \ - echo $(CXX); \ - else \ - echo gcc | sed '$(transform)'; \ - fi; \ - fi` - -noinst_PROGRAMS = ld-new -info_TEXINFOS = ld.texinfo -noinst_TEXINFOS = ldint.texinfo -man_MANS = ld.1 - -INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) $(HDEFINES) $(CFLAGS) - -BFDLIB = ../bfd/libbfd.la -LIBIBERTY = ../libiberty/libiberty.a - -ALL_EMULATIONS = \ - ea29k.o \ - eaixppc.o \ - eaixrs6.o \ - ealpha.o \ - earcelf.o \ - earmaoutb.o \ - earmaoutl.o \ - earmcoff.o \ - earmpe.o \ - ecoff_sparc.o \ - ed10velf.o \ - edelta68.o \ - eebmon29k.o \ - eelf32_sparc.o \ - eelf32b4300.o \ - eelf32bmip.o \ - eelf32ebmip.o \ - eelf32elmip.o \ - eelf32l4300.o \ - eelf32lmip.o \ - eelf32lppc.o \ - eelf32ppc.o \ - eelf_i386.o \ - egld960.o \ - egld960coff.o \ - ego32.o \ - eh8300.o \ - eh8300h.o \ - eh8300s.o \ - eh8500.o \ - eh8500b.o \ - eh8500c.o \ - eh8500m.o \ - eh8500s.o \ - ehp300bsd.o \ - ehp3hpux.o \ - ehppaelf.o \ - ei386aout.o \ - ei386bsd.o \ - ei386coff.o \ - ei386go32.o \ - ei386linux.o \ - ei386lynx.o \ - ei386mach.o \ - ei386moss.o \ - ei386msdos.o \ - ei386nbsd.o \ - ei386nw.o \ - ei386pe.o \ - elnk960.o \ - em68k4knbsd.o \ - em68kaout.o \ - em68kaux.o \ - em68kcoff.o \ - em68kelf.o \ - em68klinux.o \ - em68klynx.o \ - em68knbsd.o \ - em68kpsos.o \ - em88kbcs.o \ - emipsbig.o \ - emipsbsd.o \ - emipsidt.o \ - emipsidtl.o \ - emipslit.o \ - emipslnews.o \ - enews.o \ - ens32knbsd.o \ - epc532macha.o \ - eppcmacos.o \ - eppcnw.o \ - eppcpe.o \ - eriscix.o \ - esa29200.o \ - esh.o \ - eshelf.o \ - eshlelf.o \ - eshl.o \ - esparcaout.o \ - esparclinux.o \ - esparclynx.o \ - esparcnbsd.o \ - est2000.o \ - esun3.o \ - esun4.o \ - etic30aout.o \ - etic30coff.o \ - evanilla.o \ - evax.o \ - evsta.o \ - ew65.o \ - ez8001.o \ - ez8002.o - -ALL_64_EMULATIONS = \ - eelf64_sparc.o \ - eelf64alpha.o - -CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \ - ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \ - mri.c ldcref.c - -HFILES = config.h ld.h ldctor.h ldemul.h ldexp.h ldfile.h \ - ldlang.h ldlex.h ldmain.h ldmisc.h ldver.h \ - ldwrite.h mri.h - -GENERATED_CFILES = ldgram.c ldlex.c -GENERATED_HFILES = ldgram.h ldemul-list.h - -OFILES = ldgram.o ldlex.o lexsup.o ldlang.o mri.o ldctor.o ldmain.o \ - ldwrite.o ldexp.o ldemul.o ldver.o ldmisc.o \ - ldfile.o ldcref.o ${EMULATION_OFILES} - -STAGESTUFF = *.o ldscripts/* e*.c - -ldmain.o: ldmain.c config.status - $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' -DSCRIPTDIR='"$(scriptdir)"' -DTARGET='"@target@"' $(srcdir)/ldmain.c - -ldemul-list.h: Makefile - (echo "/* This file is automatically generated. DO NOT EDIT! */";\ - for f in `echo " " ${EMULATION_OFILES} "" \ - | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \ - echo "extern ld_emulation_xfer_type ld_$${f}_emulation;"; \ - done;\ - echo "";\ - echo "#define EMULATION_LIST \\";\ - for f in `echo " " ${EMULATION_OFILES} "" \ - | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \ - echo " &ld_$${f}_emulation, \\"; \ - done;\ - echo " 0") >ldemul-tmp.h - mv ldemul-tmp.h ldemul-list.h - -# These all start with e so 'make clean' can find them. - -GENSCRIPTS = $(SHELL) $(srcdir)/genscripts.sh ${srcdir} ${libdir} @host@ @target@ @target_alias@ ${EMUL} "@NATIVE_LIB_DIRS@" -GEN_DEPENDS = $(srcdir)/genscripts.sh $(srcdir)/emultempl/stringify.sed -@TDIRS@ - -ea29k.c: $(srcdir)/emulparams/a29k.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/a29k.sc ${GEN_DEPENDS} - ${GENSCRIPTS} a29k "$(tdir_a29k)" -eaixppc.c: $(srcdir)/emulparams/aixppc.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} aixppc "$(tdir_aixppc)" -eaixrs6.c: $(srcdir)/emulparams/aixrs6.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} aixrs6 "$(tdir_aixrs6)" -ealpha.c: $(srcdir)/emulparams/alpha.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/alpha.sc ${GEN_DEPENDS} - ${GENSCRIPTS} alpha "$(tdir_alpha)" -earcelf.c: $(srcdir)/emulparams/arcelf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} arcelf "$(tdir_arcelf)" -earmaoutb.c: $(srcdir)/emulparams/armaoutb.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armaoutb "$(tdir_armaoutb)" -earmaoutl.c: $(srcdir)/emulparams/armaoutl.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armaoutl "$(tdir_armaoutl)" -earmcoff.c: $(srcdir)/emulparams/armcoff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armcoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armcoff "$(tdir_armcoff)" -earmpe.c: $(srcdir)/emulparams/armpe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armpe "$(tdir_armpe)" -ecoff_sparc.c: $(srcdir)/emulparams/coff_sparc.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparccoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} coff_sparc "$(tdir_coff_sparc)" -ed10velf.c: $(srcdir)/emulparams/d10velf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS} - ${GENSCRIPTS} d10velf "$(tdir_d10v)" -edelta68.c: $(srcdir)/emulparams/delta68.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS} - ${GENSCRIPTS} delta68 "$(tdir_delta68)" -eebmon29k.c: $(srcdir)/emulparams/ebmon29k.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/ebmon29k.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ebmon29k "$(tdir_ebmon29k)" -em32relf.c: $(srcdir)/emulparams/m32relf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m32relf "$(tdir_m32r)" -eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)" -eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)" -eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)" -eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)" -eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)" -eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)" -eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)" -eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)" -eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfppc.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)" -eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)" -eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfppc.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)" -eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)" -eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)" -eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)" -egld960.c: $(srcdir)/emulparams/gld960.sh \ - $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} gld960 "$(tdir_gld960)" -egld960coff.c: $(srcdir)/emulparams/gld960coff.sh \ - $(srcdir)/emultempl/gld960c.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} gld960coff "$(tdir_gld960coff)" -ego32.c: $(srcdir)/emulparams/go32.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} go32 "$(tdir_go32)" -eh8300.c: $(srcdir)/emulparams/h8300.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300 "$(tdir_h8300)" -eh8300h.c: $(srcdir)/emulparams/h8300h.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300h "$(tdir_h8300h)" -eh8300s.c: $(srcdir)/emulparams/h8300s.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300s.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300s "$(tdir_h8300s)" -eh8500.c: $(srcdir)/emulparams/h8500.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500 "$(tdir_h8500)" -eh8500b.c: $(srcdir)/emulparams/h8500b.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500b.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500b "$(tdir_h8500b)" -eh8500c.c: $(srcdir)/emulparams/h8500c.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500c.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500c "$(tdir_h8500c)" -eh8500m.c: $(srcdir)/emulparams/h8500m.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500m.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500m "$(tdir_h8500m)" -eh8500s.c: $(srcdir)/emulparams/h8500s.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500s.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500s "$(tdir_h8500s)" -ehp300bsd.c: $(srcdir)/emulparams/hp300bsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hp300bsd "$(tdir_hp300bsd)" -ehp3hpux.c: $(srcdir)/emulparams/hp3hpux.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hp3hpux "$(tdir_hp3hpux)" -ehppaelf.c: $(srcdir)/emulparams/hppaelf.sh \ - $(srcdir)/emultempl/hppaelf.em $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)" -ei386aout.c: $(srcdir)/emulparams/i386aout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386aout "$(tdir_i386aout)" -ei386bsd.c: $(srcdir)/emulparams/i386bsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386bsd "$(tdir_i386bsd)" -ei386coff.c: $(srcdir)/emulparams/i386coff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386coff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386coff "$(tdir_i386coff)" -ei386go32.c: $(srcdir)/emulparams/i386go32.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386go32.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386go32 "$(tdir_i386go32)" -ei386linux.c: $(srcdir)/emulparams/i386linux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386linux "$(tdir_i386linux)" -ei386lynx.c: $(srcdir)/emulparams/i386lynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386lynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386lynx "$(tdir_i386lynx)" -ei386mach.c: $(srcdir)/emulparams/i386mach.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386mach "$(tdir_i386mach)" -ei386moss.c: $(srcdir)/emulparams/i386moss.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386moss "$(tdir_i386moss)" -ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386msdos "$(tdir_i386msdos)" -ei386nbsd.c: $(srcdir)/emulparams/i386nbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386nbsd "$(tdir_i386nbsd)" -ei386nw.c: $(srcdir)/emulparams/i386nw.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386nw "$(tdir_i386nw)" -ei386pe.c: $(srcdir)/emulparams/i386pe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386pe "$(tdir_i386pe)" -elnk960.c: $(srcdir)/emulparams/lnk960.sh \ - $(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} lnk960 "$(tdir_lnk960)" -em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68k4knbsd "$(tdir_m68k4knbsd)" -em68kaout.c: $(srcdir)/emulparams/m68kaout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kaout "$(tdir_m68kaout)" -em68kaux.c: $(srcdir)/emulparams/m68kaux.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kaux.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kaux "$(tdir_m68kaux)" -em68kcoff.c: $(srcdir)/emulparams/m68kcoff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kcoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kcoff "$(tdir_m68kcoff)" -em68kelf.c: $(srcdir)/emulparams/m68kelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)" -em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)" -em68klynx.c: $(srcdir)/emulparams/m68klynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68klynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68klynx "$(tdir_m68klynx)" -em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)" -em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)" -em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m88kbcs "$(tdir_m88kbcs)" -emipsbig.c: $(srcdir)/emulparams/mipsbig.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsbig -emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsbsd -emipsidt.c: $(srcdir)/emulparams/mipsidt.sh \ - $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)" -emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \ - $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)" -emipslit.c: $(srcdir)/emulparams/mipslit.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipslit "$(tdir_mipslit)" -emipslnews.c: $(srcdir)/emulparams/mipslnews.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipslnews -emn10300.c: $(srcdir)/emulparams/mn10300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mn10300 "$(tdir_mn10300)" -emn10200.c: $(srcdir)/emulparams/mn10200.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mn10200 "$(tdir_mn10200)" -enews.c: $(srcdir)/emulparams/news.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} news "$(tdir_news)" -ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ns32knbsd "$(tdir_ns32knbsd)" -epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} pc532macha "$(tdir_pc532macha)" -eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)" -eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcnw "$(tdir_ppcnw)" -eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcpe "$(tdir_ppcpe)" -eriscix.c: $(srcdir)/emulparams/riscix.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} riscix "$(tdir_riscix)" -esa29200.c: $(srcdir)/emulparams/sa29200.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sa29200.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sa29200 "$(tdir_sa29200)" -esh.c: $(srcdir)/emulparams/sh.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sh "$(tdir_sh)" -eshelf.c: $(srcdir)/emulparams/shelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shelf "$(tdir_shelf)" -eshlelf.c: $(srcdir)/emulparams/shlelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shlelf "$(tdir_shlelf)" -eshl.c: $(srcdir)/emulparams/shl.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shl "$(tdir_shl)" -esparcaout.c: $(srcdir)/emulparams/sparcaout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparcaout "$(tdir_sparcaout)" -esparclinux.c: $(srcdir)/emulparams/sparclinux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparclinux "$(tdir_sparclinux)" -esparclynx.c: $(srcdir)/emulparams/sparclynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparclynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparclynx "$(tdir_sparclynx)" -esparcnbsd.c: $(srcdir)/emulparams/sparcnbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparcnbsd "$(tdir_sparcnbsd)" -est2000.c: $(srcdir)/emulparams/st2000.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/st2000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} st2000 "$(tdir_st2000)" -esun3.c: $(srcdir)/emulparams/sun3.sh \ - $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sun3 "$(tdir_sun3)" -esun4.c: $(srcdir)/emulparams/sun4.sh \ - $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sun4 "$(tdir_sun4)" -etic30aout.c: $(srcdir)/emulparams/tic30aout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} tic30aout "$(tdir_tic30aout)" -etic30coff.c: $(srcdir)/emulparams/tic30coff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30coff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} tic30coff "$(tdir_tic30coff)" -evanilla.c: $(srcdir)/emulparams/vanilla.sh \ - $(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vanilla "$(tdir_vanilla)" -evax.c: $(srcdir)/emulparams/vax.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vax "$(tdir_vax)" -evsta.c: $(srcdir)/emulparams/vsta.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vsta "$(tdir_vsta)" -ev850.c: $(srcdir)/emulparams/v850.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS} - ${GENSCRIPTS} v850 "$(tdir_v850)" -ew65.c: $(srcdir)/emulparams/w65.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS} - ${GENSCRIPTS} w65 "$(tdir_w65)" -ez8001.c: $(srcdir)/emulparams/z8001.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} z8001 "$(tdir_z8001)" -ez8002.c: $(srcdir)/emulparams/z8002.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} z8002 "$(tdir_z8002)" - -ld_new_SOURCES = ldgram.y ldlex.l lexsup.c ldlang.c mri.c ldctor.c ldmain.c \ - ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c -ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(BFDLIB) $(LIBIBERTY) -ld_new_LDADD = $(EMULATION_OFILES) $(BFDLIB) $(LIBIBERTY) - -# The generated emulation files mostly have the same dependencies. -$(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \ - ld.h ldmain.h ldemul.h ldfile.h ldmisc.h ldexp.h ldlang.h \ - ldctor.h ldexp.h ldlang.h ldgram.h - -# This is the real libbfd.a created by libtool. -TESTBFDLIB = @TESTBFDLIB@ - -check-DEJAGNU: site.exp - srcroot=`cd $(srcdir) && pwd`; export srcroot; \ - r=`pwd`; export r; \ - EXPECT=$(EXPECT); export EXPECT; \ - if [ -f $(top_builddir)/../expect/expect ]; then \ - TCL_LIBRARY=`cd $(top_srcdir)/../tcl/library && pwd`; \ - export TCL_LIBRARY; \ - fi; \ - runtest=$(RUNTEST); \ - if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \ - CC="$(CC_FOR_TARGET)" CFLAGS="$(CFLAGS)" \ - CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \ - CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \ - OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \ - LIBIBERTY="$(LIBIBERTY)" HOSTING_EMU="$(HOSTING_EMU)" \ - HOSTING_CRT0="$(HOSTING_CRT0)" HOSTING_LIBS="$(HOSTING_LIBS)" \ - $(RUNTESTFLAGS); \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi - -# Rules for testing by relinking ld itself. -# A similar test is in the testsuite. This target is for ease of use -# when porting ld. - -ld-partial.o: ld-new$(EXEEXT) - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.o -r $(OFILES) -ld1$(EXEEXT): ld-partial.o - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.o $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld1-full$(EXEEXT): ld-new - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld2$(EXEEXT): ld1$(EXEEXT) - ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld3$(EXEEXT): ld2$(EXEEXT) - ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -bootstrap: ld3$(EXEEXT) - cmp ld2$(EXEEXT) ld3$(EXEEXT) - -.PHONY: bootstrap - -# A test program for C++ constructors and destructors. -# This test is now in the testsuite. -# -#cdtest: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new -# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \ -# cdtest-main.o cdtest-bar.o cdtest-foo.o $(HOSTING_LIBS) -# -#cdtest.out: cdtest -# ./cdtest > cdtest.tmp -# mv cdtest.tmp cdtest.out -# -#cdtest-ur.o: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new -# ./ld.new $(HOSTING_EMU) -o cdtest-ur.o -Ur cdtest-main.o \ -# cdtest-bar.o cdtest-foo.o -# -#cdtest-ur: cdtest-ur.o -# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.o \ -# $(HOSTING_LIBS) -# -#cdtest-ur.out: cdtest-ur -# ./cdtest-ur > cdtest-ur.tmp -# mv cdtest-ur.tmp cdtest-ur.out -# -#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp -# diff $(srcdir)/cdtest.exp cdtest.out -# diff $(srcdir)/cdtest.exp cdtest-ur.out -# -#.PHONY: check-cdtest - -# END OF CHECK TARGETS - -# DOCUMENTATION TARGETS -# Manual configuration file; not usually attached to normal configuration, -# because almost all configs use "gen" version of manual. -# Set DOCVER above to change. -configdoc.texi: ${DOCVER}-doc.texi - ln -s ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi >/dev/null 2>&1 \ - || ln ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi >/dev/null 2>&1 \ - || cp ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi - -ld.info: $(srcdir)/ld.texinfo configdoc.texi - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) -I $(BFDDIR)/doc $(srcdir)/ld.texinfo - -ld.dvi: $(srcdir)/ld.texinfo configdoc.texi - TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir) -I $(BFDDIR)/doc' $(TEXI2DVI) $(srcdir)/ld.texinfo - -# We want to reconfigure if configure.host or configure.tgt changes. -Makefile: configure.host configure.tgt - -MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \ - ldemul-list.h crtbegin.o crtend.o ld.log ld.sum -mostlyclean-local: - -rm -rf tmpdir -CLEANFILES = dep.sed .dep .dep1 - -.PHONY: install-exec-local install-data-local - -install-exec-local: ld-new$(EXEEXT) - $(mkinstalldirs) $(bindir) $(tooldir)/bin - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - if test -f $$p; then \ - echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/-new//'|sed '$(transform)'`"; \ - $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/-new//'|sed '$(transform)'`; \ - else :; fi; \ - done - rm -f $(tooldir)/bin/ld$(EXEEXT) - n=`echo ld | sed '$(transform)'`; \ - if [ "$(bindir)/$$n$(EXEEXT)" != "$(tooldir)/bin/ld$(EXEEXT)" ]; then \ - ln $(bindir)/$$n$(EXEEXT) $(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \ - || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(tooldir)/bin/ld$(EXEEXT); \ - fi - -install-data-local: - $(mkinstalldirs) $(scriptdir) - for f in ldscripts/*; do \ - $(INSTALL_DATA) $$f $(scriptdir)/$$f ; \ - done - -# Stuff that should be included in a distribution. The diststuff -# target is run by the taz target in ../Makefile.in. -LDDISTSTUFF = ldgram.c ldgram.h ldlex.c -diststuff: $(LDDISTSTUFF) info - -DISTCLEANFILES = site.exp site.bak - -distclean-local: - rm -rf ldscripts - -# Targets to rebuild dependencies in this Makefile. -# Have to get rid of .dep1 here so that "$?" later includes all of $(CFILES). -.dep: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h - rm -f .dep1 - $(MAKE) DEP=$(DEP) .dep1 - sed -f dep.sed <.dep1 >.dep - -# This rule really wants a mkdep that runs "gcc -MM". -.dep1: $(CFILES) $(GENERATED_CFILES) - rm -f .dep2 - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > .dep2 - $(DEP) -f .dep2 $(INCLUDES) $? - $(srcdir)/../move-if-change .dep2 .dep1 - -dep.sed: dep-in.sed config.status - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@INCDIR@!$(INCDIR)!' \ - -e 's!@SRCDIR@!$(srcdir)!' - -dep: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat .dep >> tmp-Makefile - $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat .dep >> tmp-Makefile.in - $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat .dep >> tmp-Makefile.am - $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -.PHONY: dep dep-in dep-am - -# What appears below is generated by a hacked mkdep using gcc -MM. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. - -ldctor.o: ldctor.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldexp.h ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h -ldemul.o: ldemul.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h ld.h ldemul.h \ - ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldemul-list.h -ldexp.o: ldexp.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldmain.h ldmisc.h ldexp.h ldgram.h ldlang.h -ldfile.o: ldfile.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h \ - ldlex.h ldemul.h -ldlang.o: ldlang.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/obstack.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldgram.h ldexp.h ldlang.h ldemul.h ldlex.h ldmisc.h \ - ldctor.h ldfile.h $(INCDIR)/fnmatch.h -ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/progress.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldmisc.h ldwrite.h ldgram.h ldexp.h ldlang.h ldemul.h \ - ldlex.h ldfile.h ldctor.h -ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/demangle.h ld.h ldmisc.h ldexp.h ldlang.h \ - ldgram.h ldlex.h ldmain.h ldfile.h -ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h ld.h ldver.h \ - ldemul.h ldmain.h -ldwrite.o: ldwrite.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/libiberty.h ld.h ldexp.h ldlang.h ldwrite.h \ - ldmisc.h ldgram.h ldmain.h -lexsup.o: lexsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/getopt.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \ - ldver.h ldemul.h -mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h sysdep.h \ - config.h $(INCDIR)/fopen-same.h ld.h ldexp.h ldlang.h \ - ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h -ldcref.o: ldcref.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/libiberty.h ld.h ldmain.h ldmisc.h ldexp.h \ - ldlang.h -ldgram.o: ldgram.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldexp.h ldver.h ldlang.h ldemul.h ldfile.h ldmisc.h \ - ldmain.h mri.h ldlex.h -ldlex.o: ldlex.c ../bfd/bfd.h sysdep.h config.h $(INCDIR)/fopen-same.h \ - ld.h ldgram.h ldmisc.h ldexp.h ldlang.h ldfile.h ldlex.h \ - ldmain.h - -# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/contrib/binutils/ld/Makefile.in b/contrib/binutils/ld/Makefile.in deleted file mode 100644 index c37aab37340e..000000000000 --- a/contrib/binutils/ld/Makefile.in +++ /dev/null @@ -1,1274 +0,0 @@ -# Makefile.in generated automatically by automake 1.2e from Makefile.am - -# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = . - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_alias = @build_alias@ -build_triplet = @build@ -host_alias = @host_alias@ -host_triplet = @host@ -target_alias = @target_alias@ -target_triplet = @target@ -CC = @CC@ -EXEEXT = @EXEEXT@ -HDEFINES = @HDEFINES@ -LD = @LD@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -NATIVE_LIB_DIRS = @NATIVE_LIB_DIRS@ -NM = @NM@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -TDIRS = @TDIRS@ -VERSION = @VERSION@ - -AUTOMAKE_OPTIONS = cygnus dejagnu - -tooldir = $(exec_prefix)/$(target_alias) - -YACC = `if [ -f ../bison/bison ] ; then echo ../bison/bison -y -L../bison/bison ; else echo bison -y ; fi` -YFLAGS = -d -LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo flex ; fi` - -# We put the scripts in the directory $(scriptdir)/ldscripts. -# We can't put the scripts in $(datadir) because the SEARCH_DIR -# directives need to be different for native and cross linkers. -scriptdir = $(tooldir)/lib - -EMUL = @EMUL@ -EMULATION_OFILES = @EMULATION_OFILES@ - -# Search path to override the default search path for -lfoo libraries. -# If LIB_PATH is empty, the ones in the script (if any) are left alone. -# (The default is usually /lib:/usr/lib:/usr/local/lib, unless building -# a cross-linker, in which case the default is empty. See genscripts.sh.) -# Otherwise, they are replaced with the ones given in LIB_PATH, -# which may have the form: LIB_PATH=/lib:/usr/local/lib -LIB_PATH = - -BASEDIR = $(srcdir)/.. -BFDDIR = $(BASEDIR)/bfd -INCDIR = $(BASEDIR)/include -DEP = mkdep - -# What version of the manual to build -DOCVER = gen - -#stuff for self hosting (can be overridden in config file). -HOSTING_CRT0 = @HOSTING_CRT0@ -HOSTING_LIBS = @HOSTING_LIBS@ -HOSTING_EMU = -m $(EMUL) - -# Setup the testing framework, if you have one -EXPECT = `if [ -f $$r/../expect/expect ] ; \ - then echo $$r/../expect/expect ; \ - else echo expect ; fi` - -RUNTEST = `if [ -f $${srcroot}/../dejagnu/runtest ] ; \ - then echo $${srcroot}/../dejagnu/runtest ; \ - else echo runtest ; fi` - -RUNTESTFLAGS = - -CC_FOR_TARGET = ` \ - if [ -f $$r/../gcc/xgcc ] ; then \ - if [ -f $$r/../newlib/Makefile ] ; then \ - echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \ - else \ - echo $$r/../gcc/xgcc -B$$r/../gcc/; \ - fi; \ - else \ - if [ "@host@" = "@target@" ] ; then \ - echo $(CC); \ - else \ - echo gcc | sed '$(transform)'; \ - fi; \ - fi` - -CXX = gcc -CXX_FOR_TARGET = ` \ - if [ -f $$r/../gcc/xgcc ] ; then \ - if [ -f $$r/../newlib/Makefile ] ; then \ - echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \ - else \ - echo $$r/../gcc/xgcc -B$$r/../gcc/; \ - fi; \ - else \ - if [ "@host@" = "@target@" ] ; then \ - echo $(CXX); \ - else \ - echo gcc | sed '$(transform)'; \ - fi; \ - fi` - -noinst_PROGRAMS = ld-new -info_TEXINFOS = ld.texinfo -noinst_TEXINFOS = ldint.texinfo -man_MANS = ld.1 - -INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) $(HDEFINES) $(CFLAGS) - -BFDLIB = ../bfd/libbfd.la -LIBIBERTY = ../libiberty/libiberty.a - -ALL_EMULATIONS = \ - ea29k.o \ - eaixppc.o \ - eaixrs6.o \ - ealpha.o \ - earcelf.o \ - earmaoutb.o \ - earmaoutl.o \ - earmcoff.o \ - earmpe.o \ - ecoff_sparc.o \ - ed10velf.o \ - edelta68.o \ - eebmon29k.o \ - eelf32_sparc.o \ - eelf32b4300.o \ - eelf32bmip.o \ - eelf32ebmip.o \ - eelf32elmip.o \ - eelf32l4300.o \ - eelf32lmip.o \ - eelf32lppc.o \ - eelf32ppc.o \ - eelf_i386.o \ - egld960.o \ - egld960coff.o \ - ego32.o \ - eh8300.o \ - eh8300h.o \ - eh8300s.o \ - eh8500.o \ - eh8500b.o \ - eh8500c.o \ - eh8500m.o \ - eh8500s.o \ - ehp300bsd.o \ - ehp3hpux.o \ - ehppaelf.o \ - ei386aout.o \ - ei386bsd.o \ - ei386coff.o \ - ei386go32.o \ - ei386linux.o \ - ei386lynx.o \ - ei386mach.o \ - ei386moss.o \ - ei386msdos.o \ - ei386nbsd.o \ - ei386nw.o \ - ei386pe.o \ - elnk960.o \ - em68k4knbsd.o \ - em68kaout.o \ - em68kaux.o \ - em68kcoff.o \ - em68kelf.o \ - em68klinux.o \ - em68klynx.o \ - em68knbsd.o \ - em68kpsos.o \ - em88kbcs.o \ - emipsbig.o \ - emipsbsd.o \ - emipsidt.o \ - emipsidtl.o \ - emipslit.o \ - emipslnews.o \ - enews.o \ - ens32knbsd.o \ - epc532macha.o \ - eppcmacos.o \ - eppcnw.o \ - eppcpe.o \ - eriscix.o \ - esa29200.o \ - esh.o \ - eshelf.o \ - eshlelf.o \ - eshl.o \ - esparcaout.o \ - esparclinux.o \ - esparclynx.o \ - esparcnbsd.o \ - est2000.o \ - esun3.o \ - esun4.o \ - etic30aout.o \ - etic30coff.o \ - evanilla.o \ - evax.o \ - evsta.o \ - ew65.o \ - ez8001.o \ - ez8002.o - -ALL_64_EMULATIONS = \ - eelf64_sparc.o \ - eelf64alpha.o - -CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \ - ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \ - mri.c ldcref.c - -HFILES = config.h ld.h ldctor.h ldemul.h ldexp.h ldfile.h \ - ldlang.h ldlex.h ldmain.h ldmisc.h ldver.h \ - ldwrite.h mri.h - -GENERATED_CFILES = ldgram.c ldlex.c -GENERATED_HFILES = ldgram.h ldemul-list.h - -OFILES = ldgram.o ldlex.o lexsup.o ldlang.o mri.o ldctor.o ldmain.o \ - ldwrite.o ldexp.o ldemul.o ldver.o ldmisc.o \ - ldfile.o ldcref.o ${EMULATION_OFILES} - -STAGESTUFF = *.o ldscripts/* e*.c - -# These all start with e so 'make clean' can find them. - -GENSCRIPTS = $(SHELL) $(srcdir)/genscripts.sh ${srcdir} ${libdir} @host@ @target@ @target_alias@ ${EMUL} "@NATIVE_LIB_DIRS@" -GEN_DEPENDS = $(srcdir)/genscripts.sh $(srcdir)/emultempl/stringify.sed - -ld_new_SOURCES = ldgram.y ldlex.l lexsup.c ldlang.c mri.c ldctor.c ldmain.c \ - ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c -ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(BFDLIB) $(LIBIBERTY) -ld_new_LDADD = $(EMULATION_OFILES) $(BFDLIB) $(LIBIBERTY) - -# This is the real libbfd.a created by libtool. -TESTBFDLIB = @TESTBFDLIB@ - -MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \ - ldemul-list.h crtbegin.o crtend.o ld.log ld.sum -CLEANFILES = dep.sed .dep .dep1 - -# Stuff that should be included in a distribution. The diststuff -# target is run by the taz target in ../Makefile.in. -LDDISTSTUFF = ldgram.c ldgram.h ldlex.c - -DISTCLEANFILES = site.exp site.bak -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -noinst_PROGRAMS = ld-new$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I. -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -ld_new_OBJECTS = ldgram.o ldlex.o lexsup.o ldlang.o mri.o ldctor.o \ -ldmain.o ldwrite.o ldexp.o ldemul.o ldver.o ldmisc.o ldfile.o ldcref.o -ld_new_LDFLAGS = -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LEXLIB = @LEXLIB@ -CFLAGS = @CFLAGS@ -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ -TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then echo $(top_srcdir)/../texinfo/util/texi2dvi; else echo texi2dvi; fi` -TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex -INFO_DEPS = ld.info -DVIS = ld.dvi -TEXINFOS = ld.texinfo -MANS = ld.1 - -NROFF = nroff -DIST_COMMON = README ChangeLog Makefile.am Makefile.in NEWS TODO \ -acconfig.h acinclude.m4 aclocal.m4 config.in configure configure.in \ -ldgram.c ldlex.c stamp-h.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP = --best -SOURCES = $(ld_new_SOURCES) -OBJECTS = $(ld_new_OBJECTS) - -default: all - -.SUFFIXES: -.SUFFIXES: .S .c .dvi .info .l .lo .o .ps .s .texi .texinfo .y -$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status - -$(ACLOCAL_M4): @MAINT@ configure.in acinclude.m4 - cd $(srcdir) && $(ACLOCAL) - -config.status: $(srcdir)/configure - $(SHELL) ./config.status --recheck -$(srcdir)/configure: @MAINT@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) - cd $(srcdir) && $(AUTOCONF) - -config.h: stamp-h - @: -stamp-h: $(srcdir)/config.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES= CONFIG_HEADERS=config.h:config.in \ - $(SHELL) ./config.status - @echo timestamp > stamp-h -$(srcdir)/config.in: @MAINT@$(srcdir)/stamp-h.in -$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h - cd $(top_srcdir) && $(AUTOHEADER) - @echo timestamp > $(srcdir)/stamp-h.in - -mostlyclean-hdr: - -clean-hdr: - -distclean-hdr: - -rm -f config.h - -maintainer-clean-hdr: - -mostlyclean-noinstPROGRAMS: - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) - -distclean-noinstPROGRAMS: - -maintainer-clean-noinstPROGRAMS: - -.c.o: - $(COMPILE) -c $< - -.s.o: - $(COMPILE) -c $< - -.S.o: - $(COMPILE) -c $< - -mostlyclean-compile: - -rm -f *.o core *.core - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -.c.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -.s.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -.S.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -ld-new$(EXEEXT): $(ld_new_OBJECTS) $(ld_new_DEPENDENCIES) - @rm -f ld-new$(EXEEXT) - $(LINK) $(ld_new_LDFLAGS) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS) -.y.c: - $(YACC) $(YFLAGS) $< && mv y.tab.c $*.c - if test -f y.tab.h; then \ - if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \ - else :; fi -ldgram.h: ldgram.c - -.l.c: - $(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@ - -ld.info: ld.texinfo -ld.dvi: ld.texinfo - - -DVIPS = dvips - -.texi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.texi: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(infodir) - @for file in $(INFO_DEPS); do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ - if test -f $$d/$$ifile; then \ - echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - for file in $(INFO_DEPS); do \ - echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\ - install-info --info-dir=$(infodir) $(infodir)/$$file || :;\ - done; \ - else : ; fi - -uninstall-info: - $(PRE_UNINSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - ii=yes; \ - else ii=; fi; \ - for file in $(INFO_DEPS); do \ - test -z "$ii" \ - || install-info --info-dir=$(infodir) --remove $$file; \ - done - $(NORMAL_UNINSTALL) - for file in $(INFO_DEPS); do \ - (cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ - done - -dist-info: $(INFO_DEPS) - for base in $(INFO_DEPS); do \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in `cd $$d && eval echo $$base*`; do \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done; \ - done - -mostlyclean-aminfo: - -rm -f ld.aux ld.cp ld.cps ld.dvi ld.fn ld.fns ld.ky ld.kys ld.ps \ - ld.log ld.pg ld.toc ld.tp ld.tps ld.vr ld.vrs ld.op ld.tr \ - ld.cv ld.cn - -clean-aminfo: - -distclean-aminfo: - -maintainer-clean-aminfo: - for i in $(INFO_DEPS); do \ - rm -f $$i; \ - if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ - rm -f $$i-[0-9]*; \ - fi; \ - done -clean-info: mostlyclean-aminfo -install-man: $(MANS) - $(NORMAL_INSTALL) - $(mkinstalldirs) $(mandir)/man1 - @sect=1; \ - inst=`echo "ld" | sed '$(transform)'`.1; \ - if test -f $(srcdir)/ld.1; then file=$(srcdir)/ld.1; \ - else file=ld.1; fi; \ - echo " $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst"; \ - $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst - -uninstall-man: - $(NORMAL_UNINSTALL) - -inst=`echo "ld" | sed '$(transform)'`.1; \ - rm -f $(mandir)/man1/$$inst - - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) - -TAGS: $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)config.in$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.in $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - -rm -rf $(distdir) - GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz - mkdir $(distdir)/=build - mkdir $(distdir)/=inst - dc_install_base=`cd $(distdir)/=inst && pwd`; \ - cd $(distdir)/=build \ - && ../configure --srcdir=.. --prefix=$$dc_install_base \ - && $(MAKE) \ - && $(MAKE) dvi \ - && $(MAKE) check \ - && $(MAKE) install \ - && $(MAKE) installcheck \ - && $(MAKE) dist - -rm -rf $(distdir) - @echo "========================"; \ - echo "$(distdir).tar.gz is ready for distribution"; \ - echo "========================" -dist: distdir - -chmod -R a+r $(distdir) - GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) - -rm -rf $(distdir) -dist-all: distdir - -chmod -R a+r $(distdir) - GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) - -rm -rf $(distdir) -distdir: $(DISTFILES) - -rm -rf $(distdir) - mkdir $(distdir) - -chmod 777 $(distdir) - @for file in $(DISTFILES); do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done - $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info - -DEJATOOL = $(PACKAGE) - -RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir -site.exp: Makefile - @echo 'Making a new site.exp file...' - -@rm -f site.bak - @echo '## these variables are automatically generated by make ##' > $@-t - @echo '# Do not edit here. If you wish to override these values' >> $@-t - @echo '# edit the last section' >> $@-t - @echo 'set tool $(DEJATOOL)' >> $@-t - @echo 'set srcdir $(srcdir)' >> $@-t - @echo 'set objdir' `pwd` >> $@-t - @echo 'set host_alias $(host_alias)' >> $@-t - @echo 'set host_triplet $(host_triplet)' >> $@-t - @echo 'set target_alias $(target_alias)' >> $@-t - @echo 'set target_triplet $(target_triplet)' >> $@-t - @echo 'set build_alias $(build_alias)' >> $@-t - @echo 'set build_triplet $(build_triplet)' >> $@-t - @echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t - -@sed '1,/^## All variables above are.*##/ d' site.bak >> $@-t - -@mv site.exp site.bak - @mv $@-t site.exp -info: $(INFO_DEPS) -dvi: $(DVIS) -check: - $(MAKE) check-DEJAGNU -installcheck: -install-info: install-info-am -install-exec: install-exec-local - @$(NORMAL_INSTALL) - -install-data: install-man install-data-local - @$(NORMAL_INSTALL) - -install: install-exec install-data all - @: - -uninstall: uninstall-man - -all: Makefile $(PROGRAMS) $(MANS) config.h - -install-strip: - $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install -installdirs: - $(mkinstalldirs) $(mandir)/man1 - - -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -rm -f Makefile $(DISTCLEANFILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -mostlyclean: mostlyclean-hdr mostlyclean-noinstPROGRAMS \ - mostlyclean-compile mostlyclean-libtool \ - mostlyclean-aminfo mostlyclean-tags mostlyclean-generic \ - mostlyclean-local - -clean: clean-hdr clean-noinstPROGRAMS clean-compile clean-libtool \ - clean-aminfo clean-tags clean-generic mostlyclean - -distclean: distclean-hdr distclean-noinstPROGRAMS distclean-compile \ - distclean-libtool distclean-aminfo distclean-tags \ - distclean-generic clean distclean-local - -rm -f config.status - -rm -f libtool - -maintainer-clean: maintainer-clean-hdr maintainer-clean-noinstPROGRAMS \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-aminfo maintainer-clean-tags \ - maintainer-clean-generic distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -rm -f config.status - -.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \ -maintainer-clean-hdr mostlyclean-noinstPROGRAMS \ -distclean-noinstPROGRAMS clean-noinstPROGRAMS \ -maintainer-clean-noinstPROGRAMS mostlyclean-compile distclean-compile \ -clean-compile maintainer-clean-compile mostlyclean-libtool \ -distclean-libtool clean-libtool maintainer-clean-libtool \ -install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ -clean-aminfo maintainer-clean-aminfo install-man uninstall-man tags \ -mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ -distdir check-DEJAGNU info dvi installcheck install-info install-exec \ -install-data install uninstall all installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean - - -ldmain.o: ldmain.c config.status - $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' -DSCRIPTDIR='"$(scriptdir)"' -DTARGET='"@target@"' $(srcdir)/ldmain.c - -ldemul-list.h: Makefile - (echo "/* This file is automatically generated. DO NOT EDIT! */";\ - for f in `echo " " ${EMULATION_OFILES} "" \ - | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \ - echo "extern ld_emulation_xfer_type ld_$${f}_emulation;"; \ - done;\ - echo "";\ - echo "#define EMULATION_LIST \\";\ - for f in `echo " " ${EMULATION_OFILES} "" \ - | sed -e 's/ e/ ld/g' -e 's/ ld/ /g' -e 's/[.]o//g'`; do \ - echo " &ld_$${f}_emulation, \\"; \ - done;\ - echo " 0") >ldemul-tmp.h - mv ldemul-tmp.h ldemul-list.h -@TDIRS@ - -ea29k.c: $(srcdir)/emulparams/a29k.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/a29k.sc ${GEN_DEPENDS} - ${GENSCRIPTS} a29k "$(tdir_a29k)" -eaixppc.c: $(srcdir)/emulparams/aixppc.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} aixppc "$(tdir_aixppc)" -eaixrs6.c: $(srcdir)/emulparams/aixrs6.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} aixrs6 "$(tdir_aixrs6)" -ealpha.c: $(srcdir)/emulparams/alpha.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/alpha.sc ${GEN_DEPENDS} - ${GENSCRIPTS} alpha "$(tdir_alpha)" -earcelf.c: $(srcdir)/emulparams/arcelf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} arcelf "$(tdir_arcelf)" -earmaoutb.c: $(srcdir)/emulparams/armaoutb.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armaoutb "$(tdir_armaoutb)" -earmaoutl.c: $(srcdir)/emulparams/armaoutl.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armaoutl "$(tdir_armaoutl)" -earmcoff.c: $(srcdir)/emulparams/armcoff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armcoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armcoff "$(tdir_armcoff)" -earmpe.c: $(srcdir)/emulparams/armpe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} armpe "$(tdir_armpe)" -ecoff_sparc.c: $(srcdir)/emulparams/coff_sparc.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparccoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} coff_sparc "$(tdir_coff_sparc)" -ed10velf.c: $(srcdir)/emulparams/d10velf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS} - ${GENSCRIPTS} d10velf "$(tdir_d10v)" -edelta68.c: $(srcdir)/emulparams/delta68.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS} - ${GENSCRIPTS} delta68 "$(tdir_delta68)" -eebmon29k.c: $(srcdir)/emulparams/ebmon29k.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/ebmon29k.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ebmon29k "$(tdir_ebmon29k)" -em32relf.c: $(srcdir)/emulparams/m32relf.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m32relf "$(tdir_m32r)" -eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)" -eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)" -eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)" -eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)" -eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)" -eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)" -eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)" -eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)" -eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfppc.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)" -eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)" -eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfppc.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)" -eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)" -eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)" -eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)" -egld960.c: $(srcdir)/emulparams/gld960.sh \ - $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} gld960 "$(tdir_gld960)" -egld960coff.c: $(srcdir)/emulparams/gld960coff.sh \ - $(srcdir)/emultempl/gld960c.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} gld960coff "$(tdir_gld960coff)" -ego32.c: $(srcdir)/emulparams/go32.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} go32 "$(tdir_go32)" -eh8300.c: $(srcdir)/emulparams/h8300.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300 "$(tdir_h8300)" -eh8300h.c: $(srcdir)/emulparams/h8300h.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300h "$(tdir_h8300h)" -eh8300s.c: $(srcdir)/emulparams/h8300s.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300s.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8300s "$(tdir_h8300s)" -eh8500.c: $(srcdir)/emulparams/h8500.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500 "$(tdir_h8500)" -eh8500b.c: $(srcdir)/emulparams/h8500b.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500b.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500b "$(tdir_h8500b)" -eh8500c.c: $(srcdir)/emulparams/h8500c.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500c.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500c "$(tdir_h8500c)" -eh8500m.c: $(srcdir)/emulparams/h8500m.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500m.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500m "$(tdir_h8500m)" -eh8500s.c: $(srcdir)/emulparams/h8500s.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500s.sc ${GEN_DEPENDS} - ${GENSCRIPTS} h8500s "$(tdir_h8500s)" -ehp300bsd.c: $(srcdir)/emulparams/hp300bsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hp300bsd "$(tdir_hp300bsd)" -ehp3hpux.c: $(srcdir)/emulparams/hp3hpux.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hp3hpux "$(tdir_hp3hpux)" -ehppaelf.c: $(srcdir)/emulparams/hppaelf.sh \ - $(srcdir)/emultempl/hppaelf.em $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)" -ei386aout.c: $(srcdir)/emulparams/i386aout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386aout "$(tdir_i386aout)" -ei386bsd.c: $(srcdir)/emulparams/i386bsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386bsd "$(tdir_i386bsd)" -ei386coff.c: $(srcdir)/emulparams/i386coff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386coff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386coff "$(tdir_i386coff)" -ei386go32.c: $(srcdir)/emulparams/i386go32.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386go32.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386go32 "$(tdir_i386go32)" -ei386linux.c: $(srcdir)/emulparams/i386linux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386linux "$(tdir_i386linux)" -ei386lynx.c: $(srcdir)/emulparams/i386lynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386lynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386lynx "$(tdir_i386lynx)" -ei386mach.c: $(srcdir)/emulparams/i386mach.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386mach "$(tdir_i386mach)" -ei386moss.c: $(srcdir)/emulparams/i386moss.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386moss "$(tdir_i386moss)" -ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386msdos "$(tdir_i386msdos)" -ei386nbsd.c: $(srcdir)/emulparams/i386nbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386nbsd "$(tdir_i386nbsd)" -ei386nw.c: $(srcdir)/emulparams/i386nw.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386nw "$(tdir_i386nw)" -ei386pe.c: $(srcdir)/emulparams/i386pe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} i386pe "$(tdir_i386pe)" -elnk960.c: $(srcdir)/emulparams/lnk960.sh \ - $(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS} - ${GENSCRIPTS} lnk960 "$(tdir_lnk960)" -em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68k4knbsd "$(tdir_m68k4knbsd)" -em68kaout.c: $(srcdir)/emulparams/m68kaout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kaout "$(tdir_m68kaout)" -em68kaux.c: $(srcdir)/emulparams/m68kaux.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kaux.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kaux "$(tdir_m68kaux)" -em68kcoff.c: $(srcdir)/emulparams/m68kcoff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68kcoff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kcoff "$(tdir_m68kcoff)" -em68kelf.c: $(srcdir)/emulparams/m68kelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)" -em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)" -em68klynx.c: $(srcdir)/emulparams/m68klynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m68klynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68klynx "$(tdir_m68klynx)" -em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)" -em68kpsos.c: $(srcdir)/emulparams/m68kpsos.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)" -em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS} - ${GENSCRIPTS} m88kbcs "$(tdir_m88kbcs)" -emipsbig.c: $(srcdir)/emulparams/mipsbig.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsbig -emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsbsd -emipsidt.c: $(srcdir)/emulparams/mipsidt.sh \ - $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)" -emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \ - $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)" -emipslit.c: $(srcdir)/emulparams/mipslit.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipslit "$(tdir_mipslit)" -emipslnews.c: $(srcdir)/emulparams/mipslnews.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mipslnews -emn10300.c: $(srcdir)/emulparams/mn10300.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mn10300 "$(tdir_mn10300)" -emn10200.c: $(srcdir)/emulparams/mn10200.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} mn10200 "$(tdir_mn10200)" -enews.c: $(srcdir)/emulparams/news.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} news "$(tdir_news)" -ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ns32knbsd "$(tdir_ns32knbsd)" -epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} pc532macha "$(tdir_pc532macha)" -eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \ - $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)" -eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcnw "$(tdir_ppcnw)" -eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \ - $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS} - ${GENSCRIPTS} ppcpe "$(tdir_ppcpe)" -eriscix.c: $(srcdir)/emulparams/riscix.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} riscix "$(tdir_riscix)" -esa29200.c: $(srcdir)/emulparams/sa29200.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sa29200.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sa29200 "$(tdir_sa29200)" -esh.c: $(srcdir)/emulparams/sh.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sh "$(tdir_sh)" -eshelf.c: $(srcdir)/emulparams/shelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shelf "$(tdir_shelf)" -eshlelf.c: $(srcdir)/emulparams/shlelf.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shlelf "$(tdir_shlelf)" -eshl.c: $(srcdir)/emulparams/shl.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS} - ${GENSCRIPTS} shl "$(tdir_shl)" -esparcaout.c: $(srcdir)/emulparams/sparcaout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparcaout "$(tdir_sparcaout)" -esparclinux.c: $(srcdir)/emulparams/sparclinux.sh \ - $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparclinux "$(tdir_sparclinux)" -esparclynx.c: $(srcdir)/emulparams/sparclynx.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sparclynx.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparclynx "$(tdir_sparclynx)" -esparcnbsd.c: $(srcdir)/emulparams/sparcnbsd.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sparcnbsd "$(tdir_sparcnbsd)" -est2000.c: $(srcdir)/emulparams/st2000.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/st2000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} st2000 "$(tdir_st2000)" -esun3.c: $(srcdir)/emulparams/sun3.sh \ - $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sun3 "$(tdir_sun3)" -esun4.c: $(srcdir)/emulparams/sun4.sh \ - $(srcdir)/emultempl/sunos.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} sun4 "$(tdir_sun4)" -etic30aout.c: $(srcdir)/emulparams/tic30aout.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} tic30aout "$(tdir_tic30aout)" -etic30coff.c: $(srcdir)/emulparams/tic30coff.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/tic30coff.sc ${GEN_DEPENDS} - ${GENSCRIPTS} tic30coff "$(tdir_tic30coff)" -evanilla.c: $(srcdir)/emulparams/vanilla.sh \ - $(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vanilla "$(tdir_vanilla)" -evax.c: $(srcdir)/emulparams/vax.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vax "$(tdir_vax)" -evsta.c: $(srcdir)/emulparams/vsta.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} - ${GENSCRIPTS} vsta "$(tdir_vsta)" -ev850.c: $(srcdir)/emulparams/v850.sh \ - $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS} - ${GENSCRIPTS} v850 "$(tdir_v850)" -ew65.c: $(srcdir)/emulparams/w65.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS} - ${GENSCRIPTS} w65 "$(tdir_w65)" -ez8001.c: $(srcdir)/emulparams/z8001.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} z8001 "$(tdir_z8001)" -ez8002.c: $(srcdir)/emulparams/z8002.sh \ - $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/z8000.sc ${GEN_DEPENDS} - ${GENSCRIPTS} z8002 "$(tdir_z8002)" - -# The generated emulation files mostly have the same dependencies. -$(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \ - ld.h ldmain.h ldemul.h ldfile.h ldmisc.h ldexp.h ldlang.h \ - ldctor.h ldexp.h ldlang.h ldgram.h - -check-DEJAGNU: site.exp - srcroot=`cd $(srcdir) && pwd`; export srcroot; \ - r=`pwd`; export r; \ - EXPECT=$(EXPECT); export EXPECT; \ - if [ -f $(top_builddir)/../expect/expect ]; then \ - TCL_LIBRARY=`cd $(top_srcdir)/../tcl/library && pwd`; \ - export TCL_LIBRARY; \ - fi; \ - runtest=$(RUNTEST); \ - if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \ - CC="$(CC_FOR_TARGET)" CFLAGS="$(CFLAGS)" \ - CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \ - CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \ - OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \ - LIBIBERTY="$(LIBIBERTY)" HOSTING_EMU="$(HOSTING_EMU)" \ - HOSTING_CRT0="$(HOSTING_CRT0)" HOSTING_LIBS="$(HOSTING_LIBS)" \ - $(RUNTESTFLAGS); \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi - -# Rules for testing by relinking ld itself. -# A similar test is in the testsuite. This target is for ease of use -# when porting ld. - -ld-partial.o: ld-new$(EXEEXT) - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.o -r $(OFILES) -ld1$(EXEEXT): ld-partial.o - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.o $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld1-full$(EXEEXT): ld-new - ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld2$(EXEEXT): ld1$(EXEEXT) - ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -ld3$(EXEEXT): ld2$(EXEEXT) - ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) - -bootstrap: ld3$(EXEEXT) - cmp ld2$(EXEEXT) ld3$(EXEEXT) - -.PHONY: bootstrap - -# A test program for C++ constructors and destructors. -# This test is now in the testsuite. -# -#cdtest: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new -# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \ -# cdtest-main.o cdtest-bar.o cdtest-foo.o $(HOSTING_LIBS) -# -#cdtest.out: cdtest -# ./cdtest > cdtest.tmp -# mv cdtest.tmp cdtest.out -# -#cdtest-ur.o: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new -# ./ld.new $(HOSTING_EMU) -o cdtest-ur.o -Ur cdtest-main.o \ -# cdtest-bar.o cdtest-foo.o -# -#cdtest-ur: cdtest-ur.o -# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.o \ -# $(HOSTING_LIBS) -# -#cdtest-ur.out: cdtest-ur -# ./cdtest-ur > cdtest-ur.tmp -# mv cdtest-ur.tmp cdtest-ur.out -# -#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp -# diff $(srcdir)/cdtest.exp cdtest.out -# diff $(srcdir)/cdtest.exp cdtest-ur.out -# -#.PHONY: check-cdtest - -# END OF CHECK TARGETS - -# DOCUMENTATION TARGETS -# Manual configuration file; not usually attached to normal configuration, -# because almost all configs use "gen" version of manual. -# Set DOCVER above to change. -configdoc.texi: ${DOCVER}-doc.texi - ln -s ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi >/dev/null 2>&1 \ - || ln ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi >/dev/null 2>&1 \ - || cp ${srcdir}/${DOCVER}-doc.texi ./configdoc.texi - -ld.info: $(srcdir)/ld.texinfo configdoc.texi - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) -I $(BFDDIR)/doc $(srcdir)/ld.texinfo - -ld.dvi: $(srcdir)/ld.texinfo configdoc.texi - TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir) -I $(BFDDIR)/doc' $(TEXI2DVI) $(srcdir)/ld.texinfo - -# We want to reconfigure if configure.host or configure.tgt changes. -Makefile: configure.host configure.tgt -mostlyclean-local: - -rm -rf tmpdir - -.PHONY: install-exec-local install-data-local - -install-exec-local: ld-new$(EXEEXT) - $(mkinstalldirs) $(bindir) $(tooldir)/bin - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - if test -f $$p; then \ - echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/-new//'|sed '$(transform)'`"; \ - $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/-new//'|sed '$(transform)'`; \ - else :; fi; \ - done - rm -f $(tooldir)/bin/ld$(EXEEXT) - n=`echo ld | sed '$(transform)'`; \ - if [ "$(bindir)/$$n$(EXEEXT)" != "$(tooldir)/bin/ld$(EXEEXT)" ]; then \ - ln $(bindir)/$$n$(EXEEXT) $(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \ - || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(tooldir)/bin/ld$(EXEEXT); \ - fi - -install-data-local: - $(mkinstalldirs) $(scriptdir) - for f in ldscripts/*; do \ - $(INSTALL_DATA) $$f $(scriptdir)/$$f ; \ - done -diststuff: $(LDDISTSTUFF) info - -distclean-local: - rm -rf ldscripts - -# Targets to rebuild dependencies in this Makefile. -# Have to get rid of .dep1 here so that "$?" later includes all of $(CFILES). -.dep: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h - rm -f .dep1 - $(MAKE) DEP=$(DEP) .dep1 - sed -f dep.sed <.dep1 >.dep - -# This rule really wants a mkdep that runs "gcc -MM". -.dep1: $(CFILES) $(GENERATED_CFILES) - rm -f .dep2 - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > .dep2 - $(DEP) -f .dep2 $(INCLUDES) $? - $(srcdir)/../move-if-change .dep2 .dep1 - -dep.sed: dep-in.sed config.status - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@INCDIR@!$(INCDIR)!' \ - -e 's!@SRCDIR@!$(srcdir)!' - -dep: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat .dep >> tmp-Makefile - $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat .dep >> tmp-Makefile.in - $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: .dep - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat .dep >> tmp-Makefile.am - $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -.PHONY: dep dep-in dep-am - -# What appears below is generated by a hacked mkdep using gcc -MM. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. - -ldctor.o: ldctor.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldexp.h ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h -ldemul.o: ldemul.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h ld.h ldemul.h \ - ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldemul-list.h -ldexp.o: ldexp.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldmain.h ldmisc.h ldexp.h ldgram.h ldlang.h -ldfile.o: ldfile.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h \ - ldlex.h ldemul.h -ldlang.o: ldlang.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/obstack.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldgram.h ldexp.h ldlang.h ldemul.h ldlex.h ldmisc.h \ - ldctor.h ldfile.h $(INCDIR)/fnmatch.h -ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/progress.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldmisc.h ldwrite.h ldgram.h ldexp.h ldlang.h ldemul.h \ - ldlex.h ldfile.h ldctor.h -ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/demangle.h ld.h ldmisc.h ldexp.h ldlang.h \ - ldgram.h ldlex.h ldmain.h ldfile.h -ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h ld.h ldver.h \ - ldemul.h ldmain.h -ldwrite.o: ldwrite.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/libiberty.h ld.h ldexp.h ldlang.h ldwrite.h \ - ldmisc.h ldgram.h ldmain.h -lexsup.o: lexsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/getopt.h $(INCDIR)/bfdlink.h ld.h ldmain.h \ - ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \ - ldver.h ldemul.h -mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h sysdep.h \ - config.h $(INCDIR)/fopen-same.h ld.h ldexp.h ldlang.h \ - ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h -ldcref.o: ldcref.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/libiberty.h ld.h ldmain.h ldmisc.h ldexp.h \ - ldlang.h -ldgram.o: ldgram.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ - sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h \ - ld.h ldexp.h ldver.h ldlang.h ldemul.h ldfile.h ldmisc.h \ - ldmain.h mri.h ldlex.h -ldlex.o: ldlex.c ../bfd/bfd.h sysdep.h config.h $(INCDIR)/fopen-same.h \ - ld.h ldgram.h ldmisc.h ldexp.h ldlang.h ldfile.h ldlex.h \ - ldmain.h - -# IF YOU PUT ANYTHING HERE IT WILL GO AWAY - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contrib/binutils/ld/NEWS b/contrib/binutils/ld/NEWS deleted file mode 100644 index ba325964139f..000000000000 --- a/contrib/binutils/ld/NEWS +++ /dev/null @@ -1,169 +0,0 @@ --*- text -*- - -Changes in version 2.9: - -* Added SQUAD to the linker script language. - -* New option --no-warn-mismatch. - -* The MEMORY command now parses the attributes to determine where sections that -are not placed in a specific memory region are placed. - -Changes in version 2.8: - -* Linker scripts may now contain shell wildcard characters for file and section - names. - -* The linker now supports symbol versions in ELF. - -* The NOCROSSREFS command was added to the linker script language. - -* The LOADADDR expression was added to the linker script language. - -* MAX and MIN functions were added to the linker script language. - -* The OVERLAY construct was added to the linker script language. - -* New option --warn-section-align to warn when the address of an output section - changes due to alignment of an input section. - -* New options --filter/-F and --auxiliary/-f. - -Changes in version 2.7: - -* New option --cref to print out a cross reference table. - -* New option --wrap SYMBOL. - -* New option --no-whole-archive, to turn off the effect of --whole-archive. - -* Input sections assigned to the output section /DISCARD/ in the linker script - are not included in the output file. - -* The SunOS and ELF linkers now merge stabs debugging information which uses - the N_BINCL and N_EINCL stab types. This reduces the amount of debugging - information generated. - -Changes in version 2.6: - -* When an ELF section name is representable as a C identifier (this is not true -of most ELF section names), the linker will automatically define symbols -__start_SECNAME and __stop_SECNAME, where SECNAME is the section name, at the -beginning and the end of the section. This is used by glibc. - -* When an ELF section named .gnu.warning is encountered in an input file, the -contents of the section are displayed as an error message, and the section is -not copied into the output file. This is used by glibc. - -* When an ELF section named .gnu.warning.SYMBOL is encountered in an input -file, and the symbol SYMBOL is referenced by some object file, the contents of -the section are displayed as an error message. The section is not copied into -the output file, unless doing a relocateable or shared link. This is used by -glibc. - -* New options -split-by-reloc and -split-by-file. - -* The linker now supports linking PIC compiled code on SPARC SunOS. It can -also create SPARC SunOS shared libraries, and, like the native SunOS linker, -will do so whenever there is an undefined symbol in the link and neither the -e -nor the -r option was used. - -* The -rpath option may be used on SunOS to set the list of directories to be -searched at run time. This overrides the default of building the list from the --L options. - -* The COFF linker now combines debugging information for structs, unions, and -enums, so that even if the same type is defined in multiple input files it will -only be defined once in the output file. The --traditional-format switch will -prevent this optimization. - -Changes in version 2.5: - -* The linker now supports linking against SunOS shared libraries. It still can -not link SunOS PIC (Position Independent Code) files, so it can not be used to -generate shared libaries. - -* The linker now supports linking against ELF shared libraries for the i386 -(UnixWare) and SPARC (Solaris). It can also link ELF PIC files, and can be -used to generate shared libraries. Shared library generation is not well -tested; please report any problems encountered. The linker is now enabled for -Solaris again. - -* Eric Youngdale has contributed Linux support code, including linking against -Linux a.out shared libraries. The linker produces Linux QMAGIC binaries. - -* The ELF backend has been converted to the new linker code. To use the new -ELF linker, each particular target requires a relocation function. So far, -this function has been written for i386 (UnixWare), SPARC (Solaris) MIPS (Irix -5), and HPPA ELF targets. - -* The -( (--start-group) and -) (--end-group) options have been added to -support searching a group of archives as though they were a single archive. -This can also be used in a linker script, as GROUP ( files ). - -* When a file is named on the command line, and the linker does not recognize -it as an object file, the linker will now treat the file as a linker script -file. A linker script named in this way augments, but does not replace, the -default linker script. - -* The -warn-once option was added. It causes the linker to only warn once per -undefined symbol, rather than once per reference. - -* The COFF backend has been converted to the new linker code. As with ELF, to -use the new linker, each particular target requires a relocation function. So -far, this function has been written for the i386, m68k, a29k and SH targets. - -* The -V flag was made a synonym for -v, for SVR4 compatibility. The old -V -behaviour is available via --verbose. - -Changes in version 2.4: - -* New linker code, by Steve Chamberlain and Ian Taylor. For a.out and ecoff - formats (so far), this should result in considerable savings in time - and memory used while linking; slightly poorer performance than - before for formats not converted yet. - -* Command-line parsing is no longer done with flex. This means - oddball characters in filenames won't get treated as argument - separators. - -* HP-PA ELF support, by Jeff Law. (No SOM support yet.) - -* Mach i386 support, by David Mackenzie. - -* Irix 4 shared libraries are now supported (Irix 5 uses ELF, and ELF shared - libraries are not yet supported). - -* COFF shared libraries (as on SCO) should work as well. - -* The linker is disabled for Solaris. (Actually, it was in 2.3 also, I just - forgot to note it.) Some of their C library routines don't work when - statically linked, and the GNU linker doesn't support dynamic linking yet. - -Changes in version 2.3: - -* Weak symbols are now supported. - -* ELF support has been added. The linker has been bootstrapped on - UnixWare and Solaris. - -* Alpha OSF/1 support has been added (non dynamic linking only). - -Changes in version 2.2: - -* The `bfd' library has been updated to reduce a.out-format string - table size. The effect of this is that files linked from many input - files with duplicate symbols (`-g' debugging records, or identical - static symbols) should be much smaller. - -Changes in version 2.1: - -* The ld -ySYMBOL flag (to trace references to SYMBOL) is now implemented. - -* There is now support for writing ECOFF files, so ld and the - other utilities should work on Risc/Ultrix and Irix. - - -Local variables: -fill-column: 79 -End: diff --git a/contrib/binutils/ld/README b/contrib/binutils/ld/README deleted file mode 100644 index 8947d04156bf..000000000000 --- a/contrib/binutils/ld/README +++ /dev/null @@ -1,64 +0,0 @@ -This is the GNU linker. It is distributed with other "binary -utilities" which should be in ../binutils. See ../binutils/README for -more general notes, including where to send bug reports. - -There are many features of the linker: - -* The linker uses a Binary File Descriptor library (../bfd) - that it uses to read and write object files. This helps - insulate the linker itself from the format of object files. - -* The linker supports a number of different object file - formats. It can even handle multiple formats at once: - Read two input formats and write a third. - -* The linker can be configured for cross-linking. - -* The linker supports a control language. - -* There is a user manual (ld.texinfo), as well as the - beginnings of an internals manual (ldint.texinfo). - -Installation -============ - -See ../binutils/README. - -If you want to make a cross-linker, you may want to specify -a different search path of -lfoo libraries than the default. -You can do this by setting the LIB_PATH variable in ./Makefile. - -To build just the linker, make the target all-ld from the top level -directory (one directory above this one). - -Porting to a new target -======================= - -See the ldint.texinfo manual. - -Reporting bugs etc -=========================== - -See ../binutils/README. - -Known problems -============== - -The Solaris linker normally exports all dynamic symbols from an -executable. The GNU linker does not do this by default. This is -because the GNU linker tries to present the same interface for all -similar targets (in this case, all native ELF targets). This does not -matter for normal programs, but it can make a difference for programs -which try to dlopen an executable, such as PERL or Tcl. You can make -the GNU linker export all dynamic symbols with the -E or ---export-dynamic command line option. - -HP/UX 9.01 has a shell bug that causes the linker scripts to be -generated incorrectly. The symptom of this appears to be "fatal error -- scanner input buffer overflow" error messages. There are various -workarounds to this: - * Build and install bash, and build with "make SHELL=bash". - * Update to a version of HP/UX with a working shell (e.g., 9.05). - * Replace "(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc)" in - genscripts.sh with "sh ${srcdir}..." (no parens) and make sure the - emulparams script used exports any shell variables it sets. diff --git a/contrib/binutils/ld/TODO b/contrib/binutils/ld/TODO deleted file mode 100644 index 31cd98ba236f..000000000000 --- a/contrib/binutils/ld/TODO +++ /dev/null @@ -1,9 +0,0 @@ -Volunteers to tackle some of the following would be welcome: - -Support the "traditional" BSD -A flag (incremental loading). -(There is a -A flag in ld now, but it is used to specify the -architecture. That should probably be changed.) - -Support for dynamic loading (a la dld, but bfd-based) would be nice. - -Avoid re-open (and re-seeking) output bfd and archives. diff --git a/contrib/binutils/ld/acconfig.h b/contrib/binutils/ld/acconfig.h deleted file mode 100644 index c627d7faa97a..000000000000 --- a/contrib/binutils/ld/acconfig.h +++ /dev/null @@ -1,22 +0,0 @@ - -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Whether strstr must be declared even if <string.h> is included. */ -#undef NEED_DECLARATION_STRSTR - -/* Whether free must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_FREE - -/* Whether sbrk must be declared even if <unistd.h> is included. */ -#undef NEED_DECLARATION_SBRK - -/* Whether getenv must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_GETENV -@TOP@ - -/* Do we need to use the b modifier when opening binary files? */ -#undef USE_BINARY_FOPEN diff --git a/contrib/binutils/ld/acinclude.m4 b/contrib/binutils/ld/acinclude.m4 deleted file mode 100644 index 71b09b9f6ac7..000000000000 --- a/contrib/binutils/ld/acinclude.m4 +++ /dev/null @@ -1 +0,0 @@ -sinclude(../bfd/acinclude.m4) diff --git a/contrib/binutils/ld/aclocal.m4 b/contrib/binutils/ld/aclocal.m4 deleted file mode 100644 index cbf8bd1799f2..000000000000 --- a/contrib/binutils/ld/aclocal.m4 +++ /dev/null @@ -1,460 +0,0 @@ -dnl aclocal.m4 generated automatically by aclocal 1.2e - -dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. -dnl This Makefile.in is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without -dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A -dnl PARTICULAR PURPOSE. - -sinclude(../bfd/acinclude.m4) - -# Do all the work for Automake. This macro actually does too much -- -# some checks are only needed if your package does certain things. -# But this isn't really a big deal. - -# serial 1 - -dnl Usage: -dnl AM_INIT_AUTOMAKE(package,version, [no-define]) - -AC_DEFUN(AM_INIT_AUTOMAKE, -[AC_REQUIRE([AM_PROG_INSTALL]) -PACKAGE=[$1] -AC_SUBST(PACKAGE) -VERSION=[$2] -AC_SUBST(VERSION) -dnl test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi -ifelse([$3],, -AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") -AC_DEFINE_UNQUOTED(VERSION, "$VERSION")) -AC_REQUIRE([AM_SANITY_CHECK]) -AC_REQUIRE([AC_ARG_PROGRAM]) -dnl FIXME This is truly gross. -missing_dir=`cd $ac_aux_dir && pwd` -AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) -AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) -AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) -AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) -AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) -AC_REQUIRE([AC_PROG_MAKE_SET])]) - - -# serial 1 - -AC_DEFUN(AM_PROG_INSTALL, -[AC_REQUIRE([AC_PROG_INSTALL]) -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' -AC_SUBST(INSTALL_SCRIPT)dnl -]) - -# -# Check to make sure that the build environment is sane. -# - -AC_DEFUN(AM_SANITY_CHECK, -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftestfile -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "[$]*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "[$]*" != "X $srcdir/configure conftestfile" \ - && test "[$]*" != "X conftestfile $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "[$]2" = conftestfile - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -rm -f conftest* -AC_MSG_RESULT(yes)]) - -dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) -dnl The program must properly implement --version. -AC_DEFUN(AM_MISSING_PROG, -[AC_MSG_CHECKING(for working $2) -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if ($2 --version) < /dev/null > /dev/null 2>&1; then - $1=$2 - AC_MSG_RESULT(found) -else - $1="$3/missing $2" - AC_MSG_RESULT(missing) -fi -AC_SUBST($1)]) - - -# serial 24 AM_PROG_LIBTOOL -AC_DEFUN(AM_PROG_LIBTOOL, -[AC_REQUIRE([AM_ENABLE_SHARED])dnl -AC_REQUIRE([AM_ENABLE_STATIC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_RANLIB])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AM_PROG_LD])dnl -AC_REQUIRE([AM_PROG_NM])dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -dnl -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Check for any special flags to pass to ltconfig. -libtool_flags= -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$silent" = yes && libtool_flags="$libtool_flags --silent" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$host" in -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - CFLAGS="$CFLAGS -belf" - ;; -esac - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ -|| AC_MSG_ERROR([libtool configure failed]) -]) - -# AM_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AM_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AM_ENABLE_SHARED, -[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(shared, -changequote(<<, >>)dnl -<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT] -changequote([, ])dnl -[ --enable-shared=PKGS only build shared libraries if the current package - appears as an element in the PKGS list], -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl -]) - -# AM_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN(AM_DISABLE_SHARED, -[AM_ENABLE_SHARED(no)]) - -# AM_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN(AM_DISABLE_STATIC, -[AM_ENABLE_STATIC(no)]) - -# AM_ENABLE_STATIC - implement the --enable-static flag -# Usage: AM_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AM_ENABLE_STATIC, -[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(static, -changequote(<<, >>)dnl -<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT] -changequote([, ])dnl -[ --enable-static=PKGS only build shared libraries if the current package - appears as an element in the PKGS list], -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_static=AM_ENABLE_STATIC_DEFAULT)dnl -]) - - -# AM_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN(AM_PROG_LD, -[AC_ARG_WITH(gnu-ld, -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], -test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) -AC_REQUIRE([AC_PROG_CC]) -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. -changequote(,)dnl - /* | [A-Za-z]:\\*) -changequote([,])dnl - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(ac_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$ac_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_SUBST(LD) -AM_PROG_LD_GNU -]) - -AC_DEFUN(AM_PROG_LD_GNU, -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi]) -]) - -# AM_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN(AM_PROG_NM, -[AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, -[case "$NM" in -changequote(,)dnl -/* | [A-Za-z]:\\*) -changequote([,])dnl - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; -*) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - else - ac_cv_path_NM="$ac_dir/nm" - fi - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm - ;; -esac]) -NM="$ac_cv_path_NM" -AC_MSG_RESULT([$NM]) -AC_SUBST(NM) -]) - -# Like AC_CONFIG_HEADER, but automatically create stamp file. - -AC_DEFUN(AM_CONFIG_HEADER, -[AC_PREREQ([2.12]) -AC_CONFIG_HEADER([$1]) -dnl When config.status generates a header, we must update the stamp-h file. -dnl This file resides in the same directory as the config header -dnl that is generated. We must strip everything past the first ":", -dnl and everything past the last "/". -AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl -ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, -<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, -<<am_indx=1 -for am_file in <<$1>>; do - case " <<$>>CONFIG_HEADERS " in - *" <<$>>am_file "*<<)>> - echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx - ;; - esac - am_indx=`expr "<<$>>am_indx" + 1` -done<<>>dnl>>) -changequote([,]))]) - -# Check to see if we're running under Cygwin32, without using -# AC_CANONICAL_*. If so, set output variable CYGWIN32 to "yes". -# Otherwise set it to "no". - -dnl AM_CYGWIN32() -AC_DEFUN(AM_CYGWIN32, -[AC_CACHE_CHECK(for Cygwin32 environment, am_cv_cygwin32, -[AC_TRY_COMPILE(,[return __CYGWIN32__;], -am_cv_cygwin32=yes, am_cv_cygwin32=no) -rm -f conftest*]) -CYGWIN32= -test "$am_cv_cygwin32" = yes && CYGWIN32=yes]) - -# Check to see if we're running under Win32, without using -# AC_CANONICAL_*. If so, set output variable EXEEXT to ".exe". -# Otherwise set it to "". - -dnl AM_EXEEXT() -dnl This knows we add .exe if we're building in the Cygwin32 -dnl environment. But if we're not, then it compiles a test program -dnl to see if there is a suffix for executables. -AC_DEFUN(AM_EXEEXT, -[AC_REQUIRE([AM_CYGWIN32]) -AC_REQUIRE([AM_MINGW32]) -AC_MSG_CHECKING([for executable suffix]) -AC_CACHE_VAL(am_cv_exeext, -[if test "$CYGWIN32" = yes || test "$MINGW32" = yes; then -am_cv_exeext=.exe -else -cat > am_c_test.c << 'EOF' -int main() { -/* Nothing needed here */ -} -EOF -${CC-cc} -o am_c_test $CFLAGS $CPPFLAGS $LDFLAGS am_c_test.c $LIBS 1>&5 -am_cv_exeext=`echo am_c_test.* | grep -v am_c_test.c | sed -e s/am_c_test//` -rm -f am_c_test*]) -test x"${am_cv_exeext}" = x && am_cv_exeext=no -fi -EXEEXT="" -test x"${am_cv_exeext}" != xno && EXEEXT=${am_cv_exeext} -AC_MSG_RESULT(${am_cv_exeext}) -AC_SUBST(EXEEXT)]) - -# Check to see if we're running under Mingw, without using -# AC_CANONICAL_*. If so, set output variable MINGW32 to "yes". -# Otherwise set it to "no". - -dnl AM_MINGW32() -AC_DEFUN(AM_MINGW32, -[AC_CACHE_CHECK(for Mingw32 environment, am_cv_mingw32, -[AC_TRY_COMPILE(,[return __MINGW32__;], -am_cv_mingw32=yes, am_cv_mingw32=no) -rm -f conftest*]) -MINGW32= -test "$am_cv_mingw32" = yes && MINGW32=yes]) - -# Add --enable-maintainer-mode option to configure. -# From Jim Meyering - -# serial 1 - -AC_DEFUN(AM_MAINTAINER_MODE, -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) - AC_MSG_RESULT($USE_MAINTAINER_MODE) - if test $USE_MAINTAINER_MODE = yes; then - MAINT= - else - MAINT='#M#' - fi - AC_SUBST(MAINT)dnl -] -) - diff --git a/contrib/binutils/ld/config.in b/contrib/binutils/ld/config.in deleted file mode 100644 index a9de5b8c82a1..000000000000 --- a/contrib/binutils/ld/config.in +++ /dev/null @@ -1,52 +0,0 @@ -/* config.in. Generated automatically from configure.in by autoheader. */ - -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Whether strstr must be declared even if <string.h> is included. */ -#undef NEED_DECLARATION_STRSTR - -/* Whether free must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_FREE - -/* Whether sbrk must be declared even if <unistd.h> is included. */ -#undef NEED_DECLARATION_SBRK - -/* Whether getenv must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_GETENV - -/* Define if lex declares yytext as a char * by default, not a char[]. */ -#undef YYTEXT_POINTER - -/* Do we need to use the b modifier when opening binary files? */ -#undef USE_BINARY_FOPEN - -/* Define if you have the sbrk function. */ -#undef HAVE_SBRK - -/* Define if you have the <dirent.h> header file. */ -#undef HAVE_DIRENT_H - -/* Define if you have the <ndir.h> header file. */ -#undef HAVE_NDIR_H - -/* Define if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define if you have the <sys/dir.h> header file. */ -#undef HAVE_SYS_DIR_H - -/* Define if you have the <sys/ndir.h> header file. */ -#undef HAVE_SYS_NDIR_H - -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H diff --git a/contrib/binutils/ld/configdoc.texi b/contrib/binutils/ld/configdoc.texi deleted file mode 100644 index 3a367277e501..000000000000 --- a/contrib/binutils/ld/configdoc.texi +++ /dev/null @@ -1,13 +0,0 @@ -@c ------------------------------ CONFIGURATION VARS: -@c 1. Inclusiveness of this manual -@set GENERIC - -@c 2. Specific target machines -@set H8300 -@set I960 - -@c 3. Properties of this configuration -@clear SingleFormat -@set UsesEnvVars -@c ------------------------------ end CONFIGURATION VARS - diff --git a/contrib/binutils/ld/configure b/contrib/binutils/ld/configure deleted file mode 100755 index d15e3d260b14..000000000000 --- a/contrib/binutils/ld/configure +++ /dev/null @@ -1,2757 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12.1 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --enable-shared build shared libraries [default=yes] - --enable-shared=PKGS only build shared libraries if the current package - appears as an element in the PKGS list" -ac_help="$ac_help - --enable-static build static libraries [default=yes] - --enable-static=PKGS only build shared libraries if the current package - appears as an element in the PKGS list" -ac_help="$ac_help - --with-gnu-ld assume the C compiler uses GNU ld [default=no]" -ac_help="$ac_help - --enable-targets alternative target configurations" -ac_help="$ac_help - --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)" -ac_help="$ac_help - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12.1" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=ldmain.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - - -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; -esac - - -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:588: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - -echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:609: checking target system type" >&5 - -target_alias=$target -case "$target_alias" in -NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; -esac - -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$target" 1>&6 - -echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:627: checking build system type" >&5 - -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$build" 1>&6 - -test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:662: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:716: checking whether build environment is sane" >&5 -# Just in case -sleep 1 -echo timestamp > conftestfile -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "$*" != "X $srcdir/configure conftestfile" \ - && test "$*" != "X conftestfile $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { echo "configure: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" 1>&2; exit 1; } - fi - - test "$2" = conftestfile - ) -then - # Ok. - : -else - { echo "configure: error: newly created file is older than distributed files! -Check your system clock" 1>&2; exit 1; } -fi -rm -f conftest* -echo "$ac_t""yes" 1>&6 -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi -test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," - -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:773: checking whether ${MAKE-make} sets \${MAKE}" >&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ac_t""yes" 1>&6 - SET_MAKE= -else - echo "$ac_t""no" 1>&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - - -PACKAGE=ld - -VERSION=2.9.1 - -if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } -fi -cat >> confdefs.h <<EOF -#define PACKAGE "$PACKAGE" -EOF - -cat >> confdefs.h <<EOF -#define VERSION "$VERSION" -EOF - - - -missing_dir=`cd $ac_aux_dir && pwd` -echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 -echo "configure:819: checking for working aclocal" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (aclocal --version) < /dev/null > /dev/null 2>&1; then - ACLOCAL=aclocal - echo "$ac_t""found" 1>&6 -else - ACLOCAL="$missing_dir/missing aclocal" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:832: checking for working autoconf" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoconf --version) < /dev/null > /dev/null 2>&1; then - AUTOCONF=autoconf - echo "$ac_t""found" 1>&6 -else - AUTOCONF="$missing_dir/missing autoconf" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:845: checking for working automake" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (automake --version) < /dev/null > /dev/null 2>&1; then - AUTOMAKE=automake - echo "$ac_t""found" 1>&6 -else - AUTOMAKE="$missing_dir/missing automake" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:858: checking for working autoheader" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoheader --version) < /dev/null > /dev/null 2>&1; then - AUTOHEADER=autoheader - echo "$ac_t""found" 1>&6 -else - AUTOHEADER="$missing_dir/missing autoheader" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:871: checking for working makeinfo" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (makeinfo --version) < /dev/null > /dev/null 2>&1; then - MAKEINFO=makeinfo - echo "$ac_t""found" 1>&6 -else - MAKEINFO="$missing_dir/missing makeinfo" - echo "$ac_t""missing" 1>&6 -fi - - - -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_shared=yes -fi - -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_static=yes -fi - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:934: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:963: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:992: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1040: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext <<EOF -#line 1050 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -if { (eval echo configure:1054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1074: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1079: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1088: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1103: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-O2" - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - - -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:1143: checking for ld used by GCC" >&5 - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - /* | [A-Za-z]:\\*) - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:1161: checking for GNU ld" >&5 -else - echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 -echo "configure:1164: checking for non-GNU ld" >&5 -fi -if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$ac_cv_path_LD" -if test -n "$LD"; then - echo "$ac_t""$LD" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi -test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } - -echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1200: checking if the linker ($LD) is GNU ld" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 - - -echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 -echo "configure:1216: checking for BSD-compatible nm" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$NM" in -/* | [A-Za-z]:\\*) - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; -*) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - else - ac_cv_path_NM="$ac_dir/nm" - fi - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm - ;; -esac -fi - -NM="$ac_cv_path_NM" -echo "$ac_t""$NM" 1>&6 - - -echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1253: checking whether ln -s works" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi -fi -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - echo "$ac_t""yes" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Check for any special flags to pass to ltconfig. -libtool_flags= -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$silent" = yes && libtool_flags="$libtool_flags --silent" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$host" in -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 1289 "configure"' > conftest.$ac_ext - if { (eval echo configure:1290: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - CFLAGS="$CFLAGS -belf" - ;; -esac - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ -|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } - - -# Check whether --enable-targets or --disable-targets was given. -if test "${enable_targets+set}" = set; then - enableval="$enable_targets" - case "${enableval}" in - yes | "") { echo "configure: error: enable-targets option must specify target names or 'all'" 1>&2; exit 1; } - ;; - no) enable_targets= ;; - *) enable_targets=$enableval ;; -esac -fi -# Check whether --enable-64-bit-bfd or --disable-64-bit-bfd was given. -if test "${enable_64_bit_bfd+set}" = set; then - enableval="$enable_64_bit_bfd" - case "${enableval}" in - yes) want64=true ;; - no) want64=false ;; - *) { echo "configure: error: bad value ${enableval} for 64-bit-bfd option" 1>&2; exit 1; } ;; -esac -else - want64=false -fi - - - - - -if test -z "$target" ; then - { echo "configure: error: Unrecognized target system type; please check config.sub." 1>&2; exit 1; } -fi -if test -z "$host" ; then - { echo "configure: error: Unrecognized host system type; please check config.sub." 1>&2; exit 1; } -fi - -# host-specific stuff: - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1358: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1387: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1435: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext <<EOF -#line 1445 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -if { (eval echo configure:1449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1469: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1474: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1483: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1498: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-O2" - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -echo $ac_n "checking for Cygwin32 environment""... $ac_c" 1>&6 -echo "configure:1529: checking for Cygwin32 environment" >&5 -if eval "test \"`echo '$''{'am_cv_cygwin32'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1534 "configure" -#include "confdefs.h" - -int main() { -return __CYGWIN32__; -; return 0; } -EOF -if { (eval echo configure:1541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - am_cv_cygwin32=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - am_cv_cygwin32=no -fi -rm -f conftest* -rm -f conftest* -fi - -echo "$ac_t""$am_cv_cygwin32" 1>&6 -CYGWIN32= -test "$am_cv_cygwin32" = yes && CYGWIN32=yes -echo $ac_n "checking for Mingw32 environment""... $ac_c" 1>&6 -echo "configure:1558: checking for Mingw32 environment" >&5 -if eval "test \"`echo '$''{'am_cv_mingw32'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1563 "configure" -#include "confdefs.h" - -int main() { -return __MINGW32__; -; return 0; } -EOF -if { (eval echo configure:1570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - am_cv_mingw32=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - am_cv_mingw32=no -fi -rm -f conftest* -rm -f conftest* -fi - -echo "$ac_t""$am_cv_mingw32" 1>&6 -MINGW32= -test "$am_cv_mingw32" = yes && MINGW32=yes - - -echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:1589: checking for executable suffix" >&5 -if eval "test \"`echo '$''{'am_cv_exeext'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$CYGWIN32" = yes || test "$MINGW32" = yes; then -am_cv_exeext=.exe -else -cat > am_c_test.c << 'EOF' -int main() { -/* Nothing needed here */ -} -EOF -${CC-cc} -o am_c_test $CFLAGS $CPPFLAGS $LDFLAGS am_c_test.c $LIBS 1>&5 -am_cv_exeext=`echo am_c_test.* | grep -v am_c_test.c | sed -e s/am_c_test//` -rm -f am_c_test* -fi - -test x"${am_cv_exeext}" = x && am_cv_exeext=no -fi -EXEEXT="" -test x"${am_cv_exeext}" != xno && EXEEXT=${am_cv_exeext} -echo "$ac_t""${am_cv_exeext}" 1>&6 - - -for ac_prog in 'bison -y' byacc -do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1618: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$YACC"; then - ac_cv_prog_YACC="$YACC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_YACC="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -YACC="$ac_cv_prog_YACC" -if test -n "$YACC"; then - echo "$ac_t""$YACC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -test -n "$YACC" && break -done -test -n "$YACC" || YACC="yacc" - -# Extract the first word of "flex", so it can be a program name with args. -set dummy flex; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1650: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$LEX"; then - ac_cv_prog_LEX="$LEX" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_LEX="flex" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex" -fi -fi -LEX="$ac_cv_prog_LEX" -if test -n "$LEX"; then - echo "$ac_t""$LEX" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$LEXLIB" -then - case "$LEX" in - flex*) ac_lib=fl ;; - *) ac_lib=l ;; - esac - echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 -echo "configure:1683: checking for yywrap in -l$ac_lib" >&5 -ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-l$ac_lib $LIBS" -cat > conftest.$ac_ext <<EOF -#line 1691 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char yywrap(); - -int main() { -yywrap() -; return 0; } -EOF -if { (eval echo configure:1702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LEXLIB="-l$ac_lib" -else - echo "$ac_t""no" 1>&6 -fi - -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1725: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 1740 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 1757 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1763: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -echo $ac_n "checking lex output file root""... $ac_c" 1>&6 -echo "configure:1786: checking lex output file root" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # The minimal lex program is just a single line: %%. But some broken lexes -# (Solaris, I think it was) want two %% lines, so accommodate them. -echo '%% -%%' | $LEX -if test -f lex.yy.c; then - ac_cv_prog_lex_root=lex.yy -elif test -f lexyy.c; then - ac_cv_prog_lex_root=lexyy -else - { echo "configure: error: cannot find output from $LEX; giving up" 1>&2; exit 1; } -fi -fi - -echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 -LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root - -echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 -echo "configure:1807: checking whether yytext is a pointer" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # POSIX says lex can declare yytext either as a pointer or an array; the -# default is implementation-dependent. Figure out which it is, since -# not all implementations provide the %pointer and %array declarations. -ac_cv_prog_lex_yytext_pointer=no -echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c -ac_save_LIBS="$LIBS" -LIBS="$LIBS $LEXLIB" -cat > conftest.$ac_ext <<EOF -#line 1819 "configure" -#include "confdefs.h" -`cat $LEX_OUTPUT_ROOT.c` -int main() { - -; return 0; } -EOF -if { (eval echo configure:1826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - ac_cv_prog_lex_yytext_pointer=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 -fi -rm -f conftest* -LIBS="$ac_save_LIBS" -rm -f "${LEX_OUTPUT_ROOT}.c" - -fi - -echo "$ac_t""$ac_cv_prog_lex_yytext_pointer" 1>&6 -if test $ac_cv_prog_lex_yytext_pointer = yes; then - cat >> confdefs.h <<\EOF -#define YYTEXT_POINTER 1 -EOF - -fi - - -echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:1849: checking whether to enable maintainer-specific portions of Makefiles" >&5 - # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval="$enable_maintainer_mode" - USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 - if test $USE_MAINTAINER_MODE = yes; then - MAINT= - else - MAINT='#M#' - fi - - - -. ${srcdir}/configure.host - - - - - - -for ac_hdr in string.h strings.h stdlib.h unistd.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1878: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1883 "configure" -#include "confdefs.h" -#include <$ac_hdr> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -for ac_func in sbrk -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1917: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1922 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1974: checking for $ac_hdr that defines DIR" >&5 -if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1979 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <$ac_hdr> -int main() { -DIR *dirp = 0; -; return 0; } -EOF -if { (eval echo configure:1987: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - ac_header_dirent=$ac_hdr; break -else - echo "$ac_t""no" 1>&6 -fi -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then -echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2012: checking for opendir in -ldir" >&5 -ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldir $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2020 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir(); - -int main() { -opendir() -; return 0; } -EOF -if { (eval echo configure:2031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -ldir" -else - echo "$ac_t""no" 1>&6 -fi - -else -echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2053: checking for opendir in -lx" >&5 -ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lx $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2061 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir(); - -int main() { -opendir() -; return 0; } -EOF -if { (eval echo configure:2072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -lx" -else - echo "$ac_t""no" 1>&6 -fi - -fi - - - -case "${host}" in -i[345]86-*-msdos* | i[345]86-*-go32* | i[345]86-*-mingw32* | *-*-cygwin32* | *-*-windows) - cat >> confdefs.h <<\EOF -#define USE_BINARY_FOPEN 1 -EOF - ;; -esac - -echo $ac_n "checking whether strstr must be declared""... $ac_c" 1>&6 -echo "configure:2105: checking whether strstr must be declared" >&5 -if eval "test \"`echo '$''{'bfd_cv_decl_needed_strstr'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2110 "configure" -#include "confdefs.h" - -#include <stdio.h> -#ifdef HAVE_STRING_H -#include <string.h> -#else -#ifdef HAVE_STRINGS_H -#include <strings.h> -#endif -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -int main() { -char *(*pfn) = (char *(*)) strstr -; return 0; } -EOF -if { (eval echo configure:2131: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - bfd_cv_decl_needed_strstr=no -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - bfd_cv_decl_needed_strstr=yes -fi -rm -f conftest* -fi - -echo "$ac_t""$bfd_cv_decl_needed_strstr" 1>&6 -if test $bfd_cv_decl_needed_strstr = yes; then - bfd_tr_decl=NEED_DECLARATION_`echo strstr | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $bfd_tr_decl 1 -EOF - -fi - -echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6 -echo "configure:2153: checking whether free must be declared" >&5 -if eval "test \"`echo '$''{'bfd_cv_decl_needed_free'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2158 "configure" -#include "confdefs.h" - -#include <stdio.h> -#ifdef HAVE_STRING_H -#include <string.h> -#else -#ifdef HAVE_STRINGS_H -#include <strings.h> -#endif -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -int main() { -char *(*pfn) = (char *(*)) free -; return 0; } -EOF -if { (eval echo configure:2179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - bfd_cv_decl_needed_free=no -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - bfd_cv_decl_needed_free=yes -fi -rm -f conftest* -fi - -echo "$ac_t""$bfd_cv_decl_needed_free" 1>&6 -if test $bfd_cv_decl_needed_free = yes; then - bfd_tr_decl=NEED_DECLARATION_`echo free | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $bfd_tr_decl 1 -EOF - -fi - -echo $ac_n "checking whether sbrk must be declared""... $ac_c" 1>&6 -echo "configure:2201: checking whether sbrk must be declared" >&5 -if eval "test \"`echo '$''{'bfd_cv_decl_needed_sbrk'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2206 "configure" -#include "confdefs.h" - -#include <stdio.h> -#ifdef HAVE_STRING_H -#include <string.h> -#else -#ifdef HAVE_STRINGS_H -#include <strings.h> -#endif -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -int main() { -char *(*pfn) = (char *(*)) sbrk -; return 0; } -EOF -if { (eval echo configure:2227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - bfd_cv_decl_needed_sbrk=no -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - bfd_cv_decl_needed_sbrk=yes -fi -rm -f conftest* -fi - -echo "$ac_t""$bfd_cv_decl_needed_sbrk" 1>&6 -if test $bfd_cv_decl_needed_sbrk = yes; then - bfd_tr_decl=NEED_DECLARATION_`echo sbrk | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $bfd_tr_decl 1 -EOF - -fi - -echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6 -echo "configure:2249: checking whether getenv must be declared" >&5 -if eval "test \"`echo '$''{'bfd_cv_decl_needed_getenv'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2254 "configure" -#include "confdefs.h" - -#include <stdio.h> -#ifdef HAVE_STRING_H -#include <string.h> -#else -#ifdef HAVE_STRINGS_H -#include <strings.h> -#endif -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -int main() { -char *(*pfn) = (char *(*)) getenv -; return 0; } -EOF -if { (eval echo configure:2275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - bfd_cv_decl_needed_getenv=no -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - bfd_cv_decl_needed_getenv=yes -fi -rm -f conftest* -fi - -echo "$ac_t""$bfd_cv_decl_needed_getenv" 1>&6 -if test $bfd_cv_decl_needed_getenv = yes; then - bfd_tr_decl=NEED_DECLARATION_`echo getenv | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $bfd_tr_decl 1 -EOF - -fi - - -# target-specific stuff: - -all_targets= -EMUL= -all_emuls= -TDIRS= - -for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'` -do - if test "$targ_alias" = "all"; then - all_targets=true - else - # Canonicalize the secondary target names. - result=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $targ_alias 2>/dev/null` - if test -n "$result"; then - targ=$result - else - targ=$targ_alias - fi - - . ${srcdir}/configure.tgt - - if test "$targ" = "$target"; then - EMUL=$targ_emul - fi - - for i in $targ_emul $targ_extra_emuls; do - case " $all_emuls " in - *" e${i}.o "*) ;; - *) - all_emuls="$all_emuls e${i}.o" - eval result=\$tdir_$i - test -z "$result" && result=$targ_alias - TDIRS="$TDIRS\\ -tdir_$i=$result" - ;; - esac - done - fi -done - - - - -if test x${all_targets} = xtrue; then - if test x${want64} = xtrue; then - EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)' - else - EMULATION_OFILES='$(ALL_EMULATIONS)' - fi -else - EMULATION_OFILES=$all_emuls -fi - - -if test x${enable_static} = xno; then - TESTBFDLIB="--rpath ../bfd/.libs ../bfd/.libs/libbfd.so" -else - TESTBFDLIB="../bfd/.libs/libbfd.a" -fi - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set) 2>&1 | grep ac_space` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12.1" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@host@%$host%g -s%@host_alias@%$host_alias%g -s%@host_cpu@%$host_cpu%g -s%@host_vendor@%$host_vendor%g -s%@host_os@%$host_os%g -s%@target@%$target%g -s%@target_alias@%$target_alias%g -s%@target_cpu@%$target_cpu%g -s%@target_vendor@%$target_vendor%g -s%@target_os@%$target_os%g -s%@build@%$build%g -s%@build_alias@%$build_alias%g -s%@build_cpu@%$build_cpu%g -s%@build_vendor@%$build_vendor%g -s%@build_os@%$build_os%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -s%@PACKAGE@%$PACKAGE%g -s%@VERSION@%$VERSION%g -s%@ACLOCAL@%$ACLOCAL%g -s%@AUTOCONF@%$AUTOCONF%g -s%@AUTOMAKE@%$AUTOMAKE%g -s%@AUTOHEADER@%$AUTOHEADER%g -s%@MAKEINFO@%$MAKEINFO%g -s%@SET_MAKE@%$SET_MAKE%g -s%@RANLIB@%$RANLIB%g -s%@CC@%$CC%g -s%@LD@%$LD%g -s%@NM@%$NM%g -s%@LN_S@%$LN_S%g -s%@LIBTOOL@%$LIBTOOL%g -s%@EXEEXT@%$EXEEXT%g -s%@YACC@%$YACC%g -s%@LEX@%$LEX%g -s%@LEXLIB@%$LEXLIB%g -s%@CPP@%$CPP%g -s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g -s%@MAINT@%$MAINT%g -s%@HDEFINES@%$HDEFINES%g -s%@HOSTING_CRT0@%$HOSTING_CRT0%g -s%@HOSTING_LIBS@%$HOSTING_LIBS%g -s%@NATIVE_LIB_DIRS@%$NATIVE_LIB_DIRS%g -s%@EMUL@%$EMUL%g -s%@TDIRS@%$TDIRS%g -s%@EMULATION_OFILES@%$EMULATION_OFILES%g -s%@TESTBFDLIB@%$TESTBFDLIB%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <<EOF - CONFIG_HEADERS="config.h:config.in" -EOF -cat >> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <<EOF - - -EOF -cat >> $CONFIG_STATUS <<\EOF -test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/contrib/binutils/ld/configure.host b/contrib/binutils/ld/configure.host deleted file mode 100644 index 883ce675a015..000000000000 --- a/contrib/binutils/ld/configure.host +++ /dev/null @@ -1,166 +0,0 @@ -# This is the linker host specific file. This is invoked by the -# autoconf generated configure script. Putting it in a separate shell -# file lets us skip running autoconf when modifying host specific -# information. - -# This file sets the following shell variables: -# HDEFINES host specific compiler flags -# HOSTING_CRT0 crt0.o file used for bootstrapping -# HOSTING_LIBS libraries used for bootstrapping -# NATIVE_LIB_DIRS library directories to search on this host - -HDEFINES= -HOSTING_CRT0=/lib/crt0.o -HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc' -NATIVE_LIB_DIRS= - -case "${host}" in - -alpha*-*-linux-gnu*) - HOSTING_CRT0='-dynamic-linker `egrep "ld[^ ]*\.so" \`gcc --print-file-name=specs\` | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld[^ ]*.so..\).*,\1,"` `gcc --print-file-name=crt1.o` `gcc --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -L`dirname \`gcc --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc --print-file-name=crtend.o; fi` `gcc --print-file-name=crtn.o`' - ;; - -alpha*-*-netbsd*) - # The new BSD `make' has a bug: it doesn't pass empty arguments in - # shell commands. So we need to make this value non-empty in order - # for the genscripts.sh call to work. There's nothing magic about - # the value `/lib'; it's just a dummy. - NATIVE_LIB_DIRS=/lib - HOSTING_CRT0=/usr/lib/crt0.o - ;; - -alpha*-*-*) - HOSTING_CRT0=/usr/ccs/lib/crt0.o - NATIVE_LIB_DIRS=/usr/ccs/lib - ;; - -i[3456]86-*-bsd* | i[3456]86-*-freebsd* | i[3456]86-*-netbsd*) - # The new BSD `make' has a bug: it doesn't pass empty arguments in - # shell commands. So we need to make this value non-empty in order - # for the genscripts.sh call to work. There's nothing magic about - # the value `/lib'; it's just a dummy. - NATIVE_LIB_DIRS=/lib - HOSTING_CRT0=/usr/lib/crt0.o - ;; - -i[3456]86-*-sysv4*) - HOSTING_CRT0='/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi` /usr/ccs/lib/crtn.o' - NATIVE_LIB_DIRS=/usr/ccs/lib - ;; - -i[3456]86-sequent-ptx* | i[3456]86-sequent-sysv*) - HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi`' - ;; - -i[3456]86-*-sysv*) - HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; fi` /lib/crtn.o' - ;; - -i[3456]86-*-solaris*) - HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else gcc -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else gcc -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else gcc -print-file-name=crtn.o; fi`' - NATIVE_LIB_DIRS=/usr/ccs/lib - ;; - -i[3456]86-*-sco* | i[3456]86-*-isc*) - # In some configurations gcc does not use crtbegin.o and crtend.o. - # In that case gcc -print-file-name=crtbegin.o will simply print - # crtbegin.o. We create dummy crtbegin.o and crtend.o files to - # handle this. - echo "int dummy_crtbegin () { return 0; }" > crtbegin.c - ${CC} -c crtbegin.c -o crtbegin.o - rm -f crtbegin.c - echo "int dummy_crteng () { return 0; }" > crtend.c - ${CC} -c crtend.c -o crtend.o - rm -f crtend.c - HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi` /lib/crtn.o' - ;; - -i[3456]86-*-linux*aout* | i[3456]86-*-linuxoldld) - HOSTING_CRT0=/usr/lib/crt0.o - ;; - -i[3456]86-*-linux*libc1*) - HOSTING_CRT0='-dynamic-linker /lib/ld-linux.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else gcc --print-file-name=crtend.o; fi` /usr/lib/crtn.o' - ;; - -i[3456]86-*-linux-gnu*) - HOSTING_CRT0='-dynamic-linker `fgrep ld-linux.so \`gcc --print-file-name=specs\` | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld-linux.so..\).*,\1,"` `gcc --print-file-name=crt1.o` `gcc --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -L`dirname \`gcc --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc --print-file-name=crtend.o; fi` `gcc --print-file-name=crtn.o`' - ;; - -i[3456]86-*-lynxos*) - HOSTING_CRT0=/lib/init1.o - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc -lm /lib/initn.o' - ;; - -mips*-dec-bsd*) - HOSTING_CRT0=/usr/lib/crt0.o - ;; - -mips*-sgi-irix4*) - HOSTING_CRT0=/usr/lib/crt1.o - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc /usr/lib/crtn.o' - ;; - -mips*-sgi-irix[56]*) - HOSTING_CRT0=/usr/lib/crt1.o - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc /usr/lib/crtn.o' - ;; - -m68*-*-linux*aout*) - HOSTING_CRT0=/usr/lib/crt0.o - ;; - -m68*-*-linux*libc1*) - HOSTING_CRT0='-dynamic-linker /lib/ld-linux.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else gcc --print-file-name=crtend.o; fi` /usr/lib/crtn.o' - ;; - -m68*-*-linux-gnu*) - HOSTING_CRT0='-dynamic-linker /lib/ld.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc --print-file-name=crtend.o; fi` /usr/lib/crtn.o' - ;; - -m68*-*-lynxos*) - HOSTING_CRT0=/lib/init1.o - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc -lm /lib/initn.o' - ;; - -m68*-motorola-sysv) - HOSTING_CRT0='`if [ -f ../gcc/crt0.o ]; then echo ../gcc/crt0.o; elif [ -f \`gcc -print-file-name=\`crt0.o ]; then echo \`gcc -print-file-name=\`crt0.o; else echo /lib/crt0.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc881 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi`' - ;; - -m68*-sun-*) - HOSTING_CRT0='/usr/lib/crt0.o /usr/lib/Fcrt1.o -L/usr/lib/fsoft.o' - ;; - -m88*-*-dgux*) - HDEFINES=-D__using_DGUX - HOSTING_CRT0='/lib/crt0.o -X' - HOSTING_LIBS=/usr/sde/m88kbcs/lib/libc.a - ;; - -m88*-motorola-sysv3) - HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi` `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi`' - ;; - -romp-*-*) - HDEFINES=-DNO_VARARGS - ;; - -sparc*-*-solaris2*) - HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else gcc -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else gcc -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-file-name=crtbegin.o; fi`' - HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else gcc -print-file-name=crtn.o; fi`' - NATIVE_LIB_DIRS=/usr/ccs/lib - ;; - -esac diff --git a/contrib/binutils/ld/configure.in b/contrib/binutils/ld/configure.in deleted file mode 100644 index dbadbe0601a8..000000000000 --- a/contrib/binutils/ld/configure.in +++ /dev/null @@ -1,133 +0,0 @@ -dnl Process this file with autoconf to produce a configure script -dnl -AC_PREREG(2.5) -AC_INIT(ldmain.c) - -AC_CANONICAL_SYSTEM - -AM_INIT_AUTOMAKE(ld, 2.9.1) - -AM_PROG_LIBTOOL - -AC_ARG_ENABLE(targets, -[ --enable-targets alternative target configurations], -[case "${enableval}" in - yes | "") AC_ERROR(enable-targets option must specify target names or 'all') - ;; - no) enable_targets= ;; - *) enable_targets=$enableval ;; -esac])dnl -AC_ARG_ENABLE(64-bit-bfd, -[ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)], -[case "${enableval}" in - yes) want64=true ;; - no) want64=false ;; - *) AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;; -esac],[want64=false])dnl - -AM_CONFIG_HEADER(config.h:config.in) - -if test -z "$target" ; then - AC_MSG_ERROR(Unrecognized target system type; please check config.sub.) -fi -if test -z "$host" ; then - AC_MSG_ERROR(Unrecognized host system type; please check config.sub.) -fi - -# host-specific stuff: - -AC_PROG_CC -AM_PROG_INSTALL -AM_CYGWIN32 -AM_EXEEXT - -AC_PROG_YACC -AC_PROG_LEX -AC_DECL_YYTEXT - -AM_MAINTAINER_MODE - -. ${srcdir}/configure.host - -AC_SUBST(HDEFINES) -AC_SUBST(HOSTING_CRT0) -AC_SUBST(HOSTING_LIBS) -AC_SUBST(NATIVE_LIB_DIRS) - -AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h) -AC_CHECK_FUNCS(sbrk) -AC_HEADER_DIRENT - -BFD_BINARY_FOPEN - -BFD_NEED_DECLARATION(strstr) -BFD_NEED_DECLARATION(free) -BFD_NEED_DECLARATION(sbrk) -BFD_NEED_DECLARATION(getenv) - -# target-specific stuff: - -all_targets= -EMUL= -all_emuls= -TDIRS= - -for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'` -do - if test "$targ_alias" = "all"; then - all_targets=true - else - # Canonicalize the secondary target names. - result=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $targ_alias 2>/dev/null` - if test -n "$result"; then - targ=$result - else - targ=$targ_alias - fi - - . ${srcdir}/configure.tgt - - if test "$targ" = "$target"; then - EMUL=$targ_emul - fi - - for i in $targ_emul $targ_extra_emuls; do - case " $all_emuls " in - *" e${i}.o "*) ;; - *) - all_emuls="$all_emuls e${i}.o" - eval result=\$tdir_$i - test -z "$result" && result=$targ_alias - TDIRS="$TDIRS\\ -tdir_$i=$result" - ;; - esac - done - fi -done - -AC_SUBST(EMUL) -AC_SUBST(TDIRS) - -dnl FIXME: We will build a 64 bit BFD for a 64 bit host or a 64 bit -dnl target, and in those cases we should also build the 64 bit -dnl emulations. -if test x${all_targets} = xtrue; then - if test x${want64} = xtrue; then - EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)' - else - EMULATION_OFILES='$(ALL_EMULATIONS)' - fi -else - EMULATION_OFILES=$all_emuls -fi -AC_SUBST(EMULATION_OFILES) - -if test x${enable_static} = xno; then - TESTBFDLIB="--rpath ../bfd/.libs ../bfd/.libs/libbfd.so" -else - TESTBFDLIB="../bfd/.libs/libbfd.a" -fi -AC_SUBST(TESTBFDLIB) - -AC_OUTPUT(Makefile) diff --git a/contrib/binutils/ld/configure.tgt b/contrib/binutils/ld/configure.tgt deleted file mode 100644 index 18c74c435358..000000000000 --- a/contrib/binutils/ld/configure.tgt +++ /dev/null @@ -1,210 +0,0 @@ -# This is the linker target specific file. This is invoked by the -# autoconf generated configure script. Putting it in a separate shell -# file lets us skip running autoconf when modifying target specific -# information. - -# This file switches on the shell variable ${targ}, and sets the -# following shell variables: -# targ_emul name of linker emulation to use -# targ_extra_emuls additional linker emulations to provide - -targ_extra_emuls= - -case "${targ}" in -arm-*-pe) targ_emul=armpe ;; -arc-*-elf*) targ_emul=arcelf ;; -d10v-*-*) targ_emul=d10velf ;; -sparc64-*-aout*) targ_emul=sparcaout ;; -sparc64-*-elf*) targ_emul=elf64_sparc ;; -sparc-sun-sunos4*) targ_emul=sun4 ;; -sparclite*-*-elf) targ_emul=elf32_sparc ;; -sparclite*-*-coff) targ_emul=coff_sparc ;; -sparclite*-fujitsu-*) targ_emul=sparcaout ;; -sparc*-*-aout) targ_emul=sparcaout ;; -sparc*-*-coff) targ_emul=coff_sparc ;; -sparc*-*-elf) targ_emul=elf32_sparc ;; -sparc*-*-sysv4*) targ_emul=elf32_sparc ;; -sparc*-*-linux*aout*) targ_emul=sparclinux - targ_extra_emuls="elf32_sparc sun4" - tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'` - tdir_sun4=sparc-sun-sunos4 - ;; -sparc64-*-linux-gnu*) targ_emul=elf64_sparc - targ_extra_emuls="elf32_sparc sparclinux sun4" - tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'` - tdir_sparclinux=${tdir_elf32_sparc}aout - tdir_sun4=sparc-sun-sunos4 - ;; -sparc*-*-linux-gnu*) targ_emul=elf32_sparc - targ_extra_emuls="sparclinux sun4" - tdir_sparclinux=${targ_alias}aout - tdir_sun4=sparc-sun-sunos4 - ;; -sparc*-*-lynxos*) targ_emul=sparclynx ;; -sparc*-*-netbsd*) targ_emul=sparcnbsd ;; -sparc*-*-solaris2*) targ_emul=elf32_sparc ;; -sparc*-wrs-vxworks*) targ_emul=sparcaout ;; -sparc*-*-rtems*) targ_emul=sparcaout ;; -i960-wrs-vxworks5.0*) targ_emul=gld960 ;; -i960-wrs-vxworks5*) targ_emul=gld960coff ;; -i960-wrs-vxworks*) targ_emul=gld960 ;; -i960-*-coff) targ_emul=gld960coff ;; -i960-intel-nindy) targ_emul=gld960 ;; -i960-*-rtems*) targ_emul=gld960coff ;; -m32r-*-*) targ_emul=m32relf ;; -m68*-sun-sunos[34]*) targ_emul=sun3 ;; -m68*-wrs-vxworks*) targ_emul=sun3 ;; -m68*-ericsson-ose) targ_emul=sun3 ;; -m68*-apple-aux*) targ_emul=m68kaux ;; -*-tandem-none) targ_emul=st2000 ;; -i[3456]86-*-vsta) targ_emul=vsta ;; -i[3456]86-go32-rtems*) targ_emul=i386go32 ;; -i[3456]86-*-go32) targ_emul=i386go32 ;; -i[3456]86-*-msdosdjgpp*) targ_emul=i386go32 ;; -i[3456]86-*-aix*) targ_emul=i386coff ;; -i[3456]86-*-sco*) targ_emul=i386coff ;; -i[3456]86-*-isc*) targ_emul=i386coff ;; -i[3456]86-*-lynxos*) targ_emul=i386lynx ;; -i[3456]86-*-coff) targ_emul=i386coff ;; -i[3456]86-*-rtems*) targ_emul=i386coff ;; -i[3456]86-*-bsd) targ_emul=i386bsd ;; -i[3456]86-*-bsd386) targ_emul=i386bsd ;; -i[3456]86-*-bsdi*) targ_emul=i386bsd ;; -i[3456]86-*-aout) targ_emul=i386aout ;; -i[3456]86-*-linux*aout*) targ_emul=i386linux - targ_extra_emuls=elf_i386 - tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'` - ;; -i[3456]86-*-linuxoldld) targ_emul=i386linux; targ_extra_emuls=elf_i386 ;; -i[3456]86-*-linux-gnu*) targ_emul=elf_i386 - targ_extra_emuls=i386linux - tdir_i386linux=${targ_alias}aout - ;; -i[3456]86-*-sysv4*) targ_emul=elf_i386 ;; -i[3456]86-*-unixware) targ_emul=elf_i386 ;; -i[3456]86-*-netbsd*) targ_emul=i386nbsd ;; -i[3456]86-*-netware) targ_emul=i386nw ;; -i[3456]86-*-elf*) targ_emul=elf_i386 ;; -i[3456]86-*-freebsdelf*) targ_emul=elf_i386 ;; -i[3456]86-*-freebsd*) targ_emul=i386bsd ;; -i[3456]86-*-sysv*) targ_emul=i386coff ;; -i[3456]86-*-ptx*) targ_emul=i386coff ;; -i[3456]86-*-mach*) targ_emul=i386mach ;; -i[3456]86-*-gnu*) targ_emul=elf_i386 ;; -i[3456]86-*-msdos*) targ_emul=i386msdos; targ_extra_emuls=i386aout ;; -i[3456]86-*-moss*) targ_emul=i386moss; targ_extra_emuls=i386msdos ;; -i[3456]86-*-winnt*) targ_emul=i386pe ;; -i[3456]86-*-pe) targ_emul=i386pe ;; -i[3456]86-*-cygwin32*) targ_emul=i386pe ;; -i[3456]86-*-mingw32*) targ_emul=i386pe ;; -m8*-*-*) targ_emul=m88kbcs ;; -a29k-*-udi) targ_emul=sa29200 ;; -a29k-*-ebmon) targ_emul=ebmon29k ;; -a29k-*-*) targ_emul=a29k ;; -# arm-*-riscix*) targ_emul=riscix ;; -arm-*-aout | armel-*-aout) targ_emul=armaoutl ;; -armeb-*-aout) targ_emul=armaoutb ;; -arm-*-coff) targ_emul=armcoff ;; -thumb-*-coff) targ_emul=armcoff ;; -thumb-*-pe) targ_emul=armpe ;; -h8300-*-hms) targ_emul=h8300; targ_extra_emuls="h8300h h8300s" - ;; -h8500-*-hms) targ_emul=h8500 - targ_extra_emuls="h8500s h8500b h8500m h8500c" - ;; -sh-*-elf*) targ_emul=shelf - targ_extra_emuls="shlelf sh shl" - ;; -sh-*-*|sh-*-rtems*) targ_emul=sh; targ_extra_emuls=shl ;; -m68k-sony-*) targ_emul=news ;; -m68k-hp-bsd*) targ_emul=hp300bsd ;; -m68*-motorola-sysv*) targ_emul=delta68 ;; -m68*-*-aout) targ_emul=m68kaout ;; -m68*-*-coff) targ_emul=m68kcoff ;; -m68*-*-elf) targ_emul=m68kelf ;; -m68*-*-hpux*) targ_emul=hp3hpux ;; -m68k-*-linux*aout*) targ_emul=m68klinux - targ_extra_emuls=m68kelf - tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'` - ;; -m68k-*-linux-gnu*) targ_emul=m68kelf - targ_extra_emuls=m68klinux - tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'` - ;; -m68*-*-lynxos*) targ_emul=m68klynx ;; -m68*-hp*-netbsd*) targ_emul=m68k4knbsd ;; -m68*-*-netbsd*) targ_emul=m68knbsd ;; -m68*-*-psos*) targ_emul=m68kpsos ;; -m68*-*-rtems*) targ_emul=m68kcoff ;; -hppa*-*-*elf*) targ_emul=hppaelf ;; -hppa*-*-lites*) targ_emul=hppaelf ;; -hppa*-*-rtems*) targ_emul=hppaelf ;; -vax-dec-ultrix* | vax-dec-bsd*) targ_emul=vax ;; -mips*-dec-ultrix*) targ_emul=mipslit ;; -mips*-dec-osf*) targ_emul=mipslit ;; -mips*-sgi-irix[56]*) targ_emul=elf32bsmip ;; -mips*-sgi-irix*) targ_emul=mipsbig ;; -mips*el-*-ecoff*) targ_emul=mipsidtl ;; -mips*-*-ecoff*) targ_emul=mipsidt ;; -mips*-dec-bsd*) targ_emul=mipsbsd ;; -mips*-dec-netbsd*) targ_emul=elf32lmip ;; -mips*-*-bsd*) targ_emul=mipsbig ;; -mips*vr4300el-*-elf*) targ_emul=elf32l4300 ;; -mips*vr4300-*-elf*) targ_emul=elf32b4300 ;; -mips*vr4100el-*-elf*) targ_emul=elf32l4300 ;; -mips*vr4100-*-elf*) targ_emul=elf32b4300 ;; -mips*vr5000el-*-elf*) targ_emul=elf32l4300 ;; -mips*vr5000-*-elf*) targ_emul=elf32b4300 ;; -mips*el-*-elf*) targ_emul=elf32elmip ;; -mips*-*-elf*) targ_emul=elf32ebmip ;; -mips*-*-rtems*) targ_emul=elf32ebmip ;; -mips*el-*-linux-gnu*) targ_emul=elf32lsmip - targ_extra_emuls="elf32bsmip mipslit mipsbig" - ;; -mips*-*-linux-gnu*) targ_emul=elf32bsmip - targ_extra_emuls="elf32lsmip mipsbig mipslit" - ;; -mips*-*-lnews*) targ_emul=mipslnews ;; -mn10200-*-*) targ_emul=mn10200 ;; -mn10300-*-*) targ_emul=mn10300 ;; -alpha*-*-linuxecoff*) targ_emul=alpha targ_extra_emuls=elf64alpha - tdir_elf64alpha=`echo ${targ_alias} | sed -e 's/ecoff//'` - ;; -alpha*-*-linux-gnu*) targ_emul=elf64alpha targ_extra_emuls=alpha - tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'` - ;; -alpha*-*-osf*) targ_emul=alpha ;; -alpha*-*-gnu*) targ_emul=elf64alpha ;; -alpha*-*-netware*) targ_emul=alpha ;; -alpha*-*-netbsd*) targ_emul=elf64alpha ;; -z8k-*-coff) targ_emul=z8002; targ_extra_emuls=z8001 ;; -ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;; -ns32k-pc532-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;; -powerpc-*-elf* | powerpc-*-eabi* | powerpc-*-linux-gnu* | powerpc-*-sysv* \ - | powerpc-*-netbsd*) - targ_emul=elf32ppc ;; -powerpcle-*-elf* | powerpcle-*-eabi* | powerpcle-*-solaris* | powerpcle-*-sysv*) targ_emul=elf32lppc ;; -powerpc-*-rtems*) targ_emul=elf32ppc ;; -powerpc-*-macos*) targ_emul=ppcmacos ;; -powerpc-*-netware*) targ_emul=ppcnw ;; -powerpcle-*-pe) targ_emul=ppcpe ;; -powerpcle-*-winnt*) targ_emul=ppcpe ;; -powerpcle-*-cygwin32) targ_emul=ppcpe ;; -powerpc-*-aix*) targ_emul=aixppc ;; -powerpc-*-beos*) targ_emul=aixppc ;; -rs6000-*-aix*) targ_emul=aixrs6 ;; -tic30-*-*aout*) targ_emul=tic30aout ;; -tic30-*-*coff*) targ_emul=tic30coff ;; -v850-*-*) targ_emul=v850 ;; -w65-*-*) targ_emul=w65 ;; -*-*-aout) targ_emul=${target_cpu}-${target_vendor} ;; -*-*-coff) targ_emul=${target_cpu}-${target_vendor} ;; -*-*-netware) targ_emul=${target_cpu}-nw ;; -*-*-ieee*) targ_emul=vanilla ;; - -*) - echo 2>&1 "*** ld does not support target ${targ}" - echo 2>&1 "*** see ld/configure.tgt for supported targets" - exit 1 - -esac diff --git a/contrib/binutils/ld/dep-in.sed b/contrib/binutils/ld/dep-in.sed deleted file mode 100644 index 8c80eb06a202..000000000000 --- a/contrib/binutils/ld/dep-in.sed +++ /dev/null @@ -1,16 +0,0 @@ -:loop -/\\$/N -/\\$/b loop - -s!@INCDIR@!$(INCDIR)!g -s!@SRCDIR@/!!g -s!\.\./bfd/hosts/[^ ]*\.h ! !g - -s/\\\n */ /g - -s/ *$// -s/ */ /g -/:$/d - -s/\(.\{50\}[^ ]*\) /\1 \\\ - /g diff --git a/contrib/binutils/ld/emulparams/README b/contrib/binutils/ld/emulparams/README deleted file mode 100644 index b3d6d26c4e0e..000000000000 --- a/contrib/binutils/ld/emulparams/README +++ /dev/null @@ -1,2 +0,0 @@ -The files in this directory are read by genscripts.sh as shell commands. -They set parameters for the emulations. diff --git a/contrib/binutils/ld/emulparams/alpha.sh b/contrib/binutils/ld/emulparams/alpha.sh deleted file mode 100644 index 141923f71708..000000000000 --- a/contrib/binutils/ld/emulparams/alpha.sh +++ /dev/null @@ -1,3 +0,0 @@ -SCRIPT_NAME=alpha -OUTPUT_FORMAT="ecoff-littlealpha" -ARCH=alpha diff --git a/contrib/binutils/ld/emulparams/arcelf.sh b/contrib/binutils/ld/emulparams/arcelf.sh deleted file mode 100644 index b1c9c1760cee..000000000000 --- a/contrib/binutils/ld/emulparams/arcelf.sh +++ /dev/null @@ -1,11 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlearc" -LITTLE_OUTPUT_FORMAT="elf32-littlearc" -BIG_OUTPUT_FORMAT="elf32-bigarc" -TEXT_START_ADDR=0x0 -MAXPAGESIZE=0x1000 -NONPAGED_TEXT_START_ADDR=0x0 -ARCH=arc -MACHINE= -ENTRY=start -#TEMPLATE_NAME=elf32 diff --git a/contrib/binutils/ld/emulparams/elf32_sparc.sh b/contrib/binutils/ld/emulparams/elf32_sparc.sh deleted file mode 100644 index 3a1a7f237883..000000000000 --- a/contrib/binutils/ld/emulparams/elf32_sparc.sh +++ /dev/null @@ -1,10 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-sparc" -TEXT_START_ADDR=0x10000 -MAXPAGESIZE=0x10000 -NONPAGED_TEXT_START_ADDR=0x10000 -ARCH=sparc -MACHINE= -TEMPLATE_NAME=elf32 -DATA_PLT= -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/elf32b4300.sh b/contrib/binutils/ld/emulparams/elf32b4300.sh deleted file mode 100644 index 24f8d98eab0c..000000000000 --- a/contrib/binutils/ld/emulparams/elf32b4300.sh +++ /dev/null @@ -1,29 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-bigmips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0xa0020000 -MAXPAGESIZE=0x40000 -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -EXECUTABLE_SYMBOLS='_DYNAMIC_LINK = 0;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -DYNAMIC_LINK=false -EMBEDDED=yes diff --git a/contrib/binutils/ld/emulparams/elf32bmip.sh b/contrib/binutils/ld/emulparams/elf32bmip.sh deleted file mode 100644 index 473c41169e00..000000000000 --- a/contrib/binutils/ld/emulparams/elf32bmip.sh +++ /dev/null @@ -1,30 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-bigmips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -DATA_ADDR=0x10000000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -TEXT_DYNAMIC= -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/elf32bsmip.sh b/contrib/binutils/ld/emulparams/elf32bsmip.sh deleted file mode 100755 index 09f130764370..000000000000 --- a/contrib/binutils/ld/emulparams/elf32bsmip.sh +++ /dev/null @@ -1,31 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-bigmips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -DATA_ADDR=0x10000000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -TEXT_DYNAMIC= -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -ENTRY=__start diff --git a/contrib/binutils/ld/emulparams/elf32ebmip.sh b/contrib/binutils/ld/emulparams/elf32ebmip.sh deleted file mode 100644 index a6b80a9dd90f..000000000000 --- a/contrib/binutils/ld/emulparams/elf32ebmip.sh +++ /dev/null @@ -1,29 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-bigmips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -EMBEDDED=yes diff --git a/contrib/binutils/ld/emulparams/elf32elmip.sh b/contrib/binutils/ld/emulparams/elf32elmip.sh deleted file mode 100644 index 313d74a88a3d..000000000000 --- a/contrib/binutils/ld/emulparams/elf32elmip.sh +++ /dev/null @@ -1,29 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlemips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -EMBEDDED=yes diff --git a/contrib/binutils/ld/emulparams/elf32l4300.sh b/contrib/binutils/ld/emulparams/elf32l4300.sh deleted file mode 100644 index 690de88b3aaf..000000000000 --- a/contrib/binutils/ld/emulparams/elf32l4300.sh +++ /dev/null @@ -1,29 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlemips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0xa0020000 -MAXPAGESIZE=0x40000 -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -EXECUTABLE_SYMBOLS='_DYNAMIC_LINK = 0;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -DYNAMIC_LINK=false -EMBEDDED=yes diff --git a/contrib/binutils/ld/emulparams/elf32lmip.sh b/contrib/binutils/ld/emulparams/elf32lmip.sh deleted file mode 100644 index 23312f44acae..000000000000 --- a/contrib/binutils/ld/emulparams/elf32lmip.sh +++ /dev/null @@ -1,30 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlemips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -DATA_ADDR=0x10000000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -TEXT_DYNAMIC= -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/elf32lsmip.sh b/contrib/binutils/ld/emulparams/elf32lsmip.sh deleted file mode 100755 index 4bdc8a10e698..000000000000 --- a/contrib/binutils/ld/emulparams/elf32lsmip.sh +++ /dev/null @@ -1,31 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlemips" -BIG_OUTPUT_FORMAT="elf32-bigmips" -LITTLE_OUTPUT_FORMAT="elf32-littlemips" -TEXT_START_ADDR=0x0400000 -DATA_ADDR=0x10000000 -MAXPAGESIZE=0x40000 -NONPAGED_TEXT_START_ADDR=0x0400000 -SHLIB_TEXT_START_ADDR=0x5ffe0000 -TEXT_DYNAMIC= -INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' -OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' -OTHER_GOT_SYMBOLS=' - _gp = ALIGN(16) + 0x7ff0; -' -OTHER_GOT_SECTIONS=' - .lit8 : { *(.lit8) } - .lit4 : { *(.lit4) } -' -TEXT_START_SYMBOLS='_ftext = . ;' -DATA_START_SYMBOLS='_fdata = . ;' -OTHER_BSS_SYMBOLS='_fbss = .;' -OTHER_SECTIONS=' - .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } - .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -' -ARCH=mips -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -ENTRY=__start diff --git a/contrib/binutils/ld/emulparams/elf64_sparc.sh b/contrib/binutils/ld/emulparams/elf64_sparc.sh deleted file mode 100644 index d0fbdfda3ce3..000000000000 --- a/contrib/binutils/ld/emulparams/elf64_sparc.sh +++ /dev/null @@ -1,12 +0,0 @@ -SCRIPT_NAME=elf -ELFSIZE=64 -TEMPLATE_NAME=elf32 -OUTPUT_FORMAT="elf64-sparc" -TEXT_START_ADDR=0x100000 -MAXPAGESIZE=0x100000 -NONPAGED_TEXT_START_ADDR=0x100000 -ARCH="sparc:v9" -MACHINE= -DATA_PLT= -GENERATE_SHLIB_SCRIPT=yes -NOP=0x01000000 diff --git a/contrib/binutils/ld/emulparams/elf64alpha.sh b/contrib/binutils/ld/emulparams/elf64alpha.sh deleted file mode 100644 index afa21f227176..000000000000 --- a/contrib/binutils/ld/emulparams/elf64alpha.sh +++ /dev/null @@ -1,15 +0,0 @@ -ENTRY=__start -SCRIPT_NAME=elf -ELFSIZE=64 -TEMPLATE_NAME=elf32 -OUTPUT_FORMAT="elf64-alpha" -TEXT_START_ADDR="0x120000000" -MAXPAGESIZE=0x100000 -NONPAGED_TEXT_START_ADDR="0x120000000" -ARCH=alpha -MACHINE= -GENERATE_SHLIB_SCRIPT=yes -DATA_PLT= -NOP=0x47ff041f - -OTHER_READONLY_SECTIONS='.reginfo : { *(.reginfo) }' diff --git a/contrib/binutils/ld/emulparams/elf_i386.sh b/contrib/binutils/ld/emulparams/elf_i386.sh deleted file mode 100644 index dff567bffbcc..000000000000 --- a/contrib/binutils/ld/emulparams/elf_i386.sh +++ /dev/null @@ -1,10 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-i386" -TEXT_START_ADDR=0x08048000 -MAXPAGESIZE=0x1000 -NONPAGED_TEXT_START_ADDR=0x08048000 -ARCH=i386 -MACHINE= -NOP=0x9090 -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/i386aout.sh b/contrib/binutils/ld/emulparams/i386aout.sh deleted file mode 100644 index dc9e5546145a..000000000000 --- a/contrib/binutils/ld/emulparams/i386aout.sh +++ /dev/null @@ -1,6 +0,0 @@ -SCRIPT_NAME=aout -OUTPUT_FORMAT="a.out-i386" -TARGET_PAGE_SIZE=0x1000 -TEXT_START_ADDR=0 -NONPAGED_TEXT_START_ADDR=0x1000 -ARCH=i386 diff --git a/contrib/binutils/ld/emulparams/i386bsd.sh b/contrib/binutils/ld/emulparams/i386bsd.sh deleted file mode 100644 index e0c0e2fab6cc..000000000000 --- a/contrib/binutils/ld/emulparams/i386bsd.sh +++ /dev/null @@ -1,6 +0,0 @@ -SCRIPT_NAME=aout -OUTPUT_FORMAT="a.out-i386-bsd" -TARGET_PAGE_SIZE=0x1000 -TEXT_START_ADDR=0 -NONPAGED_TEXT_START_ADDR=0x1000 -ARCH=i386 diff --git a/contrib/binutils/ld/emulparams/i386coff.sh b/contrib/binutils/ld/emulparams/i386coff.sh deleted file mode 100644 index 3417b7d3e992..000000000000 --- a/contrib/binutils/ld/emulparams/i386coff.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=i386coff -OUTPUT_FORMAT="coff-i386" -TEXT_START_ADDR=0x1000000 -TARGET_PAGE_SIZE=0x1000000 -ARCH=i386 diff --git a/contrib/binutils/ld/emulparams/i386linux.sh b/contrib/binutils/ld/emulparams/i386linux.sh deleted file mode 100644 index a416422d92f0..000000000000 --- a/contrib/binutils/ld/emulparams/i386linux.sh +++ /dev/null @@ -1,7 +0,0 @@ -SCRIPT_NAME=aout -OUTPUT_FORMAT="a.out-i386-linux" -TARGET_PAGE_SIZE=0x1000 -TEXT_START_ADDR=0x1020 -NONPAGED_TEXT_START_ADDR=0 -ARCH=i386 -TEMPLATE_NAME=linux diff --git a/contrib/binutils/ld/emulparams/i386moss.sh b/contrib/binutils/ld/emulparams/i386moss.sh deleted file mode 100644 index a5e0e05eb220..000000000000 --- a/contrib/binutils/ld/emulparams/i386moss.sh +++ /dev/null @@ -1,10 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-i386" -TEXT_START_ADDR=0x00002000 -MAXPAGESIZE=0x1000 -NONPAGED_TEXT_START_ADDR=0x00002000 -ARCH=i386 -MACHINE= -NOP=0x9090 -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/i386nbsd.sh b/contrib/binutils/ld/emulparams/i386nbsd.sh deleted file mode 100644 index a9e6a38303d4..000000000000 --- a/contrib/binutils/ld/emulparams/i386nbsd.sh +++ /dev/null @@ -1,6 +0,0 @@ -SCRIPT_NAME=aout -TEXT_START_ADDR=0x1020 -OUTPUT_FORMAT="a.out-i386-netbsd" -TARGET_PAGE_SIZE=0x1000 -ARCH=i386 -EXECUTABLE_SYMBOLS='__DYNAMIC = 0;' diff --git a/contrib/binutils/ld/emulparams/i386nw.sh b/contrib/binutils/ld/emulparams/i386nw.sh deleted file mode 100644 index e70ed678f3e2..000000000000 --- a/contrib/binutils/ld/emulparams/i386nw.sh +++ /dev/null @@ -1,9 +0,0 @@ -SCRIPT_NAME=nw -OUTPUT_FORMAT="elf32-i386" -TEXT_START_ADDR=0x08000000 -MAXPAGESIZE=0x1000 -NONPAGED_TEXT_START_ADDR=0x08000000 -ARCH=i386 -NOP=0x9090 -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes diff --git a/contrib/binutils/ld/emulparams/i386pe.sh b/contrib/binutils/ld/emulparams/i386pe.sh deleted file mode 100644 index 188a8addf0f3..000000000000 --- a/contrib/binutils/ld/emulparams/i386pe.sh +++ /dev/null @@ -1,5 +0,0 @@ -ARCH=i386 -SCRIPT_NAME=pe -OUTPUT_FORMAT="pei-i386" -RELOCATEABLE_OUTPUT_FORMAT="pe-i386" -TEMPLATE_NAME=pe diff --git a/contrib/binutils/ld/emulparams/sh.sh b/contrib/binutils/ld/emulparams/sh.sh deleted file mode 100644 index 38844fb18ee0..000000000000 --- a/contrib/binutils/ld/emulparams/sh.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=sh -OUTPUT_FORMAT="coff-sh" -TEXT_START_ADDR=0x8000 -TARGET_PAGE_SIZE=128 -ARCH=sh diff --git a/contrib/binutils/ld/emulparams/shelf.sh b/contrib/binutils/ld/emulparams/shelf.sh deleted file mode 100755 index 95db5877d7f5..000000000000 --- a/contrib/binutils/ld/emulparams/shelf.sh +++ /dev/null @@ -1,17 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-sh" -TEXT_START_ADDR=0x1000 -MAXPAGESIZE=128 -ARCH=sh -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -EMBEDDED=yes - -# These are for compatibility with the COFF toolchain. -ENTRY=start -CTOR_START='___ctors = .;' -CTOR_END='___ctors_end = .;' -DTOR_START='___dtors = .;' -DTOR_END='___dtors_end = .;' -OTHER_RELOCATING_SECTIONS='.stack 0x30000 : { _stack = .; *(.stack) }' diff --git a/contrib/binutils/ld/emulparams/shl.sh b/contrib/binutils/ld/emulparams/shl.sh deleted file mode 100644 index 360aac8905c1..000000000000 --- a/contrib/binutils/ld/emulparams/shl.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=sh -OUTPUT_FORMAT="coff-shl" -TEXT_START_ADDR=0x8000 -TARGET_PAGE_SIZE=128 -ARCH=sh diff --git a/contrib/binutils/ld/emulparams/shlelf.sh b/contrib/binutils/ld/emulparams/shlelf.sh deleted file mode 100755 index bb27f86af6cc..000000000000 --- a/contrib/binutils/ld/emulparams/shlelf.sh +++ /dev/null @@ -1,17 +0,0 @@ -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-shl" -TEXT_START_ADDR=0x1000 -MAXPAGESIZE=128 -ARCH=sh -MACHINE= -TEMPLATE_NAME=elf32 -GENERATE_SHLIB_SCRIPT=yes -EMBEDDED=yes - -# These are for compatibility with the COFF toolchain. -ENTRY=start -CTOR_START='___ctors = .;' -CTOR_END='___ctors_end = .;' -DTOR_START='___dtors = .;' -DTOR_END='___dtors_end = .;' -OTHER_RELOCATING_SECTIONS='.stack 0x30000 : { _stack = .; *(.stack) }' diff --git a/contrib/binutils/ld/emulparams/tic30aout.sh b/contrib/binutils/ld/emulparams/tic30aout.sh deleted file mode 100755 index 2a4c13f598f7..000000000000 --- a/contrib/binutils/ld/emulparams/tic30aout.sh +++ /dev/null @@ -1,7 +0,0 @@ -SCRIPT_NAME=tic30aout -OUTPUT_FORMAT="a.out-tic30" -OUTPUT_ARCH="tms320c30" -TEXT_START_ADDR=0x0 -TARGET_PAGE_SIZE=128 -ARCH=tms320c30 -BIG=1 diff --git a/contrib/binutils/ld/emulparams/tic30coff.sh b/contrib/binutils/ld/emulparams/tic30coff.sh deleted file mode 100755 index df7794373373..000000000000 --- a/contrib/binutils/ld/emulparams/tic30coff.sh +++ /dev/null @@ -1,7 +0,0 @@ -SCRIPT_NAME=tic30coff -OUTPUT_FORMAT="coff-tic30" -OUTPUT_ARCH="tms320c30" -TEXT_START_ADDR=0x0 -TARGET_PAGE_SIZE=128 -ARCH=tms320c30 -BIG=1 diff --git a/contrib/binutils/ld/emulparams/v850.sh b/contrib/binutils/ld/emulparams/v850.sh deleted file mode 100644 index 78bfbd3882df..000000000000 --- a/contrib/binutils/ld/emulparams/v850.sh +++ /dev/null @@ -1,14 +0,0 @@ -MACHINE= -SCRIPT_NAME=v850 -OUTPUT_FORMAT="elf32-v850" -TEXT_START_ADDR=0x100000 -ZDATA_START_ADDR=0x160 -ROZDATA_START_ADDR="ALIGN (4)" -SDATA_START_ADDR="ALIGN (4)" -ROSDATA_START_ADDR="ALIGN (4)" -TDATA_START_ADDR="ALIGN (4)" -CALL_TABLE_START_ADDR="ALIGN (4)" -ARCH=v850 -MAXPAGESIZE=256 -ENTRY=_start -EMBEDDED=yes diff --git a/contrib/binutils/ld/emulparams/vanilla.sh b/contrib/binutils/ld/emulparams/vanilla.sh deleted file mode 100644 index d8a3b72dbf9b..000000000000 --- a/contrib/binutils/ld/emulparams/vanilla.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=vanilla -TEXT_START_ADDR=?? -TARGET_PAGE_SIZE=?? -ARCH=unknown -TEMPLATE_NAME=vanilla diff --git a/contrib/binutils/ld/emulparams/vsta.sh b/contrib/binutils/ld/emulparams/vsta.sh deleted file mode 100644 index cc6249bea438..000000000000 --- a/contrib/binutils/ld/emulparams/vsta.sh +++ /dev/null @@ -1,8 +0,0 @@ -SCRIPT_NAME=aout -OUTPUT_FORMAT="a.out-i386" -TEXT_START_ADDR=0x1020 -TARGET_PAGE_SIZE=0x1000 -SEGMENT_SIZE=0x400000 -NONPAGED_TEXT_START_ADDR=0x0 -ARCH=i386 - diff --git a/contrib/binutils/ld/emulparams/z8001.sh b/contrib/binutils/ld/emulparams/z8001.sh deleted file mode 100644 index 63645c342c23..000000000000 --- a/contrib/binutils/ld/emulparams/z8001.sh +++ /dev/null @@ -1,7 +0,0 @@ -SCRIPT_NAME=z8000 -OUTPUT_FORMAT="coff-z8k" -OUTPUT_ARCH="z8001" -TEXT_START_ADDR=0x0 -TARGET_PAGE_SIZE=128 -ARCH=z8k -BIG=1 diff --git a/contrib/binutils/ld/emulparams/z8002.sh b/contrib/binutils/ld/emulparams/z8002.sh deleted file mode 100644 index 299b5f5a45d8..000000000000 --- a/contrib/binutils/ld/emulparams/z8002.sh +++ /dev/null @@ -1,6 +0,0 @@ -SCRIPT_NAME=z8000 -OUTPUT_FORMAT="coff-z8k" -OUTPUT_ARCH="z8002" -TEXT_START_ADDR=0x0 -TARGET_PAGE_SIZE=128 -ARCH=z8002 diff --git a/contrib/binutils/ld/emultempl/README b/contrib/binutils/ld/emultempl/README deleted file mode 100644 index 30ec0abf379d..000000000000 --- a/contrib/binutils/ld/emultempl/README +++ /dev/null @@ -1,3 +0,0 @@ -The files in this directory are sourced by genscripts.sh, after -setting some variables to substitute in, to produce -C source files that contain jump tables for each emulation. diff --git a/contrib/binutils/ld/emultempl/elf32.em b/contrib/binutils/ld/emultempl/elf32.em deleted file mode 100644 index c4debe2a92a0..000000000000 --- a/contrib/binutils/ld/emultempl/elf32.em +++ /dev/null @@ -1,1163 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# It does some substitutions. -# This file is now misnamed, because it supports both 32 bit and 64 bit -# ELF emulations. -test -z "${ELFSIZE}" && ELFSIZE=32 -cat >e${EMULATION_NAME}.c <<EOF -/* This file is is generated by a shell script. DO NOT EDIT! */ - -/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME} - Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - Written by Steve Chamberlain <sac@cygnus.com> - ELF support by Ian Lance Taylor <ian@cygnus.com> - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#define TARGET_IS_${EMULATION_NAME} - -#include "bfd.h" -#include "sysdep.h" - -#include <ctype.h> - -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldemul.h" -#include "ldfile.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldgram.h" - -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static boolean gld${EMULATION_NAME}_open_dynamic_archive - PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *)); -static void gld${EMULATION_NAME}_after_open PARAMS ((void)); -static void gld${EMULATION_NAME}_check_needed - PARAMS ((lang_input_statement_type *)); -static void gld${EMULATION_NAME}_stat_needed - PARAMS ((lang_input_statement_type *)); -static boolean gld${EMULATION_NAME}_search_needed - PARAMS ((const char *, const char *, int)); -static boolean gld${EMULATION_NAME}_try_needed PARAMS ((const char *, int)); -static void gld${EMULATION_NAME}_vercheck - PARAMS ((lang_input_statement_type *)); -static void gld${EMULATION_NAME}_before_allocation PARAMS ((void)); -static void gld${EMULATION_NAME}_find_statement_assignment - PARAMS ((lang_statement_union_type *)); -static void gld${EMULATION_NAME}_find_exp_assignment PARAMS ((etree_type *)); -static boolean gld${EMULATION_NAME}_place_orphan - PARAMS ((lang_input_statement_type *, asection *)); -static void gld${EMULATION_NAME}_place_section - PARAMS ((lang_statement_union_type *)); -static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile)); - -static void -gld${EMULATION_NAME}_before_parse() -{ - ldfile_output_architecture = bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`; - config.dynamic_link = ${DYNAMIC_LINK-true}; -} - -/* Try to open a dynamic archive. This is where we know that ELF - dynamic libraries have an extension of .so. */ - -static boolean -gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) - const char *arch; - search_dirs_type *search; - lang_input_statement_type *entry; -{ - const char *filename; - char *string; - - if (! entry->is_archive) - return false; - - filename = entry->filename; - - string = (char *) xmalloc (strlen (search->name) - + strlen (filename) - + strlen (arch) - + sizeof "/lib.so"); - - sprintf (string, "%s/lib%s%s.so", search->name, filename, arch); - - if (! ldfile_try_open_bfd (string, entry)) - { - free (string); - return false; - } - - entry->filename = string; - - /* We have found a dynamic object to include in the link. The ELF - backend linker will create a DT_NEEDED entry in the .dynamic - section naming this file. If this file includes a DT_SONAME - entry, it will be used. Otherwise, the ELF linker will just use - the name of the file. For an archive found by searching, like - this one, the DT_NEEDED entry should consist of just the name of - the file, without the path information used to find it. Note - that we only need to do this if we have a dynamic object; an - archive will never be referenced by a DT_NEEDED entry. - - FIXME: This approach--using bfd_elf_set_dt_needed_name--is not - very pretty. I haven't been able to think of anything that is - pretty, though. */ - if (bfd_check_format (entry->the_bfd, bfd_object) - && (entry->the_bfd->flags & DYNAMIC) != 0) - { - char *needed_name; - - ASSERT (entry->is_archive && entry->search_dirs_flag); - needed_name = (char *) xmalloc (strlen (filename) - + strlen (arch) - + sizeof "lib.so"); - sprintf (needed_name, "lib%s%s.so", filename, arch); - bfd_elf_set_dt_needed_name (entry->the_bfd, needed_name); - } - - return true; -} - -EOF -if [ "x${host}" = "x${target}" ] ; then - if [ "x${DEFAULT_EMULATION}" = "x${EMULATION_NAME}" ] ; then -cat >>e${EMULATION_NAME}.c <<EOF - -/* For a native linker, check the file /etc/ld.so.conf for directories - in which we may find shared libraries. /etc/ld.so.conf is really - only meaningful on Linux, but we check it on other systems anyhow. */ - -static boolean gld${EMULATION_NAME}_check_ld_so_conf - PARAMS ((const char *, int)); - -static boolean -gld${EMULATION_NAME}_check_ld_so_conf (name, force) - const char *name; - int force; -{ - static boolean initialized; - static char *ld_so_conf; - - if (! initialized) - { - FILE *f; - - f = fopen ("/etc/ld.so.conf", FOPEN_RT); - if (f != NULL) - { - char *b; - size_t len, alloc; - int c; - - len = 0; - alloc = 100; - b = (char *) xmalloc (alloc); - - while ((c = getc (f)) != EOF) - { - if (len + 1 >= alloc) - { - alloc *= 2; - b = (char *) xrealloc (b, alloc); - } - if (c != ':' - && c != ' ' - && c != '\t' - && c != '\n' - && c != ',') - { - b[len] = c; - ++len; - } - else - { - if (len > 0 && b[len - 1] != ':') - { - b[len] = ':'; - ++len; - } - } - } - - if (len > 0 && b[len - 1] == ':') - --len; - - if (len > 0) - b[len] = '\0'; - else - { - free (b); - b = NULL; - } - - fclose (f); - - ld_so_conf = b; - } - - initialized = true; - } - - if (ld_so_conf == NULL) - return false; - - return gld${EMULATION_NAME}_search_needed (ld_so_conf, name, force); -} - -EOF - fi -fi -cat >>e${EMULATION_NAME}.c <<EOF - -/* These variables are required to pass information back and forth - between after_open and check_needed and stat_needed and vercheck. */ - -static struct bfd_link_needed_list *global_needed; -static struct stat global_stat; -static boolean global_found; -static struct bfd_link_needed_list *global_vercheck_needed; -static boolean global_vercheck_failed; - -/* This is called after all the input files have been opened. */ - -static void -gld${EMULATION_NAME}_after_open () -{ - 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) - return; - - /* Get the list of files which appear in DT_NEEDED entries in - dynamic objects included in the link (often there will be none). - For each such file, we want to track down the corresponding - library, and include the symbol table in the link. This is what - the runtime dynamic linker will do. Tracking the files down here - permits one dynamic object to include another without requiring - special action by the person doing the link. Note that the - needed list can actually grow while we are stepping through this - loop. */ - needed = bfd_elf_get_needed_list (output_bfd, &link_info); - for (l = needed; l != NULL; l = l->next) - { - struct bfd_link_needed_list *ll; - int force; - - /* If we've already seen this file, skip it. */ - for (ll = needed; ll != l; ll = ll->next) - if (strcmp (ll->name, l->name) == 0) - break; - if (ll != l) - continue; - - /* See if this file was included in the link explicitly. */ - global_needed = l; - global_found = false; - lang_for_each_input_file (gld${EMULATION_NAME}_check_needed); - if (global_found) - continue; - - /* We need to find this file and include the symbol table. We - want to search for the file in the same way that the dynamic - linker will search. That means that we want to use - rpath_link, rpath, then the environment variable - LD_LIBRARY_PATH (native only), then the linker script - LIB_SEARCH_DIRS. We do not search using the -L arguments. - - We search twice. The first time, we skip objects which may - introduce version mismatches. The second time, we force - their use. See gld${EMULATION_NAME}_vercheck comment. */ - for (force = 0; force < 2; force++) - { - const char *lib_path; - size_t len; - search_dirs_type *search; - - if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link, - l->name, force)) - break; - if (gld${EMULATION_NAME}_search_needed (command_line.rpath, - l->name, force)) - break; - if (command_line.rpath_link == NULL - && command_line.rpath == NULL) - { - lib_path = (const char *) getenv ("LD_RUN_PATH"); - if (gld${EMULATION_NAME}_search_needed (lib_path, l->name, - force)) - break; - } -EOF -if [ "x${host}" = "x${target}" ] ; then - if [ "x${DEFAULT_EMULATION}" = "x${EMULATION_NAME}" ] ; then -cat >>e${EMULATION_NAME}.c <<EOF - lib_path = (const char *) getenv ("LD_LIBRARY_PATH"); - if (gld${EMULATION_NAME}_search_needed (lib_path, l->name, force)) - break; -EOF - fi -fi -cat >>e${EMULATION_NAME}.c <<EOF - len = strlen (l->name); - for (search = search_head; search != NULL; search = search->next) - { - char *filename; - - if (search->cmdline) - continue; - filename = (char *) xmalloc (strlen (search->name) + len + 2); - sprintf (filename, "%s/%s", search->name, l->name); - if (gld${EMULATION_NAME}_try_needed (filename, force)) - break; - free (filename); - } - if (search != NULL) - break; -EOF -if [ "x${host}" = "x${target}" ] ; then - if [ "x${DEFAULT_EMULATION}" = "x${EMULATION_NAME}" ] ; then -cat >>e${EMULATION_NAME}.c <<EOF - if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force)) - break; -EOF - fi -fi -cat >>e${EMULATION_NAME}.c <<EOF - } - - if (force < 2) - continue; - - einfo ("%P: warning: %s, needed by %B, not found (try using --rpath)\n", - l->name, l->by); - } -} - -/* Search for a needed file in a path. */ - -static boolean -gld${EMULATION_NAME}_search_needed (path, name, force) - const char *path; - const char *name; - int force; -{ - const char *s; - size_t len; - - if (path == NULL || *path == '\0') - return false; - len = strlen (name); - while (1) - { - char *filename, *sset; - - s = strchr (path, ':'); - if (s == NULL) - s = path + strlen (path); - - filename = (char *) xmalloc (s - path + len + 2); - if (s == path) - sset = filename; - else - { - memcpy (filename, path, s - path); - filename[s - path] = '/'; - sset = filename + (s - path) + 1; - } - strcpy (sset, name); - - if (gld${EMULATION_NAME}_try_needed (filename, force)) - return true; - - free (filename); - - if (*s == '\0') - break; - path = s + 1; - } - - return false; -} - -/* This function is called for each possible name for a dynamic object - named by a DT_NEEDED entry. The FORCE parameter indicates whether - to skip the check for a conflicting version. */ - -static boolean -gld${EMULATION_NAME}_try_needed (name, force) - const char *name; - int force; -{ - bfd *abfd; - - abfd = bfd_openr (name, bfd_get_target (output_bfd)); - if (abfd == NULL) - return false; - if (! bfd_check_format (abfd, bfd_object)) - { - (void) bfd_close (abfd); - return false; - } - if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0) - { - (void) bfd_close (abfd); - return false; - } - - /* Check whether this object would include any conflicting library - versions. If FORCE is set, then we skip this check; we use this - the second time around, if we couldn't find any compatible - instance of the shared library. */ - - if (! force) - { - struct bfd_link_needed_list *needed; - - if (! bfd_elf_get_bfd_needed_list (abfd, &needed)) - einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd); - - if (needed != NULL) - { - global_vercheck_needed = needed; - global_vercheck_failed = false; - lang_for_each_input_file (gld${EMULATION_NAME}_vercheck); - if (global_vercheck_failed) - { - (void) bfd_close (abfd); - /* Return false to force the caller to move on to try - another file on the search path. */ - return false; - } - - /* But wait! It gets much worse. On Linux, if a shared - library does not use libc at all, we are supposed to skip - it the first time around in case we encounter a shared - library later on with the same name which does use the - version of libc that we want. This is much too horrible - to use on any system other than Linux. */ - -EOF -case ${target} in - *-*-linux-gnu*) - cat >>e${EMULATION_NAME}.c <<EOF - { - struct bfd_link_needed_list *l; - - for (l = needed; l != NULL; l = l->next) - if (strncmp (l->name, "libc.so", 7) == 0) - break; - if (l == NULL) - { - (void) bfd_close (abfd); - return false; - } - } - -EOF - ;; -esac -cat >>e${EMULATION_NAME}.c <<EOF - } - } - - /* We've found a dynamic object matching the DT_NEEDED entry. */ - - /* We have already checked that there is no other input file of the - same name. We must now check again that we are not including the - same file twice. We need to do this because on many systems - libc.so is a symlink to, e.g., libc.so.1. The SONAME entry will - reference libc.so.1. If we have already included libc.so, we - don't want to include libc.so.1 if they are the same file, and we - can only check that using stat. */ - - if (bfd_stat (abfd, &global_stat) != 0) - einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd); - global_found = false; - lang_for_each_input_file (gld${EMULATION_NAME}_stat_needed); - if (global_found) - { - /* Return true to indicate that we found the file, even though - we aren't going to do anything with it. */ - return true; - } - - /* Tell the ELF backend that don't want the output file to have a - DT_NEEDED entry for this file. */ - bfd_elf_set_dt_needed_name (abfd, ""); - - /* Add this file into the symbol table. */ - if (! bfd_link_add_symbols (abfd, &link_info)) - einfo ("%F%B: could not read symbols: %E\n", abfd); - - return true; -} - -/* See if an input file matches a DT_NEEDED entry by name. */ - -static void -gld${EMULATION_NAME}_check_needed (s) - lang_input_statement_type *s; -{ - if (global_found) - return; - - if (s->filename != NULL - && strcmp (s->filename, global_needed->name) == 0) - { - global_found = true; - return; - } - - if (s->the_bfd != NULL) - { - const char *soname; - - soname = bfd_elf_get_dt_soname (s->the_bfd); - if (soname != NULL - && strcmp (soname, global_needed->name) == 0) - { - global_found = true; - return; - } - } - - if (s->search_dirs_flag - && s->filename != NULL - && strchr (global_needed->name, '/') == NULL) - { - const char *f; - - f = strrchr (s->filename, '/'); - if (f != NULL - && strcmp (f + 1, global_needed->name) == 0) - { - global_found = true; - return; - } - } -} - -/* See if an input file matches a DT_NEEDED entry by running stat on - the file. */ - -static void -gld${EMULATION_NAME}_stat_needed (s) - lang_input_statement_type *s; -{ - struct stat st; - const char *suffix; - const char *soname; - const char *f; - - if (global_found) - return; - if (s->the_bfd == NULL) - return; - - if (bfd_stat (s->the_bfd, &st) != 0) - { - einfo ("%P:%B: bfd_stat failed: %E\n", s->the_bfd); - return; - } - - if (st.st_dev == global_stat.st_dev - && st.st_ino == global_stat.st_ino) - { - global_found = true; - return; - } - - /* We issue a warning if it looks like we are including two - different versions of the same shared library. For example, - there may be a problem if -lc picks up libc.so.6 but some other - shared library has a DT_NEEDED entry of libc.so.5. This is a - hueristic test, and it will only work if the name looks like - NAME.so.VERSION. FIXME: Depending on file names is error-prone. - If we really want to issue warnings about mixing version numbers - of shared libraries, we need to find a better way. */ - - if (strchr (global_needed->name, '/') != NULL) - return; - suffix = strstr (global_needed->name, ".so."); - if (suffix == NULL) - return; - suffix += sizeof ".so." - 1; - - soname = bfd_elf_get_dt_soname (s->the_bfd); - if (soname == NULL) - soname = s->filename; - - f = strrchr (soname, '/'); - if (f != NULL) - ++f; - else - f = soname; - - if (strncmp (f, global_needed->name, suffix - global_needed->name) == 0) - einfo ("%P: warning: %s, needed by %B, may conflict with %s\n", - global_needed->name, global_needed->by, f); -} - -/* On Linux, it's possible to have different versions of the same - shared library linked against different versions of libc. The - dynamic linker somehow tags which libc version to use in - /etc/ld.so.cache, and, based on the libc that it sees in the - executable, chooses which version of the shared library to use. - - We try to do a similar check here by checking whether this shared - library needs any other shared libraries which may conflict with - libraries we have already included in the link. If it does, we - skip it, and try to find another shared library farther on down the - link path. - - This is called via lang_for_each_input_file. - GLOBAL_VERCHECK_NEEDED is the list of objects needed by the object - which we ar checking. This sets GLOBAL_VERCHECK_FAILED if we find - a conflicting version. */ - -static void -gld${EMULATION_NAME}_vercheck (s) - lang_input_statement_type *s; -{ - const char *soname, *f; - struct bfd_link_needed_list *l; - - if (global_vercheck_failed) - return; - if (s->the_bfd == NULL - || (bfd_get_file_flags (s->the_bfd) & DYNAMIC) == 0) - return; - - soname = bfd_elf_get_dt_soname (s->the_bfd); - if (soname == NULL) - soname = bfd_get_filename (s->the_bfd); - - f = strrchr (soname, '/'); - if (f != NULL) - ++f; - else - f = soname; - - for (l = global_vercheck_needed; l != NULL; l = l->next) - { - const char *suffix; - - if (strcmp (f, l->name) == 0) - { - /* Probably can't happen, but it's an easy check. */ - continue; - } - - if (strchr (l->name, '/') != NULL) - continue; - - suffix = strstr (l->name, ".so."); - if (suffix == NULL) - continue; - - suffix += sizeof ".so." - 1; - - if (strncmp (f, l->name, suffix - l->name) == 0) - { - /* Here we know that S is a dynamic object FOO.SO.VER1, and - the object we are considering needs a dynamic object - FOO.SO.VER2, and VER1 and VER2 are different. This - appears to be a version mismatch, so we tell the caller - to try a different version of this library. */ - global_vercheck_failed = true; - return; - } - } -} - -/* This is called after the sections have been attached to output - sections, but before any sizes or addresses have been set. */ - -static void -gld${EMULATION_NAME}_before_allocation () -{ - const char *rpath; - asection *sinterp; - - /* If we are going to make any variable assignments, we need to let - the ELF backend know about them in case the variables are - referred to by dynamic objects. */ - lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment); - - /* Let the ELF backend work out the sizes of any sections required - by dynamic linking. */ - rpath = command_line.rpath; - if (rpath == NULL) - rpath = (const char *) getenv ("LD_RUN_PATH"); - if (! (bfd_elf${ELFSIZE}_size_dynamic_sections - (output_bfd, command_line.soname, rpath, - command_line.export_dynamic, command_line.filter_shlib, - (const char * const *) command_line.auxiliary_filters, - &link_info, &sinterp, lang_elf_version_info))) - einfo ("%P%F: failed to set dynamic section sizes: %E\n"); - - /* Let the user override the dynamic linker we are using. */ - if (command_line.interpreter != NULL - && sinterp != NULL) - { - sinterp->contents = (bfd_byte *) command_line.interpreter; - sinterp->_raw_size = strlen (command_line.interpreter) + 1; - } - - /* Look for any sections named .gnu.warning. As a GNU extensions, - we treat such sections as containing warning messages. We print - out the warning message, and then zero out the section size so - that it does not get copied into the output file. */ - - { - LANG_FOR_EACH_INPUT_STATEMENT (is) - { - asection *s; - bfd_size_type sz; - char *msg; - boolean ret; - - if (is->just_syms_flag) - continue; - - s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning"); - if (s == NULL) - continue; - - sz = bfd_section_size (is->the_bfd, s); - msg = xmalloc ((size_t) sz + 1); - if (! bfd_get_section_contents (is->the_bfd, s, msg, (file_ptr) 0, sz)) - einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n", - is->the_bfd); - msg[sz] = '\0'; - ret = link_info.callbacks->warning (&link_info, msg, - (const char *) NULL, - is->the_bfd, (asection *) NULL, - (bfd_vma) 0); - ASSERT (ret); - free (msg); - - /* Clobber the section size, so that we don't waste copying the - warning into the output file. */ - s->_raw_size = 0; - } - } - -#if defined (TARGET_IS_elf32bmip) || defined (TARGET_IS_elf32lmip) - /* For MIPS ELF the .reginfo section requires special handling. - Each input section is 24 bytes, and the final output section must - also be 24 bytes. We handle this by clobbering all but the first - input section size to 0. The .reginfo section is handled - specially by the backend code anyhow. */ - { - boolean found = false; - LANG_FOR_EACH_INPUT_STATEMENT (is) - { - asection *s; - - if (is->just_syms_flag) - continue; - - s = bfd_get_section_by_name (is->the_bfd, ".reginfo"); - if (s == NULL) - continue; - - if (! found) - { - found = true; - continue; - } - - s->_raw_size = 0; - s->_cooked_size = 0; - } - } -#endif -} - -/* This is called by the before_allocation routine via - lang_for_each_statement. It locates any assignment statements, and - tells the ELF backend about them, in case they are assignments to - symbols which are referred to by dynamic objects. */ - -static void -gld${EMULATION_NAME}_find_statement_assignment (s) - lang_statement_union_type *s; -{ - if (s->header.type == lang_assignment_statement_enum) - gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp); -} - -/* Look through an expression for an assignment statement. */ - -static void -gld${EMULATION_NAME}_find_exp_assignment (exp) - etree_type *exp; -{ - struct bfd_link_hash_entry *h; - - switch (exp->type.node_class) - { - case etree_provide: - h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst, - false, false, false); - if (h == NULL) - break; - - /* We call record_link_assignment even if the symbol is defined. - This is because if it is defined by a dynamic object, we - actually want to use the value defined by the linker script, - not the value from the dynamic object (because we are setting - symbols like etext). If the symbol is defined by a regular - object, then, as it happens, calling record_link_assignment - will do no harm. */ - - /* Fall through. */ - case etree_assign: - if (strcmp (exp->assign.dst, ".") != 0) - { - if (! (bfd_elf${ELFSIZE}_record_link_assignment - (output_bfd, &link_info, exp->assign.dst, - exp->type.node_class == etree_provide ? true : false))) - einfo ("%P%F: failed to record assignment to %s: %E\n", - exp->assign.dst); - } - gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src); - break; - - case etree_binary: - gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs); - gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs); - break; - - case etree_trinary: - gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond); - gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs); - gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs); - break; - - case etree_unary: - gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child); - break; - - default: - break; - } -} - -/* Place an orphan section. We use this to put random SHF_ALLOC - sections in the right segment. */ - -static asection *hold_section; -static lang_output_section_statement_type *hold_use; -static lang_output_section_statement_type *hold_text; -static lang_output_section_statement_type *hold_rodata; -static lang_output_section_statement_type *hold_data; -static lang_output_section_statement_type *hold_bss; -static lang_output_section_statement_type *hold_rel; -static lang_output_section_statement_type *hold_interp; - -/*ARGSUSED*/ -static boolean -gld${EMULATION_NAME}_place_orphan (file, s) - lang_input_statement_type *file; - asection *s; -{ - lang_output_section_statement_type *place; - asection *snew, **pps; - lang_statement_list_type *old; - lang_statement_list_type add; - etree_type *address; - const char *secname, *ps; - const char *outsecname; - lang_output_section_statement_type *os; - - if ((s->flags & SEC_ALLOC) == 0) - return false; - - /* Look through the script to see where to place this section. */ - hold_section = s; - hold_use = NULL; - lang_for_each_statement (gld${EMULATION_NAME}_place_section); - - if (hold_use != NULL) - { - /* We have already placed a section with this name. */ - wild_doit (&hold_use->children, s, hold_use, file); - return true; - } - - secname = bfd_get_section_name (s->owner, s); - - /* If this is a final link, then always put .gnu.warning.SYMBOL - sections into the .text section to get them out of the way. */ - if (! link_info.shared - && ! link_info.relocateable - && strncmp (secname, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0 - && hold_text != NULL) - { - wild_doit (&hold_text->children, s, hold_text, file); - return true; - } - - /* Decide which segment the section should go in based on the - section name and section flags. We put loadable .note sections - right after the .interp section, so that the PT_NOTE segment is - stored right after the program headers where the OS can read it - in the first page. */ - place = NULL; - if ((s->flags & SEC_LOAD) != 0 - && strncmp (secname, ".note", 4) == 0 - && hold_interp != NULL) - place = hold_interp; - else if ((s->flags & SEC_HAS_CONTENTS) == 0 - && hold_bss != NULL) - place = hold_bss; - else if ((s->flags & SEC_READONLY) == 0 - && hold_data != NULL) - place = hold_data; - else if (strncmp (secname, ".rel", 4) == 0 - && hold_rel != NULL) - place = hold_rel; - else if ((s->flags & SEC_CODE) == 0 - && (s->flags & SEC_READONLY) != 0 - && hold_rodata != NULL) - place = hold_rodata; - else if ((s->flags & SEC_READONLY) != 0 - && hold_text != NULL) - place = hold_text; - if (place == NULL) - return false; - - /* Choose a unique name for the section. This will be needed if the - same section name appears in the input file with different - loadable or allocateable characteristics. */ - outsecname = secname; - if (bfd_get_section_by_name (output_bfd, outsecname) != NULL) - { - unsigned int len; - char *newname; - unsigned int i; - - len = strlen (outsecname); - newname = xmalloc (len + 5); - strcpy (newname, outsecname); - i = 0; - do - { - sprintf (newname + len, "%d", i); - ++i; - } - while (bfd_get_section_by_name (output_bfd, newname) != NULL); - - outsecname = newname; - } - - /* Create the section in the output file, and put it in the right - place. This shuffling is to make the output file look neater. */ - snew = bfd_make_section (output_bfd, outsecname); - if (snew == NULL) - einfo ("%P%F: output format %s cannot represent section called %s\n", - output_bfd->xvec->name, outsecname); - if (place->bfd_section != NULL) - { - for (pps = &output_bfd->sections; *pps != snew; pps = &(*pps)->next) - ; - *pps = snew->next; - snew->next = place->bfd_section->next; - place->bfd_section->next = snew; - } - - /* Start building a list of statements for this section. */ - old = stat_ptr; - stat_ptr = &add; - lang_list_init (stat_ptr); - - /* If the name of the section is representable in C, then create - symbols to mark the start and the end of the section. */ - for (ps = outsecname; *ps != '\0'; ps++) - if (! isalnum ((unsigned char) *ps) && *ps != '_') - break; - if (*ps == '\0' && config.build_constructors) - { - char *symname; - - symname = (char *) xmalloc (ps - outsecname + sizeof "__start_"); - sprintf (symname, "__start_%s", outsecname); - lang_add_assignment (exp_assop ('=', symname, - exp_unop (ALIGN_K, - exp_intop ((bfd_vma) 1 - << s->alignment_power)))); - } - - if (! link_info.relocateable) - address = NULL; - else - address = exp_intop ((bfd_vma) 0); - - lang_enter_output_section_statement (outsecname, address, 0, - (bfd_vma) 0, - (etree_type *) NULL, - (etree_type *) NULL, - (etree_type *) NULL); - - os = lang_output_section_statement_lookup (outsecname); - wild_doit (&os->children, s, os, file); - - lang_leave_output_section_statement - ((bfd_vma) 0, "*default*", (struct lang_output_section_phdr_list *) NULL); - stat_ptr = &add; - - if (*ps == '\0' && config.build_constructors) - { - char *symname; - - symname = (char *) xmalloc (ps - outsecname + sizeof "__stop_"); - sprintf (symname, "__stop_%s", outsecname); - lang_add_assignment (exp_assop ('=', symname, - exp_nameop (NAME, "."))); - } - - /* Now stick the new statement list right after PLACE. */ - *add.tail = place->header.next; - place->header.next = add.head; - - stat_ptr = old; - - return true; -} - -static void -gld${EMULATION_NAME}_place_section (s) - lang_statement_union_type *s; -{ - lang_output_section_statement_type *os; - - if (s->header.type != lang_output_section_statement_enum) - return; - - os = &s->output_section_statement; - - if (strcmp (os->name, hold_section->name) == 0 - && os->bfd_section != NULL - && ((hold_section->flags & (SEC_LOAD | SEC_ALLOC)) - == (os->bfd_section->flags & (SEC_LOAD | SEC_ALLOC)))) - hold_use = os; - - if (strcmp (os->name, ".text") == 0) - hold_text = os; - else if (strcmp (os->name, ".rodata") == 0) - hold_rodata = os; - else if (strcmp (os->name, ".data") == 0) - hold_data = os; - else if (strcmp (os->name, ".bss") == 0) - hold_bss = os; - else if (hold_rel == NULL - && os->bfd_section != NULL - && (os->bfd_section->flags & SEC_ALLOC) != 0 - && strncmp (os->name, ".rel", 4) == 0) - hold_rel = os; - else if (strcmp (os->name, ".interp") == 0) - hold_interp = os; -} - -static char * -gld${EMULATION_NAME}_get_script(isfile) - int *isfile; -EOF - -if test -n "$COMPILE_IN" -then -# Scripts compiled in. - -# sed commands to quote an ld script as a C string. -sc='s/["\\]/\\&/g -s/$/\\n\\/ -1s/^/"/ -$s/$/n"/ -' - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 0; - - if (link_info.relocateable == true && config.build_constructors == true) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`; - else if (link_info.relocateable == true) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`; - else if (!config.text_read_only) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`; - else if (!config.magic_demand_paged) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`; - else if (link_info.shared) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xs`; - else - return `sed "$sc" ldscripts/${EMULATION_NAME}.x`; -} -EOF - -else -# Scripts read from the filesystem. - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 1; - - if (link_info.relocateable == true && config.build_constructors == true) - return "ldscripts/${EMULATION_NAME}.xu"; - else if (link_info.relocateable == true) - return "ldscripts/${EMULATION_NAME}.xr"; - else if (!config.text_read_only) - return "ldscripts/${EMULATION_NAME}.xbn"; - else if (!config.magic_demand_paged) - return "ldscripts/${EMULATION_NAME}.xn"; - else if (link_info.shared) - return "ldscripts/${EMULATION_NAME}.xs"; - else - return "ldscripts/${EMULATION_NAME}.x"; -} -EOF - -fi - -cat >>e${EMULATION_NAME}.c <<EOF - -struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = -{ - gld${EMULATION_NAME}_before_parse, - syslib_default, - hll_default, - after_parse_default, - gld${EMULATION_NAME}_after_open, - after_allocation_default, - set_output_arch_default, - ldemul_default_target, - gld${EMULATION_NAME}_before_allocation, - gld${EMULATION_NAME}_get_script, - "${EMULATION_NAME}", - "${OUTPUT_FORMAT}", - NULL, - NULL, - gld${EMULATION_NAME}_open_dynamic_archive, - gld${EMULATION_NAME}_place_orphan -}; -EOF diff --git a/contrib/binutils/ld/emultempl/generic.em b/contrib/binutils/ld/emultempl/generic.em deleted file mode 100644 index 1c0c8eb214d0..000000000000 --- a/contrib/binutils/ld/emultempl/generic.em +++ /dev/null @@ -1,118 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# It does some substitutions. -cat >e${EMULATION_NAME}.c <<EOF -/* This file is is generated by a shell script. DO NOT EDIT! */ - -/* emulate the original gld for the given ${EMULATION_NAME} - Copyright (C) 1991, 1993 Free Software Foundation, Inc. - Written by Steve Chamberlain steve@cygnus.com - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#define TARGET_IS_${EMULATION_NAME} - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldemul.h" -#include "ldfile.h" -#include "ldmisc.h" - -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile)); - -static void -gld${EMULATION_NAME}_before_parse() -{ -#ifndef TARGET_ /* I.e., if not generic. */ - ldfile_set_output_arch ("`echo ${ARCH}`"); -#endif /* not TARGET_ */ -} - -static char * -gld${EMULATION_NAME}_get_script(isfile) - int *isfile; -EOF - -if test -n "$COMPILE_IN" -then -# Scripts compiled in. - -# sed commands to quote an ld script as a C string. -sc="-f ${srcdir}/emultempl/stringify.sed" - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 0; - - if (link_info.relocateable == true && config.build_constructors == true) - return -EOF -sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocateable == true) 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 -echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c -sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c -echo ' ; else return' >> e${EMULATION_NAME}.c -sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c -echo '; }' >> e${EMULATION_NAME}.c - -else -# Scripts read from the filesystem. - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 1; - - if (link_info.relocateable == true && config.build_constructors == true) - return "ldscripts/${EMULATION_NAME}.xu"; - else if (link_info.relocateable == true) - return "ldscripts/${EMULATION_NAME}.xr"; - else if (!config.text_read_only) - return "ldscripts/${EMULATION_NAME}.xbn"; - else if (!config.magic_demand_paged) - return "ldscripts/${EMULATION_NAME}.xn"; - else - return "ldscripts/${EMULATION_NAME}.x"; -} -EOF - -fi - -cat >>e${EMULATION_NAME}.c <<EOF - -struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = -{ - gld${EMULATION_NAME}_before_parse, - syslib_default, - hll_default, - after_parse_default, - after_open_default, - after_allocation_default, - set_output_arch_default, - ldemul_default_target, - before_allocation_default, - gld${EMULATION_NAME}_get_script, - "${EMULATION_NAME}", - "${OUTPUT_FORMAT}" -}; -EOF diff --git a/contrib/binutils/ld/emultempl/linux.em b/contrib/binutils/ld/emultempl/linux.em deleted file mode 100644 index 6860c3ffaf28..000000000000 --- a/contrib/binutils/ld/emultempl/linux.em +++ /dev/null @@ -1,207 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# It does some substitutions. -cat >e${EMULATION_NAME}.c <<EOF -/* This file is is generated by a shell script. DO NOT EDIT! */ - -/* Linux a.out emulation code for ${EMULATION_NAME} - Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. - Written by Steve Chamberlain <sac@cygnus.com> - Linux support by Eric Youngdale <ericy@cais.cais.com> - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#define TARGET_IS_${EMULATION_NAME} - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldemul.h" -#include "ldfile.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" - -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static boolean gld${EMULATION_NAME}_open_dynamic_archive - PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *)); -static void gld${EMULATION_NAME}_find_address_statement - PARAMS ((lang_statement_union_type *)); -static void gld${EMULATION_NAME}_create_output_section_statements - PARAMS ((void)); -static void gld${EMULATION_NAME}_before_allocation PARAMS ((void)); -static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile)); - -static void -gld${EMULATION_NAME}_before_parse() -{ - ldfile_output_architecture = bfd_arch_${ARCH}; - config.dynamic_link = true; -} - -/* Try to open a dynamic archive. This is where we know that Linux - dynamic libraries have an extension of .sa. */ - -static boolean -gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) - const char *arch; - search_dirs_type *search; - lang_input_statement_type *entry; -{ - char *string; - - if (! entry->is_archive) - return false; - - string = (char *) xmalloc (strlen (search->name) - + strlen (entry->filename) - + strlen (arch) - + sizeof "/lib.sa"); - - sprintf (string, "%s/lib%s%s.sa", search->name, entry->filename, arch); - - if (! ldfile_try_open_bfd (string, entry)) - { - free (string); - return false; - } - - entry->filename = string; - - return true; -} - -/* This is called by the create_output_section_statements routine via - lang_for_each_statement. It locates any address assignment to - .text, and modifies it to include the size of the headers. This - causes -Ttext to mean the starting address of the header, rather - than the starting address of .text, which is compatible with other - Linux tools. */ - -static void -gld${EMULATION_NAME}_find_address_statement (s) - lang_statement_union_type *s; -{ - if (s->header.type == lang_address_statement_enum - && strcmp (s->address_statement.section_name, ".text") == 0) - { - ASSERT (s->address_statement.address->type.node_class == etree_value); - s->address_statement.address->value.value += 0x20; - } -} - -/* This is called before opening the input BFD's. */ - -static void -gld${EMULATION_NAME}_create_output_section_statements () -{ - lang_for_each_statement (gld${EMULATION_NAME}_find_address_statement); -} - -/* This is called after the sections have been attached to output - sections, but before any sizes or addresses have been set. */ - -static void -gld${EMULATION_NAME}_before_allocation () -{ - if (link_info.relocateable) - return; - - /* Let the backend work out the sizes of any sections required by - dynamic linking. */ - if (! bfd_${EMULATION_NAME}_size_dynamic_sections (output_bfd, &link_info)) - einfo ("%P%F: failed to set dynamic section sizes: %E\n"); -} - -static char * -gld${EMULATION_NAME}_get_script(isfile) - int *isfile; -EOF - -if test -n "$COMPILE_IN" -then -# Scripts compiled in. - -# sed commands to quote an ld script as a C string. -sc='s/["\\]/\\&/g -s/$/\\n\\/ -1s/^/"/ -$s/$/n"/ -' - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 0; - - if (link_info.relocateable == true && config.build_constructors == true) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`; - else if (link_info.relocateable == true) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`; - else if (!config.text_read_only) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`; - else if (!config.magic_demand_paged) - return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`; - else - return `sed "$sc" ldscripts/${EMULATION_NAME}.x`; -} -EOF - -else -# Scripts read from the filesystem. - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 1; - - if (link_info.relocateable == true && config.build_constructors == true) - return "ldscripts/${EMULATION_NAME}.xu"; - else if (link_info.relocateable == true) - return "ldscripts/${EMULATION_NAME}.xr"; - else if (!config.text_read_only) - return "ldscripts/${EMULATION_NAME}.xbn"; - else if (!config.magic_demand_paged) - return "ldscripts/${EMULATION_NAME}.xn"; - else - return "ldscripts/${EMULATION_NAME}.x"; -} -EOF - -fi - -cat >>e${EMULATION_NAME}.c <<EOF - -struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = -{ - gld${EMULATION_NAME}_before_parse, - syslib_default, - hll_default, - after_parse_default, - after_open_default, - after_allocation_default, - set_output_arch_default, - ldemul_default_target, - gld${EMULATION_NAME}_before_allocation, - gld${EMULATION_NAME}_get_script, - "${EMULATION_NAME}", - "${OUTPUT_FORMAT}", - NULL, - gld${EMULATION_NAME}_create_output_section_statements, - gld${EMULATION_NAME}_open_dynamic_archive -}; -EOF diff --git a/contrib/binutils/ld/emultempl/pe.em b/contrib/binutils/ld/emultempl/pe.em deleted file mode 100644 index fcabcbd72c6c..000000000000 --- a/contrib/binutils/ld/emultempl/pe.em +++ /dev/null @@ -1,784 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# It does some substitutions. -cat >e${EMULATION_NAME}.c <<EOF -/* This file is part of GLD, the Gnu Linker. - Copyright 1995, 96, 97, 1998 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* For WINDOWS_NT */ -/* The original file generated returned different default scripts depending - on whether certain switches were set, but these switches pertain to the - Linux system and that particular version of coff. In the NT case, we - only determine if the subsystem is console or windows in order to select - the correct entry point by default. */ - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" -#include "getopt.h" -#include "libiberty.h" -#include "ld.h" -#include "ldmain.h" -#include "ldgram.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldemul.h" -#include "ldlex.h" -#include "ldmisc.h" -#include "ldctor.h" -#include "ldfile.h" -#include "coff/internal.h" -#include "../bfd/libcoff.h" - -#define TARGET_IS_${EMULATION_NAME} - -static void gld_${EMULATION_NAME}_set_symbols PARAMS ((void)); -static void gld_${EMULATION_NAME}_after_open PARAMS ((void)); -static void gld_${EMULATION_NAME}_before_parse PARAMS ((void)); -static void gld_${EMULATION_NAME}_before_allocation PARAMS ((void)); -static boolean gld${EMULATION_NAME}_place_orphan - PARAMS ((lang_input_statement_type *, asection *)); -static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *)); -static int gld_${EMULATION_NAME}_parse_args PARAMS ((int, char **)); - -#if 0 /* argument to qsort so don't prototype */ -static int sort_by_file_name PARAMS ((void *, void *)); -static int sort_by_section_name PARAMS ((void *, void *)); -#endif -static lang_statement_union_type **sort_sections_1 - PARAMS ((lang_statement_union_type **, lang_statement_union_type *, int, - int (*)())); -static void sort_sections PARAMS ((lang_statement_union_type *)); - -static struct internal_extra_pe_aouthdr pe; -static int dll; - -extern const char *output_filename; - -static void -gld_${EMULATION_NAME}_before_parse() -{ - output_filename = "a.exe"; - ldfile_output_architecture = bfd_arch_${ARCH}; -} - -/* PE format extra command line options. */ - -/* Used for setting flags in the PE header. */ -#define OPTION_BASE_FILE (300 + 1) -#define OPTION_DLL (OPTION_BASE_FILE + 1) -#define OPTION_FILE_ALIGNMENT (OPTION_DLL + 1) -#define OPTION_IMAGE_BASE (OPTION_FILE_ALIGNMENT + 1) -#define OPTION_MAJOR_IMAGE_VERSION (OPTION_IMAGE_BASE + 1) -#define OPTION_MAJOR_OS_VERSION (OPTION_MAJOR_IMAGE_VERSION + 1) -#define OPTION_MAJOR_SUBSYSTEM_VERSION (OPTION_MAJOR_OS_VERSION + 1) -#define OPTION_MINOR_IMAGE_VERSION (OPTION_MAJOR_SUBSYSTEM_VERSION + 1) -#define OPTION_MINOR_OS_VERSION (OPTION_MINOR_IMAGE_VERSION + 1) -#define OPTION_MINOR_SUBSYSTEM_VERSION (OPTION_MINOR_OS_VERSION + 1) -#define OPTION_SECTION_ALIGNMENT (OPTION_MINOR_SUBSYSTEM_VERSION + 1) -#define OPTION_STACK (OPTION_SECTION_ALIGNMENT + 1) -#define OPTION_SUBSYSTEM (OPTION_STACK + 1) -#define OPTION_HEAP (OPTION_SUBSYSTEM + 1) - -static struct option longopts[] = { - /* PE options */ - {"base-file", required_argument, NULL, OPTION_BASE_FILE}, - {"dll", no_argument, NULL, OPTION_DLL}, - {"file-alignment", required_argument, NULL, OPTION_FILE_ALIGNMENT}, - {"heap", required_argument, NULL, OPTION_HEAP}, - {"image-base", required_argument, NULL, OPTION_IMAGE_BASE}, - {"major-image-version", required_argument, NULL, OPTION_MAJOR_IMAGE_VERSION}, - {"major-os-version", required_argument, NULL, OPTION_MAJOR_OS_VERSION}, - {"major-subsystem-version", required_argument, NULL, OPTION_MAJOR_SUBSYSTEM_VERSION}, - {"minor-image-version", required_argument, NULL, OPTION_MINOR_IMAGE_VERSION}, - {"minor-os-version", required_argument, NULL, OPTION_MINOR_OS_VERSION}, - {"minor-subsystem-version", required_argument, NULL, OPTION_MINOR_SUBSYSTEM_VERSION}, - {"section-alignment", required_argument, NULL, OPTION_SECTION_ALIGNMENT}, - {"stack", required_argument, NULL, OPTION_STACK}, - {"subsystem", required_argument, NULL, OPTION_SUBSYSTEM}, - {NULL, no_argument, NULL, 0} - }; - - -/* PE/WIN32; added routines to get the subsystem type, heap and/or stack - parameters which may be input from the command line */ - -typedef struct { - void *ptr; - int size; - int value; - char *symbol; - int inited; -} definfo; - -#define D(field,symbol,def) {&pe.field,sizeof(pe.field), def, symbol,0} - -static definfo init[] = -{ - /* imagebase must be first */ -#define IMAGEBASEOFF 0 - D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE), -#define DLLOFF 1 - {&dll, sizeof(dll), 0, "__dll__"}, - D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT), - D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT), - D(MajorOperatingSystemVersion,"__major_os_version__", 4), - D(MinorOperatingSystemVersion,"__minor_os_version__", 0), - D(MajorImageVersion,"__major_image_version__", 1), - D(MinorImageVersion,"__minor_image_version__", 0), - D(MajorSubsystemVersion,"__major_subsystem_version__", 4), - D(MinorSubsystemVersion,"__minor_subsystem_version__", 0), - D(Subsystem,"__subsystem__", 3), - D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x2000000), - D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000), - D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000), - D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000), - D(LoaderFlags,"__loader_flags__", 0x0), - { NULL, 0, 0, NULL, 0 } -}; - - -static void -set_pe_name (name, val) - char *name; - long val; -{ - int i; - /* Find the name and set it. */ - for (i = 0; init[i].ptr; i++) - { - if (strcmp (name, init[i].symbol) == 0) - { - init[i].value = val; - init[i].inited = 1; - return; - } - } - abort(); -} - - -static void -set_pe_subsystem () -{ - const char *sver; - int len; - int i; - static const struct - { - const char *name; - const int value; - const char *entry; - } - v[] = - { - { "native", 1, "_NtProcessStartup" }, - { "windows", 2, "_WinMainCRTStartup" }, - { "console", 3, "_mainCRTStartup" }, -#if 0 - /* The Microsoft linker does not recognize this. */ - { "os2", 5, "" }, -#endif - { "posix", 7, "___PosixProcessStartup"}, - { 0, 0, 0 } - }; - - sver = strchr (optarg, ':'); - if (sver == NULL) - len = strlen (optarg); - else - { - char *end; - - len = sver - optarg; - set_pe_name ("__major_subsystem_version__", - strtoul (sver + 1, &end, 0)); - if (*end == '.') - set_pe_name ("__minor_subsystem_version__", - strtoul (end + 1, &end, 0)); - if (*end != '\0') - einfo ("%P: warning: bad version number in -subsystem option\n"); - } - - for (i = 0; v[i].name; i++) - { - if (strncmp (optarg, v[i].name, len) == 0 - && v[i].name[len] == '\0') - { - set_pe_name ("__subsystem__", v[i].value); - - /* If the subsystem is windows, we use a different entry - point. We also register the entry point as an undefined - symbol. The reason we do this is so that the user - doesn't have to because they would have to use the -u - switch if they were specifying an entry point other than - _mainCRTStartup. Specifically, if creating a windows - application, entry point _WinMainCRTStartup must be - specified. What I have found for non console - applications (entry not _mainCRTStartup) is that the .obj - that contains mainCRTStartup is brought in since it is - the first encountered in libc.lib and it has other - symbols in it which will be pulled in by the link - process. To avoid this, adding -u with the entry point - name specified forces the correct .obj to be used. We - can avoid making the user do this by always adding the - entry point name as an undefined symbol. */ - lang_add_entry (v[i].entry, 1); - ldlang_add_undef (v[i].entry); - - return; - } - } - einfo ("%P%F: invalid subsystem type %s\n", optarg); -} - - - -static void -set_pe_value (name) - char *name; - -{ - char *end; - set_pe_name (name, strtoul (optarg, &end, 0)); - if (end == optarg) - { - einfo ("%P%F: invalid hex number for PE parameter '%s'\n", optarg); - } - - optarg = end; -} - -static void -set_pe_stack_heap (resname, comname) - char *resname; - char *comname; -{ - set_pe_value (resname); - if (*optarg == ',') - { - optarg++; - set_pe_value (comname); - } - else if (*optarg) - { - einfo ("%P%F: strange hex info for PE parameter '%s'\n", optarg); - } -} - - - -static int -gld_${EMULATION_NAME}_parse_args(argc, argv) - int argc; - char **argv; -{ - int longind; - int optc; - int prevoptind = optind; - int prevopterr = opterr; - int wanterror; - static int lastoptind = -1; - - if (lastoptind != optind) - opterr = 0; - wanterror = opterr; - - lastoptind = optind; - - optc = getopt_long_only (argc, argv, "-", longopts, &longind); - opterr = prevopterr; - - switch (optc) - { - default: - if (wanterror) - xexit (1); - optind = prevoptind; - return 0; - - case OPTION_BASE_FILE: - link_info.base_file = (PTR) fopen (optarg, FOPEN_WB); - if (link_info.base_file == NULL) - { - fprintf (stderr, "%s: Can't open base file %s\n", - program_name, optarg); - xexit (1); - } - break; - - /* PE options */ - case OPTION_HEAP: - set_pe_stack_heap ("__size_of_heap_reserve__", "__size_of_heap_commit__"); - break; - case OPTION_STACK: - set_pe_stack_heap ("__size_of_stack_reserve__", "__size_of_stack_commit__"); - break; - case OPTION_SUBSYSTEM: - set_pe_subsystem (); - break; - case OPTION_MAJOR_OS_VERSION: - set_pe_value ("__major_os_version__"); - break; - case OPTION_MINOR_OS_VERSION: - set_pe_value ("__minor_os_version__"); - break; - case OPTION_MAJOR_SUBSYSTEM_VERSION: - set_pe_value ("__major_subsystem_version__"); - break; - case OPTION_MINOR_SUBSYSTEM_VERSION: - set_pe_value ("__minor_subsystem_version__"); - break; - case OPTION_MAJOR_IMAGE_VERSION: - set_pe_value ("__major_image_version__"); - break; - case OPTION_MINOR_IMAGE_VERSION: - set_pe_value ("__minor_image_version__"); - break; - case OPTION_FILE_ALIGNMENT: - set_pe_value ("__file_alignment__"); - break; - case OPTION_SECTION_ALIGNMENT: - set_pe_value ("__section_alignment__"); - break; - case OPTION_DLL: - set_pe_name ("__dll__", 1); - break; - case OPTION_IMAGE_BASE: - set_pe_value ("__image_base__"); - break; - } - return 1; -} - -/* Assign values to the special symbols before the linker script is - read. */ - -static void -gld_${EMULATION_NAME}_set_symbols() -{ - /* Run through and invent symbols for all the - names and insert the defaults. */ - int j; - lang_statement_list_type *save; - - if (!init[IMAGEBASEOFF].inited) - { - if (link_info.relocateable) - init[IMAGEBASEOFF].value = 0; - else if (init[DLLOFF].value) - init[IMAGEBASEOFF].value = NT_DLL_IMAGE_BASE; - else - init[IMAGEBASEOFF].value = NT_EXE_IMAGE_BASE; - } - - /* Don't do any symbol assignments if this is a relocateable link. */ - if (link_info.relocateable) - return; - - /* Glue the assignments into the abs section */ - save = stat_ptr; - - stat_ptr = &(abs_output_section->children); - - for (j = 0; init[j].ptr; j++) - { - long val = init[j].value; - lang_add_assignment (exp_assop ('=' ,init[j].symbol, exp_intop (val))); - if (init[j].size == sizeof(short)) - *(short *)init[j].ptr = val; - else if (init[j].size == sizeof(int)) - *(int *)init[j].ptr = val; - else if (init[j].size == sizeof(long)) - *(long *)init[j].ptr = val; - /* This might be a long long or other special type. */ - else if (init[j].size == sizeof(bfd_vma)) - *(bfd_vma *)init[j].ptr = val; - else abort(); - } - /* Restore the pointer. */ - stat_ptr = save; - - if (pe.FileAlignment > - pe.SectionAlignment) - { - einfo ("%P: warning, file alignment > section alignment.\n"); - } -} - -static void -gld_${EMULATION_NAME}_after_open() -{ - /* Pass the wacky PE command line options into the output bfd. - FIXME: This should be done via a function, rather than by - including an internal BFD header. */ - if (!coff_data(output_bfd)->pe) - { - einfo ("%F%P: PE operations on non PE file.\n"); - } - - pe_data(output_bfd)->pe_opthdr = pe; - pe_data(output_bfd)->dll = init[DLLOFF].value; - -} - -/* Callback functions for qsort in sort_sections. */ - -static int -sort_by_file_name (a, b) - void *a; - void *b; -{ - lang_statement_union_type **ra = a; - lang_statement_union_type **rb = b; - int i; - - i = strcmp ((*ra)->input_section.ifile->the_bfd->my_archive->filename, - (*rb)->input_section.ifile->the_bfd->my_archive->filename); - if (i != 0) - return i; - - return strcmp ((*ra)->input_section.ifile->filename, - (*rb)->input_section.ifile->filename); -} - -static int -sort_by_section_name (a, b) - void *a; - void *b; -{ - lang_statement_union_type **ra = a; - lang_statement_union_type **rb = b; - return strcmp ((*ra)->input_section.section->name, - (*rb)->input_section.section->name); -} - -/* Subroutine of sort_sections to a contiguous subset of a list of sections. - NEXT_AFTER is the element after the last one to sort. - The result is a pointer to the last element's "next" pointer. */ - -static lang_statement_union_type ** -sort_sections_1 (startptr, next_after, count, sort_func) - lang_statement_union_type **startptr,*next_after; - int count; - int (*sort_func) (); -{ - lang_statement_union_type **vec; - lang_statement_union_type *p; - int i; - lang_statement_union_type **ret; - - if (count == 0) - return startptr; - - vec = ((lang_statement_union_type **) - xmalloc (count * sizeof (lang_statement_union_type *))); - - for (p = *startptr, i = 0; i < count; i++, p = p->next) - vec[i] = p; - - qsort (vec, count, sizeof (vec[0]), sort_func); - - /* Fill in the next pointers again. */ - *startptr = vec[0]; - for (i = 0; i < count - 1; i++) - vec[i]->header.next = vec[i + 1]; - vec[i]->header.next = next_after; - ret = &vec[i]->header.next; - free (vec); - return ret; -} - -/* Sort the .idata\$foo input sections of archives into filename order. - The reason is so dlltool can arrange to have the pe dll import information - generated correctly - the head of the list goes into dh.o, the tail into - dt.o, and the guts into ds[nnnn].o. Note that this is only needed for the - .idata section. - FIXME: This may no longer be necessary with grouped sections. Instead of - sorting on dh.o, ds[nnnn].o, dt.o, one could, for example, have dh.o use - .idata\$4h, have ds[nnnn].o use .idata\$4s[nnnn], and have dt.o use .idata\$4t. - This would have to be elaborated upon to handle multiple dll's - [assuming such an eloboration is possible of course]. - - We also sort sections in '\$' wild statements. These are created by the - place_orphans routine to implement grouped sections. */ - -static void -sort_sections (s) - lang_statement_union_type *s; -{ - for (; s ; s = s->next) - switch (s->header.type) - { - case lang_output_section_statement_enum: - sort_sections (s->output_section_statement.children.head); - break; - case lang_wild_statement_enum: - { - lang_statement_union_type **p = &s->wild_statement.children.head; - - /* Is this the .idata section? */ - if (s->wild_statement.section_name != NULL - && strncmp (s->wild_statement.section_name, ".idata", 6) == 0) - { - /* Sort the children. We want to sort any objects in - the same archive. In order to handle the case of - including a single archive multiple times, we sort - all the children by archive name and then by object - name. After sorting them, we re-thread the pointer - chain. */ - - while (*p) - { - lang_statement_union_type *start = *p; - if (start->header.type != lang_input_section_enum - || !start->input_section.ifile->the_bfd->my_archive) - p = &(start->header.next); - else - { - lang_statement_union_type *end; - int count; - - for (end = start, count = 0; - end && end->header.type == lang_input_section_enum; - end = end->next) - count++; - - p = sort_sections_1 (p, end, count, sort_by_file_name); - } - } - break; - } - - /* If this is a collection of grouped sections, sort them. - The linker script must explicitly mention "*(.foo\$)" or - "*(.foo\$*)". Don't sort them if \$ is not the last - character (not sure if this is really useful, but it - allows explicitly mentioning some \$ sections and letting - the linker handle the rest). */ - if (s->wild_statement.section_name != NULL) - { - char *q = strchr (s->wild_statement.section_name, '\$'); - - if (q != NULL - && (q[1] == '\0' - || (q[1] == '*' && q[2] == '\0'))) - { - lang_statement_union_type *end; - int count; - - for (end = *p, count = 0; end; end = end->next) - { - if (end->header.type != lang_input_section_enum) - abort (); - count++; - } - (void) sort_sections_1 (p, end, count, sort_by_section_name); - } - break; - } - } - break; - default: - break; - } -} - -static void -gld_${EMULATION_NAME}_before_allocation() -{ - extern lang_statement_list_type *stat_ptr; - -#ifdef TARGET_IS_ppcpe - /* Here we rummage through the found bfds to collect toc information */ - { - LANG_FOR_EACH_INPUT_STATEMENT (is) - { - if (!ppc_process_before_allocation(is->the_bfd, &link_info)) - { - einfo("Errors encountered processing file %s\n", is->filename); - } - } - } - - /* We have seen it all. Allocate it, and carry on */ - ppc_allocate_toc_section (&link_info); -#else -#ifdef TARGET_IS_armpe - /* FIXME: we should be able to set the size of the interworking stub - section. - - Here we rummage through the found bfds to collect glue - information. FIXME: should this be based on a command line - option? krk@cygnus.com */ - { - LANG_FOR_EACH_INPUT_STATEMENT (is) - { - if (!arm_process_before_allocation (is->the_bfd, & link_info)) - { - einfo ("Errors encountered processing file %s", is->filename); - } - } - } - - /* We have seen it all. Allocate it, and carry on */ - arm_allocate_interworking_sections (& link_info); -#endif /* TARGET_IS_armpe */ -#endif /* TARGET_IS_ppcpe */ - - sort_sections (stat_ptr->head); -} - -/* Place an orphan section. We use this to put sections with a '\$' in them - into the right place. Any section with a '\$' in them (e.g. .text\$foo) - gets mapped to the output section with everything from the '\$' on stripped - (e.g. .text). - See the Microsoft Portable Executable and Common Object File Format - Specification 4.1, section 4.2, Grouped Sections. - - FIXME: This is now handled by the linker script using wildcards, - but I'm leaving this here in case we want to enable it for sections - which are not mentioned in the linker script. */ - -/*ARGSUSED*/ -static boolean -gld${EMULATION_NAME}_place_orphan (file, s) - lang_input_statement_type *file; - asection *s; -{ - const char *secname; - char *output_secname, *ps; - lang_output_section_statement_type *os; - lang_statement_union_type *l; - - if ((s->flags & SEC_ALLOC) == 0) - return false; - - /* Don't process grouped sections unless doing a final link. - If they're marked as COMDAT sections, we don't want .text\$foo to - end up in .text and then have .text disappear because it's marked - link-once-discard. */ - if (link_info.relocateable) - return false; - - secname = bfd_get_section_name (s->owner, s); - - /* Everything from the '\$' on gets deleted so don't allow '\$' as the - first character. */ - if (*secname == '\$') - einfo ("%P%F: section %s has '\$' as first character\n", secname); - if (strchr (secname + 1, '\$') == NULL) - return false; - - /* Look up the output section. The Microsoft specs say sections names in - image files never contain a '\$'. Fortunately, lang_..._lookup creates - the section if it doesn't exist. */ - output_secname = buystring (secname); - ps = strchr (output_secname + 1, '\$'); - *ps = 0; - os = lang_output_section_statement_lookup (output_secname); - - /* Find the '\$' wild statement for this section. We currently require the - linker script to explicitly mention "*(.foo\$)". - FIXME: ppcpe.sc has .CRT\$foo in the .rdata section. According to the - Microsoft docs this isn't correct so it's not (currently) handled. */ - - ps[0] = '\$'; - ps[1] = 0; - for (l = os->children.head; l; l = l->next) - { - if (l->header.type == lang_wild_statement_enum - && strcmp (l->wild_statement.section_name, output_secname) == 0) - break; - } - ps[0] = 0; - if (l == NULL) -#if 1 - einfo ("%P%F: *(%s\$) missing from linker script\n", output_secname); -#else /* FIXME: This block is untried. It exists to convey the intent, - should one decide to not require *(.foo\$) to appear in the linker - script. */ - { - lang_wild_statement_type *new = new_stat (lang_wild_statement, - &os->children); - new->section_name = xmalloc (strlen (output_secname) + 2); - sprintf (new->section_name, "%s\$", output_secname); - new->filename = NULL; - lang_list_init (&new->children); - l = new; - } -#endif - - /* Link the input section in and we're done for now. - The sections still have to be sorted, but that has to wait until - all such sections have been processed by us. The sorting is done by - sort_sections. */ - wild_doit (&l->wild_statement.children, s, os, file); - - return true; -} - -static char * -gld_${EMULATION_NAME}_get_script(isfile) - int *isfile; -EOF -# Scripts compiled in. -# sed commands to quote an ld script as a C string. -sc="-f ${srcdir}/emultempl/stringify.sed" - -cat >>e${EMULATION_NAME}.c <<EOF -{ - *isfile = 0; - - if (link_info.relocateable == true && config.build_constructors == true) - return -EOF -sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocateable == true) 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 -echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c -sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c -echo ' ; else return' >> e${EMULATION_NAME}.c -sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c -echo '; }' >> e${EMULATION_NAME}.c - -cat >>e${EMULATION_NAME}.c <<EOF - - -struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = -{ - gld_${EMULATION_NAME}_before_parse, - syslib_default, - hll_default, - after_parse_default, - gld_${EMULATION_NAME}_after_open, - after_allocation_default, - set_output_arch_default, - ldemul_default_target, - gld_${EMULATION_NAME}_before_allocation, - gld_${EMULATION_NAME}_get_script, - "${EMULATION_NAME}", - "${OUTPUT_FORMAT}", - NULL, /* finish */ - NULL, /* create output section statements */ - NULL, /* open dynamic archive */ - gld${EMULATION_NAME}_place_orphan, - gld_${EMULATION_NAME}_set_symbols, - gld_${EMULATION_NAME}_parse_args -}; -EOF diff --git a/contrib/binutils/ld/emultempl/stringify.sed b/contrib/binutils/ld/emultempl/stringify.sed deleted file mode 100644 index a526d3ffc4c5..000000000000 --- a/contrib/binutils/ld/emultempl/stringify.sed +++ /dev/null @@ -1,4 +0,0 @@ -s/["\\]/\\&/g -s/$/\\n\\/ -1 s/^/"/ -$ s/$/n"/ diff --git a/contrib/binutils/ld/emultempl/vanilla.em b/contrib/binutils/ld/emultempl/vanilla.em deleted file mode 100644 index 04e36fbc9476..000000000000 --- a/contrib/binutils/ld/emultempl/vanilla.em +++ /dev/null @@ -1,69 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# It does some substitutions. -cat >e${EMULATION_NAME}.c <<EOF -/* A vanilla emulation with no defaults - Copyright (C) 1991, 1993 Free Software Foundation, Inc. - Written by Steve Chamberlain steve@cygnus.com - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include "bfd.h" -#include "sysdep.h" - - -#include "ld.h" -#include "ldemul.h" -#include "ldfile.h" -#include "ldmisc.h" -#include "ldmain.h" - -static void vanilla_before_parse() -{ -} - -static void -vanilla_set_output_arch() -{ - /* Set the output architecture and machine if possible */ - unsigned long machine = 0; - bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine); -} - -static char * -vanilla_get_script(isfile) - int *isfile; -{ - *isfile = 0; - return ""; -} - -struct ld_emulation_xfer_struct ld_vanilla_emulation = -{ - vanilla_before_parse, - syslib_default, - hll_default, - after_parse_default, - after_open_default, - after_allocation_default, - vanilla_set_output_arch, - ldemul_default_target, - before_allocation_default, - vanilla_get_script, - "vanilla", - "a.out-sunos-big" -}; -EOF diff --git a/contrib/binutils/ld/gen-doc.texi b/contrib/binutils/ld/gen-doc.texi deleted file mode 100644 index 3a367277e501..000000000000 --- a/contrib/binutils/ld/gen-doc.texi +++ /dev/null @@ -1,13 +0,0 @@ -@c ------------------------------ CONFIGURATION VARS: -@c 1. Inclusiveness of this manual -@set GENERIC - -@c 2. Specific target machines -@set H8300 -@set I960 - -@c 3. Properties of this configuration -@clear SingleFormat -@set UsesEnvVars -@c ------------------------------ end CONFIGURATION VARS - diff --git a/contrib/binutils/ld/genscripts.sh b/contrib/binutils/ld/genscripts.sh deleted file mode 100755 index eea5401515be..000000000000 --- a/contrib/binutils/ld/genscripts.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/sh -# genscripts.sh - generate the ld-emulation-target specific files -# -# Usage: genscripts.sh srcdir libdir host target target_alias \ -# default_emulation native_lib_dirs this_emulation tool_dir -# -# Sample usage: -# genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib sparc-sun-sunos4.1.3 \ -# sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 "" sun3 sparc-sun-sunos4.1.3 -# produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c - -srcdir=$1 -libdir=$2 -host=$3 -target=$4 -target_alias=$5 -DEFAULT_EMULATION=$6 -NATIVE_LIB_DIRS=$7 -EMULATION_NAME=$8 -tool_lib=`echo ${libdir} | sed -e 's|/lib$||'`/${9-$target_alias}/lib - -# Include the emulation-specific parameters: -. ${srcdir}/emulparams/${EMULATION_NAME}.sh - -if test -d ldscripts; then - true -else - mkdir ldscripts -fi - -# Set the library search path, for libraries named by -lfoo. -# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. -# Otherwise, the default is set here. -# -# The format is the usual list of colon-separated directories. -# To force a logically empty LIB_PATH, do LIBPATH=":". - -if [ "x${LIB_PATH}" = "x" ] ; then - if [ "x${host}" = "x${target}" ] ; then - if [ "x${DEFAULT_EMULATION}" = "x${EMULATION_NAME}" ] ; then - # Native. - LIB_PATH=/lib:/usr/lib - if [ -n "${NATIVE_LIB_DIRS}" ]; then - LIB_PATH=${LIB_PATH}:${NATIVE_LIB_DIRS} - fi - if [ "${libdir}" != /usr/lib ]; then - LIB_PATH=${LIB_PATH}:${libdir} - fi - if [ "${libdir}" != /usr/local/lib ] ; then - LIB_PATH=${LIB_PATH}:/usr/local/lib - fi - else - # Native, but not default emulation. - LIB_PATH= - fi - else - # Cross. - LIB_PATH= - fi -fi - -# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib. -LIB_PATH=${LIB_PATH}:${tool_lib} - -LIB_SEARCH_DIRS=`echo ${LIB_PATH} | tr ':' ' ' | sed -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'` - -# Generate 5 or 6 script files from a master script template in -# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6 -# script files is actually used depends on command line options given -# to ld. (SCRIPT_NAME was set in the emulparams_file.) -# -# A .x script file is the default script. -# A .xr script is for linking without relocation (-r flag). -# A .xu script is like .xr, but *do* create constructors (-Ur flag). -# A .xn script is for linking with -n flag (mix text and data on same page). -# A .xbn script is for linking with -N flag (mix text and data on same page). -# A .xs script is for generating a shared library with the --shared -# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the -# emulation parameters. - -SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}} - -# Determine DATA_ALIGNMENT for the 5 variants, using -# values specified in the emulparams/<emulation>.sh file or default. - -DATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}" -DATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}" -DATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}" -DATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}" -DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}" - -LD_FLAG=r -DATA_ALIGNMENT=${DATA_ALIGNMENT_r} -DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" -(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.xr - -LD_FLAG=u -DATA_ALIGNMENT=${DATA_ALIGNMENT_u} -CONSTRUCTING=" " -(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.xu - -LD_FLAG= -DATA_ALIGNMENT=${DATA_ALIGNMENT_} -RELOCATING=" " -(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.x - -LD_FLAG=n -DATA_ALIGNMENT=${DATA_ALIGNMENT_n} -TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}} -(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.xn - -LD_FLAG=N -DATA_ALIGNMENT=${DATA_ALIGNMENT_N} -(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.xbn - -if test -n "$GENERATE_SHLIB_SCRIPT"; then - LD_FLAG=shared - DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} - CREATE_SHLIB=" " - # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. - (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \ - ldscripts/${EMULATION_NAME}.xs -fi - -test "$DEFAULT_EMULATION" = "$EMULATION_NAME" && COMPILE_IN=true - -# Generate e${EMULATION_NAME}.c. -. ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em diff --git a/contrib/binutils/ld/h8-doc.texi b/contrib/binutils/ld/h8-doc.texi deleted file mode 100644 index f3c62a1cc0b4..000000000000 --- a/contrib/binutils/ld/h8-doc.texi +++ /dev/null @@ -1,14 +0,0 @@ -@c ------------------------------ CONFIGURATION VARS: -@c 1. Inclusiveness of this manual -@clear GENERIC - -@c 2. Specific target machines -@set H8300 -@set Hitachi -@clear I960 - -@c 3. Properties of this configuration -@set SingleFormat -@clear UsesEnvVars -@c ------------------------------ end CONFIGURATION VARS - diff --git a/contrib/binutils/ld/ld.1 b/contrib/binutils/ld/ld.1 deleted file mode 100644 index 79c9f102c042..000000000000 --- a/contrib/binutils/ld/ld.1 +++ /dev/null @@ -1,1083 +0,0 @@ -.\" Copyright (c) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH ld 1 "17 August 1992" "cygnus support" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -ld \- the GNU linker - -.SH SYNOPSIS -.hy 0 -.na -.TP -.B ld -.RB "[\|" \-o " -.I output\c -\&\|] \c -.I objfile\c -\&.\|.\|. -.br -.RB "[\|" \-A\c -.I architecture\c -\&\|] -.RB "[\|" "\-b\ "\c -.I input-format\c -\&\|] -.RB "[\|" \-Bstatic "\|]" -.RB "[\|" \-Bdynamic "\|]" -.RB "[\|" \-Bsymbolic "\|]" -.RB "[\|" "\-c\ "\c -.I commandfile\c -\&\|] -.RB "[\|" \-\-cref "\|]" -.RB "[\|" \-d | \-dc | \-dp\c -\|] -.br -.RB "[\|" "\-defsym\ "\c -.I symbol\c -\& = \c -.I expression\c -\&\|] -.RB "[\|" "\-e\ "\c -.I entry\c -\&\|] -.RB "[\|" \-embedded\-relocs "\|]" -.RB "[\|" \-E "\|]" -.RB "[\|" \-export\-dynamic "\|]" -.RB "[\|" "\-f\ "\c -.I name\c -\&\|] -.RB "[\|" "\-\-auxiliary\ "\c -.I name\c -\&\|] -.RB "[\|" "\-F\ "\c -.I name\c -\&\|] -.RB "[\|" "\-\-filter\ "\c -.I name\c -\&\|] -.RB "[\|" "\-format\ "\c -.I input-format\c -\&\|] -.RB "[\|" \-g "\|]" -.RB "[\|" \-G -.I size\c -\&\|] -.RB "[\|" "\-h\ "\c -.I name\c -\&\|] -.RB "[\|" "\-soname\ "\c -.I name\c -\&\|] -.RB "[\|" \-\-help "\|]" -.RB "[\|" \-i "\|]" -.RB "[\|" \-l\c -.I ar\c -\&\|] -.RB "[\|" \-L\c -.I searchdir\c -\&\|] -.RB "[\|" \-M "\|]" -.RB "[\|" \-Map -.I mapfile\c -\&\|] -.RB "[\|" \-m -.I emulation\c -\&\|] -.RB "[\|" \-n | \-N "\|]" -.RB "[\|" \-noinhibit-exec "\|]" -.RB "[\|" \-no\-keep\-memory "\|]" -.RB "[\|" \-no\-warn\-mismatch "\|]" -.RB "[\|" "\-oformat\ "\c -.I output-format\c -\&\|] -.RB "[\|" "\-R\ "\c -.I filename\c -\&\|] -.RB "[\|" \-relax "\|]" -.RB "[\|" \-r | \-Ur "\|]" -.RB "[\|" "\-rpath\ "\c -.I directory\c -\&\|] -.RB "[\|" "\-rpath\-link\ "\c -.I directory\c -\&\|] -.RB "[\|" \-S "\|]" -.RB "[\|" \-s "\|]" -.RB "[\|" \-shared "\|]" -.RB "[\|" \-sort\-common "\|]" -.RB "[\|" "\-split\-by\-reloc\ "\c -.I count\c -\&\|] -.RB "[\|" \-split\-by\-file "\|]" -.RB "[\|" "\-T\ "\c -.I commandfile\c -\&\|] -.RB "[\|" "\-Ttext\ "\c -.I textorg\c -\&\|] -.RB "[\|" "\-Tdata\ "\c -.I dataorg\c -\&\|] -.RB "[\|" "\-Tbss\ "\c -.I bssorg\c -\&\|] -.RB "[\|" \-t "\|]" -.RB "[\|" "\-u\ "\c -.I sym\c -\&] -.RB "[\|" \-V "\|]" -.RB "[\|" \-v "\|]" -.RB "[\|" \-\-verbose "\|]" -.RB "[\|" \-\-version "\|]" -.RB "[\|" \-warn\-common "\|]" -.RB "[\|" \-warn\-constructors "\|]" -.RB "[\|" \-warn\-multiple\-gp "\|]" -.RB "[\|" \-warn\-once "\|]" -.RB "[\|" \-warn\-section\-align "\|]" -.RB "[\|" \-\-whole\-archive "\|]" -.RB "[\|" \-\-no\-whole\-archive "\|]" -.RB "[\|" "\-\-wrap\ "\c -.I symbol\c -\&\|] -.RB "[\|" \-X "\|]" -.RB "[\|" \-x "\|]" -.ad b -.hy 1 -.SH DESCRIPTION -\c -.B ld\c -\& combines a number of object and archive files, relocates -their data and ties up symbol references. Often the last step in -building a new compiled program to run is a call to \c -.B ld\c -\&. - -\c -.B ld\c -\& accepts Linker Command Language files -to provide explicit and total control over the linking process. -This man page does not describe the command language; see the `\|\c -.B ld\c -\|' entry in `\|\c -.B info\c -\|', or the manual -.I -ld: the GNU linker -\&, for full details on the command language and on other aspects of -the GNU linker. - -This version of \c -.B ld\c -\& uses the general purpose BFD libraries -to operate on object files. This allows \c -.B ld\c -\& to read, combine, and -write object files in many different formats\(em\&for example, COFF or -\c -.B a.out\c -\&. Different formats may be linked together to produce any -available kind of object file. You can use `\|\c -.B objdump \-i\c -\|' to get a list of formats supported on various architectures; see -.BR objdump ( 1 ). - -Aside from its flexibility, the GNU linker is more helpful than other -linkers in providing diagnostic information. Many linkers abandon -execution immediately upon encountering an error; whenever possible, -\c -.B ld\c -\& continues executing, allowing you to identify other errors -(or, in some cases, to get an output file in spite of the error). - -The GNU linker \c -.B ld\c -\& is meant to cover a broad range of situations, -and to be as compatible as possible with other linkers. As a result, -you have many choices to control its behavior through the command line, -and through environment variables. - -.SH OPTIONS -The plethora of command-line options may seem intimidating, but in -actual practice few of them are used in any particular context. -For instance, a frequent use of \c -.B ld\c -\& is to link standard Unix -object files on a standard, supported Unix system. On such a system, to -link a file \c -.B hello.o\c -\&: -.sp -.br -$\ ld\ \-o\ output\ /lib/crt0.o\ hello.o\ \-lc -.br -.sp -This tells \c -.B ld\c -\& to produce a file called \c -.B output\c -\& as the -result of linking the file \c -.B /lib/crt0.o\c -\& with \c -.B hello.o\c -\& and -the library \c -.B libc.a\c -\& which will come from the standard search -directories. - -The command-line options to \c -.B ld\c -\& may be specified in any order, and -may be repeated at will. For the most part, repeating an option with a -different argument will either have no further effect, or override prior -occurrences (those further to the left on the command line) of an -option. - -The exceptions\(em\&which may meaningfully be used more than once\(em\&are -\c -.B \-A\c -\&, \c -.B \-b\c -\& (or its synonym \c -.B \-format\c -\&), \c -.B \-defsym\c -\&, -\c -.B \-L\c -\&, \c -.B \-l\c -\&, \c -.B \-R\c -\&, and \c -.B \-u\c -\&. - -The list of object files to be linked together, shown as \c -.I objfile\c -\&, -may follow, precede, or be mixed in with command-line options; save that -an \c -.I objfile\c -\& argument may not be placed between an option flag and -its argument. - -Usually the linker is invoked with at least one object file, but other -forms of binary input files can also be specified with \c -.B \-l\c -\&, -\c -.B \-R\c -\&, and the script command language. If \c -.I no\c -\& binary input -files at all are specified, the linker does not produce any output, and -issues the message `\|\c -.B No input files\c -\|'. - -Option arguments must either follow the option letter without intervening -whitespace, or be given as separate arguments immediately following the -option that requires them. - -.TP -.BI "-A" "architecture" -In the current release of \c -.B ld\c -\&, this option is useful only for the -Intel 960 family of architectures. In that \c -.B ld\c -\& configuration, the -\c -.I architecture\c -\& argument is one of the two-letter names identifying -members of the 960 family; the option specifies the desired output -target, and warns of any incompatible instructions in the input files. -It also modifies the linker's search strategy for archive libraries, to -support the use of libraries specific to each particular -architecture, by including in the search loop names suffixed with the -string identifying the architecture. - -For example, if your \c -.B ld\c -\& command line included `\|\c -.B \-ACA\c -\|' as -well as `\|\c -.B \-ltry\c -\|', the linker would look (in its built-in search -paths, and in any paths you specify with \c -.B \-L\c -\&) for a library with -the names -.sp -.br -try -.br -libtry.a -.br -tryca -.br -libtryca.a -.br -.sp - -The first two possibilities would be considered in any event; the last -two are due to the use of `\|\c -.B \-ACA\c -\|'. - -Future releases of \c -.B ld\c -\& may support similar functionality for -other architecture families. - -You can meaningfully use \c -.B \-A\c -\& more than once on a command line, if -an architecture family allows combination of target architectures; each -use will add another pair of name variants to search for when \c -.B \-l -specifies a library. - -.TP -.BI "\-b " "input-format" -Specify the binary format for input object files that follow this option -on the command line. You don't usually need to specify this, as -\c -.B ld\c -\& is configured to expect as a default input format the most -usual format on each machine. \c -.I input-format\c -\& is a text string, the -name of a particular format supported by the BFD libraries. -\c -.B \-format \c -.I input-format\c -\&\c -\& has the same effect, as does the script command -.BR TARGET . - -You may want to use this option if you are linking files with an unusual -binary format. You can also use \c -.B \-b\c -\& to switch formats explicitly (when -linking object files of different formats), by including -\c -.B \-b \c -.I input-format\c -\&\c -\& before each group of object files in a -particular format. - -The default format is taken from the environment variable -.B GNUTARGET\c -\&. You can also define the input -format from a script, using the command \c -.B TARGET\c -\&. - -.TP -.B \-Bstatic -Do not link against shared libraries. This is only meaningful on -platforms for which shared libraries are supported. - -.TP -.B \-Bdynamic -Link against dynamic libraries. This is only meaningful on platforms -for which shared libraries are supported. This option is normally the -default on such platforms. - -.TP -.B \-Bsymbolic -When creating a shared library, bind references to global symbols to -the definition within the shared library, if any. Normally, it is -possible for a program linked against a shared library to override the -definition within the shared library. This option is only meaningful -on ELF platforms which support shared libraries. - -.TP -.BI "\-c " "commandfile" -Directs \c -.B ld\c -\& to read link commands from the file -\c -.I commandfile\c -\&. These commands will completely override \c -.B ld\c -\&'s -default link format (rather than adding to it); \c -.I commandfile\c -\& must -specify everything necessary to describe the target format. - - -You may also include a script of link commands directly in the command -line by bracketing it between `\|\c -.B {\c -\|' and `\|\c -.B }\c -\|' characters. - -.TP -.B \-\-cref -Output a cross reference table. If a linker map file is being -generated, the cross reference table is printed to the map file. -Otherwise, it is printed on the standard output. - -.TP -.B \-d -.TP -.B \-dc -.TP -.B \-dp -These three options are equivalent; multiple forms are supported for -compatibility with other linkers. Use any of them to make \c -.B ld -assign space to common symbols even if a relocatable output file is -specified (\c -.B \-r\c -\&). The script command -\c -.B FORCE_COMMON_ALLOCATION\c -\& has the same effect. - -.TP -.BI "-defsym " "symbol" "\fR = \fP" expression -Create a global symbol in the output file, containing the absolute -address given by \c -.I expression\c -\&. You may use this option as many -times as necessary to define multiple symbols in the command line. A -limited form of arithmetic is supported for the \c -.I expression\c -\& in this -context: you may give a hexadecimal constant or the name of an existing -symbol, or use \c -.B +\c -\& and \c -.B \-\c -\& to add or subtract hexadecimal -constants or symbols. If you need more elaborate expressions, consider -using the linker command language from a script. - -.TP -.BI "-e " "entry"\c -\& -Use \c -.I entry\c -\& as the explicit symbol for beginning execution of your -program, rather than the default entry point. for a -discussion of defaults and other ways of specifying the -entry point. - -.TP -.B \-embedded\-relocs -This option is only meaningful when linking MIPS embedded PIC code, -generated by the -.B \-membedded\-pic -option to the GNU compiler and assembler. It causes the linker to -create a table which may be used at runtime to relocate any data which -was statically initialized to pointer values. See the code in -testsuite/ld-empic for details. - -.TP -.B \-E -.TP -.B \-export\-dynamic -When creating an ELF file, add all symbols to the dynamic symbol table. -Normally, the dynamic symbol table contains only symbols which are used -by a dynamic object. This option is needed for some uses of -.I dlopen. - -.TP -.BI "-f " "name" -.TP -.BI "--auxiliary " "name" -When creating an ELF shared object, set the internal DT_AUXILIARY field -to the specified name. This tells the dynamic linker that the symbol -table of the shared object should be used as an auxiliary filter on the -symbol table of the shared object -.I name. - -.TP -.BI "-F " "name" -.TP -.BI "--filter " "name" -When creating an ELF shared object, set the internal DT_FILTER field to -the specified name. This tells the dynamic linker that the symbol table -of the shared object should be used as a filter on the symbol table of -the shared object -.I name. - -.TP -.BI "\-format " "input\-format" -Synonym for \c -.B \-b\c -\& \c -.I input\-format\c -\&. - -.TP -.B \-g -Accepted, but ignored; provided for compatibility with other tools. - -.TP -.BI "\-G " "size"\c -Set the maximum size of objects to be optimized using the GP register -to -.I size -under MIPS ECOFF. Ignored for other object file formats. - -.TP -.BI "-h " "name" -.TP -.BI "-soname " "name" -When creating an ELF shared object, set the internal DT_SONAME field to -the specified name. When an executable is linked with a shared object -which has a DT_SONAME field, then when the executable is run the dynamic -linker will attempt to load the shared object specified by the DT_SONAME -field rather than the using the file name given to the linker. - -.TP -.B \-\-help -Print a summary of the command-line options on the standard output and exit. -This option and -.B \-\-version -begin with two dashes instead of one -for compatibility with other GNU programs. The other options start with -only one dash for compatibility with other linkers. - -.TP -.B \-i -Perform an incremental link (same as option \c -.B \-r\c -\&). - -.TP -.BI "\-l" "ar"\c -\& -Add an archive file \c -.I ar\c -\& to the list of files to link. This -option may be used any number of times. \c -.B ld\c -\& will search its -path-list for occurrences of \c -.B lib\c -.I ar\c -\&.a\c -\& for every \c -.I ar -specified. - -.TP -.BI "\-L" "searchdir" -This command adds path \c -.I searchdir\c -\& to the list of paths that -\c -.B ld\c -\& will search for archive libraries. You may use this option -any number of times. - -The default set of paths searched (without being specified with -\c -.B \-L\c -\&) depends on what emulation mode \c -.B ld\c -\& is using, and in -some cases also on how it was configured. The -paths can also be specified in a link script with the \c -.B SEARCH_DIR -command. - -.TP -.B \-M -Print (to the standard output file) a link map\(em\&diagnostic information -about where symbols are mapped by \c -.B ld\c -\&, and information on global -common storage allocation. - -.TP -.BI "\-Map " "mapfile"\c -Print to the file -.I mapfile -a link map\(em\&diagnostic information -about where symbols are mapped by \c -.B ld\c -\&, and information on global -common storage allocation. - -.TP -.BI "\-m " "emulation"\c -Emulate the -.I emulation -linker. You can list the available emulations with the -.I \-\-verbose -or -.I \-V -options. This option overrides the compiled-in default, which is the -system for which you configured -.BR ld . - -.TP -.B \-N -specifies readable and writable \c -.B text\c -\& and \c -.B data\c -\& sections. If -the output format supports Unix style magic numbers, the output is -marked as \c -.B OMAGIC\c -\&. - -When you use the `\|\c -.B \-N\c -\&\|' option, the linker does not page-align the -data segment. - -.TP -.B \-n -sets the text segment to be read only, and \c -.B NMAGIC\c -\& is written -if possible. - -.TP -.B \-noinhibit\-exec -Normally, the linker will not produce an output file if it encounters -errors during the link process. With this flag, you can specify that -you wish the output file retained even after non-fatal errors. - -.TP -.B \-no\-keep\-memory -The linker normally optimizes for speed over memory usage by caching -the symbol tables of input files in memory. This option tells the -linker to instead optimize for memory usage, by rereading the symbol -tables as necessary. This may be required if the linker runs out of -memory space while linking a large executable. - -.TP -.B \-no\-warn\-mismatch -Normally the linker will give an error if you try to link together -input files that are mismatched for some reason, perhaps because they -have been compiled for different processors or for different -endiannesses. This option tells the linker that it should silently -permit such possible errors. This option should only be used with -care, in cases when you have taken some special action that ensures -that the linker errors are inappropriate. - -.TP -.BI "\-o " "output" -.I output\c -\& is a name for the program produced by \c -.B ld\c -\&; if this -option is not specified, the name `\|\c -.B a.out\c -\|' is used by default. The -script command \c -.B OUTPUT\c -\& can also specify the output file name. - -.TP -.BI "\-oformat " "output\-format" -Specify the binary format for the output object file. -You don't usually need to specify this, as -\c -.B ld\c -\& is configured to produce as a default output format the most -usual format on each machine. \c -.I output-format\c -\& is a text string, the -name of a particular format supported by the BFD libraries. -The script command -.B OUTPUT_FORMAT -can also specify the output format, but this option overrides it. - -.TP -.BI "\-R " "filename" -Read symbol names and their addresses from \c -.I filename\c -\&, but do not -relocate it or include it in the output. This allows your output file -to refer symbolically to absolute locations of memory defined in other -programs. - -.TP -.B \-relax -An option with machine dependent effects. Currently this option is only -supported on the H8/300. - -On some platforms, use this option to perform global optimizations that -become possible when the linker resolves addressing in your program, such -as relaxing address modes and synthesizing new instructions in the -output object file. - -On platforms where this is not supported, `\|\c -.B \-relax\c -\&\|' is accepted, but has no effect. - -.TP -.B \-r -Generates relocatable output\(em\&i.e., generate an output file that can in -turn serve as input to \c -.B ld\c -\&. This is often called \c -.I partial -linking\c -\&. As a side effect, in environments that support standard Unix -magic numbers, this option also sets the output file's magic number to -\c -.B OMAGIC\c -\&. -If this option is not specified, an absolute file is produced. When -linking C++ programs, this option \c -.I will not\c -\& resolve references to -constructors; \c -.B \-Ur\c -\& is an alternative. - -This option does the same as \c -.B \-i\c -\&. - -.TP -.B \-rpath\ \fIdirectory -Add a directory to the runtime library search path. This is used when -linking an ELF executable with shared objects. All -.B \-rpath -arguments are concatenated and passed to the runtime linker, which uses -them to locate shared objects at runtime. The -.B \-rpath -option is also used when locating shared objects which are needed by -shared objects explicitly included in the link; see the description of -the -.B \-rpath\-link -option. If -.B \-rpath -is not used when linking an ELF executable, the contents of the -environment variable -.B LD_RUN_PATH -will be used if it is defined. - -The -.B \-rpath -option may also be used on SunOS. By default, on SunOS, the linker -will form a runtime search patch out of all the -.B \-L -options it is given. If a -.B \-rpath -option is used, the runtime search path will be formed exclusively -using the -.B \-rpath -options, ignoring -the -.B \-L -options. This can be useful when using gcc, which adds many -.B \-L -options which may be on NFS mounted filesystems. - -.TP -.B \-rpath\-link\ \fIdirectory -When using ELF or SunOS, one shared library may require another. This -happens when an -.B ld\ \-shared -link includes a shared library as one of the input files. - -When the linker encounters such a dependency when doing a non-shared, -non-relocateable link, it will automatically try to locate the required -shared library and include it in the link, if it is not included -explicitly. In such a case, the -.B \-rpath\-link -option specifies the first set of directories to search. The -.B \-rpath\-link -option may specify a sequence of directory names either by specifying -a list of names separated by colons, or by appearing multiple times. - -If the required shared library is not found, the linker will issue a -warning and continue with the link. - -.TP -.B \-S -Omits debugger symbol information (but not all symbols) from the output file. - -.TP -.B \-s -Omits all symbol information from the output file. - -.TP -.B \-shared -Create a shared library. This is currently only supported on ELF and -SunOS platforms (on SunOS it is not required, as the linker will -automatically create a shared library when there are undefined symbols -and the -.B \-e -option is not used). - -.TP -.B \-sort\-common -Normally, when -.B ld -places the global common symbols in the appropriate output sections, -it sorts them by size. First come all the one byte symbols, then all -the two bytes, then all the four bytes, and then everything else. -This is to prevent gaps between symbols due to -alignment constraints. This option disables that sorting. - -.TP -.B \-split\-by\-reloc\ \fIcount -Trys to creates extra sections in the output file so that no single -output section in the file contains more than -.I count -relocations. -This is useful when generating huge relocatable for downloading into -certain real time kernels with the COFF object file format; since COFF -cannot represent more than 65535 relocations in a single section. -Note that this will fail to work with object file formats which do not -support arbitrary sections. The linker will not split up individual -input sections for redistribution, so if a single input section -contains more than -.I count -relocations one output section will contain that many relocations. - -.TP -.B \-split\-by\-file -Similar to -.B \-split\-by\-reloc -but creates a new output section for each input file. - -.TP -.BI "\-Tbss " "org"\c -.TP -.BI "\-Tdata " "org"\c -.TP -.BI "\-Ttext " "org"\c -Use \c -.I org\c -\& as the starting address for\(em\&respectively\(em\&the -\c -.B bss\c -\&, \c -.B data\c -\&, or the \c -.B text\c -\& segment of the output file. -\c -.I textorg\c -\& must be a hexadecimal integer. - -.TP -.BI "\-T " "commandfile" -Equivalent to \c -.B \-c \c -.I commandfile\c -\&\c -\&; supported for compatibility with -other tools. - -.TP -.B \-t -Prints names of input files as \c -.B ld\c -\& processes them. - -.TP -.BI "\-u " "sym" -Forces \c -.I sym\c -\& to be entered in the output file as an undefined symbol. -This may, for example, trigger linking of additional modules from -standard libraries. \c -.B \-u\c -\& may be repeated with different option -arguments to enter additional undefined symbols. - -.TP -.B \-Ur -For anything other than C++ programs, this option is equivalent to -\c -.B \-r\c -\&: it generates relocatable output\(em\&i.e., an output file that can in -turn serve as input to \c -.B ld\c -\&. When linking C++ programs, \c -.B \-Ur -.I will\c -\& resolve references to constructors, unlike \c -.B \-r\c -\&. - -.TP -.B \-\-verbose -Display the version number for \c -.B ld -and list the supported emulations. -Display which input files can and can not be opened. - -.TP -.B \-v, \-V -Display the version number for \c -.B ld\c -\&. -The -.B \-V -option also lists the supported emulations. - -.TP -.B \-\-version -Display the version number for \c -.B ld -and exit. - -.TP -.B \-warn\-common -Warn when a common symbol is combined with another common symbol or with -a symbol definition. Unix linkers allow this somewhat sloppy practice, -but linkers on some other operating systems do not. This option allows -you to find potential problems from combining global symbols. - -.TP -.B \-warn\-constructors -Warn if any global constructors are used. This is only useful for a -few object file formats. For formats like COFF or ELF, the linker can -not detect the use of global constructors. - -.TP -.B \-warn\-multiple\-gp -Warn if the output file requires multiple global-pointer values. This -option is only meaningful for certain processors, such as the Alpha. - -.TP -.B \-warn\-once -Only warn once for each undefined symbol, rather than once per module -which refers to it. - -.TP -.B \-warn\-section\-align -Warn if the address of an output section is changed because of -alignment. Typically, the alignment will be set by an input section. -The address will only be changed if it not explicitly specified; that -is, if the SECTIONS command does not specify a start address for the -section. - -.TP -.B \-\-whole\-archive -For each archive mentioned on the command line after the -.B \-\-whole\-archive -option, include every object file in the archive in the link, rather -than searching the archive for the required object files. This is -normally used to turn an archive file into a shared library, forcing -every object to be included in the resulting shared library. - -.TP -.B \-\-no\-whole\-archive -Turn off the effect of the -.B \-\-whole\-archive -option for archives which appear later on the command line. - -.TP -.BI "--wrap " "symbol" -Use a wrapper function for -.I symbol. -Any undefined reference to -.I symbol -will be resolved to -.BI "__wrap_" "symbol". -Any undefined reference to -.BI "__real_" "symbol" -will be resolved to -.I symbol. - -.TP -.B \-X -Delete all temporary local symbols. For most targets, this is all local -symbols whose names begin with `\|\c -.B L\c -\|'. - -.TP -.B \-x -Delete all local symbols. - -.PP - -.SH ENVIRONMENT -\c -You can change the behavior of -.B ld\c -\& with the environment variable \c -.B GNUTARGET\c -\&. - -\c -.B GNUTARGET\c -\& determines the input-file object format if you don't -use \c -.B \-b\c -\& (or its synonym \c -.B \-format\c -\&). Its value should be one -of the BFD names for an input format. If there is no -\c -.B GNUTARGET\c -\& in the environment, \c -.B ld\c -\& uses the natural format -of the host. If \c -.B GNUTARGET\c -\& is set to \c -.B default\c -\& then BFD attempts to discover the -input format by examining binary input files; this method often -succeeds, but there are potential ambiguities, since there is no method -of ensuring that the magic number used to flag object-file formats is -unique. However, the configuration procedure for BFD on each system -places the conventional format for that system first in the search-list, -so ambiguities are resolved in favor of convention. - -.PP - -.SH "SEE ALSO" - -.BR objdump ( 1 ) -.br -.br -.RB "`\|" ld "\|' and `\|" binutils "\|'" -entries in -.B info\c -.br -.I -ld: the GNU linker\c -, Steve Chamberlain and Roland Pesch; -.I -The GNU Binary Utilities\c -, Roland H. Pesch. - -.SH COPYING -Copyright (c) 1991, 1992 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. -.PP -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. diff --git a/contrib/binutils/ld/ld.h b/contrib/binutils/ld/ld.h deleted file mode 100644 index e0e2a4d26f53..000000000000 --- a/contrib/binutils/ld/ld.h +++ /dev/null @@ -1,174 +0,0 @@ -/* ld.h -- general linker header file - Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LD_H -#define LD_H - -/* Look in this environment name for the linker to pretend to be */ -#define EMULATION_ENVIRON "LDEMULATION" -/* If in there look for the strings: */ - -/* Look in this variable for a target format */ -#define TARGET_ENVIRON "GNUTARGET" - -/* Input sections which are put in a section of this name are actually - discarded. */ -#define DISCARD_SECTION_NAME "/DISCARD/" - -/* Extra information we hold on sections */ -typedef struct user_section_struct -{ - /* Pointer to the section where this data will go */ - struct lang_input_statement_struct *file; -} section_userdata_type; - - -#define get_userdata(x) ((x)->userdata) - -#define BYTE_SIZE (1) -#define SHORT_SIZE (2) -#define LONG_SIZE (4) -#define QUAD_SIZE (8) - -/* ALIGN macro changed to ALIGN_N to avoid */ -/* conflict in /usr/include/machine/machparam.h */ -/* WARNING: If THIS is a 64 bit address and BOUNDARY is a 32 bit int, - you must coerce boundary to the same type as THIS. - ??? Is there a portable way to avoid this. */ -#define ALIGN_N(this, boundary) \ - ((( (this) + ((boundary) -1)) & (~((boundary)-1)))) - -typedef struct -{ - /* 1 => assign space to common symbols even if `relocatable_output'. */ - boolean force_common_definition; - boolean relax; - - /* Name of runtime interpreter to invoke. */ - char *interpreter; - - /* Name to give runtime libary from the -soname argument. */ - char *soname; - - /* Runtime library search path from the -rpath argument. */ - char *rpath; - - /* Link time runtime library search path from the -rpath-link - argument. */ - char *rpath_link; - - /* Big or little endian as set on command line. */ - enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian; - - /* If true, export all symbols in the dynamic symbol table of an ELF - executable. */ - boolean export_dynamic; - - /* If true, build MIPS embedded PIC relocation tables in the output - file. */ - boolean embedded_relocs; - - /* If true, force generation of a file with a .exe file. */ - boolean force_exe_suffix; - - /* If true, generate a cross reference report. */ - boolean cref; - - /* If true (which is the default), warn about mismatched input - files. */ - boolean warn_mismatch; - - /* Name of shared object whose symbol table should be filtered with - this shared object. From the --filter option. */ - char *filter_shlib; - - /* Name of shared object for whose symbol table this shared object - is an auxiliary filter. From the --auxiliary option. */ - char **auxiliary_filters; -} args_type; - -extern args_type command_line; - -typedef int token_code_type; - -typedef struct -{ - bfd_size_type specified_data_size; - boolean magic_demand_paged; - boolean make_executable; - - /* If true, doing a dynamic link. */ - boolean dynamic_link; - - /* If true, build constructors. */ - boolean build_constructors; - - /* If true, warn about any constructors. */ - boolean warn_constructors; - - /* If true, warn about merging common symbols with others. */ - boolean warn_common; - - /* If true, only warn once about a particular undefined symbol. */ - boolean warn_once; - - /* If true, warn if multiple global-pointers are needed (Alpha - only). */ - boolean warn_multiple_gp; - - /* If true, warn if the starting address of an output section - changes due to the alignment of an input section. */ - boolean warn_section_align; - - boolean sort_common; - - boolean text_read_only; - - char *map_filename; - FILE *map_file; - - boolean stats; - - int split_by_reloc; - boolean split_by_file; -} ld_config_type; - -extern ld_config_type config; - -typedef enum -{ - lang_first_phase_enum, - lang_allocating_phase_enum, - lang_final_phase_enum -} lang_phase_type; - -extern boolean had_script; -extern boolean force_make_executable; - -/* Non-zero if we are processing a --defsym from the command line. */ -extern int parsing_defsym; - -extern int yyparse PARAMS ((void)); - -extern void add_cref PARAMS ((const char *, bfd *, asection *, bfd_vma)); -extern void output_cref PARAMS ((FILE *)); -extern void check_nocrossrefs PARAMS ((void)); - -#endif diff --git a/contrib/binutils/ld/ld.texinfo b/contrib/binutils/ld/ld.texinfo deleted file mode 100644 index 05f3984ef86a..000000000000 --- a/contrib/binutils/ld/ld.texinfo +++ /dev/null @@ -1,3700 +0,0 @@ -\input texinfo -@setfilename ld.info -@syncodeindex ky cp -@include configdoc.texi -@c (configdoc.texi is generated by the Makefile) - -@c @smallbook - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Ld: (ld). The GNU linker. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@ifinfo -This file documents the @sc{gnu} linker LD. - -Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. - -@ignore -Permission is granted to process this file through Tex and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -@end ifinfo -@iftex -@finalout -@setchapternewpage odd -@settitle Using LD, the GNU linker -@titlepage -@title Using ld -@subtitle The GNU linker -@sp 1 -@subtitle @code{ld} version 2 -@subtitle January 1994 -@author Steve Chamberlain -@author Cygnus Support -@page - -@tex -{\parskip=0pt -\hfill Cygnus Support\par -\hfill steve\@cygnus.com, doc\@cygnus.com\par -\hfill {\it Using LD, the GNU linker}\par -\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par -} -\global\parindent=0pt % Steve likes it this way. -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end titlepage -@end iftex -@c FIXME: Talk about importance of *order* of args, cmds to linker! - -@ifinfo -@node Top -@top Using ld -This file documents the @sc{gnu} linker ld. - -@menu -* Overview:: Overview -* Invocation:: Invocation -* Commands:: Command Language -@ifset GENERIC -* Machine Dependent:: Machine Dependent Features -@end ifset -@ifclear GENERIC -@ifset H8300 -* H8/300:: ld and the H8/300 -@end ifset -@ifset Hitachi -* Hitachi:: ld and other Hitachi micros -@end ifset -@ifset I960 -* i960:: ld and the Intel 960 family -@end ifset -@end ifclear -@ifclear SingleFormat -* BFD:: BFD -@end ifclear -@c Following blank line required for remaining bug in makeinfo conds/menus - -* Reporting Bugs:: Reporting Bugs -* MRI:: MRI Compatible Script Files -* Index:: Index -@end menu -@end ifinfo - -@node Overview -@chapter Overview - -@cindex @sc{gnu} linker -@cindex what is this? -@code{ld} combines a number of object and archive files, relocates -their data and ties up symbol references. Usually the last step in -compiling a program is to run @code{ld}. - -@code{ld} accepts Linker Command Language files written in -a superset of AT&T's Link Editor Command Language syntax, -to provide explicit and total control over the linking process. - -@ifclear SingleFormat -This version of @code{ld} uses the general purpose BFD libraries -to operate on object files. This allows @code{ld} to read, combine, and -write object files in many different formats---for example, COFF or -@code{a.out}. Different formats may be linked together to produce any -available kind of object file. @xref{BFD}, for more information. -@end ifclear - -Aside from its flexibility, the @sc{gnu} linker is more helpful than other -linkers in providing diagnostic information. Many linkers abandon -execution immediately upon encountering an error; whenever possible, -@code{ld} continues executing, allowing you to identify other errors -(or, in some cases, to get an output file in spite of the error). - -@node Invocation -@chapter Invocation - -The @sc{gnu} linker @code{ld} is meant to cover a broad range of situations, -and to be as compatible as possible with other linkers. As a result, -you have many choices to control its behavior. - -@ifset UsesEnvVars -@menu -* Options:: Command Line Options -* Environment:: Environment Variables -@end menu - -@node Options -@section Command Line Options -@end ifset - -@cindex command line -@cindex options -The linker supports a plethora of command-line options, but in actual -practice few of them are used in any particular context. -@cindex standard Unix system -For instance, a frequent use of @code{ld} is to link standard Unix -object files on a standard, supported Unix system. On such a system, to -link a file @code{hello.o}: - -@smallexample -ld -o @var{output} /lib/crt0.o hello.o -lc -@end smallexample - -This tells @code{ld} to produce a file called @var{output} as the -result of linking the file @code{/lib/crt0.o} with @code{hello.o} and -the library @code{libc.a}, which will come from the standard search -directories. (See the discussion of the @samp{-l} option below.) - -The command-line options to @code{ld} may be specified in any order, and -may be repeated at will. Repeating most options with a different -argument will either have no further effect, or override prior -occurrences (those further to the left on the command line) of that -option. Options which may be meaningfully specified more than once are -noted in the descriptions below. - -@cindex object files -Non-option arguments are objects files which are to be linked together. -They may follow, precede, or be mixed in with command-line options, -except that an object file argument may not be placed between an option -and its argument. - -Usually the linker is invoked with at least one object file, but you can -specify other forms of binary input files using @samp{-l}, @samp{-R}, -and the script command language. If @emph{no} binary input files at all -are specified, the linker does not produce any output, and issues the -message @samp{No input files}. - -If the linker can not recognize the format of an object file, it will -assume that it is a linker script. A script specified in this way -augments the main linker script used for the link (either the default -linker script or the one specified by using @samp{-T}). This feature -permits the linker to link against a file which appears to be an object -or an archive, but actually merely defines some symbol values, or uses -@code{INPUT} or @code{GROUP} to load other objects. Note that -specifying a script in this way should only be used to augment the main -linker script; if you want to use some command that logically can only -appear once, such as the @code{SECTIONS} or @code{MEMORY} command, you -must replace the default linker script using the @samp{-T} option. -@xref{Commands}. - -For options whose names are a single letter, -option arguments must either follow the option letter without intervening -whitespace, or be given as separate arguments immediately following the -option that requires them. - -For options whose names are multiple letters, either one dash or two can -precede the option name; for example, @samp{--oformat} and -@samp{--oformat} are equivalent. Arguments to multiple-letter options -must either be separated from the option name by an equals sign, or be -given as separate arguments immediately following the option that -requires them. For example, @samp{--oformat srec} and -@samp{--oformat=srec} are equivalent. Unique abbreviations of the names -of multiple-letter options are accepted. - -@table @code -@kindex -a@var{keyword} -@item -a@var{keyword} -This option is supported for HP/UX compatibility. The @var{keyword} -argument must be one of the strings @samp{archive}, @samp{shared}, or -@samp{default}. @samp{-aarchive} is functionally equivalent to -@samp{-Bstatic}, and the other two keywords are functionally equivalent -to @samp{-Bdynamic}. This option may be used any number of times. - -@ifset I960 -@cindex architectures -@kindex -A@var{arch} -@item -A@var{architecture} -@kindex --architecture=@var{arch} -@itemx --architecture=@var{architecture} -In the current release of @code{ld}, this option is useful only for the -Intel 960 family of architectures. In that @code{ld} configuration, the -@var{architecture} argument identifies the particular architecture in -the 960 family, enabling some safeguards and modifying the -archive-library search path. @xref{i960,,@code{ld} and the Intel 960 -family}, for details. - -Future releases of @code{ld} may support similar functionality for -other architecture families. -@end ifset - -@ifclear SingleFormat -@cindex binary input format -@kindex -b @var{format} -@kindex --format=@var{format} -@cindex input format -@cindex input format -@item -b @var{input-format} -@itemx --format=@var{input-format} -@code{ld} may be configured to support more than one kind of object -file. If your @code{ld} is configured this way, you can use the -@samp{-b} option to specify the binary format for input object files -that follow this option on the command line. Even when @code{ld} is -configured to support alternative object formats, you don't usually need -to specify this, as @code{ld} should be configured to expect as a -default input format the most usual format on each machine. -@var{input-format} is a text string, the name of a particular format -supported by the BFD libraries. (You can list the available binary -formats with @samp{objdump -i}.) -@xref{BFD}. - -You may want to use this option if you are linking files with an unusual -binary format. You can also use @samp{-b} to switch formats explicitly (when -linking object files of different formats), by including -@samp{-b @var{input-format}} before each group of object files in a -particular format. - -The default format is taken from the environment variable -@code{GNUTARGET}. -@ifset UsesEnvVars -@xref{Environment}. -@end ifset -You can also define the input -format from a script, using the command @code{TARGET}; see @ref{Option -Commands}. -@end ifclear - -@kindex -c @var{MRI-cmdfile} -@kindex --mri-script=@var{MRI-cmdfile} -@cindex compatibility, MRI -@item -c @var{MRI-commandfile} -@itemx --mri-script=@var{MRI-commandfile} -For compatibility with linkers produced by MRI, @code{ld} accepts script -files written in an alternate, restricted command language, described in -@ref{MRI,,MRI Compatible Script Files}. Introduce MRI script files with -the option @samp{-c}; use the @samp{-T} option to run linker -scripts written in the general-purpose @code{ld} scripting language. -If @var{MRI-cmdfile} does not exist, @code{ld} looks for it in the directories -specified by any @samp{-L} options. - -@cindex common allocation -@kindex -d -@kindex -dc -@kindex -dp -@item -d -@itemx -dc -@itemx -dp -These three options are equivalent; multiple forms are supported for -compatibility with other linkers. They -assign space to common symbols even if a relocatable output file is -specified (with @samp{-r}). The script command -@code{FORCE_COMMON_ALLOCATION} has the same effect. @xref{Option -Commands}. - -@cindex entry point, from command line -@kindex -e @var{entry} -@kindex --entry=@var{entry} -@item -e @var{entry} -@itemx --entry=@var{entry} -Use @var{entry} as the explicit symbol for beginning execution of your -program, rather than the default entry point. @xref{Entry Point}, for a -discussion of defaults and other ways of specifying the -entry point. - -@cindex dynamic symbol table -@kindex -E -@kindex --export-dynamic -@item -E -@itemx --export-dynamic -When creating a dynamically linked executable, add all symbols to the -dynamic symbol table. The dynamic symbol table is the set of symbols -which are visible from dynamic objects at run time. - -If you do not use this option, the dynamic symbol table will normally -contain only those symbols which are referenced by some dynamic object -mentioned in the link. - -If you use @code{dlopen} to load a dynamic object which needs to refer -back to the symbols defined by the program, rather than some other -dynamic object, then you will probably need to use this option when -linking the program itself. - -@kindex -f -@kindex --auxiliary -@item -f -@itemx --auxiliary @var{name} -When creating an ELF shared object, set the internal DT_AUXILIARY field -to the specified name. This tells the dynamic linker that the symbol -table of the shared object should be used as an auxiliary filter on the -symbol table of the shared object @var{name}. - -If you later link a program against this filter object, then, when you -run the program, the dynamic linker will see the DT_AUXILIARY field. If -the dynamic linker resolves any symbols from the filter object, it will -first check whether there is a definition in the shared object -@var{name}. If there is one, it will be used instead of the definition -in the filter object. The shared object @var{name} need not exist. -Thus the shared object @var{name} may be used to provide an alternative -implementation of certain functions, perhaps for debugging or for -machine specific performance. - -This option may be specified more than once. The DT_AUXILIARY entries -will be created in the order in which they appear on the command line. - -@kindex -F -@kindex --filter -@item -F @var{name} -@itemx --filter @var{name} -When creating an ELF shared object, set the internal DT_FILTER field to -the specified name. This tells the dynamic linker that the symbol table -of the shared object which is being created should be used as a filter -on the symbol table of the shared object @var{name}. - -If you later link a program against this filter object, then, when you -run the program, the dynamic linker will see the DT_FILTER field. The -dynamic linker will resolve symbols according to the symbol table of the -filter object as usual, but it will actually link to the definitions -found in the shared object @var{name}. Thus the filter object can be -used to select a subset of the symbols provided by the object -@var{name}. - -Some older linkers used the @code{-F} option throughout a compilation -toolchain for specifying object-file format for both input and output -object files. The @sc{gnu} linker uses other mechanisms for this -purpose: the @code{-b}, @code{--format}, @code{--oformat} options, the -@code{TARGET} command in linker scripts, and the @code{GNUTARGET} -environment variable. The @sc{gnu} linker will ignore the @code{-F} -option when not creating an ELF shared object. - -@kindex --force-exe-suffix -@item --force-exe-suffix -Make sure that an output file has a .exe suffix. - -If a successfully built fully linked output file does not have a -@code{.exe} or @code{.dll} suffix, this option forces the linker to copy -the output file to one of the same name with a @code{.exe} suffix. This -option is useful when using unmodified Unix makefiles on a Microsoft -Windows host, since some versions of Windows won't run an image unless -it ends in a @code{.exe} suffix. - -@kindex -g -@item -g -Ignored. Provided for compatibility with other tools. - -@kindex -G -@kindex --gpsize -@cindex object size -@item -G@var{value} -@itemx --gpsize=@var{value} -Set the maximum size of objects to be optimized using the GP register to -@var{size}. This is only meaningful for object file formats such as -MIPS ECOFF which supports putting large and small objects into different -sections. This is ignored for other object file formats. - -@cindex runtime library name -@kindex -h@var{name} -@kindex -soname=@var{name} -@item -h@var{name} -@itemx -soname=@var{name} -When creating an ELF shared object, set the internal DT_SONAME field to -the specified name. When an executable is linked with a shared object -which has a DT_SONAME field, then when the executable is run the dynamic -linker will attempt to load the shared object specified by the DT_SONAME -field rather than the using the file name given to the linker. - -@kindex -i -@cindex incremental link -@item -i -Perform an incremental link (same as option @samp{-r}). - -@cindex archive files, from cmd line -@kindex -l@var{archive} -@kindex --library=@var{archive} -@item -l@var{archive} -@itemx --library=@var{archive} -Add archive file @var{archive} to the list of files to link. This -option may be used any number of times. @code{ld} will search its -path-list for occurrences of @code{lib@var{archive}.a} for every -@var{archive} specified. - -On systems which support shared libraries, @code{ld} may also search for -libraries with extensions other than @code{.a}. Specifically, on ELF -and SunOS systems, @code{ld} will search a directory for a library with -an extension of @code{.so} before searching for one with an extension of -@code{.a}. By convention, a @code{.so} extension indicates a shared -library. - -The linker will search an archive only once, at the location where it is -specified on the command line. If the archive defines a symbol which -was undefined in some object which appeared before the archive on the -command line, the linker will include the appropriate file(s) from the -archive. However, an undefined symbol in an object appearing later on -the command line will not cause the linker to search the archive again. - -See the @code{-(} option for a way to force the linker to search -archives multiple times. - -You may list the same archive multiple times on the command line. - -@ifset GENERIC -This type of archive searching is standard for Unix linkers. However, -if you are using @code{ld} on AIX, note that it is different from the -behaviour of the AIX linker. -@end ifset - -@cindex search directory, from cmd line -@kindex -L@var{dir} -@kindex --library-path=@var{dir} -@item -L@var{searchdir} -@itemx --library-path=@var{searchdir} -Add path @var{searchdir} to the list of paths that @code{ld} will search -for archive libraries and @code{ld} control scripts. You may use this -option any number of times. The directories are searched in the order -in which they are specified on the command line. Directories specified -on the command line are searched before the default directories. All -@code{-L} options apply to all @code{-l} options, regardless of the -order in which the options appear. - -@ifset UsesEnvVars -The default set of paths searched (without being specified with -@samp{-L}) depends on which emulation mode @code{ld} is using, and in -some cases also on how it was configured. @xref{Environment}. -@end ifset - -The paths can also be specified in a link script with the -@code{SEARCH_DIR} command. Directories specified this way are searched -at the point in which the linker script appears in the command line. - -@cindex emulation -@kindex -m @var{emulation} -@item -m@var{emulation} -Emulate the @var{emulation} linker. You can list the available -emulations with the @samp{--verbose} or @samp{-V} options. - -If the @samp{-m} option is not used, the emulation is taken from the -@code{LDEMULATION} environment variable, if that is defined. - -Otherwise, the default emulation depends upon how the linker was -configured. - -@cindex link map -@kindex -M -@kindex --print-map -@item -M -@itemx --print-map -Print a link map to the standard output. A link map provides -information about the link, including the following: - -@itemize @bullet -@item -Where object files and symbols are mapped into memory. -@item -How common symbols are allocated. -@item -All archive members included in the link, with a mention of the symbol -which caused the archive member to be brought in. -@end itemize - -@kindex -n -@cindex read-only text -@cindex NMAGIC -@kindex --nmagic -@item -n -@itemx --nmagic -Set the text segment to be read only, and mark the output as -@code{NMAGIC} if possible. - -@kindex -N -@kindex --omagic -@cindex read/write from cmd line -@cindex OMAGIC -@item -N -@itemx --omagic -Set the text and data sections to be readable and writable. Also, do -not page-align the data segment. If the output format supports Unix -style magic numbers, mark the output as @code{OMAGIC}. - -@kindex -o @var{output} -@kindex --output=@var{output} -@cindex naming the output file -@item -o @var{output} -@itemx --output=@var{output} -Use @var{output} as the name for the program produced by @code{ld}; if this -option is not specified, the name @file{a.out} is used by default. The -script command @code{OUTPUT} can also specify the output file name. - -@cindex partial link -@cindex relocatable output -@kindex -r -@kindex --relocateable -@item -r -@itemx --relocateable -Generate relocatable output---i.e., generate an output file that can in -turn serve as input to @code{ld}. This is often called @dfn{partial -linking}. As a side effect, in environments that support standard Unix -magic numbers, this option also sets the output file's magic number to -@code{OMAGIC}. -@c ; see @code{-N}. -If this option is not specified, an absolute file is produced. When -linking C++ programs, this option @emph{will not} resolve references to -constructors; to do that, use @samp{-Ur}. - -This option does the same thing as @samp{-i}. - -@kindex -R @var{file} -@kindex --just-symbols=@var{file} -@cindex symbol-only input -@item -R @var{filename} -@itemx --just-symbols=@var{filename} -Read symbol names and their addresses from @var{filename}, but do not -relocate it or include it in the output. This allows your output file -to refer symbolically to absolute locations of memory defined in other -programs. You may use this option more than once. - -For compatibility with other ELF linkers, if the @code{-R} option is -followed by a directory name, rather than a file name, it is treated as -the @code{-rpath} option. - -@kindex -s -@kindex --strip-all -@cindex strip all symbols -@item -s -@itemx --strip-all -Omit all symbol information from the output file. - -@kindex -S -@kindex --strip-debug -@cindex strip debugger symbols -@item -S -@itemx --strip-debug -Omit debugger symbol information (but not all symbols) from the output file. - -@kindex -t -@kindex --trace -@cindex input files, displaying -@item -t -@itemx --trace -Print the names of the input files as @code{ld} processes them. - -@kindex -T @var{script} -@kindex --script=@var{script} -@cindex script files -@item -T @var{commandfile} -@itemx --script=@var{commandfile} -Read link commands from the file @var{commandfile}. These commands -replace @code{ld}'s default link script (rather than adding to it), so -@var{commandfile} must specify everything necessary to describe the -target format. You must use this option if you want to use a command -which can only appear once in a linker script, such as the -@code{SECTIONS} or @code{MEMORY} command. @xref{Commands}. If -@var{commandfile} does not exist, @code{ld} looks for it in the -directories specified by any preceding @samp{-L} options. Multiple -@samp{-T} options accumulate. - -@kindex -u @var{symbol} -@kindex --undefined=@var{symbol} -@cindex undefined symbol -@item -u @var{symbol} -@itemx --undefined=@var{symbol} -Force @var{symbol} to be entered in the output file as an undefined symbol. -Doing this may, for example, trigger linking of additional modules from -standard libraries. @samp{-u} may be repeated with different option -arguments to enter additional undefined symbols. -@c Nice idea, but no such command: This option is equivalent -@c to the @code{EXTERN} linker command. - -@kindex -v -@kindex -V -@kindex --version -@cindex version -@item -v -@itemx --version -@itemx -V -Display the version number for @code{ld}. The @code{-V} option also -lists the supported emulations. - -@kindex -x -@kindex --discard-all -@cindex deleting local symbols -@item -x -@itemx --discard-all -Delete all local symbols. - -@kindex -X -@kindex --discard-locals -@cindex local symbols, deleting -@cindex L, deleting symbols beginning -@item -X -@itemx --discard-locals -Delete all temporary local symbols. For most targets, this is all local -symbols whose names begin with @samp{L}. - -@kindex -y @var{symbol} -@kindex --trace-symbol=@var{symbol} -@cindex symbol tracing -@item -y @var{symbol} -@itemx --trace-symbol=@var{symbol} -Print the name of each linked file in which @var{symbol} appears. This -option may be given any number of times. On many systems it is necessary -to prepend an underscore. - -This option is useful when you have an undefined symbol in your link but -don't know where the reference is coming from. - -@kindex -Y @var{path} -@item -Y @var{path} -Add @var{path} to the default library search path. This option exists -for Solaris compatibility. - -@kindex -z @var{keyword} -@item -z @var{keyword} -This option is ignored for Solaris compatibility. - -@kindex -( -@cindex groups of archives -@item -( @var{archives} -) -@itemx --start-group @var{archives} --end-group -The @var{archives} should be a list of archive files. They may be -either explicit file names, or @samp{-l} options. - -The specified archives are searched repeatedly until no new undefined -references are created. Normally, an archive is searched only once in -the order that it is specified on the command line. If a symbol in that -archive is needed to resolve an undefined symbol referred to by an -object in an archive that appears later on the command line, the linker -would not be able to resolve that reference. By grouping the archives, -they all be searched repeatedly until all possible references are -resolved. - -Using this option has a significant performance cost. It is best to use -it only when there are unavoidable circular references between two or -more archives. - -@kindex -assert @var{keyword} -@item -assert @var{keyword} -This option is ignored for SunOS compatibility. - -@kindex -Bdynamic -@kindex -dy -@kindex -call_shared -@item -Bdynamic -@itemx -dy -@itemx -call_shared -Link against dynamic libraries. This is only meaningful on platforms -for which shared libraries are supported. This option is normally the -default on such platforms. The different variants of this option are -for compatibility with various systems. You may use this option -multiple times on the command line: it affects library searching for -@code{-l} options which follow it. - -@kindex -Bstatic -@kindex -dn -@kindex -non_shared -@kindex -static -@item -Bstatic -@itemx -dn -@itemx -non_shared -@itemx -static -Do not link against shared libraries. This is only meaningful on -platforms for which shared libraries are supported. The different -variants of this option are for compatibility with various systems. You -may use this option multiple times on the command line: it affects -library searching for @code{-l} options which follow it. - -@kindex -Bsymbolic -@item -Bsymbolic -When creating a shared library, bind references to global symbols to the -definition within the shared library, if any. Normally, it is possible -for a program linked against a shared library to override the definition -within the shared library. This option is only meaningful on ELF -platforms which support shared libraries. - -@cindex cross reference table -@kindex --cref -@item --cref -Output a cross reference table. If a linker map file is being -generated, the cross reference table is printed to the map file. -Otherwise, it is printed on the standard output. - -The format of the table is intentionally simple, so that it may be -easily processed by a script if necessary. The symbols are printed out, -sorted by name. For each symbol, a list of file names is given. If the -symbol is defined, the first file listed is the location of the -definition. The remaining files contain references to the symbol. - -@cindex symbols, from command line -@kindex --defsym @var{symbol}=@var{exp} -@item --defsym @var{symbol}=@var{expression} -Create a global symbol in the output file, containing the absolute -address given by @var{expression}. You may use this option as many -times as necessary to define multiple symbols in the command line. A -limited form of arithmetic is supported for the @var{expression} in this -context: you may give a hexadecimal constant or the name of an existing -symbol, or use @code{+} and @code{-} to add or subtract hexadecimal -constants or symbols. If you need more elaborate expressions, consider -using the linker command language from a script (@pxref{Assignment, , -Assignment: Symbol Definitions}). @emph{Note:} there should be no -white space between @var{symbol}, the equals sign (``@key{=}''), and -@var{expression}. - -@cindex dynamic linker, from command line -@kindex --dynamic-linker @var{file} -@item --dynamic-linker @var{file} -Set the name of the dynamic linker. This is only meaningful when -generating dynamically linked ELF executables. The default dynamic -linker is normally correct; don't use this unless you know what you are -doing. - -@cindex big-endian objects -@cindex endianness -@kindex -EB -@item -EB -Link big-endian objects. This affects the default output format. - -@cindex little-endian objects -@kindex -EL -@item -EL -Link little-endian objects. This affects the default output format. - -@cindex MIPS embedded PIC code -@kindex --embedded-relocs -@item --embedded-relocs -This option is only meaningful when linking MIPS embedded PIC code, -generated by the -membedded-pic option to the @sc{gnu} compiler and -assembler. It causes the linker to create a table which may be used at -runtime to relocate any data which was statically initialized to pointer -values. See the code in testsuite/ld-empic for details. - -@cindex help -@cindex usage -@kindex --help -@item --help -Print a summary of the command-line options on the standard output and exit. - -@kindex -Map -@item -Map @var{mapfile} -Print a link map to the file @var{mapfile}. See the description of the -@samp{-M} option, above. - -@cindex memory usage -@kindex --no-keep-memory -@item --no-keep-memory -@code{ld} normally optimizes for speed over memory usage by caching the -symbol tables of input files in memory. This option tells @code{ld} to -instead optimize for memory usage, by rereading the symbol tables as -necessary. This may be required if @code{ld} runs out of memory space -while linking a large executable. - -@kindex --no-warn-mismatch -@item --no-warn-mismatch -Normally @code{ld} will give an error if you try to link together input -files that are mismatched for some reason, perhaps because they have -been compiled for different processors or for different endiannesses. -This option tells @code{ld} that it should silently permit such possible -errors. This option should only be used with care, in cases when you -have taken some special action that ensures that the linker errors are -inappropriate. - -@kindex --no-whole-archive -@item --no-whole-archive -Turn off the effect of the @code{--whole-archive} option for subsequent -archive files. - -@cindex output file after errors -@kindex --noinhibit-exec -@item --noinhibit-exec -Retain the executable output file whenever it is still usable. -Normally, the linker will not produce an output file if it encounters -errors during the link process; it exits without writing an output file -when it issues any error whatsoever. - -@ifclear SingleFormat -@kindex --oformat -@item --oformat @var{output-format} -@code{ld} may be configured to support more than one kind of object -file. If your @code{ld} is configured this way, you can use the -@samp{--oformat} option to specify the binary format for the output -object file. Even when @code{ld} is configured to support alternative -object formats, you don't usually need to specify this, as @code{ld} -should be configured to produce as a default output format the most -usual format on each machine. @var{output-format} is a text string, the -name of a particular format supported by the BFD libraries. (You can -list the available binary formats with @samp{objdump -i}.) The script -command @code{OUTPUT_FORMAT} can also specify the output format, but -this option overrides it. @xref{BFD}. -@end ifclear - -@kindex -qmagic -@item -qmagic -This option is ignored for Linux compatibility. - -@kindex -Qy -@item -Qy -This option is ignored for SVR4 compatibility. - -@kindex --relax -@cindex synthesizing linker -@cindex relaxing addressing modes -@item --relax -An option with machine dependent effects. -@ifset GENERIC -This option is only supported on a few targets. -@end ifset -@ifset H8300 -@xref{H8/300,,@code{ld} and the H8/300}. -@end ifset -@ifset I960 -@xref{i960,, @code{ld} and the Intel 960 family}. -@end ifset - -On some platforms, the @samp{--relax} option performs global -optimizations that become possible when the linker resolves addressing -in the program, such as relaxing address modes and synthesizing new -instructions in the output object file. - -@ifset GENERIC -On platforms where this is not supported, @samp{--relax} is accepted, -but ignored. -@end ifset - -@cindex retaining specified symbols -@cindex stripping all but some symbols -@cindex symbols, retaining selectively -@item --retain-symbols-file @var{filename} -Retain @emph{only} the symbols listed in the file @var{filename}, -discarding all others. @var{filename} is simply a flat file, with one -symbol name per line. This option is especially useful in environments -@ifset GENERIC -(such as VxWorks) -@end ifset -where a large global symbol table is accumulated gradually, to conserve -run-time memory. - -@samp{--retain-symbols-file} does @emph{not} discard undefined symbols, -or symbols needed for relocations. - -You may only specify @samp{--retain-symbols-file} once in the command -line. It overrides @samp{-s} and @samp{-S}. - -@ifset GENERIC -@item -rpath @var{dir} -@cindex runtime library search path -@kindex -rpath -Add a directory to the runtime library search path. This is used when -linking an ELF executable with shared objects. All @code{-rpath} -arguments are concatenated and passed to the runtime linker, which uses -them to locate shared objects at runtime. The @code{-rpath} option is -also used when locating shared objects which are needed by shared -objects explicitly included in the link; see the description of the -@code{-rpath-link} option. If @code{-rpath} is not used when linking an -ELF executable, the contents of the environment variable -@code{LD_RUN_PATH} will be used if it is defined. - -The @code{-rpath} option may also be used on SunOS. By default, on -SunOS, the linker will form a runtime search patch out of all the -@code{-L} options it is given. If a @code{-rpath} option is used, the -runtime search path will be formed exclusively using the @code{-rpath} -options, ignoring the @code{-L} options. This can be useful when using -gcc, which adds many @code{-L} options which may be on NFS mounted -filesystems. - -For compatibility with other ELF linkers, if the @code{-R} option is -followed by a directory name, rather than a file name, it is treated as -the @code{-rpath} option. -@end ifset - -@ifset GENERIC -@cindex link-time runtime library search path -@kindex -rpath-link -@item -rpath-link @var{DIR} -When using ELF or SunOS, one shared library may require another. This -happens when an @code{ld -shared} link includes a shared library as one -of the input files. - -When the linker encounters such a dependency when doing a non-shared, -non-relocateable link, it will automatically try to locate the required -shared library and include it in the link, if it is not included -explicitly. In such a case, the @code{-rpath-link} option -specifies the first set of directories to search. The -@code{-rpath-link} option may specify a sequence of directory names -either by specifying a list of names separated by colons, or by -appearing multiple times. - -The linker uses the following search paths to locate required shared -libraries. -@enumerate -@item -Any directories specified by @code{-rpath-link} options. -@item -Any directories specified by @code{-rpath} options. The difference -between @code{-rpath} and @code{-rpath-link} is that directories -specified by @code{-rpath} options are included in the executable and -used at runtime, whereas the @code{-rpath-link} option is only effective -at link time. -@item -On an ELF system, if the @code{-rpath} and @code{rpath-link} options -were not used, search the contents of the environment variable -@code{LD_RUN_PATH}. -@item -On SunOS, if the @code{-rpath} option was not used, search any -directories specified using @code{-L} options. -@item -For a native linker, the contents of the environment variable -@code{LD_LIBRARY_PATH}. -@item -The default directories, normally @file{/lib} and @file{/usr/lib}. -@end enumerate - -If the required shared library is not found, the linker will issue a -warning and continue with the link. -@end ifset - -@kindex -shared -@kindex -Bshareable -@item -shared -@itemx -Bshareable -@cindex shared libraries -Create a shared library. This is currently only supported on ELF, XCOFF -and SunOS platforms. On SunOS, the linker will automatically create a -shared library if the @code{-e} option is not used and there are -undefined symbols in the link. - -@item --sort-common -@kindex --sort-common -This option tells @code{ld} to sort the common symbols by size when it -places them in the appropriate output sections. First come all the one -byte symbols, then all the two bytes, then all the four bytes, and then -everything else. This is to prevent gaps between symbols due to -alignment constraints. - -@kindex --split-by-file -@item --split-by-file -Similar to @code{--split-by-reloc} but creates a new output section for -each input file. - -@kindex --split-by-reloc -@item --split-by-reloc @var{count} -Trys to creates extra sections in the output file so that no single -output section in the file contains more than @var{count} relocations. -This is useful when generating huge relocatable for downloading into -certain real time kernels with the COFF object file format; since COFF -cannot represent more than 65535 relocations in a single section. Note -that this will fail to work with object file formats which do not -support arbitrary sections. The linker will not split up individual -input sections for redistribution, so if a single input section contains -more than @var{count} relocations one output section will contain that -many relocations. - -@kindex --stats -@item --stats -Compute and display statistics about the operation of the linker, such -as execution time and memory usage. - -@kindex --traditional-format -@cindex traditional format -@item --traditional-format -For some targets, the output of @code{ld} is different in some ways from -the output of some existing linker. This switch requests @code{ld} to -use the traditional format instead. - -@cindex dbx -For example, on SunOS, @code{ld} combines duplicate entries in the -symbol string table. This can reduce the size of an output file with -full debugging information by over 30 percent. Unfortunately, the SunOS -@code{dbx} program can not read the resulting program (@code{gdb} has no -trouble). The @samp{--traditional-format} switch tells @code{ld} to not -combine duplicate entries. - -@kindex -Tbss @var{org} -@kindex -Tdata @var{org} -@kindex -Ttext @var{org} -@cindex segment origins, cmd line -@item -Tbss @var{org} -@itemx -Tdata @var{org} -@itemx -Ttext @var{org} -Use @var{org} as the starting address for---respectively---the -@code{bss}, @code{data}, or the @code{text} segment of the output file. -@var{org} must be a single hexadecimal integer; -for compatibility with other linkers, you may omit the leading -@samp{0x} usually associated with hexadecimal values. - -@kindex -Ur -@cindex constructors -@item -Ur -For anything other than C++ programs, this option is equivalent to -@samp{-r}: it generates relocatable output---i.e., an output file that can in -turn serve as input to @code{ld}. When linking C++ programs, @samp{-Ur} -@emph{does} resolve references to constructors, unlike @samp{-r}. -It does not work to use @samp{-Ur} on files that were themselves linked -with @samp{-Ur}; once the constructor table has been built, it cannot -be added to. Use @samp{-Ur} only for the last partial link, and -@samp{-r} for the others. - -@kindex --verbose -@cindex verbose -@item --verbose -Display the version number for @code{ld} and list the linker emulations -supported. Display which input files can and cannot be opened. Display -the linker script if using a default builtin script. - -@kindex --version-script=@var{version-scriptfile} -@cindex version script, symbol versions -@itemx --version-script=@var{version-scriptfile} -Specify the name of a version script to the linker. This is typically -used when creating shared libraries to specify additional information -about the version heirarchy for the library being created. This option -is only meaningful on ELF platforms which support shared libraries. -@xref{Version Script}. - -@kindex --warn-comon -@cindex warnings, on combining symbols -@cindex combining symbols, warnings on -@item --warn-common -Warn when a common symbol is combined with another common symbol or with -a symbol definition. Unix linkers allow this somewhat sloppy practice, -but linkers on some other operating systems do not. This option allows -you to find potential problems from combining global symbols. -Unfortunately, some C libraries use this practice, so you may get some -warnings about symbols in the libraries as well as in your programs. - -There are three kinds of global symbols, illustrated here by C examples: - -@table @samp -@item int i = 1; -A definition, which goes in the initialized data section of the output -file. - -@item extern int i; -An undefined reference, which does not allocate space. -There must be either a definition or a common symbol for the -variable somewhere. - -@item int i; -A common symbol. If there are only (one or more) common symbols for a -variable, it goes in the uninitialized data area of the output file. -The linker merges multiple common symbols for the same variable into a -single symbol. If they are of different sizes, it picks the largest -size. The linker turns a common symbol into a declaration, if there is -a definition of the same variable. -@end table - -The @samp{--warn-common} option can produce five kinds of warnings. -Each warning consists of a pair of lines: the first describes the symbol -just encountered, and the second describes the previous symbol -encountered with the same name. One or both of the two symbols will be -a common symbol. - -@enumerate -@item -Turning a common symbol into a reference, because there is already a -definition for the symbol. -@smallexample -@var{file}(@var{section}): warning: common of `@var{symbol}' - overridden by definition -@var{file}(@var{section}): warning: defined here -@end smallexample - -@item -Turning a common symbol into a reference, because a later definition for -the symbol is encountered. This is the same as the previous case, -except that the symbols are encountered in a different order. -@smallexample -@var{file}(@var{section}): warning: definition of `@var{symbol}' - overriding common -@var{file}(@var{section}): warning: common is here -@end smallexample - -@item -Merging a common symbol with a previous same-sized common symbol. -@smallexample -@var{file}(@var{section}): warning: multiple common - of `@var{symbol}' -@var{file}(@var{section}): warning: previous common is here -@end smallexample - -@item -Merging a common symbol with a previous larger common symbol. -@smallexample -@var{file}(@var{section}): warning: common of `@var{symbol}' - overridden by larger common -@var{file}(@var{section}): warning: larger common is here -@end smallexample - -@item -Merging a common symbol with a previous smaller common symbol. This is -the same as the previous case, except that the symbols are -encountered in a different order. -@smallexample -@var{file}(@var{section}): warning: common of `@var{symbol}' - overriding smaller common -@var{file}(@var{section}): warning: smaller common is here -@end smallexample -@end enumerate - -@kindex --warn-constructors -@item --warn-constructors -Warn if any global constructors are used. This is only useful for a few -object file formats. For formats like COFF or ELF, the linker can not -detect the use of global constructors. - -@kindex --warn-multiple-gp -@item --warn-multiple-gp -Warn if multiple global pointer values are required in the output file. -This is only meaningful for certain processors, such as the Alpha. -Specifically, some processors put large-valued constants in a special -section. A special register (the global pointer) points into the middle -of this section, so that constants can be loaded efficiently via a -base-register relative addressing mode. Since the offset in -base-register relative mode is fixed and relatively small (e.g., 16 -bits), this limits the maximum size of the constant pool. Thus, in -large programs, it is often necessary to use multiple global pointer -values in order to be able to address all possible constants. This -option causes a warning to be issued whenever this case occurs. - -@kindex --warn-once -@cindex warnings, on undefined symbols -@cindex undefined symbols, warnings on -@item --warn-once -Only warn once for each undefined symbol, rather than once per module -which refers to it. - -@kindex --warn-section-align -@cindex warnings, on section alignment -@cindex section alignment, warnings on -@item --warn-section-align -Warn if the address of an output section is changed because of -alignment. Typically, the alignment will be set by an input section. -The address will only be changed if it not explicitly specified; that -is, if the @code{SECTIONS} command does not specify a start address for -the section (@pxref{SECTIONS}). - -@kindex --whole-archive -@cindex including an entire archive -@item --whole-archive -For each archive mentioned on the command line after the -@code{--whole-archive} option, include every object file in the archive -in the link, rather than searching the archive for the required object -files. This is normally used to turn an archive file into a shared -library, forcing every object to be included in the resulting shared -library. This option may be used more than once. - -@kindex --wrap -@item --wrap @var{symbol} -Use a wrapper function for @var{symbol}. Any undefined reference to -@var{symbol} will be resolved to @code{__wrap_@var{symbol}}. Any -undefined reference to @code{__real_@var{symbol}} will be resolved to -@var{symbol}. - -This can be used to provide a wrapper for a system function. The -wrapper function should be called @code{__wrap_@var{symbol}}. If it -wishes to call the system function, it should call -@code{__real_@var{symbol}}. - -Here is a trivial example: - -@smallexample -void * -__wrap_malloc (int c) -@{ - printf ("malloc called with %ld\n", c); - return __real_malloc (c); -@} -@end smallexample - -If you link other code with this file using @code{--wrap malloc}, then -all calls to @code{malloc} will call the function @code{__wrap_malloc} -instead. The call to @code{__real_malloc} in @code{__wrap_malloc} will -call the real @code{malloc} function. - -You may wish to provide a @code{__real_malloc} function as well, so that -links without the @code{--wrap} option will succeed. If you do this, -you should not put the definition of @code{__real_malloc} in the same -file as @code{__wrap_malloc}; if you do, the assembler may resolve the -call before the linker has a chance to wrap it to @code{malloc}. - -@end table - -@ifset UsesEnvVars -@node Environment -@section Environment Variables - -You can change the behavior of @code{ld} with the environment variables -@code{GNUTARGET} and @code{LDEMULATION}. - -@kindex GNUTARGET -@cindex default input format -@code{GNUTARGET} determines the input-file object format if you don't -use @samp{-b} (or its synonym @samp{--format}). Its value should be one -of the BFD names for an input format (@pxref{BFD}). If there is no -@code{GNUTARGET} in the environment, @code{ld} uses the natural format -of the target. If @code{GNUTARGET} is set to @code{default} then BFD -attempts to discover the input format by examining binary input files; -this method often succeeds, but there are potential ambiguities, since -there is no method of ensuring that the magic number used to specify -object-file formats is unique. However, the configuration procedure for -BFD on each system places the conventional format for that system first -in the search-list, so ambiguities are resolved in favor of convention. - -@kindex LDEMULATION -@cindex default emulation -@cindex emulation, default -@code{LDEMULATION} determines the default emulation if you don't use the -@samp{-m} option. The emulation can affect various aspects of linker -behaviour, particularly the default linker script. You can list the -available emulations with the @samp{--verbose} or @samp{-V} options. If -the @samp{-m} option is not used, and the @code{LDEMULATION} environment -variable is not defined, the default emulation depends upon how the -linker was configured. -@end ifset - -@node Commands -@chapter Command Language - -@cindex command files -The command language provides explicit control over the link process, -allowing complete specification of the mapping between the linker's -input files and its output. It controls: -@itemize @bullet -@item -input files -@item -file formats -@item -output file layout -@item -addresses of sections -@item -placement of common blocks -@end itemize - -You may supply a command file (also known as a linker script) to the -linker either explicitly through the @samp{-T} option, or implicitly as -an ordinary file. Normally you should use the @samp{-T} option. An -implicit linker script should only be used when you want to augment, -rather than replace, the default linker script; typically an implicit -linker script would consist only of @code{INPUT} or @code{GROUP} -commands. - -If the linker opens a file which it cannot recognize as a supported -object or archive format, nor as a linker script, it reports an error. - -@menu -* Scripts:: Linker Scripts -* Expressions:: Expressions -* MEMORY:: MEMORY Command -* SECTIONS:: SECTIONS Command -* PHDRS:: PHDRS Command -* Entry Point:: The Entry Point -* Version Script:: Version Script -* Option Commands:: Option Commands -@end menu - -@node Scripts -@section Linker Scripts -The @code{ld} command language is a collection of statements; some are -simple keywords setting a particular option, some are used to select and -group input files or name output files; and two statement -types have a fundamental and pervasive impact on the linking process. - -@cindex fundamental script commands -@cindex commands, fundamental -@cindex output file layout -@cindex layout of output file -The most fundamental command of the @code{ld} command language is the -@code{SECTIONS} command (@pxref{SECTIONS}). Every meaningful command -script must have a @code{SECTIONS} command: it specifies a -``picture'' of the output file's layout, in varying degrees of detail. -No other command is required in all cases. - -The @code{MEMORY} command complements @code{SECTIONS} by describing the -available memory in the target architecture. This command is optional; -if you don't use a @code{MEMORY} command, @code{ld} assumes sufficient -memory is available in a contiguous block for all output. -@xref{MEMORY}. - -@cindex comments -You may include comments in linker scripts just as in C: delimited -by @samp{/*} and @samp{*/}. As in C, comments are syntactically -equivalent to whitespace. - -@node Expressions -@section Expressions -@cindex expression syntax -@cindex arithmetic -Many useful commands involve arithmetic expressions. The syntax for -expressions in the command language is identical to that of C -expressions, with the following features: -@itemize @bullet -@item -All expressions evaluated as integers and -are of ``long'' or ``unsigned long'' type. -@item -All constants are integers. -@item -All of the C arithmetic operators are provided. -@item -You may reference, define, and create global variables. -@item -You may call special purpose built-in functions. -@end itemize - -@menu -* Integers:: Integers -* Symbols:: Symbol Names -* Location Counter:: The Location Counter -* Operators:: Operators -* Evaluation:: Evaluation -* Assignment:: Assignment: Defining Symbols -* Arithmetic Functions:: Built-In Functions -* Semicolons:: Semicolon Usage -@end menu - -@node Integers -@subsection Integers -@cindex integer notation -@cindex octal integers -An octal integer is @samp{0} followed by zero or more of the octal -digits (@samp{01234567}). -@smallexample -_as_octal = 0157255; -@end smallexample - -@cindex decimal integers -A decimal integer starts with a non-zero digit followed by zero or -more digits (@samp{0123456789}). -@smallexample -_as_decimal = 57005; -@end smallexample - -@cindex hexadecimal integers -@kindex 0x -A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or -more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}. -@smallexample -_as_hex = 0xdead; -@end smallexample - -@cindex negative integers -To write a negative integer, use -the prefix operator @samp{-} (@pxref{Operators}). -@smallexample -_as_neg = -57005; -@end smallexample - -@cindex scaled integers -@cindex K and M integer suffixes -@cindex M and K integer suffixes -@cindex suffixes for integers -@cindex integer suffixes -Additionally the suffixes @code{K} and @code{M} may be used to scale a -constant by -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@code{1024} or @code{1024*1024} -@c TEXI2ROFF-KILL -@end ifinfo -@tex -${\rm 1024}$ or ${\rm 1024}^2$ -@end tex -@c END TEXI2ROFF-KILL -respectively. For example, the following all refer to the same quantity: - -@smallexample - _fourk_1 = 4K; - _fourk_2 = 4096; - _fourk_3 = 0x1000; -@end smallexample - -@node Symbols -@subsection Symbol Names -@cindex symbol names -@cindex names -@cindex quoted symbol names -@kindex " -Unless quoted, symbol names start with a letter, underscore, or point -and may include any letters, underscores, digits, points, -and hyphens. Unquoted symbol names must not conflict with any -keywords. You can specify a symbol which contains odd characters or has -the same name as a keyword, by surrounding the symbol name in double quotes: -@smallexample - "SECTION" = 9; - "with a space" = "also with a space" + 10; -@end smallexample - -Since symbols can contain many non-alphabetic characters, it is safest -to delimit symbols with spaces. For example, @samp{A-B} is one symbol, -whereas @samp{A - B} is an expression involving subtraction. - -@node Location Counter -@subsection The Location Counter -@kindex . -@cindex dot -@cindex location counter -@cindex current output location -The special linker variable @dfn{dot} @samp{.} always contains the -current output location counter. Since the @code{.} always refers to -a location in an output section, it must always appear in an -expression within a @code{SECTIONS} command. The @code{.} symbol -may appear anywhere that an ordinary symbol is allowed in an -expression, but its assignments have a side effect. Assigning a value -to the @code{.} symbol will cause the location counter to be moved. -@cindex holes -This may be used to create holes in the output section. The location -counter may never be moved backwards. -@smallexample -SECTIONS -@{ - output : - @{ - file1(.text) - . = . + 1000; - file2(.text) - . += 1000; - file3(.text) - @} = 0x1234; -@} -@end smallexample -@noindent -In the previous example, @code{file1} is located at the beginning of the -output section, then there is a 1000 byte gap. Then @code{file2} -appears, also with a 1000 byte gap following before @code{file3} is -loaded. The notation @samp{= 0x1234} specifies what data to write in -the gaps (@pxref{Section Options}). - -@iftex -@vfill -@end iftex - -@need 2000 -@node Operators -@subsection Operators -@cindex Operators for arithmetic -@cindex arithmetic operators -@cindex precedence in expressions -The linker recognizes the standard C set of arithmetic operators, with -the standard bindings and precedence levels: -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@smallexample -precedence associativity Operators Notes -(highest) -1 left ! - ~ (1) -2 left * / % -3 left + - -4 left >> << -5 left == != > < <= >= -6 left & -7 left | -8 left && -9 left || -10 right ? : -11 right &= += -= *= /= (2) -(lowest) -@end smallexample -Notes: -(1) Prefix operators -(2) @xref{Assignment}. -@c TEXI2ROFF-KILL -@end ifinfo -@tex -\vskip \baselineskip -%"lispnarrowing" is the extra indent used generally for smallexample -\hskip\lispnarrowing\vbox{\offinterlineskip -\hrule -\halign -{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr -height2pt&\omit&&\omit&&\omit&\cr -&Precedence&& Associativity &&{\rm Operators}&\cr -height2pt&\omit&&\omit&&\omit&\cr -\noalign{\hrule} -height2pt&\omit&&\omit&&\omit&\cr -&highest&&&&&\cr -% '176 is tilde, '~' in tt font -&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr -&2&&left&&* / \%&\cr -&3&&left&&+ -&\cr -&4&&left&&>> <<&\cr -&5&&left&&== != > < <= >=&\cr -&6&&left&&\&&\cr -&7&&left&&|&\cr -&8&&left&&{\&\&}&\cr -&9&&left&&||&\cr -&10&&right&&? :&\cr -&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr -&lowest&&&&&\cr -height2pt&\omit&&\omit&&\omit&\cr} -\hrule} -@end tex -@iftex -{ -@obeylines@parskip=0pt@parindent=0pt -@dag@quad Prefix operators. -@ddag@quad @xref{Assignment}. -} -@end iftex -@c END TEXI2ROFF-KILL - -@node Evaluation -@subsection Evaluation - -@cindex lazy evaluation -@cindex expression evaluation order -The linker uses ``lazy evaluation'' for expressions; it only calculates -an expression when absolutely necessary. The linker needs the value of -the start address, and the lengths of memory regions, in order to do any -linking at all; these values are computed as soon as possible when the -linker reads in the command file. However, other values (such as symbol -values) are not known or needed until after storage allocation. Such -values are evaluated later, when other information (such as the sizes of -output sections) is available for use in the symbol assignment -expression. - -@node Assignment -@subsection Assignment: Defining Symbols -@cindex assignment in scripts -@cindex symbol definition, scripts -@cindex variables, defining -You may create global symbols, and assign values (addresses) to global -symbols, using any of the C assignment operators: - -@table @code -@item @var{symbol} = @var{expression} ; -@itemx @var{symbol} &= @var{expression} ; -@itemx @var{symbol} += @var{expression} ; -@itemx @var{symbol} -= @var{expression} ; -@itemx @var{symbol} *= @var{expression} ; -@itemx @var{symbol} /= @var{expression} ; -@end table - -Two things distinguish assignment from other operators in @code{ld} -expressions. -@itemize @bullet -@item -Assignment may only be used at the root of an expression; -@samp{a=b+3;} is allowed, but @samp{a+b=3;} is an error. - -@kindex ; -@cindex semicolon -@item -You must place a trailing semicolon (``@key{;}'') at the end of an -assignment statement. -@end itemize - -Assignment statements may appear: -@itemize @bullet -@item -as commands in their own right in an @code{ld} script; or -@item -as independent statements within a @code{SECTIONS} command; or -@item -as part of the contents of a section definition in a -@code{SECTIONS} command. -@end itemize - -The first two cases are equivalent in effect---both define a symbol with -an absolute address. The last case defines a symbol whose address is -relative to a particular section (@pxref{SECTIONS}). - -@cindex absolute and relocatable symbols -@cindex relocatable and absolute symbols -@cindex symbols, relocatable and absolute -When a linker expression is evaluated and assigned to a variable, it is -given either an absolute or a relocatable type. An absolute expression -type is one in which the symbol contains the value that it will have in -the output file; a relocatable expression type is one in which the -value is expressed as a fixed offset from the base of a section. - -The type of the expression is controlled by its position in the script -file. A symbol assigned within a section definition is created relative -to the base of the section; a symbol assigned in any other place is -created as an absolute symbol. Since a symbol created within a -section definition is relative to the base of the section, it -will remain relocatable if relocatable output is requested. A symbol -may be created with an absolute value even when assigned to within a -section definition by using the absolute assignment function -@code{ABSOLUTE}. For example, to create an absolute symbol whose address -is the last byte of an output section named @code{.data}: -@smallexample -SECTIONS@{ @dots{} - .data : - @{ - *(.data) - _edata = ABSOLUTE(.) ; - @} -@dots{} @} -@end smallexample - -The linker tries to put off the evaluation of an assignment until all -the terms in the source expression are known (@pxref{Evaluation}). For -instance, the sizes of sections cannot be known until after allocation, -so assignments dependent upon these are not performed until after -allocation. Some expressions, such as those depending upon the location -counter @dfn{dot}, @samp{.} must be evaluated during allocation. If the -result of an expression is required, but the value is not available, -then an error results. For example, a script like the following -@smallexample -SECTIONS @{ @dots{} - text 9+this_isnt_constant : - @{ @dots{} - @} -@dots{} @} -@end smallexample -@kindex Non constant expression -@noindent -will cause the error message ``@code{Non constant expression for initial -address}''. - -@cindex provide -In some cases, it is desirable for a linker script to define a symbol -only if it is referenced, and only if it is not defined by any object -included in the link. For example, traditional linkers defined the -symbol @samp{etext}. However, ANSI C requires that the user be able to -use @samp{etext} as a function name without encountering an error. -The @code{PROVIDE} keyword may be used to define a symbol, such as -@samp{etext}, only if it is referenced but not defined. The syntax is -@code{PROVIDE(@var{symbol} = @var{expression})}. - -@node Arithmetic Functions -@subsection Arithmetic Functions -@cindex functions in expression language -The command language includes a number of built-in -functions for use in link script expressions. -@table @code -@kindex ABSOLUTE(@var{exp}) -@cindex expression, absolute -@item ABSOLUTE(@var{exp}) -Return the absolute (non-relocatable, as opposed to non-negative) value -of the expression @var{exp}. Primarily useful to assign an absolute -value to a symbol within a section definition, where symbol values are -normally section-relative. - -@kindex ADDR(@var{section}) -@cindex section address -@item ADDR(@var{section}) -Return the absolute address of the named @var{section}. Your script must -previously have defined the location of that section. In the following -example, @code{symbol_1} and @code{symbol_2} are assigned identical -values: -@smallexample -@group -SECTIONS@{ @dots{} - .output1 : - @{ - start_of_output_1 = ABSOLUTE(.); - @dots{} - @} - .output : - @{ - symbol_1 = ADDR(.output1); - symbol_2 = start_of_output_1; - @} -@dots{} @} -@end group -@end smallexample - -@kindex LOADADDR(@var{section}) -@cindex section load address -@item LOADADDR(@var{section}) -Return the absolute load address of the named @var{section}. This is -normally the same as @code{ADDR}, but it may be different if the -@code{AT} keyword is used in the section definition (@pxref{Section -Options}). - -@kindex ALIGN(@var{exp}) -@cindex rounding up location counter -@item ALIGN(@var{exp}) -Return the result of the current location counter (@code{.}) aligned to -the next @var{exp} boundary. @var{exp} must be an expression whose -value is a power of two. This is equivalent to -@smallexample -(. + @var{exp} - 1) & ~(@var{exp} - 1) -@end smallexample - -@code{ALIGN} doesn't change the value of the location counter---it just -does arithmetic on it. As an example, to align the output @code{.data} -section to the next @code{0x2000} byte boundary after the preceding -section and to set a variable within the section to the next -@code{0x8000} boundary after the input sections: -@smallexample -@group -SECTIONS@{ @dots{} - .data ALIGN(0x2000): @{ - *(.data) - variable = ALIGN(0x8000); - @} -@dots{} @} -@end group -@end smallexample -@noindent -The first use of @code{ALIGN} in this example specifies the location of -a section because it is used as the optional @var{start} attribute of a -section definition (@pxref{Section Options}). The second use simply -defines the value of a variable. - -The built-in @code{NEXT} is closely related to @code{ALIGN}. - -@kindex DEFINED(@var{symbol}) -@cindex symbol defaults -@item DEFINED(@var{symbol}) -Return 1 if @var{symbol} is in the linker global symbol table and is -defined, otherwise return 0. You can use this function to provide default -values for symbols. For example, the following command-file fragment shows how -to set a global symbol @code{begin} to the first location in the -@code{.text} section---but if a symbol called @code{begin} already -existed, its value is preserved: - -@smallexample -@group -SECTIONS@{ @dots{} - .text : @{ - begin = DEFINED(begin) ? begin : . ; - @dots{} - @} -@dots{} @} -@end group -@end smallexample - -@kindex NEXT(@var{exp}) -@cindex unallocated address, next -@item NEXT(@var{exp}) -Return the next unallocated address that is a multiple of @var{exp}. -This function is closely related to @code{ALIGN(@var{exp})}; unless you -use the @code{MEMORY} command to define discontinuous memory for the -output file, the two functions are equivalent. - -@kindex SIZEOF(@var{section}) -@cindex section size -@item SIZEOF(@var{section}) -Return the size in bytes of the named @var{section}, if that section has -been allocated. In the following example, @code{symbol_1} and -@code{symbol_2} are assigned identical values: -@c What does it return if the section hasn't been allocated? 0? -@smallexample -@group -SECTIONS@{ @dots{} - .output @{ - .start = . ; - @dots{} - .end = . ; - @} - symbol_1 = .end - .start ; - symbol_2 = SIZEOF(.output); -@dots{} @} -@end group -@end smallexample - -@kindex SIZEOF_HEADERS -@cindex header size -@kindex sizeof_headers -@item SIZEOF_HEADERS -@itemx sizeof_headers -Return the size in bytes of the output file's headers. You can use this number -as the start address of the first section, if you choose, to facilitate -paging. - -@kindex MAX -@item MAX(@var{exp1}, @var{exp2}) -Returns the maximum of @var{exp1} and @var{exp2}. - -@kindex MIN -@item MIN(@var{exp1}, @var{exp2}) -Returns the minimum of @var{exp1} and @var{exp2}. - -@end table - -@node Semicolons -@subsection Semicolons - -Semicolons (``@key{;}'') are required in the following places. In all -other places they can appear for aesthetic reasons but are otherwise ignored. - -@table @code -@item Assignment -Semicolons must appear at the end of assignment expressions. -@xref{Assignment} - -@item PHDRS -Semicolons must appear at the end of a @code{PHDRS} statement. -@xref{PHDRS} -@end table - -@node MEMORY -@section Memory Layout -@kindex MEMORY -@cindex regions of memory -@cindex discontinuous memory -@cindex allocating memory -The linker's default configuration permits allocation of all available memory. -You can override this configuration by using the @code{MEMORY} command. The -@code{MEMORY} command describes the location and size of blocks of -memory in the target. By using it carefully, you can describe which -memory regions may be used by the linker, and which memory regions it -must avoid. The linker does not shuffle sections to fit into the -available regions, but does move the requested sections into the correct -regions and issue errors when the regions become too full. - -A command file may contain at most one use of the @code{MEMORY} -command; however, you can define as many blocks of memory within it as -you wish. The syntax is: - -@smallexample -@group -MEMORY - @{ - @var{name} (@var{attr}) : ORIGIN = @var{origin}, LENGTH = @var{len} - @dots{} - @} -@end group -@end smallexample -@table @code -@cindex naming memory regions -@item @var{name} -is a name used internally by the linker to refer to the region. Any -symbol name may be used. The region names are stored in a separate -name space, and will not conflict with symbols, file names or section -names. Use distinct names to specify multiple regions. - -@cindex memory region attributes -@item (@var{attr}) -is an optional list of attributes that specify whether to use a -particular memory to place sections that are not listed in the linker -script. Valid attribute lists must be made up of the characters -``@code{ALIRWX}'' that match section attributes. If you omit the -attribute list, you may omit the parentheses around it as well. The -attributes currently supported are: - -@table @samp -@item @code{Letter} -@code{Section Attribute} - -@item @code{R} -Read-only sections. - -@item @code{W} -Read/write sections. - -@item @code{X} -Sections containing executable code. - -@item @code{A} -Allocated sections. - -@item @code{I} -Initialized sections. - -@item @code{L} -Same as @code{I}. - -@item @code{!} -Invert the sense of any of the following attributes. -@end table - -@kindex ORIGIN = -@kindex o = -@kindex org = -@item @var{origin} -is the start address of the region in physical memory. It is -an expression that must evaluate to a constant before -memory allocation is performed. The keyword @code{ORIGIN} may be -abbreviated to @code{org} or @code{o} (but not, for example, @samp{ORG}). - -@kindex LENGTH = -@kindex len = -@kindex l = -@item @var{len} -is the size in bytes of the region (an expression). -The keyword @code{LENGTH} may be abbreviated to @code{len} or @code{l}. -@end table - -For example, to specify that memory has two regions available for -allocation---one starting at 0 for 256 kilobytes, and the other starting -at @code{0x40000000} for four megabytes. The @code{rom} memory region -will get all sections without an explicit memory register that are -either read-only or contain code, while the @code{ram} memory region -will get the sections. - -@smallexample -@group -MEMORY - @{ - rom (rx) : ORIGIN = 0, LENGTH = 256K - ram (!rx) : org = 0x40000000, l = 4M - @} -@end group -@end smallexample - -Once you have defined a region of memory named @var{mem}, you can direct -specific output sections there by using a command ending in -@samp{>@var{mem}} within the @code{SECTIONS} command (@pxref{Section -Options}). If the combined output sections directed to a region are too -big for the region, the linker will issue an error message. - -@node SECTIONS -@section Specifying Output Sections - -@kindex SECTIONS -The @code{SECTIONS} command controls exactly where input sections are -placed into output sections, their order in the output file, and to -which output sections they are allocated. - -You may use at most one @code{SECTIONS} command in a script file, -but you can have as many statements within it as you wish. Statements -within the @code{SECTIONS} command can do one of three things: - -@itemize @bullet -@item -define the entry point; - -@item -assign a value to a symbol; - -@item -describe the placement of a named output section, and which input -sections go into it. -@end itemize - -You can also use the first two operations---defining the entry point and -defining symbols---outside the @code{SECTIONS} command: @pxref{Entry -Point}, and @ref{Assignment}. They are permitted here as well for -your convenience in reading the script, so that symbols and the entry -point can be defined at meaningful points in your output-file layout. - -If you do not use a @code{SECTIONS} command, the linker places each input -section into an identically named output section in the order that the -sections are first encountered in the input files. If all input sections -are present in the first file, for example, the order of sections in the -output file will match the order in the first input file. - -@menu -* Section Definition:: Section Definitions -* Section Placement:: Section Placement -* Section Data Expressions:: Section Data Expressions -* Section Options:: Optional Section Attributes -* Overlays:: Overlays -@end menu - -@node Section Definition -@subsection Section Definitions -@cindex section definition -The most frequently used statement in the @code{SECTIONS} command is -the @dfn{section definition}, which specifies the -properties of an output section: its location, alignment, contents, -fill pattern, and target memory region. Most of -these specifications are optional; the simplest form of a section -definition is -@smallexample -SECTIONS @{ @dots{} - @var{secname} : @{ - @var{contents} - @} -@dots{} @} -@end smallexample -@cindex naming output sections -@noindent -@var{secname} is the name of the output section, and @var{contents} a -specification of what goes there---for example, a list of input files or -sections of input files (@pxref{Section Placement}). The whitespace -around @var{secname} is required, so that the section name is -unambiguous. The other whitespace shown is optional. You do need the -colon @samp{:} and the braces @samp{@{@}}, however. - -@var{secname} must meet the constraints of your output format. In -formats which only support a limited number of sections, such as -@code{a.out}, the name must be one of the names supported by the format -(@code{a.out}, for example, allows only @code{.text}, @code{.data} or -@code{.bss}). If the output format supports any number of sections, but -with numbers and not names (as is the case for Oasys), the name should be -supplied as a quoted numeric string. A section name may consist of any -sequence of characters, but any name which does not conform to the standard -@code{ld} symbol name syntax must be quoted. -@xref{Symbols, , Symbol Names}. - -The special @var{secname} @samp{/DISCARD/} may be used to discard input -sections. Any sections which are assigned to an output section named -@samp{/DISCARD/} are not included in the final link output. - -The linker will not create output sections which do not have any -contents. This is for convenience when referring to input sections that -may or may not exist. For example, -@smallexample -.foo @{ *(.foo) @} -@end smallexample -will only create a @samp{.foo} section in the output file if there is a -@samp{.foo} section in at least one input file. - -@node Section Placement -@subsection Section Placement - -@cindex contents of a section -In a section definition, you can specify the contents of an output -section by listing particular input files, by listing particular -input-file sections, or by a combination of the two. You can also place -arbitrary data in the section, and define symbols relative to the -beginning of the section. - -The @var{contents} of a section definition may include any of the -following kinds of statement. You can include as many of these as you -like in a single section definition, separated from one another by -whitespace. - -@table @code -@kindex @var{filename} -@cindex input files, section defn -@cindex files, including in output sections -@item @var{filename} -You may simply name a particular input file to be placed in the current -output section; @emph{all} sections from that file are placed in the -current section definition. If the file name has already been mentioned -in another section definition, with an explicit section name list, then -only those sections which have not yet been allocated are used. - -To specify a list of particular files by name: -@smallexample -.data : @{ afile.o bfile.o cfile.o @} -@end smallexample -@noindent -The example also illustrates that multiple statements can be included in -the contents of a section definition, since each file name is a separate -statement. - -@kindex @var{filename}(@var{section}) -@cindex files and sections, section defn -@item @var{filename}( @var{section} ) -@itemx @var{filename}( @var{section} , @var{section}, @dots{} ) -@itemx @var{filename}( @var{section} @var{section} @dots{} ) -You can name one or more sections from your input files, for insertion -in the current output section. If you wish to specify a list of -input-file sections inside the parentheses, separate the section names -with whitespace. - -@cindex input sections to output section -@kindex *(@var{section}) -@item * (@var{section}) -@itemx * (@var{section}, @var{section}, @dots{}) -@itemx * (@var{section} @var{section} @dots{}) -Instead of explicitly naming particular input files in a link control -script, you can refer to @emph{all} files from the @code{ld} command -line: use @samp{*} instead of a particular file name before the -parenthesized input-file section list. - -If you have already explicitly included some files by name, @samp{*} -refers to all @emph{remaining} files---those whose places in the output -file have not yet been defined. - -For example, to copy sections @code{1} through @code{4} from an Oasys file -into the @code{.text} section of an @code{a.out} file, and sections @code{13} -and @code{14} into the @code{.data} section: -@smallexample -@group -SECTIONS @{ - .text :@{ - *("1" "2" "3" "4") - @} - - .data :@{ - *("13" "14") - @} -@} -@end group -@end smallexample - -@cindex @code{[@var{section}@dots{}]}, not supported -@samp{[ @var{section} @dots{} ]} used to be accepted as an alternate way -to specify named sections from all unallocated input files. Because -some operating systems (VMS) allow brackets in file names, that notation -is no longer supported. - -@cindex uninitialized data -@cindex commons in output -@kindex *( COMMON ) -@item @var{filename}@code{( COMMON )} -@itemx *( COMMON ) -Specify where in your output file to place uninitialized data -with this notation. @code{*(COMMON)} by itself refers to all -uninitialized data from all input files (so far as it is not yet -allocated); @var{filename}@code{(COMMON)} refers to uninitialized data -from a particular file. Both are special cases of the general -mechanisms for specifying where to place input-file sections: -@code{ld} permits you to refer to uninitialized data as if it -were in an input-file section named @code{COMMON}, regardless of the -input file's format. -@end table - -In any place where you may use a specific file or section name, you may -also use a wildcard pattern. The linker handles wildcards much as the -Unix shell does. A @samp{*} character matches any number of characters. -A @samp{?} character matches any single character. The sequence -@samp{[@var{chars}]} will match a single instance of any of the -@var{chars}; the @samp{-} character may be used to specify a range of -characters, as in @samp{[a-z]} to match any lower case letter. A -@samp{\} character may be used to quote the following character. - -When a file name is matched with a wildcard, the wildcard characters -will not match a @samp{/} character (used to separate directory names on -Unix). A pattern consisting of a single @samp{*} character is an -exception; it will always match any file name. In a section name, the -wildcard characters will match a @samp{/} character. - -Wildcards only match files which are explicitly specified on the command -line. The linker does not search directories to expand wildcards. -However, if you specify a simple file name---a name with no wildcard -characters---in a linker script, and the file name is not also specified -on the command line, the linker will attempt to open the file as though -it appeared on the command line. - -In the following example, the command script arranges the output file -into three consecutive sections, named @code{.text}, @code{.data}, and -@code{.bss}, taking the input for each from the correspondingly named -sections of all the input files: - -@smallexample -@group -SECTIONS @{ - .text : @{ *(.text) @} - .data : @{ *(.data) @} - .bss : @{ *(.bss) *(COMMON) @} -@} -@end group -@end smallexample - -The following example reads all of the sections from file @code{all.o} -and places them at the start of output section @code{outputa} which -starts at location @code{0x10000}. All of section @code{.input1} from -file @code{foo.o} follows immediately, in the same output section. All -of section @code{.input2} from @code{foo.o} goes into output section -@code{outputb}, followed by section @code{.input1} from @code{foo1.o}. -All of the remaining @code{.input1} and @code{.input2} sections from any -files are written to output section @code{outputc}. - -@smallexample -@group -SECTIONS @{ - outputa 0x10000 : - @{ - all.o - foo.o (.input1) - @} - outputb : - @{ - foo.o (.input2) - foo1.o (.input1) - @} - outputc : - @{ - *(.input1) - *(.input2) - @} -@} -@end group -@end smallexample - -This example shows how wildcard patterns might be used to partition -files. All @code{.text} sections are placed in @code{.text}, and all -@code{.bss} sections are placed in @code{.bss}. For all files beginning -with an upper case character, the @code{.data} section is placed into -@code{.DATA}; for all other files, the @code{.data} section is placed -into @code{.data}. - -@smallexample -@group -SECTIONS @{ - .text : @{ *(.text) @} - .DATA : @{ [A-Z]*(.data) @} - .data : @{ *(.data) @} - .bss : @{ *(.bss) @} -@} -@end group -@end smallexample - -@node Section Data Expressions -@subsection Section Data Expressions - -@cindex expressions in a section -The foregoing statements arrange, in your output file, data originating -from your input files. You can also place data directly in an output -section from the link command script. Most of these additional -statements involve expressions (@pxref{Expressions}). Although these -statements are shown separately here for ease of presentation, no such -segregation is needed within a section definition in the @code{SECTIONS} -command; you can intermix them freely with any of the statements we've -just described. - -@table @code -@cindex input filename symbols -@cindex filename symbols -@kindex CREATE_OBJECT_SYMBOLS -@item CREATE_OBJECT_SYMBOLS -Create a symbol for each input file -in the current section, set to the address of the first byte of -data written from that input file. For instance, with @code{a.out} -files it is conventional to have a symbol for each input file. You can -accomplish this by defining the output @code{.text} section as follows: -@smallexample -@group -SECTIONS @{ - .text 0x2020 : - @{ - CREATE_OBJECT_SYMBOLS - *(.text) - _etext = ALIGN(0x2000); - @} - @dots{} -@} -@end group -@end smallexample - -If @code{sample.ld} is a file containing this script, and @code{a.o}, -@code{b.o}, @code{c.o}, and @code{d.o} are four input files with -contents like the following--- -@smallexample -@group -/* a.c */ - -afunction() @{ @} -int adata=1; -int abss; -@end group -@end smallexample - -@noindent -@samp{ld -M -T sample.ld a.o b.o c.o d.o} would create a map like this, -containing symbols matching the object file names: -@smallexample -00000000 A __DYNAMIC -00004020 B _abss -00004000 D _adata -00002020 T _afunction -00004024 B _bbss -00004008 D _bdata -00002038 T _bfunction -00004028 B _cbss -00004010 D _cdata -00002050 T _cfunction -0000402c B _dbss -00004018 D _ddata -00002068 T _dfunction -00004020 D _edata -00004030 B _end -00004000 T _etext -00002020 t a.o -00002038 t b.o -00002050 t c.o -00002068 t d.o -@end smallexample - -@kindex @var{symbol} = @var{expression} ; -@kindex @var{symbol} @var{f}= @var{expression} ; -@item @var{symbol} = @var{expression} ; -@itemx @var{symbol} @var{f}= @var{expression} ; -@var{symbol} is any symbol name (@pxref{Symbols}). ``@var{f}='' -refers to any of the operators @code{&= += -= *= /=} which combine -arithmetic and assignment. - -@cindex assignment, in section defn -When you assign a value to a symbol within a particular section -definition, the value is relative to the beginning of the section -(@pxref{Assignment}). If you write - -@smallexample -@group -SECTIONS @{ - abs = 14 ; - @dots{} - .data : @{ @dots{} rel = 14 ; @dots{} @} - abs2 = 14 + ADDR(.data); - @dots{} -@} -@end group -@end smallexample - -@c FIXME: Try above example! -@noindent -@code{abs} and @code{rel} do not have the same value; @code{rel} has the -same value as @code{abs2}. - -@kindex BYTE(@var{expression}) -@kindex SHORT(@var{expression}) -@kindex LONG(@var{expression}) -@kindex QUAD(@var{expression}) -@kindex SQUAD(@var{expression}) -@cindex direct output -@item BYTE(@var{expression}) -@itemx SHORT(@var{expression}) -@itemx LONG(@var{expression}) -@itemx QUAD(@var{expression}) -@itemx SQUAD(@var{expression}) -By including one of these four statements in a section definition, you -can explicitly place one, two, four, eight unsigned, or eight signed -bytes (respectively) at the current address of that section. When using -a 64 bit host or target, @code{QUAD} and @code{SQUAD} are the same. -When both host and target are 32 bits, @code{QUAD} uses an unsigned 32 -bit value, and @code{SQUAD} sign extends the value. Both will use the -correct endianness when writing out the value. - -@ifclear SingleFormat -Multiple-byte quantities are represented in whatever byte order is -appropriate for the output file format (@pxref{BFD}). -@end ifclear - -@kindex FILL(@var{expression}) -@cindex holes, filling -@cindex unspecified memory -@item FILL(@var{expression}) -Specify the ``fill pattern'' for the current section. Any otherwise -unspecified regions of memory within the section (for example, regions -you skip over by assigning a new value to the location counter @samp{.}) -are filled with the two least significant bytes from the -@var{expression} argument. A @code{FILL} statement covers memory -locations @emph{after} the point it occurs in the section definition; by -including more than one @code{FILL} statement, you can have different -fill patterns in different parts of an output section. -@end table - -@node Section Options -@subsection Optional Section Attributes -@cindex section defn, full syntax -Here is the full syntax of a section definition, including all the -optional portions: - -@smallexample -@group -SECTIONS @{ -@dots{} -@var{secname} @var{start} BLOCK(@var{align}) (NOLOAD) : AT ( @var{ldadr} ) - @{ @var{contents} @} >@var{region} :@var{phdr} =@var{fill} -@dots{} -@} -@end group -@end smallexample - -@var{secname} and @var{contents} are required. @xref{Section -Definition}, and @ref{Section Placement}, for details on -@var{contents}. The remaining elements---@var{start}, -@code{BLOCK(@var{align)}}, @code{(NOLOAD)}, @code{AT ( @var{ldadr} )}, -@code{>@var{region}}, @code{:@var{phdr}}, and @code{=@var{fill}}---are -all optional. - -@table @code -@cindex start address, section -@cindex section start -@cindex section address -@item @var{start} -You can force the output section to be loaded at a specified address by -specifying @var{start} immediately following the section name. -@var{start} can be represented as any expression. The following -example generates section @var{output} at location -@code{0x40000000}: - -@smallexample -@group -SECTIONS @{ - @dots{} - output 0x40000000: @{ - @dots{} - @} - @dots{} -@} -@end group -@end smallexample - -@kindex BLOCK(@var{align}) -@cindex section alignment -@cindex aligning sections -@item BLOCK(@var{align}) -You can include @code{BLOCK()} specification to advance -the location counter @code{.} prior to the beginning of the section, so -that the section will begin at the specified alignment. @var{align} is -an expression. - -@kindex NOLOAD -@cindex prevent unnecessary loading -@cindex loading, preventing -@item (NOLOAD) -The @samp{(NOLOAD)} directive will mark a section to not be loaded at -run time. The linker will process the section normally, but will mark -it so that a program loader will not load it into memory. For example, -in the script sample below, the @code{ROM} section is addressed at -memory location @samp{0} and does not need to be loaded when the program -is run. The contents of the @code{ROM} section will appear in the -linker output file as usual. - -@smallexample -@group -SECTIONS @{ - ROM 0 (NOLOAD) : @{ @dots{} @} - @dots{} -@} -@end group -@end smallexample - -@kindex AT ( @var{ldadr} ) -@cindex specify load address -@cindex load address, specifying -@item AT ( @var{ldadr} ) -The expression @var{ldadr} that follows the @code{AT} keyword specifies -the load address of the section. The default (if you do not use the -@code{AT} keyword) is to make the load address the same as the -relocation address. This feature is designed to make it easy to build a -ROM image. For example, this @code{SECTIONS} definition creates two -output sections: one called @samp{.text}, which starts at @code{0x1000}, -and one called @samp{.mdata}, which is loaded at the end of the -@samp{.text} section even though its relocation address is -@code{0x2000}. The symbol @code{_data} is defined with the value -@code{0x2000}: - -@smallexample -@group -SECTIONS - @{ - .text 0x1000 : @{ *(.text) _etext = . ; @} - .mdata 0x2000 : - AT ( ADDR(.text) + SIZEOF ( .text ) ) - @{ _data = . ; *(.data); _edata = . ; @} - .bss 0x3000 : - @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@} -@} -@end group -@end smallexample - -The run-time initialization code (for C programs, usually @code{crt0}) -for use with a ROM generated this way has to include something like -the following, to copy the initialized data from the ROM image to its runtime -address: - -@smallexample -@group -char *src = _etext; -char *dst = _data; - -/* ROM has data at end of text; copy it. */ -while (dst < _edata) @{ - *dst++ = *src++; -@} - -/* Zero bss */ -for (dst = _bstart; dst< _bend; dst++) - *dst = 0; -@end group -@end smallexample - -@kindex >@var{region} -@cindex section, assigning to memory region -@cindex memory regions and sections -@item >@var{region} -Assign this section to a previously defined region of memory. -@xref{MEMORY}. - -@kindex :@var{phdr} -@cindex section, assigning to program header -@cindex program headers and sections -@item :@var{phdr} -Assign this section to a segment described by a program header. -@xref{PHDRS}. If a section is assigned to one or more segments, then -all subsequent allocated sections will be assigned to those segments as -well, unless they use an explicitly @code{:@var{phdr}} modifier. To -prevent a section from being assigned to a segment when it would -normally default to one, use @code{:NONE}. - -@kindex =@var{fill} -@cindex section fill pattern -@cindex fill pattern, entire section -@item =@var{fill} -Including @code{=@var{fill}} in a section definition specifies the -initial fill value for that section. You may use any expression to -specify @var{fill}. Any unallocated holes in the current output section -when written to the output file will be filled with the two least -significant bytes of the value, repeated as necessary. You can also -change the fill value with a @code{FILL} statement in the @var{contents} -of a section definition. - -@end table - -@node Overlays -@subsection Overlays -@kindex OVERLAY -@cindex overlays - -The @code{OVERLAY} command provides an easy way to describe sections -which are to be loaded as part of a single memory image but are to be -run at the same memory address. At run time, some sort of overlay -manager will copy the overlaid sections in and out of the runtime memory -address as required, perhaps by simply manipulating addressing bits. -This approach can be useful, for example, when a certain region of -memory is faster than another. - -The @code{OVERLAY} command is used within a @code{SECTIONS} command. It -appears as follows: -@smallexample -@group - OVERLAY @var{start} : [ NOCROSSREFS ] AT ( @var{ldaddr} ) - @{ - @var{secname1} @{ @var{contents} @} :@var{phdr} =@var{fill} - @var{secname2} @{ @var{contents} @} :@var{phdr} =@var{fill} - @dots{} - @} >@var{region} :@var{phdr} =@var{fill} -@end group -@end smallexample - -Everything is optional except @code{OVERLAY} (a keyword), and each -section must have a name (@var{secname1} and @var{secname2} above). The -section definitions within the @code{OVERLAY} construct are identical to -those within the general @code{SECTIONS} contruct (@pxref{SECTIONS}), -except that no addresses and no memory regions may be defined for -sections within an @code{OVERLAY}. - -The sections are all defined with the same starting address. The load -addresses of the sections are arranged such that they are consecutive in -memory starting at the load address used for the @code{OVERLAY} as a -whole (as with normal section definitions, the load address is optional, -and defaults to the start address; the start address is also optional, -and defaults to @code{.}). - -If the @code{NOCROSSREFS} keyword is used, and there any references -among the sections, the linker will report an error. Since the sections -all run at the same address, it normally does not make sense for one -section to refer directly to another. @xref{Option Commands, -NOCROSSREFS}. - -For each section within the @code{OVERLAY}, the linker automatically -defines two symbols. The symbol @code{__load_start_@var{secname}} is -defined as the starting load address of the section. The symbol -@code{__load_stop_@var{secname}} is defined as the final load address of -the section. Any characters within @var{secname} which are not legal -within C identifiers are removed. C (or assembler) code may use these -symbols to move the overlaid sections around as necessary. - -At the end of the overlay, the value of @code{.} is set to the start -address of the overlay plus the size of the largest section. - -Here is an example. Remember that this would appear inside a -@code{SECTIONS} construct. - -@smallexample -@group - OVERLAY 0x1000 : AT (0x4000) - @{ - .text0 @{ o1/*.o(.text) @} - .text1 @{ o2/*.o(.text) @} - @} -@end group -@end smallexample - -This will define both @code{.text0} and @code{.text1} to start at -address 0x1000. @code{.text0} will be loaded at address 0x4000, and -@code{.text1} will be loaded immediately after @code{.text0}. The -following symbols will be defined: @code{__load_start_text0}, -@code{__load_stop_text0}, @code{__load_start_text1}, -@code{__load_stop_text1}. - -C code to copy overlay @code{.text1} into the overlay area might look -like the following. - -@smallexample -@group - extern char __load_start_text1, __load_stop_text1; - memcpy ((char *) 0x1000, &__load_start_text1, - &__load_stop_text1 - &__load_start_text1); -@end group -@end smallexample - -Note that the @code{OVERLAY} command is just syntactic sugar, since -everything it does can be done using the more basic commands. The above -example could have been written identically as follows. - -@smallexample -@group - .text0 0x1000 : AT (0x4000) @{ o1/*.o(.text) @} - __load_start_text0 = LOADADDR (.text0); - __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); - .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @} - __load_start_text1 = LOADADDR (.text1); - __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); - . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); -@end group -@end smallexample - -@node PHDRS -@section ELF Program Headers -@kindex PHDRS -@cindex program headers -@cindex ELF program headers - -The ELF object file format uses @dfn{program headers}, which are read by -the system loader and describe how the program should be loaded into -memory. These program headers must be set correctly in order to run the -program on a native ELF system. The linker will create reasonable -program headers by default. However, in some cases, it is desirable to -specify the program headers more precisely; the @code{PHDRS} command may -be used for this purpose. When the @code{PHDRS} command is used, the -linker will not generate any program headers itself. - -The @code{PHDRS} command is only meaningful when generating an ELF -output file. It is ignored in other cases. This manual does not -describe the details of how the system loader interprets program -headers; for more information, see the ELF ABI. The program headers of -an ELF file may be displayed using the @samp{-p} option of the -@code{objdump} command. - -This is the syntax of the @code{PHDRS} command. The words @code{PHDRS}, -@code{FILEHDR}, @code{AT}, and @code{FLAGS} are keywords. - -@smallexample -@group -PHDRS -@{ - @var{name} @var{type} [ FILEHDR ] [ PHDRS ] [ AT ( @var{address} ) ] - [ FLAGS ( @var{flags} ) ] ; -@} -@end group -@end smallexample - -The @var{name} is used only for reference in the @code{SECTIONS} command -of the linker script. It does not get put into the output file. - -Certain program header types describe segments of memory which are -loaded from the file by the system loader. In the linker script, the -contents of these segments are specified by directing allocated output -sections to be placed in the segment. To do this, the command -describing the output section in the @code{SECTIONS} command should use -@samp{:@var{name}}, where @var{name} is the name of the program header -as it appears in the @code{PHDRS} command. @xref{Section Options}. - -It is normal for certain sections to appear in more than one segment. -This merely implies that one segment of memory contains another. This -is specified by repeating @samp{:@var{name}}, using it once for each -program header in which the section is to appear. - -If a section is placed in one or more segments using @samp{:@var{name}}, -then all subsequent allocated sections which do not specify -@samp{:@var{name}} are placed in the same segments. This is for -convenience, since generally a whole set of contiguous sections will be -placed in a single segment. To prevent a section from being assigned to -a segment when it would normally default to one, use @code{:NONE}. - -The @code{FILEHDR} and @code{PHDRS} keywords which may appear after the -program header type also indicate contents of the segment of memory. -The @code{FILEHDR} keyword means that the segment should include the ELF -file header. The @code{PHDRS} keyword means that the segment should -include the ELF program headers themselves. - -The @var{type} may be one of the following. The numbers indicate the -value of the keyword. - -@table @asis -@item @code{PT_NULL} (0) -Indicates an unused program header. - -@item @code{PT_LOAD} (1) -Indicates that this program header describes a segment to be loaded from -the file. - -@item @code{PT_DYNAMIC} (2) -Indicates a segment where dynamic linking information can be found. - -@item @code{PT_INTERP} (3) -Indicates a segment where the name of the program interpreter may be -found. - -@item @code{PT_NOTE} (4) -Indicates a segment holding note information. - -@item @code{PT_SHLIB} (5) -A reserved program header type, defined but not specified by the ELF -ABI. - -@item @code{PT_PHDR} (6) -Indicates a segment where the program headers may be found. - -@item @var{expression} -An expression giving the numeric type of the program header. This may -be used for types not defined above. -@end table - -It is possible to specify that a segment should be loaded at a -particular address in memory. This is done using an @code{AT} -expression. This is identical to the @code{AT} command used in the -@code{SECTIONS} command (@pxref{Section Options}). Using the @code{AT} -command for a program header overrides any information in the -@code{SECTIONS} command. - -Normally the segment flags are set based on the sections. The -@code{FLAGS} keyword may be used to explicitly specify the segment -flags. The value of @var{flags} must be an integer. It is used to -set the @code{p_flags} field of the program header. - -Here is an example of the use of @code{PHDRS}. This shows a typical set -of program headers used on a native ELF system. - -@example -@group -PHDRS -@{ - headers PT_PHDR PHDRS ; - interp PT_INTERP ; - text PT_LOAD FILEHDR PHDRS ; - data PT_LOAD ; - dynamic PT_DYNAMIC ; -@} - -SECTIONS -@{ - . = SIZEOF_HEADERS; - .interp : @{ *(.interp) @} :text :interp - .text : @{ *(.text) @} :text - .rodata : @{ *(.rodata) @} /* defaults to :text */ - @dots{} - . = . + 0x1000; /* move to a new page in memory */ - .data : @{ *(.data) @} :data - .dynamic : @{ *(.dynamic) @} :data :dynamic - @dots{} -@} -@end group -@end example - -@node Entry Point -@section The Entry Point -@kindex ENTRY(@var{symbol}) -@cindex start of execution -@cindex first instruction -The linker command language includes a command specifically for -defining the first executable instruction in an output file (its -@dfn{entry point}). Its argument is a symbol name: -@smallexample -ENTRY(@var{symbol}) -@end smallexample - -Like symbol assignments, the @code{ENTRY} command may be placed either -as an independent command in the command file, or among the section -definitions within the @code{SECTIONS} command---whatever makes the most -sense for your layout. - -@cindex entry point, defaults -@code{ENTRY} is only one of several ways of choosing the entry point. -You may indicate it in any of the following ways (shown in descending -order of priority: methods higher in the list override methods lower down). -@itemize @bullet -@item -the @samp{-e} @var{entry} command-line option; -@item -the @code{ENTRY(@var{symbol})} command in a linker control script; -@item -the value of the symbol @code{start}, if present; -@item -the address of the first byte of the @code{.text} section, if present; -@item -The address @code{0}. -@end itemize - -For example, you can use these rules to generate an entry point with an -assignment statement: if no symbol @code{start} is defined within your -input files, you can simply define it, assigning it an appropriate -value--- - -@smallexample -start = 0x2020; -@end smallexample - -@noindent -The example shows an absolute address, but you can use any expression. -For example, if your input object files use some other symbol-name -convention for the entry point, you can just assign the value of -whatever symbol contains the start address to @code{start}: - -@smallexample -start = other_symbol ; -@end smallexample - -@node Version Script -@section Version Script -@kindex VERSION @{script text@} -@cindex symbol versions -@cindex version script -@cindex versions of symbols -The linker command script includes a command specifically for -specifying a version script, and is only meaningful for ELF platforms -that support shared libraries. A version script can be -build directly into the linker script that you are using, or you -can supply the version script as just another input file to the linker -at the time that you link. The command script syntax is: -@smallexample -VERSION @{ version script contents @} -@end smallexample -The version script can also be specified to the linker by means of the -@samp{--version-script} linker command line option. -Version scripts are only meaningful when creating shared libraries. - -The format of the version script itself is identical to that used by -Sun's linker in Solaris 2.5. Versioning is done by defining a tree of -version nodes with the names and interdependencies specified in the -version script. The version script can specify which symbols are bound -to which version nodes, and it can reduce a specified set of symbols to -local scope so that they are not globally visible outside of the shared -library. - -The easiest way to demonstrate the version script language is with a few -examples. - -@smallexample -VERS_1.1 @{ - global: - foo1; - local: - old*; - original*; - new*; -@}; - -VERS_1.2 @{ - foo2; -@} VERS_1.1; - -VERS_2.0 @{ - bar1; bar2; -@} VERS_1.2; -@end smallexample - -In this example, three version nodes are defined. @samp{VERS_1.1} is the -first version node defined, and has no other dependencies. The symbol -@samp{foo1} is bound to this version node, and a number of symbols -that have appeared within various object files are reduced in scope to -local so that they are not visible outside of the shared library. - -Next, the node @samp{VERS_1.2} is defined. It depends upon -@samp{VERS_1.1}. The symbol @samp{foo2} is bound to this version node. - -Finally, the node @samp{VERS_2.0} is defined. It depends upon -@samp{VERS_1.2}. The symbols @samp{bar1} and @samp{bar2} are bound to -this version node. - -Symbols defined in the library which aren't specifically bound to a -version node are effectively bound to an unspecified base version of the -library. It is possible to bind all otherwise unspecified symbols to a -given version node using @samp{global: *} somewhere in the version -script. - -Lexically the names of the version nodes have no specific meaning other -than what they might suggest to the person reading them. The @samp{2.0} -version could just as well have appeared in between @samp{1.1} and -@samp{1.2}. However, this would be a confusing way to write a version -script. - -When you link an application against a shared library that has versioned -symbols, the application itself knows which version of each symbol it requires, -and it also knows which version nodes it needs from each shared library it is -linked against. Thus at runtime, the dynamic loader can make a quick check to -make sure that the libraries you have linked against do in fact supply all -of the version nodes that the application will need to resolve all of the -dynamic symbols. In this way it is possible for the dynamic linker to know -with certainty that all external symbols that it needs will be resolvable -without having to search for each symbol reference. - -The symbol versioning is in effect a much more sophisticated way of -doing minor version checking that SunOS does. The fundamental problem -that is being addressed here is that typically references to external -functions are bound on an as-needed basis, and are not all bound when -the application starts up. If a shared library is out of date, a -required interface may be missing; when the application tries to use -that interface, it may suddenly and unexpectedly fail. With symbol -versioning, the user will get a warning when they start their program if -the libraries being used with the application are too old. - -There are several GNU extensions to Sun's versioning approach. The -first of these is the ability to bind a symbol to a version node in the -source file where the symbol is defined instead of in the versioning -script. This was done mainly to reduce the burden on the library -maintainer. This can be done by putting something like: - -@smallexample -__asm__(".symver original_foo,foo@@VERS_1.1"); -@end smallexample - -in the C source file. This renamed the function @samp{original_foo} to -be an alias for @samp{foo} bound to the version node @samp{VERS_1.1}. -The @samp{local:} directive can be used to prevent the symbol -@samp{original_foo} from being exported. - -The second GNU extension is to allow multiple versions of the same function -to appear in a given shared library. In this way an incompatible change to -an interface can take place without increasing the major version number of -the shared library, while still allowing applications linked against the old -interface to continue to function. - -This can only be accomplished by using multiple @samp{.symver} -directives in the assembler. An example of this would be: - -@smallexample -__asm__(".symver original_foo,foo@@"); -__asm__(".symver old_foo,foo@@VERS_1.1"); -__asm__(".symver old_foo1,foo@@VERS_1.2"); -__asm__(".symver new_foo,foo@@@@VERS_2.0"); -@end smallexample - -In this example, @samp{foo@@} represents the symbol @samp{foo} bound to the -unspecified base version of the symbol. The source file that contains this -example would define 4 C functions: @samp{original_foo}, @samp{old_foo}, -@samp{old_foo1}, and @samp{new_foo}. - -When you have multiple definitions of a given symbol, there needs to be -some way to specify a default version to which external references to -this symbol will be bound. This can be accomplished with the -@samp{foo@@@@VERS_2.0} type of @samp{.symver} directive. Only one version of -a symbol can be declared 'default' in this manner - otherwise you would -effectively have multiple definitions of the same symbol. - -If you wish to bind a reference to a specific version of the symbol -within the shared library, you can use the aliases of convenience -(i.e. @samp{old_foo}), or you can use the @samp{.symver} directive to -specifically bind to an external version of the function in question. - -@node Option Commands -@section Option Commands -The command language includes a number of other commands that you can -use for specialized purposes. They are similar in purpose to -command-line options. - -@table @code -@kindex CONSTRUCTORS -@cindex C++ constructors, arranging in link -@cindex constructors, arranging in link -@item CONSTRUCTORS -When linking using the @code{a.out} object file format, the linker uses -an unusual set construct to support C++ global constructors and -destructors. When linking object file formats which do not support -arbitrary sections, such as @code{ECOFF} and @code{XCOFF}, the linker -will automatically recognize C++ global constructors and destructors by -name. For these object file formats, the @code{CONSTRUCTORS} command -tells the linker where this information should be placed. The -@code{CONSTRUCTORS} command is ignored for other object file formats. - -The symbol @w{@code{__CTOR_LIST__}} marks the start of the global -constructors, and the symbol @w{@code{__DTOR_LIST}} marks the end. The -first word in the list is the number of entries, followed by the address -of each constructor or destructor, followed by a zero word. The -compiler must arrange to actually run the code. For these object file -formats @sc{gnu} C++ calls constructors from a subroutine @code{__main}; -a call to @code{__main} is automatically inserted into the startup code -for @code{main}. @sc{gnu} C++ runs destructors either by using -@code{atexit}, or directly from the function @code{exit}. - -For object file formats such as @code{COFF} or @code{ELF} which support -multiple sections, @sc{gnu} C++ will normally arrange to put the -addresses of global constructors and destructors into the @code{.ctors} -and @code{.dtors} sections. Placing the following sequence into your -linker script will build the sort of table which the @sc{gnu} C++ -runtime code expects to see. - -@smallexample - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; -@end smallexample - -Normally the compiler and linker will handle these issues automatically, -and you will not need to concern yourself with them. However, you may -need to consider this if you are using C++ and writing your own linker -scripts. - -@need 1000 -@kindex FLOAT -@kindex NOFLOAT -@item FLOAT -@itemx NOFLOAT -These keywords were used in some older linkers to request a particular -math subroutine library. @code{ld} doesn't use the keywords, assuming -instead that any necessary subroutines are in libraries specified using -the general mechanisms for linking to archives; but to permit the use of -scripts that were written for the older linkers, the keywords -@code{FLOAT} and @code{NOFLOAT} are accepted and ignored. - -@kindex FORCE_COMMON_ALLOCATION -@cindex common allocation -@item FORCE_COMMON_ALLOCATION -This command has the same effect as the @samp{-d} command-line option: -to make @code{ld} assign space to common symbols even if a relocatable -output file is specified (@samp{-r}). - -@kindex INCLUDE @var{filename} -@cindex including a linker script -@item INCLUDE @var{filename} -Include the linker script @var{filename} at this point. The file will -be searched for in the current directory, and in any directory specified -with the @code{-L} option. You can nest calls to @code{INCLUDE} up to -10 levels deep. - -@kindex INPUT ( @var{files} ) -@cindex binary input files -@item INPUT ( @var{file}, @var{file}, @dots{} ) -@itemx INPUT ( @var{file} @var{file} @dots{} ) -Use this command to include binary input files in the link, without -including them in a particular section definition. -Specify the full name for each @var{file}, including @samp{.a} if -required. - -@code{ld} searches for each @var{file} through the archive-library -search path, just as for files you specify on the command line. -See the description of @samp{-L} in @ref{Options,,Command Line -Options}. - -If you use @samp{-l@var{file}}, @code{ld} will transform the name to -@code{lib@var{file}.a} as with the command line argument @samp{-l}. - -@kindex GROUP ( @var{files} ) -@cindex grouping input files -@item GROUP ( @var{file}, @var{file}, @dots{} ) -@itemx GROUP ( @var{file} @var{file} @dots{} ) -This command is like @code{INPUT}, except that the named files should -all be archives, and they are searched repeatedly until no new undefined -references are created. See the description of @samp{-(} in -@ref{Options,,Command Line Options}. - -@ignore -@kindex MAP ( @var{name} ) -@item MAP ( @var{name} ) -@c MAP(...) appears to look for an F in the arg, ignoring all other -@c chars; if it finds one, it sets "map_option_f" to true. But nothing -@c checks map_option_f. Apparently a stub for the future... -@end ignore - -@kindex OUTPUT ( @var{filename} ) -@cindex naming the output file -@item OUTPUT ( @var{filename} ) -Use this command to name the link output file @var{filename}. The -effect of @code{OUTPUT(@var{filename})} is identical to the effect of -@w{@samp{-o @var{filename}}}, which overrides it. You can use this -command to supply a default output-file name other than @code{a.out}. - -@ifclear SingleFormat -@kindex OUTPUT_ARCH ( @var{bfdname} ) -@cindex machine architecture, output -@item OUTPUT_ARCH ( @var{bfdname} ) -Specify a particular output machine architecture, with one of the names -used by the BFD back-end routines (@pxref{BFD}). This command is often -unnecessary; the architecture is most often set implicitly by either the -system BFD configuration or as a side effect of the @code{OUTPUT_FORMAT} -command. - -@kindex OUTPUT_FORMAT ( @var{bfdname} ) -@cindex format, output file -@item OUTPUT_FORMAT ( @var{bfdname} ) -When @code{ld} is configured to support multiple object code formats, -you can use this command to specify a particular output format. -@var{bfdname} is one of the names used by the BFD back-end routines -(@pxref{BFD}). The effect is identical to the effect of the -@samp{--oformat} command-line option. This selection affects only the -output file; the related command @code{TARGET} affects primarily input -files. -@end ifclear - -@kindex SEARCH_DIR ( @var{path} ) -@cindex path for libraries -@cindex search path, libraries -@item SEARCH_DIR ( @var{path} ) -Add @var{path} to the list of paths where @code{ld} looks for -archive libraries. @code{SEARCH_DIR(@var{path})} has the same -effect as @samp{-L@var{path}} on the command line. - -@kindex STARTUP ( @var{filename} ) -@cindex first input file -@item STARTUP ( @var{filename} ) -Ensure that @var{filename} is the first input file used in the link -process. - -@ifclear SingleFormat -@cindex input file format -@kindex TARGET ( @var{format} ) -@item TARGET ( @var{format} ) -When @code{ld} is configured to support multiple object code formats, -you can use this command to change the input-file object code format -(like the command-line option @samp{-b} or its synonym @samp{--format}). -The argument @var{format} is one of the strings used by BFD to name -binary formats. If @code{TARGET} is specified but @code{OUTPUT_FORMAT} -is not, the last @code{TARGET} argument is also used as the default -format for the @code{ld} output file. @xref{BFD}. - -@kindex GNUTARGET -If you don't use the @code{TARGET} command, @code{ld} uses the value of -the environment variable @code{GNUTARGET}, if available, to select the -output file format. If that variable is also absent, @code{ld} uses -the default format configured for your machine in the BFD libraries. -@end ifclear - -@cindex cross references -@kindex NOCROSSREFS ( @var{sections} ) -@item NOCROSSREFS ( @var{section} @var{section} @dots{} ) -This command may be used to tell @code{ld} to issue an error about any -references among certain sections. - -In certain types of programs, particularly on embedded systems, when one -section is loaded into memory, another section will not be. Any direct -references between the two sections would be errors. For example, it -would be an error if code in one section called a function defined in -the other section. - -The @code{NOCROSSREFS} command takes a list of section names. If -@code{ld} detects any cross references between the sections, it reports -an error and returns a non-zero exit status. The @code{NOCROSSREFS} -command uses output section names, defined in the @code{SECTIONS} -command. It does not use the names of input sections. -@end table - -@ifset GENERIC -@node Machine Dependent -@chapter Machine Dependent Features - -@cindex machine dependencies -@code{ld} has additional features on some platforms; the following -sections describe them. Machines where @code{ld} has no additional -functionality are not listed. - -@menu -* H8/300:: @code{ld} and the H8/300 -* i960:: @code{ld} and the Intel 960 family -@end menu -@end ifset - -@c FIXME! This could use @raisesections/@lowersections, but there seems to be a conflict -@c between those and node-defaulting. -@ifset H8300 -@ifclear GENERIC -@raisesections -@end ifclear -@node H8/300 -@section @code{ld} and the H8/300 - -@cindex H8/300 support -For the H8/300, @code{ld} can perform these global optimizations when -you specify the @samp{--relax} command-line option. - -@table @emph -@cindex relaxing on H8/300 -@item relaxing address modes -@code{ld} finds all @code{jsr} and @code{jmp} instructions whose -targets are within eight bits, and turns them into eight-bit -program-counter relative @code{bsr} and @code{bra} instructions, -respectively. - -@cindex synthesizing on H8/300 -@item synthesizing instructions -@c FIXME: specifically mov.b, or any mov instructions really? -@code{ld} finds all @code{mov.b} instructions which use the -sixteen-bit absolute address form, but refer to the top -page of memory, and changes them to use the eight-bit address form. -(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into -@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the -top page of memory). -@end table -@ifclear GENERIC -@lowersections -@end ifclear -@end ifset - -@ifclear GENERIC -@ifset Hitachi -@c This stuff is pointless to say unless you're especially concerned -@c with Hitachi chips; don't enable it for generic case, please. -@node Hitachi -@chapter @code{ld} and other Hitachi chips - -@code{ld} also supports the H8/300H, the H8/500, and the Hitachi SH. No -special features, commands, or command-line options are required for -these chips. -@end ifset -@end ifclear - -@ifset I960 -@ifclear GENERIC -@raisesections -@end ifclear -@node i960 -@section @code{ld} and the Intel 960 family - -@cindex i960 support - -You can use the @samp{-A@var{architecture}} command line option to -specify one of the two-letter names identifying members of the 960 -family; the option specifies the desired output target, and warns of any -incompatible instructions in the input files. It also modifies the -linker's search strategy for archive libraries, to support the use of -libraries specific to each particular architecture, by including in the -search loop names suffixed with the string identifying the architecture. - -For example, if your @code{ld} command line included @w{@samp{-ACA}} as -well as @w{@samp{-ltry}}, the linker would look (in its built-in search -paths, and in any paths you specify with @samp{-L}) for a library with -the names - -@smallexample -@group -try -libtry.a -tryca -libtryca.a -@end group -@end smallexample - -@noindent -The first two possibilities would be considered in any event; the last -two are due to the use of @w{@samp{-ACA}}. - -You can meaningfully use @samp{-A} more than once on a command line, since -the 960 architecture family allows combination of target architectures; each -use will add another pair of name variants to search for when @w{@samp{-l}} -specifies a library. - -@cindex @code{--relax} on i960 -@cindex relaxing on i960 -@code{ld} supports the @samp{--relax} option for the i960 family. If -you specify @samp{--relax}, @code{ld} finds all @code{balx} and -@code{calx} instructions whose targets are within 24 bits, and turns -them into 24-bit program-counter relative @code{bal} and @code{cal} -instructions, respectively. @code{ld} also turns @code{cal} -instructions into @code{bal} instructions when it determines that the -target subroutine is a leaf routine (that is, the target subroutine does -not itself call any subroutines). - -@ifclear GENERIC -@lowersections -@end ifclear -@end ifset - -@ifclear SingleFormat -@node BFD -@chapter BFD - -@cindex back end -@cindex object file management -@cindex object formats available -@kindex objdump -i -The linker accesses object and archive files using the BFD libraries. -These libraries allow the linker to use the same routines to operate on -object files whatever the object file format. A different object file -format can be supported simply by creating a new BFD back end and adding -it to the library. To conserve runtime memory, however, the linker and -associated tools are usually configured to support only a subset of the -object file formats available. You can use @code{objdump -i} -(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to -list all the formats available for your configuration. - -@cindex BFD requirements -@cindex requirements for BFD -As with most implementations, BFD is a compromise between -several conflicting requirements. The major factor influencing -BFD design was efficiency: any time used converting between -formats is time which would not have been spent had BFD not -been involved. This is partly offset by abstraction payback; since -BFD simplifies applications and back ends, more time and care -may be spent optimizing algorithms for a greater speed. - -One minor artifact of the BFD solution which you should bear in -mind is the potential for information loss. There are two places where -useful information can be lost using the BFD mechanism: during -conversion and during output. @xref{BFD information loss}. - -@menu -* BFD outline:: How it works: an outline of BFD -@end menu - -@node BFD outline -@section How it works: an outline of BFD -@cindex opening object files -@include bfdsumm.texi -@end ifclear - -@node Reporting Bugs -@chapter Reporting Bugs -@cindex bugs in @code{ld} -@cindex reporting bugs in @code{ld} - -Your bug reports play an essential role in making @code{ld} reliable. - -Reporting a bug may help you by bringing a solution to your problem, or -it may not. But in any case the principal function of a bug report is -to help the entire community by making the next version of @code{ld} -work better. Bug reports are your contribution to the maintenance of -@code{ld}. - -In order for a bug report to serve its purpose, you must include the -information that enables us to fix the bug. - -@menu -* Bug Criteria:: Have you found a bug? -* Bug Reporting:: How to report bugs -@end menu - -@node Bug Criteria -@section Have you found a bug? -@cindex bug criteria - -If you are not sure whether you have found a bug, here are some guidelines: - -@itemize @bullet -@cindex fatal signal -@cindex linker crash -@cindex crash of linker -@item -If the linker gets a fatal signal, for any input whatever, that is a -@code{ld} bug. Reliable linkers never crash. - -@cindex error on valid input -@item -If @code{ld} produces an error message for valid input, that is a bug. - -@cindex invalid input -@item -If @code{ld} does not produce an error message for invalid input, that -may be a bug. In the general case, the linker can not verify that -object files are correct. - -@item -If you are an experienced user of linkers, your suggestions for -improvement of @code{ld} are welcome in any case. -@end itemize - -@node Bug Reporting -@section How to report bugs -@cindex bug reports -@cindex @code{ld} bugs, reporting - -A number of companies and individuals offer support for @sc{gnu} -products. If you obtained @code{ld} from a support organization, we -recommend you contact that organization first. - -You can find contact information for many support companies and -individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs -distribution. - -In any event, we also recommend that you send bug reports for @code{ld} -to @samp{bug-gnu-utils@@gnu.org}. - -The fundamental principle of reporting bugs usefully is this: -@strong{report all the facts}. If you are not sure whether to state a -fact or leave it out, state it! - -Often people omit facts because they think they know what causes the -problem and assume that some details do not matter. Thus, you might -assume that the name of a symbol you use in an example does not matter. -Well, probably it does not, but one cannot be sure. Perhaps the bug is -a stray memory reference which happens to fetch from the location where -that name is stored in memory; perhaps, if the name were different, the -contents of that location would fool the linker into doing the right -thing despite the bug. Play it safe and give a specific, complete -example. That is the easiest thing for you to do, and the most helpful. - -Keep in mind that the purpose of a bug report is to enable us to fix the bug if -it is new to us. Therefore, always write your bug reports on the assumption -that the bug has not been reported previously. - -Sometimes people give a few sketchy facts and ask, ``Does this ring a -bell?'' Those bug reports are useless, and we urge everyone to -@emph{refuse to respond to them} except to chide the sender to report -bugs properly. - -To enable us to fix the bug, you should include all these things: - -@itemize @bullet -@item -The version of @code{ld}. @code{ld} announces it if you start it with -the @samp{--version} argument. - -Without this, we will not know whether there is any point in looking for -the bug in the current version of @code{ld}. - -@item -Any patches you may have applied to the @code{ld} source, including any -patches made to the @code{BFD} library. - -@item -The type of machine you are using, and the operating system name and -version number. - -@item -What compiler (and its version) was used to compile @code{ld}---e.g. -``@code{gcc-2.7}''. - -@item -The command arguments you gave the linker to link your example and -observe the bug. To guarantee you will not omit something important, -list them all. A copy of the Makefile (or the output from make) is -sufficient. - -If we were to try to guess the arguments, we would probably guess wrong -and then we might not encounter the bug. - -@item -A complete input file, or set of input files, that will reproduce the -bug. It is generally most helpful to send the actual object files, -uuencoded if necessary to get them through the mail system. Making them -available for anonymous FTP is not as good, but may be the only -reasonable choice for large object files. - -If the source files were assembled using @code{gas} or compiled using -@code{gcc}, then it may be OK to send the source files rather than the -object files. In this case, be sure to say exactly what version of -@code{gas} or @code{gcc} was used to produce the object files. Also say -how @code{gas} or @code{gcc} were configured. - -@item -A description of what behavior you observe that you believe is -incorrect. For example, ``It gets a fatal signal.'' - -Of course, if the bug is that @code{ld} gets a fatal signal, then we -will certainly notice it. But if the bug is incorrect output, we might -not notice unless it is glaringly wrong. You might as well not give us -a chance to make a mistake. - -Even if the problem you experience is a fatal signal, you should still -say so explicitly. Suppose something strange is going on, such as, your -copy of @code{ld} is out of synch, or you have encountered a bug in the -C library on your system. (This has happened!) Your copy might crash -and ours would not. If you told us to expect a crash, then when ours -fails to crash, we would know that the bug was not happening for us. If -you had not told us to expect a crash, then we would not be able to draw -any conclusion from our observations. - -@item -If you wish to suggest changes to the @code{ld} source, send us context -diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or -@samp{-p} option. Always send diffs from the old file to the new file. -If you even discuss something in the @code{ld} source, refer to it by -context, not by line number. - -The line numbers in our development sources will not match those in your -sources. Your line numbers would convey no useful information to us. -@end itemize - -Here are some things that are not necessary: - -@itemize @bullet -@item -A description of the envelope of the bug. - -Often people who encounter a bug spend a lot of time investigating -which changes to the input file will make the bug go away and which -changes will not affect it. - -This is often time consuming and not very useful, because the way we -will find the bug is by running a single example under the debugger -with breakpoints, not by pure deduction from a series of examples. -We recommend that you save your time for something else. - -Of course, if you can find a simpler example to report @emph{instead} -of the original one, that is a convenience for us. Errors in the -output will be easier to spot, running under the debugger will take -less time, and so on. - -However, simplification is not vital; if you do not want to do this, -report the bug anyway and send us the entire test case you used. - -@item -A patch for the bug. - -A patch for the bug does help us if it is a good one. But do not omit -the necessary information, such as the test case, on the assumption that -a patch is all we need. We might see problems with your patch and decide -to fix the problem another way, or we might not understand it at all. - -Sometimes with a program as complicated as @code{ld} it is very hard to -construct an example that will make the program follow a certain path -through the code. If you do not send us the example, we will not be -able to construct one, so we will not be able to verify that the bug is -fixed. - -And if we cannot understand what bug you are trying to fix, or why your -patch should be an improvement, we will not install it. A test case will -help us to understand. - -@item -A guess about what the bug is or what it depends on. - -Such guesses are usually wrong. Even we cannot guess right about such -things without first using the debugger to find the facts. -@end itemize - -@node MRI -@appendix MRI Compatible Script Files -@cindex MRI compatibility -To aid users making the transition to @sc{gnu} @code{ld} from the MRI -linker, @code{ld} can use MRI compatible linker scripts as an -alternative to the more general-purpose linker scripting language -described in @ref{Commands,,Command Language}. MRI compatible linker -scripts have a much simpler command set than the scripting language -otherwise used with @code{ld}. @sc{gnu} @code{ld} supports the most -commonly used MRI linker commands; these commands are described here. - -In general, MRI scripts aren't of much use with the @code{a.out} object -file format, since it only has three sections and MRI scripts lack some -features to make use of them. - -You can specify a file containing an MRI-compatible script using the -@samp{-c} command-line option. - -Each command in an MRI-compatible script occupies its own line; each -command line starts with the keyword that identifies the command (though -blank lines are also allowed for punctuation). If a line of an -MRI-compatible script begins with an unrecognized keyword, @code{ld} -issues a warning message, but continues processing the script. - -Lines beginning with @samp{*} are comments. - -You can write these commands using all upper-case letters, or all -lower case; for example, @samp{chip} is the same as @samp{CHIP}. -The following list shows only the upper-case form of each command. - -@table @code -@cindex @code{ABSOLUTE} (MRI) -@item ABSOLUTE @var{secname} -@itemx ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname} -Normally, @code{ld} includes in the output file all sections from all -the input files. However, in an MRI-compatible script, you can use the -@code{ABSOLUTE} command to restrict the sections that will be present in -your output program. If the @code{ABSOLUTE} command is used at all in a -script, then only the sections named explicitly in @code{ABSOLUTE} -commands will appear in the linker output. You can still use other -input sections (whatever you select on the command line, or using -@code{LOAD}) to resolve addresses in the output file. - -@cindex @code{ALIAS} (MRI) -@item ALIAS @var{out-secname}, @var{in-secname} -Use this command to place the data from input section @var{in-secname} -in a section called @var{out-secname} in the linker output file. - -@var{in-secname} may be an integer. - -@cindex @code{ALIGN} (MRI) -@item ALIGN @var{secname} = @var{expression} -Align the section called @var{secname} to @var{expression}. The -@var{expression} should be a power of two. - -@cindex @code{BASE} (MRI) -@item BASE @var{expression} -Use the value of @var{expression} as the lowest address (other than -absolute addresses) in the output file. - -@cindex @code{CHIP} (MRI) -@item CHIP @var{expression} -@itemx CHIP @var{expression}, @var{expression} -This command does nothing; it is accepted only for compatibility. - -@cindex @code{END} (MRI) -@item END -This command does nothing whatever; it's only accepted for compatibility. - -@cindex @code{FORMAT} (MRI) -@item FORMAT @var{output-format} -Similar to the @code{OUTPUT_FORMAT} command in the more general linker -language, but restricted to one of these output formats: - -@enumerate -@item -S-records, if @var{output-format} is @samp{S} - -@item -IEEE, if @var{output-format} is @samp{IEEE} - -@item -COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is -@samp{COFF} -@end enumerate - -@cindex @code{LIST} (MRI) -@item LIST @var{anything}@dots{} -Print (to the standard output file) a link map, as produced by the -@code{ld} command-line option @samp{-M}. - -The keyword @code{LIST} may be followed by anything on the -same line, with no change in its effect. - -@cindex @code{LOAD} (MRI) -@item LOAD @var{filename} -@itemx LOAD @var{filename}, @var{filename}, @dots{} @var{filename} -Include one or more object file @var{filename} in the link; this has the -same effect as specifying @var{filename} directly on the @code{ld} -command line. - -@cindex @code{NAME} (MRI) -@item NAME @var{output-name} -@var{output-name} is the name for the program produced by @code{ld}; the -MRI-compatible command @code{NAME} is equivalent to the command-line -option @samp{-o} or the general script language command @code{OUTPUT}. - -@cindex @code{ORDER} (MRI) -@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname} -@itemx ORDER @var{secname} @var{secname} @var{secname} -Normally, @code{ld} orders the sections in its output file in the -order in which they first appear in the input files. In an MRI-compatible -script, you can override this ordering with the @code{ORDER} command. The -sections you list with @code{ORDER} will appear first in your output -file, in the order specified. - -@cindex @code{PUBLIC} (MRI) -@item PUBLIC @var{name}=@var{expression} -@itemx PUBLIC @var{name},@var{expression} -@itemx PUBLIC @var{name} @var{expression} -Supply a value (@var{expression}) for external symbol -@var{name} used in the linker input files. - -@cindex @code{SECT} (MRI) -@item SECT @var{secname}, @var{expression} -@itemx SECT @var{secname}=@var{expression} -@itemx SECT @var{secname} @var{expression} -You can use any of these three forms of the @code{SECT} command to -specify the start address (@var{expression}) for section @var{secname}. -If you have more than one @code{SECT} statement for the same -@var{secname}, only the @emph{first} sets the start address. -@end table - -@node Index -@unnumbered Index - -@printindex cp - -@tex -% I think something like @colophon should be in texinfo. In the -% meantime: -\long\def\colophon{\hbox to0pt{}\vfill -\centerline{The body of this manual is set in} -\centerline{\fontname\tenrm,} -\centerline{with headings in {\bf\fontname\tenbf}} -\centerline{and examples in {\tt\fontname\tentt}.} -\centerline{{\it\fontname\tenit\/} and} -\centerline{{\sl\fontname\tensl\/}} -\centerline{are used for emphasis.}\vfill} -\page\colophon -% Blame: doc@cygnus.com, 28mar91. -@end tex - - -@contents -@bye - - diff --git a/contrib/binutils/ld/ldcref.c b/contrib/binutils/ld/ldcref.c deleted file mode 100644 index 7022daf960e5..000000000000 --- a/contrib/binutils/ld/ldcref.c +++ /dev/null @@ -1,547 +0,0 @@ -/* ldcref.c -- output a cross reference table - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - Written by Ian Lance Taylor <ian@cygnus.com> - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This file holds routines that manage the cross reference table. - The table is used to generate cross reference reports. It is also - used to implement the NOCROSSREFS command in the linker script. */ - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" -#include "libiberty.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" - -/* We keep an instance of this structure for each reference to a - symbol from a given object. */ - -struct cref_ref -{ - /* The next reference. */ - struct cref_ref *next; - /* The object. */ - bfd *abfd; - /* True if the symbol is defined. */ - unsigned int def : 1; - /* True if the symbol is common. */ - unsigned int common : 1; - /* True if the symbol is undefined. */ - unsigned int undef : 1; -}; - -/* We keep a hash table of symbols. Each entry looks like this. */ - -struct cref_hash_entry -{ - struct bfd_hash_entry root; - /* The demangled name. */ - char *demangled; - /* References to and definitions of this symbol. */ - struct cref_ref *refs; -}; - -/* This is what the hash table looks like. */ - -struct cref_hash_table -{ - struct bfd_hash_table root; -}; - -/* Local functions. */ - -static struct bfd_hash_entry *cref_hash_newfunc - PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *)); -static boolean cref_fill_array PARAMS ((struct cref_hash_entry *, PTR)); -static int cref_sort_array PARAMS ((const PTR, const PTR)); -static void output_one_cref PARAMS ((FILE *, struct cref_hash_entry *)); -static boolean check_nocrossref PARAMS ((struct cref_hash_entry *, PTR)); -static void check_refs - PARAMS ((struct cref_hash_entry *, struct bfd_link_hash_entry *, - struct lang_nocrossrefs *)); -static void check_reloc_refs PARAMS ((bfd *, asection *, PTR)); - -/* Look up an entry in the cref hash table. */ - -#define cref_hash_lookup(table, string, create, copy) \ - ((struct cref_hash_entry *) \ - bfd_hash_lookup (&(table)->root, (string), (create), (copy))) - -/* Traverse the cref hash table. */ - -#define cref_hash_traverse(table, func, info) \ - (bfd_hash_traverse \ - (&(table)->root, \ - (boolean (*) PARAMS ((struct bfd_hash_entry *, PTR))) (func), \ - (info))) - -/* The cref hash table. */ - -static struct cref_hash_table cref_table; - -/* Whether the cref hash table has been initialized. */ - -static boolean cref_initialized; - -/* The number of symbols seen so far. */ - -static size_t cref_symcount; - -/* Create an entry in a cref hash table. */ - -static struct bfd_hash_entry * -cref_hash_newfunc (entry, table, string) - struct bfd_hash_entry *entry; - struct bfd_hash_table *table; - const char *string; -{ - struct cref_hash_entry *ret = (struct cref_hash_entry *) entry; - - /* Allocate the structure if it has not already been allocated by a - subclass. */ - if (ret == NULL) - ret = ((struct cref_hash_entry *) - bfd_hash_allocate (table, sizeof (struct cref_hash_entry))); - if (ret == NULL) - return (struct bfd_hash_entry *) ret; - - /* Call the allocation method of the superclass. */ - ret = ((struct cref_hash_entry *) - bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); - if (ret != NULL) - { - /* Set local fields. */ - ret->demangled = NULL; - ret->refs = NULL; - - /* Keep a count of the number of entries created in the hash - table. */ - ++cref_symcount; - } - - return (struct bfd_hash_entry *) ret; -} - -/* Add a symbol to the cref hash table. This is called for every - symbol that is seen during the link. */ - -/*ARGSUSED*/ -void -add_cref (name, abfd, section, value) - const char *name; - bfd *abfd; - asection *section; - bfd_vma value; -{ - struct cref_hash_entry *h; - struct cref_ref *r; - - if (! cref_initialized) - { - if (! bfd_hash_table_init (&cref_table.root, cref_hash_newfunc)) - einfo ("%X%P: bfd_hash_table_init of cref table failed: %E\n"); - cref_initialized = true; - } - - h = cref_hash_lookup (&cref_table, name, true, false); - if (h == NULL) - einfo ("%X%P: cref_hash_lookup failed: %E\n"); - - for (r = h->refs; r != NULL; r = r->next) - if (r->abfd == abfd) - break; - - if (r == NULL) - { - r = (struct cref_ref *) xmalloc (sizeof *r); - r->next = h->refs; - h->refs = r; - r->abfd = abfd; - r->def = false; - r->common = false; - r->undef = false; - } - - if (bfd_is_und_section (section)) - r->undef = true; - else if (bfd_is_com_section (section)) - r->common = true; - else - r->def = true; -} - -/* Copy the addresses of the hash table entries into an array. This - is called via cref_hash_traverse. We also fill in the demangled - name. */ - -static boolean -cref_fill_array (h, data) - struct cref_hash_entry *h; - PTR data; -{ - struct cref_hash_entry ***pph = (struct cref_hash_entry ***) data; - - ASSERT (h->demangled == NULL); - h->demangled = demangle (h->root.string); - - **pph = h; - - ++*pph; - - return true; -} - -/* Sort an array of cref hash table entries by name. */ - -static int -cref_sort_array (a1, a2) - const PTR a1; - const PTR a2; -{ - const struct cref_hash_entry **p1 = (const struct cref_hash_entry **) a1; - const struct cref_hash_entry **p2 = (const struct cref_hash_entry **) a2; - - return strcmp ((*p1)->demangled, (*p2)->demangled); -} - -/* Write out the cref table. */ - -#define FILECOL (50) - -void -output_cref (fp) - FILE *fp; -{ - int len; - struct cref_hash_entry **csyms, **csym_fill, **csym, **csym_end; - - fprintf (fp, "\nCross Reference Table\n\n"); - fprintf (fp, "Symbol"); - len = sizeof "Symbol" - 1; - while (len < FILECOL) - { - putc (' ' , fp); - ++len; - } - fprintf (fp, "File\n"); - - if (! cref_initialized) - { - fprintf (fp, "No symbols\n"); - return; - } - - csyms = ((struct cref_hash_entry **) - xmalloc (cref_symcount * sizeof (*csyms))); - - csym_fill = csyms; - cref_hash_traverse (&cref_table, cref_fill_array, &csym_fill); - ASSERT ((size_t) (csym_fill - csyms) == cref_symcount); - - qsort (csyms, cref_symcount, sizeof (*csyms), cref_sort_array); - - csym_end = csyms + cref_symcount; - for (csym = csyms; csym < csym_end; csym++) - output_one_cref (fp, *csym); -} - -/* Output one entry in the cross reference table. */ - -static void -output_one_cref (fp, h) - FILE *fp; - struct cref_hash_entry *h; -{ - int len; - struct bfd_link_hash_entry *hl; - struct cref_ref *r; - - hl = bfd_link_hash_lookup (link_info.hash, h->root.string, false, - false, true); - if (hl == NULL) - einfo ("%P: symbol `%T' missing from main hash table\n", - h->root.string); - else - { - /* If this symbol is defined in a dynamic object but never - referenced by a normal object, then don't print it. */ - if (hl->type == bfd_link_hash_defined) - { - if (hl->u.def.section->output_section == NULL) - return; - if (hl->u.def.section->owner != NULL - && (hl->u.def.section->owner->flags & DYNAMIC) != 0) - { - for (r = h->refs; r != NULL; r = r->next) - if ((r->abfd->flags & DYNAMIC) == 0) - break; - if (r == NULL) - return; - } - } - } - - fprintf (fp, "%s ", h->demangled); - len = strlen (h->demangled) + 1; - - for (r = h->refs; r != NULL; r = r->next) - { - if (r->def) - { - while (len < FILECOL) - { - putc (' ', fp); - ++len; - } - lfinfo (fp, "%B\n", r->abfd); - len = 0; - } - } - - for (r = h->refs; r != NULL; r = r->next) - { - if (! r->def) - { - while (len < FILECOL) - { - putc (' ', fp); - ++len; - } - lfinfo (fp, "%B\n", r->abfd); - len = 0; - } - } - - ASSERT (len == 0); -} - -/* Check for prohibited cross references. */ - -void -check_nocrossrefs () -{ - if (! cref_initialized) - return; - - cref_hash_traverse (&cref_table, check_nocrossref, (PTR) NULL); -} - -/* Check one symbol to see if it is a prohibited cross reference. */ - -/*ARGSUSED*/ -static boolean -check_nocrossref (h, ignore) - struct cref_hash_entry *h; - PTR ignore; -{ - struct bfd_link_hash_entry *hl; - asection *defsec; - const char *defsecname; - struct lang_nocrossrefs *ncrs; - struct lang_nocrossref *ncr; - - hl = bfd_link_hash_lookup (link_info.hash, h->root.string, false, - false, true); - if (hl == NULL) - { - einfo ("%P: symbol `%T' missing from main hash table\n", - h->root.string); - return true; - } - - if (hl->type != bfd_link_hash_defined - && hl->type != bfd_link_hash_defweak) - return true; - - defsec = hl->u.def.section->output_section; - if (defsec == NULL) - return true; - defsecname = bfd_get_section_name (defsec->owner, defsec); - - for (ncrs = nocrossref_list; ncrs != NULL; ncrs = ncrs->next) - for (ncr = ncrs->list; ncr != NULL; ncr = ncr->next) - if (strcmp (ncr->name, defsecname) == 0) - check_refs (h, hl, ncrs); - - return true; -} - -/* The struct is used to pass information from check_refs to - check_reloc_refs through bfd_map_over_sections. */ - -struct check_refs_info -{ - struct cref_hash_entry *h; - asection *defsec; - struct lang_nocrossrefs *ncrs; - asymbol **asymbols; - boolean same; -}; - -/* This function is called for each symbol defined in a section which - prohibits cross references. We need to look through all references - to this symbol, and ensure that the references are not from - prohibited sections. */ - -static void -check_refs (h, hl, ncrs) - struct cref_hash_entry *h; - struct bfd_link_hash_entry *hl; - struct lang_nocrossrefs *ncrs; -{ - struct cref_ref *ref; - - for (ref = h->refs; ref != NULL; ref = ref->next) - { - lang_input_statement_type *li; - asymbol **asymbols; - struct check_refs_info info; - - /* We need to look through the relocations for this BFD, to see - if any of the relocations which refer to this symbol are from - a prohibited section. Note that we need to do this even for - the BFD in which the symbol is defined, since even a single - BFD might contain a prohibited cross reference; for this - case, we set the SAME field in INFO, which will cause - CHECK_RELOCS_REFS to check for relocations against the - section as well as against the symbol. */ - - li = (lang_input_statement_type *) ref->abfd->usrdata; - if (li != NULL && li->asymbols != NULL) - asymbols = li->asymbols; - else - { - long symsize; - long symbol_count; - - symsize = bfd_get_symtab_upper_bound (ref->abfd); - if (symsize < 0) - einfo ("%B%F: could not read symbols; %E\n", ref->abfd); - asymbols = (asymbol **) xmalloc (symsize); - symbol_count = bfd_canonicalize_symtab (ref->abfd, asymbols); - if (symbol_count < 0) - einfo ("%B%F: could not read symbols: %E\n", ref->abfd); - if (li != NULL) - { - li->asymbols = asymbols; - li->symbol_count = symbol_count; - } - } - - info.h = h; - info.defsec = hl->u.def.section; - info.ncrs = ncrs; - info.asymbols = asymbols; - if (ref->abfd == hl->u.def.section->owner) - info.same = true; - else - info.same = false; - bfd_map_over_sections (ref->abfd, check_reloc_refs, (PTR) &info); - - if (li == NULL) - free (asymbols); - } -} - -/* This is called via bfd_map_over_sections. INFO->H is a symbol - defined in INFO->DEFSECNAME. If this section maps into any of the - sections listed in INFO->NCRS, other than INFO->DEFSECNAME, then we - look through the relocations. If any of the relocations are to - INFO->H, then we report a prohibited cross reference error. */ - -static void -check_reloc_refs (abfd, sec, iarg) - bfd *abfd; - asection *sec; - PTR iarg; -{ - struct check_refs_info *info = (struct check_refs_info *) iarg; - asection *outsec; - const char *outsecname; - asection *outdefsec; - const char *outdefsecname; - struct lang_nocrossref *ncr; - const char *symname; - long relsize; - arelent **relpp; - long relcount; - arelent **p, **pend; - - outsec = sec->output_section; - outsecname = bfd_get_section_name (outsec->owner, outsec); - - outdefsec = info->defsec->output_section; - outdefsecname = bfd_get_section_name (outdefsec->owner, outdefsec); - - /* The section where the symbol is defined is permitted. */ - if (strcmp (outsecname, outdefsecname) == 0) - return; - - for (ncr = info->ncrs->list; ncr != NULL; ncr = ncr->next) - if (strcmp (outsecname, ncr->name) == 0) - break; - - if (ncr == NULL) - return; - - /* This section is one for which cross references are prohibited. - Look through the relocations, and see if any of them are to - INFO->H. */ - - symname = info->h->root.string; - - relsize = bfd_get_reloc_upper_bound (abfd, sec); - if (relsize < 0) - einfo ("%B%F: could not read relocs: %E\n", abfd); - if (relsize == 0) - return; - - relpp = (arelent **) xmalloc (relsize); - relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols); - if (relcount < 0) - einfo ("%B%F: could not read relocs: %E\n", abfd); - - p = relpp; - pend = p + relcount; - for (; p < pend && *p != NULL; p++) - { - arelent *q = *p; - - if (q->sym_ptr_ptr != NULL - && *q->sym_ptr_ptr != NULL - && (strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), symname) == 0 - || (info->same - && bfd_get_section (*q->sym_ptr_ptr) == info->defsec))) - { - /* We found a reloc for the symbol. The symbol is defined - in OUTSECNAME. This reloc is from a section which is - mapped into a section from which references to OUTSECNAME - are prohibited. We must report an error. */ - einfo ("%X%C: prohibited cross reference from %s to `%T' in %s\n", - abfd, sec, q->address, outsecname, - bfd_asymbol_name (*q->sym_ptr_ptr), outdefsecname); - } - } - - free (relpp); -} diff --git a/contrib/binutils/ld/ldctor.c b/contrib/binutils/ld/ldctor.c deleted file mode 100644 index 6e40938d7f18..000000000000 --- a/contrib/binutils/ld/ldctor.c +++ /dev/null @@ -1,256 +0,0 @@ -/* ldctor.c -- constructor support routines - Copyright (C) 1991, 92, 93, 94, 1995 Free Software Foundation, Inc. - By Steve Chamberlain <sac@cygnus.com> - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldmisc.h" -#include "ldgram.h" -#include "ldmain.h" -#include "ldctor.h" - -/* The list of statements needed to handle constructors. These are - invoked by the command CONSTRUCTORS in the linker script. */ -lang_statement_list_type constructor_list; - -/* The sets we have seen. */ -struct set_info *sets; - -/* Add an entry to a set. H is the entry in the linker hash table. - RELOC is the relocation to use for an entry in the set. SECTION - and VALUE are the value to add. This is called during the first - phase of the link, when we are still gathering symbols together. - We just record the information now. The ldctor_find_constructors - function will construct the sets. */ - -void -ldctor_add_set_entry (h, reloc, name, section, value) - struct bfd_link_hash_entry *h; - bfd_reloc_code_real_type reloc; - const char *name; - asection *section; - bfd_vma value; -{ - struct set_info *p; - struct set_element *e; - struct set_element **epp; - - for (p = sets; p != (struct set_info *) NULL; p = p->next) - if (p->h == h) - break; - - if (p == (struct set_info *) NULL) - { - p = (struct set_info *) xmalloc (sizeof (struct set_info)); - p->next = sets; - sets = p; - p->h = h; - p->reloc = reloc; - p->count = 0; - p->elements = NULL; - } - else - { - if (p->reloc != reloc) - { - einfo ("%P%X: Different relocs used in set %s\n", h->root.string); - return; - } - - /* Don't permit a set to be constructed from different object - file formats. The same reloc may have different results. We - actually could sometimes handle this, but the case is - unlikely to ever arise. Sometimes constructor symbols are in - unusual sections, such as the absolute section--this appears - to be the case in Linux a.out--and in such cases we just - assume everything is OK. */ - if (p->elements != NULL - && section->owner != NULL - && p->elements->section->owner != NULL - && strcmp (bfd_get_target (section->owner), - bfd_get_target (p->elements->section->owner)) != 0) - { - einfo ("%P%X: Different object file formats composing set %s\n", - h->root.string); - return; - } - } - - e = (struct set_element *) xmalloc (sizeof (struct set_element)); - e->next = NULL; - e->name = name; - e->section = section; - e->value = value; - - for (epp = &p->elements; *epp != NULL; epp = &(*epp)->next) - ; - *epp = e; - - ++p->count; -} - -/* This function is called after the first phase of the link and - before the second phase. At this point all set information has - been gathered. We now put the statements to build the sets - themselves into constructor_list. */ - -void -ldctor_build_sets () -{ - static boolean called; - lang_statement_list_type *old; - boolean header_printed; - struct set_info *p; - - /* The emulation code may call us directly, but we only want to do - this once. */ - if (called) - return; - called = true; - - old = stat_ptr; - stat_ptr = &constructor_list; - - lang_list_init (stat_ptr); - - header_printed = false; - for (p = sets; p != (struct set_info *) NULL; p = p->next) - { - struct set_element *e; - reloc_howto_type *howto; - int reloc_size, size; - - /* If the symbol is defined, we may have been invoked from - collect, and the sets may already have been built, so we do - not do anything. */ - if (p->h->type == bfd_link_hash_defined - || p->h->type == bfd_link_hash_defweak) - continue; - - /* For each set we build: - set: - .long number_of_elements - .long element0 - ... - .long elementN - .long 0 - except that we use the right size instead of .long. When - generating relocateable output, we generate relocs instead of - addresses. */ - howto = bfd_reloc_type_lookup (output_bfd, p->reloc); - if (howto == (reloc_howto_type *) NULL) - { - if (link_info.relocateable) - { - einfo ("%P%X: %s does not support reloc %s for set %s\n", - bfd_get_target (output_bfd), - bfd_get_reloc_code_name (p->reloc), - p->h->root.string); - continue; - } - - /* If this is not a relocateable link, all we need is the - size, which we can get from the input BFD. */ - howto = bfd_reloc_type_lookup (p->elements->section->owner, - p->reloc); - if (howto == NULL) - { - einfo ("%P%X: %s does not support reloc %s for set %s\n", - bfd_get_target (p->elements->section->owner), - bfd_get_reloc_code_name (p->reloc), - p->h->root.string); - continue; - } - } - - reloc_size = bfd_get_reloc_size (howto); - switch (reloc_size) - { - case 1: size = BYTE; break; - case 2: size = SHORT; break; - case 4: size = LONG; break; - case 8: - if (howto->complain_on_overflow == complain_overflow_signed) - size = SQUAD; - else - size = QUAD; - break; - default: - einfo ("%P%X: Unsupported size %d for set %s\n", - bfd_get_reloc_size (howto), p->h->root.string); - size = LONG; - break; - } - - lang_add_assignment (exp_assop ('=', ".", - exp_unop (ALIGN_K, - exp_intop (reloc_size)))); - lang_add_assignment (exp_assop ('=', p->h->root.string, - exp_nameop (NAME, "."))); - lang_add_data (size, exp_intop ((bfd_vma) p->count)); - - for (e = p->elements; e != (struct set_element *) NULL; e = e->next) - { - if (config.map_file != NULL) - { - int len; - - if (! header_printed) - { - minfo ("\nSet Symbol\n\n"); - header_printed = true; - } - - minfo ("%s", p->h->root.string); - len = strlen (p->h->root.string); - - if (len >= 19) - { - print_nl (); - len = 0; - } - while (len < 20) - { - print_space (); - ++len; - } - - if (e->name != NULL) - minfo ("%T\n", e->name); - else - minfo ("%G\n", e->section->owner, e->section, e->value); - } - - if (link_info.relocateable) - lang_add_reloc (p->reloc, howto, e->section, e->name, - exp_intop (e->value)); - else - lang_add_data (size, exp_relop (e->section, e->value)); - } - - lang_add_data (size, exp_intop (0)); - } - - stat_ptr = old; -} diff --git a/contrib/binutils/ld/ldctor.h b/contrib/binutils/ld/ldctor.h deleted file mode 100644 index d87f0dbd5f99..000000000000 --- a/contrib/binutils/ld/ldctor.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ldctor.h - linker constructor support - Copyright 1991, 1992, 1993 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#ifndef LDCTOR_H -#define LDCTOR_H - -/* List of statements needed to handle constructors */ -extern lang_statement_list_type constructor_list; - -/* We keep a list of these structures for each set we build. */ - -struct set_info -{ - struct set_info *next; /* Next set. */ - struct bfd_link_hash_entry *h; /* Hash table entry. */ - bfd_reloc_code_real_type reloc; /* Reloc to use for an entry. */ - size_t count; /* Number of elements. */ - struct set_element *elements; /* Elements in set. */ -}; - -struct set_element -{ - struct set_element *next; /* Next element. */ - const char *name; /* Name in set (may be NULL). */ - asection *section; /* Section of value in set. */ - bfd_vma value; /* Value in set. */ -}; - -/* The sets we have seen. */ - -extern struct set_info *sets; - -extern void ldctor_add_set_entry PARAMS ((struct bfd_link_hash_entry *, - bfd_reloc_code_real_type, - const char *, asection *, bfd_vma)); -extern void ldctor_build_sets PARAMS ((void)); - -#endif diff --git a/contrib/binutils/ld/ldemul.c b/contrib/binutils/ld/ldemul.c deleted file mode 100644 index 41cc5446557d..000000000000 --- a/contrib/binutils/ld/ldemul.c +++ /dev/null @@ -1,262 +0,0 @@ -/* ldemul.c -- clearing house for ld emulation states - Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" - -#include "ld.h" -#include "ldemul.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldfile.h" -#include "ldmain.h" -#include "ldemul-list.h" - -ld_emulation_xfer_type *ld_emulation; - -void -ldemul_hll(name) - char *name; -{ - ld_emulation->hll(name); -} - - -void ldemul_syslib(name) - char *name; -{ - ld_emulation->syslib(name); -} - -void -ldemul_after_parse() -{ - ld_emulation->after_parse(); -} - -void -ldemul_before_parse() -{ - ld_emulation->before_parse(); -} - -void -ldemul_after_open () -{ - ld_emulation->after_open (); -} - -void -ldemul_after_allocation() -{ - ld_emulation->after_allocation(); -} - -void -ldemul_before_allocation() -{ - if (ld_emulation->before_allocation) - ld_emulation->before_allocation(); -} - - -void -ldemul_set_output_arch() -{ - ld_emulation->set_output_arch(); -} - -void -ldemul_finish() -{ - if (ld_emulation->finish) - ld_emulation->finish(); -} - -void -ldemul_set_symbols() -{ - if (ld_emulation->set_symbols) - ld_emulation->set_symbols(); -} - -void -ldemul_create_output_section_statements() -{ - if (ld_emulation->create_output_section_statements) - ld_emulation->create_output_section_statements(); -} - -char * -ldemul_get_script(isfile) - int *isfile; -{ - return ld_emulation->get_script(isfile); -} - -boolean -ldemul_open_dynamic_archive (arch, search, entry) - const char *arch; - search_dirs_type *search; - lang_input_statement_type *entry; -{ - if (ld_emulation->open_dynamic_archive) - return (*ld_emulation->open_dynamic_archive) (arch, search, entry); - return false; -} - -boolean -ldemul_place_orphan (file, s) - lang_input_statement_type *file; - asection *s; -{ - if (ld_emulation->place_orphan) - return (*ld_emulation->place_orphan) (file, s); - return false; -} - -int -ldemul_parse_args (argc, argv) - int argc; - char **argv; -{ - /* Try and use the emulation parser if there is one. */ - if (ld_emulation->parse_args) - { - return ld_emulation->parse_args (argc, argv); - } - return 0; -} - -/* Let the emulation code handle an unrecognized file. */ - -boolean -ldemul_unrecognized_file (entry) - lang_input_statement_type *entry; -{ - if (ld_emulation->unrecognized_file) - return (*ld_emulation->unrecognized_file) (entry); - return false; -} - -char * -ldemul_choose_target() -{ - return ld_emulation->choose_target(); -} - -/* The default choose_target function. */ - -char * -ldemul_default_target() -{ - char *from_outside = getenv (TARGET_ENVIRON); - if (from_outside != (char *)NULL) - return from_outside; - return ld_emulation->target_name; -} - -void -after_parse_default() -{ - -} - -void -after_open_default () -{ -} - -void -after_allocation_default() -{ - -} - -void -before_allocation_default() -{ - -} - -void -set_output_arch_default() -{ - /* Set the output architecture and machine if possible */ - bfd_set_arch_mach(output_bfd, - ldfile_output_architecture, ldfile_output_machine); -} - -/*ARGSUSED*/ -void -syslib_default(ignore) - char *ignore; -{ - info_msg ("%S SYSLIB ignored\n"); -} - -/*ARGSUSED*/ -void -hll_default(ignore) - char *ignore; -{ - info_msg ("%S HLL ignored\n"); -} - -ld_emulation_xfer_type *ld_emulations[] = { EMULATION_LIST }; - -void -ldemul_choose_mode(target) - char *target; -{ - ld_emulation_xfer_type **eptr = ld_emulations; - /* Ignore "gld" prefix. */ - if (target[0] == 'g' && target[1] == 'l' && target[2] == 'd') - target += 3; - for (; *eptr; eptr++) - { - if (strcmp(target, (*eptr)->emulation_name) == 0) - { - ld_emulation = *eptr; - return; - } - } - einfo ("%P: unrecognised emulation mode: %s\n", target); - einfo ("Supported emulations: "); - ldemul_list_emulations (stderr); - einfo ("%F\n"); -} - -void -ldemul_list_emulations (f) - FILE *f; -{ - ld_emulation_xfer_type **eptr = ld_emulations; - boolean first = true; - - for (; *eptr; eptr++) - { - if (first) - first = false; - else - fprintf (f, " "); - fprintf (f, "%s", (*eptr)->emulation_name); - } -} diff --git a/contrib/binutils/ld/ldemul.h b/contrib/binutils/ld/ldemul.h deleted file mode 100644 index f01f357ba1ce..000000000000 --- a/contrib/binutils/ld/ldemul.h +++ /dev/null @@ -1,138 +0,0 @@ -/* ld-emul.h - Linker emulation header file - Copyright 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. */ - -#ifndef LDEMUL_H -#define LDEMUL_H - -#if ANSI_PROTOTYPES -struct lang_input_statement_struct; -struct search_dirs; -#endif - -extern void ldemul_hll PARAMS ((char *)); -extern void ldemul_syslib PARAMS ((char *)); -extern void ldemul_after_parse PARAMS ((void)); -extern void ldemul_before_parse PARAMS ((void)); -extern void ldemul_after_open PARAMS ((void)); -extern void ldemul_after_allocation PARAMS ((void)); -extern void ldemul_before_allocation PARAMS ((void)); -extern void ldemul_set_output_arch PARAMS ((void)); -extern char *ldemul_choose_target PARAMS ((void)); -extern void ldemul_choose_mode PARAMS ((char *)); -extern void ldemul_list_emulations PARAMS ((FILE *)); -extern char *ldemul_get_script PARAMS ((int *isfile)); -extern void ldemul_finish PARAMS ((void)); -extern void ldemul_set_symbols PARAMS ((void)); -extern void ldemul_create_output_section_statements PARAMS ((void)); -extern boolean ldemul_place_orphan - PARAMS ((struct lang_input_statement_struct *, asection *)); -extern int ldemul_parse_args PARAMS ((int, char **)); -extern boolean ldemul_unrecognized_file - PARAMS ((struct lang_input_statement_struct *)); -extern boolean ldemul_open_dynamic_archive - PARAMS ((const char *, struct search_dirs *, - struct lang_input_statement_struct *)); -extern char *ldemul_default_target PARAMS ((void)); -extern void after_parse_default PARAMS ((void)); -extern void after_open_default PARAMS ((void)); -extern void after_allocation_default PARAMS ((void)); -extern void before_allocation_default PARAMS ((void)); -extern void set_output_arch_default PARAMS ((void)); -extern void syslib_default PARAMS ((char*)); -extern void hll_default PARAMS ((char*)); - -typedef struct ld_emulation_xfer_struct -{ - /* Run before parsing the command line and script file. - Set the architecture, maybe other things. */ - void (*before_parse) PARAMS ((void)); - - /* Handle the SYSLIB (low level library) script command. */ - void (*syslib) PARAMS ((char *)); - - /* Handle the HLL (high level library) script command. */ - void (*hll) PARAMS ((char *)); - - /* Run after parsing the command line and script file. */ - void (*after_parse) PARAMS ((void)); - - /* Run after opening all input files, and loading the symbols. */ - void (*after_open) PARAMS ((void)); - - /* Run after allocating output sections. */ - void (*after_allocation) PARAMS ( (void)); - - /* Set the output architecture and machine if possible. */ - void (*set_output_arch) PARAMS ((void)); - - /* Decide which target name to use. */ - char * (*choose_target) PARAMS ((void)); - - /* Run before allocating output sections. */ - void (*before_allocation) PARAMS ((void)); - - /* Return the appropriate linker script. */ - char * (*get_script) PARAMS ((int *isfile)); - - /* The name of this emulation. */ - char *emulation_name; - - /* The output format. */ - char *target_name; - - /* Run after assigning values from the script. */ - void (*finish) PARAMS ((void)); - - /* Create any output sections needed by the target. */ - void (*create_output_section_statements) PARAMS ((void)); - - /* Try to open a dynamic library. ARCH is an architecture name, and - is normally the empty string. ENTRY is the lang_input_statement - that should be opened. */ - boolean (*open_dynamic_archive) - PARAMS ((const char *arch, struct search_dirs *, - struct lang_input_statement_struct *entry)); - - /* Place an orphan section. Return true if it was placed, false if - the default action should be taken. This field may be NULL, in - which case the default action will always be taken. */ - boolean (*place_orphan) - PARAMS ((struct lang_input_statement_struct *, asection *)); - - /* Run after assigning parsing with the args, but before - reading the script. Used to initialize symbols used in the script. */ - void (*set_symbols) PARAMS ((void)); - - /* Run to parse args which the base linker doesn't - understand. Return non zero on sucess. */ - int (*parse_args) PARAMS ((int, char **)); - - /* Run to handle files which are not recognized as object files or - archives. Return true if the file was handled. */ - boolean (*unrecognized_file) - PARAMS ((struct lang_input_statement_struct *)); - -} ld_emulation_xfer_type; - -typedef enum -{ - intel_ic960_ld_mode_enum, - default_mode_enum , - intel_gld960_ld_mode_enum -} lang_emulation_mode_enum_type; - -extern ld_emulation_xfer_type *ld_emulations[]; - -#endif diff --git a/contrib/binutils/ld/ldexp.c b/contrib/binutils/ld/ldexp.c deleted file mode 100644 index 34716213d24c..000000000000 --- a/contrib/binutils/ld/ldexp.c +++ /dev/null @@ -1,950 +0,0 @@ -/* This module handles expression trees. -Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. -Written by Steve Chamberlain of Cygnus Support (sac@cygnus.com). - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -/* -This module is in charge of working out the contents of expressions. - -It has to keep track of the relative/absness of a symbol etc. This is -done by keeping all values in a struct (an etree_value_type) which -contains a value, a section to which it is relative and a valid bit. - -*/ - - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldgram.h" -#include "ldlang.h" - -static void exp_print_token PARAMS ((token_code_type code)); -static void make_abs PARAMS ((etree_value_type *ptr)); -static etree_value_type new_abs PARAMS ((bfd_vma value)); -static void check PARAMS ((lang_output_section_statement_type *os, - const char *name, const char *op)); -static etree_value_type new_rel - PARAMS ((bfd_vma value, lang_output_section_statement_type *section)); -static etree_value_type new_rel_from_section - PARAMS ((bfd_vma value, lang_output_section_statement_type *section)); -static etree_value_type fold_binary - PARAMS ((etree_type *tree, - lang_output_section_statement_type *current_section, - lang_phase_type allocation_done, - bfd_vma dot, bfd_vma *dotp)); -static etree_value_type fold_name - PARAMS ((etree_type *tree, - lang_output_section_statement_type *current_section, - lang_phase_type allocation_done, - bfd_vma dot)); -static etree_value_type exp_fold_tree_no_dot - PARAMS ((etree_type *tree, - lang_output_section_statement_type *current_section, - lang_phase_type allocation_done)); - -static void -exp_print_token (code) - token_code_type code; -{ - static CONST struct - { - token_code_type code; - char *name; - } table[] = - { - { INT, "int" }, - { REL, "relocateable" }, - { NAME,"NAME" }, - { PLUSEQ,"+=" }, - { MINUSEQ,"-=" }, - { MULTEQ,"*=" }, - { DIVEQ,"/=" }, - { LSHIFTEQ,"<<=" }, - { RSHIFTEQ,">>=" }, - { ANDEQ,"&=" }, - { OREQ,"|=" }, - { OROR,"||" }, - { ANDAND,"&&" }, - { EQ,"==" }, - { NE,"!=" }, - { LE,"<=" }, - { GE,">=" }, - { LSHIFT,"<<" }, - { RSHIFT,">>=" }, - { ALIGN_K,"ALIGN" }, - { BLOCK,"BLOCK" }, - { SECTIONS,"SECTIONS" }, - { SIZEOF_HEADERS,"SIZEOF_HEADERS" }, - { NEXT,"NEXT" }, - { SIZEOF,"SIZEOF" }, - { ADDR,"ADDR" }, - { LOADADDR,"LOADADDR" }, - { MEMORY,"MEMORY" }, - { DEFINED,"DEFINED" }, - { TARGET_K,"TARGET" }, - { SEARCH_DIR,"SEARCH_DIR" }, - { MAP,"MAP" }, - { QUAD,"QUAD" }, - { SQUAD,"SQUAD" }, - { LONG,"LONG" }, - { SHORT,"SHORT" }, - { BYTE,"BYTE" }, - { ENTRY,"ENTRY" }, - { 0,(char *)NULL } - }; - unsigned int idx; - - for (idx = 0; table[idx].name != (char*)NULL; idx++) { - if (table[idx].code == code) { - fprintf(config.map_file, "%s", table[idx].name); - return; - } - } - /* Not in table, just print it alone */ - fprintf(config.map_file, "%c",code); -} - -static void -make_abs (ptr) - etree_value_type *ptr; -{ - asection *s = ptr->section->bfd_section; - ptr->value += s->vma; - ptr->section = abs_output_section; -} - -static etree_value_type -new_abs (value) - bfd_vma value; -{ - etree_value_type new; - new.valid = true; - new.section = abs_output_section; - new.value = value; - return new; -} - -static void -check (os, name, op) - lang_output_section_statement_type *os; - const char *name; - const char *op; -{ - if (os == NULL) - einfo ("%F%P: %s uses undefined section %s\n", op, name); - if (! os->processed) - einfo ("%F%P: %s forward reference of section %s\n", op, name); -} - -etree_type * -exp_intop (value) - bfd_vma value; -{ - etree_type *new = (etree_type *) stat_alloc(sizeof(new->value)); - new->type.node_code = INT; - new->value.value = value; - new->type.node_class = etree_value; - return new; - -} - -/* Build an expression representing an unnamed relocateable value. */ - -etree_type * -exp_relop (section, value) - asection *section; - bfd_vma value; -{ - etree_type *new = (etree_type *) stat_alloc (sizeof (new->rel)); - new->type.node_code = REL; - new->type.node_class = etree_rel; - new->rel.section = section; - new->rel.value = value; - return new; -} - -static etree_value_type -new_rel (value, section) - bfd_vma value; - lang_output_section_statement_type *section; -{ - etree_value_type new; - new.valid = true; - new.value = value; - new.section = section; - return new; -} - -static etree_value_type -new_rel_from_section (value, section) - bfd_vma value; - lang_output_section_statement_type *section; -{ - etree_value_type new; - new.valid = true; - new.value = value; - new.section = section; - - new.value -= section->bfd_section->vma; - - return new; -} - -static etree_value_type -fold_binary (tree, current_section, allocation_done, dot, dotp) - etree_type *tree; - lang_output_section_statement_type *current_section; - lang_phase_type allocation_done; - bfd_vma dot; - bfd_vma *dotp; -{ - etree_value_type result; - - result = exp_fold_tree (tree->binary.lhs, current_section, - allocation_done, dot, dotp); - if (result.valid) - { - etree_value_type other; - - other = exp_fold_tree (tree->binary.rhs, - current_section, - allocation_done, dot,dotp) ; - if (other.valid) - { - /* If the values are from different sections, or this is an - absolute expression, make both the source arguments - absolute. However, adding or subtracting an absolute - value from a relative value is meaningful, and is an - exception. */ - if (current_section != abs_output_section - && (other.section == abs_output_section - || (result.section == abs_output_section - && tree->type.node_code == '+')) - && (tree->type.node_code == '+' - || tree->type.node_code == '-')) - { - etree_value_type hold; - - /* If there is only one absolute term, make sure it is the - second one. */ - if (other.section != abs_output_section) - { - hold = result; - result = other; - other = hold; - } - } - else if (result.section != other.section - || current_section == abs_output_section) - { - make_abs(&result); - make_abs(&other); - } - - switch (tree->type.node_code) - { - case '%': - if (other.value == 0) - einfo ("%F%S %% by zero\n"); - result.value = ((bfd_signed_vma) result.value - % (bfd_signed_vma) other.value); - break; - - case '/': - if (other.value == 0) - einfo ("%F%S / by zero\n"); - result.value = ((bfd_signed_vma) result.value - / (bfd_signed_vma) other.value); - break; - -#define BOP(x,y) case x : result.value = result.value y other.value; break; - BOP('+',+); - BOP('*',*); - BOP('-',-); - BOP(LSHIFT,<<); - BOP(RSHIFT,>>); - BOP(EQ,==); - BOP(NE,!=); - BOP('<',<); - BOP('>',>); - BOP(LE,<=); - BOP(GE,>=); - BOP('&',&); - BOP('^',^); - BOP('|',|); - BOP(ANDAND,&&); - BOP(OROR,||); - - case MAX: - if (result.value < other.value) - result = other; - break; - - case MIN: - if (result.value > other.value) - result = other; - break; - - default: - FAIL(); - } - } - else - { - result.valid = false; - } - } - - return result; -} - -etree_value_type -invalid () -{ - etree_value_type new; - new.valid = false; - return new; -} - -static etree_value_type -fold_name (tree, current_section, allocation_done, dot) - etree_type *tree; - lang_output_section_statement_type *current_section; - lang_phase_type allocation_done; - bfd_vma dot; -{ - etree_value_type result; - switch (tree->type.node_code) - { - case SIZEOF_HEADERS: - if (allocation_done != lang_first_phase_enum) - { - result = new_abs ((bfd_vma) - bfd_sizeof_headers (output_bfd, - link_info.relocateable)); - } - else - { - result.valid = false; - } - break; - case DEFINED: - if (allocation_done == lang_first_phase_enum) - result.valid = false; - else - { - struct bfd_link_hash_entry *h; - - h = bfd_wrapped_link_hash_lookup (output_bfd, &link_info, - tree->name.name, - false, false, true); - result.value = (h != (struct bfd_link_hash_entry *) NULL - && (h->type == bfd_link_hash_defined - || h->type == bfd_link_hash_defweak - || h->type == bfd_link_hash_common)); - result.section = 0; - result.valid = true; - } - break; - case NAME: - result.valid = false; - if (tree->name.name[0] == '.' && tree->name.name[1] == 0) - { - if (allocation_done != lang_first_phase_enum) - result = new_rel_from_section(dot, current_section); - else - result = invalid(); - } - else if (allocation_done != lang_first_phase_enum) - { - struct bfd_link_hash_entry *h; - - h = bfd_wrapped_link_hash_lookup (output_bfd, &link_info, - tree->name.name, - false, false, true); - if (h != NULL - && (h->type == bfd_link_hash_defined - || h->type == bfd_link_hash_defweak)) - { - if (bfd_is_abs_section (h->u.def.section)) - result = new_abs (h->u.def.value); - else if (allocation_done == lang_final_phase_enum - || allocation_done == lang_allocating_phase_enum) - { - asection *output_section; - - output_section = h->u.def.section->output_section; - if (output_section == NULL) - einfo ("%X%S: unresolvable symbol `%s' referenced in expression\n", - tree->name.name); - else - { - lang_output_section_statement_type *os; - - os = (lang_output_section_statement_lookup - (bfd_get_section_name (output_bfd, - output_section))); - - /* FIXME: Is this correct if this section is - being linked with -R? */ - result = new_rel ((h->u.def.value - + h->u.def.section->output_offset), - os); - } - } - } - else if (allocation_done == lang_final_phase_enum) - einfo ("%F%S: undefined symbol `%s' referenced in expression\n", - tree->name.name); - } - break; - - case ADDR: - if (allocation_done != lang_first_phase_enum) - { - lang_output_section_statement_type *os; - - os = lang_output_section_find (tree->name.name); - check (os, tree->name.name, "ADDR"); - result = new_rel (0, os); - } - else - result = invalid (); - break; - - case LOADADDR: - if (allocation_done != lang_first_phase_enum) - { - lang_output_section_statement_type *os; - - os = lang_output_section_find (tree->name.name); - check (os, tree->name.name, "LOADADDR"); - if (os->load_base == NULL) - result = new_rel (0, os); - else - result = exp_fold_tree_no_dot (os->load_base, - abs_output_section, - allocation_done); - } - else - result = invalid (); - break; - - case SIZEOF: - if (allocation_done != lang_first_phase_enum) - { - lang_output_section_statement_type *os; - - os = lang_output_section_find (tree->name.name); - check (os, tree->name.name, "SIZEOF"); - result = new_abs (os->bfd_section->_raw_size); - } - else - result = invalid (); - break; - - default: - FAIL(); - break; - } - - return result; -} -etree_value_type -exp_fold_tree (tree, current_section, allocation_done, dot, dotp) - etree_type *tree; - lang_output_section_statement_type *current_section; - lang_phase_type allocation_done; - bfd_vma dot; - bfd_vma *dotp; -{ - etree_value_type result; - - if (tree == NULL) - { - result.valid = false; - return result; - } - - switch (tree->type.node_class) - { - case etree_value: - result = new_rel (tree->value.value, current_section); - break; - - case etree_rel: - if (allocation_done != lang_final_phase_enum) - result.valid = false; - else - result = new_rel ((tree->rel.value - + tree->rel.section->output_section->vma - + tree->rel.section->output_offset), - current_section); - break; - - case etree_unary: - result = exp_fold_tree (tree->unary.child, - current_section, - allocation_done, dot, dotp); - if (result.valid) - { - switch (tree->type.node_code) - { - case ALIGN_K: - if (allocation_done != lang_first_phase_enum) - result = new_rel_from_section (ALIGN_N (dot, result.value), - current_section); - else - result.valid = false; - break; - - case ABSOLUTE: - if (allocation_done != lang_first_phase_enum && result.valid) - { - result.value += result.section->bfd_section->vma; - result.section = abs_output_section; - } - else - result.valid = false; - break; - - case '~': - make_abs (&result); - result.value = ~result.value; - break; - - case '!': - make_abs (&result); - result.value = !result.value; - break; - - case '-': - make_abs (&result); - result.value = -result.value; - break; - - case NEXT: - /* Return next place aligned to value. */ - if (allocation_done == lang_allocating_phase_enum) - { - make_abs (&result); - result.value = ALIGN_N (dot, result.value); - } - else - result.valid = false; - break; - - default: - FAIL (); - break; - } - } - break; - - case etree_trinary: - result = exp_fold_tree (tree->trinary.cond, current_section, - allocation_done, dot, dotp); - if (result.valid) - result = exp_fold_tree ((result.value - ? tree->trinary.lhs - : tree->trinary.rhs), - current_section, - allocation_done, dot, dotp); - break; - - case etree_binary: - result = fold_binary (tree, current_section, allocation_done, - dot, dotp); - break; - - case etree_assign: - case etree_provide: - if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0) - { - /* Assignment to dot can only be done during allocation */ - if (tree->type.node_class == etree_provide) - einfo ("%F%S can not PROVIDE assignment to location counter\n"); - if (allocation_done == lang_allocating_phase_enum - || (allocation_done == lang_final_phase_enum - && current_section == abs_output_section)) - { - result = exp_fold_tree (tree->assign.src, - current_section, - lang_allocating_phase_enum, dot, - dotp); - if (! result.valid) - einfo ("%F%S invalid assignment to location counter\n"); - else - { - if (current_section == NULL) - einfo ("%F%S assignment to location counter invalid outside of SECTION\n"); - else - { - bfd_vma nextdot; - - nextdot = (result.value - + current_section->bfd_section->vma); - if (nextdot < dot - && current_section != abs_output_section) - { - einfo ("%F%S cannot move location counter backwards (from %V to %V)\n", - dot, nextdot); - } - else - *dotp = nextdot; - } - } - } - } - else - { - result = exp_fold_tree (tree->assign.src, - current_section, allocation_done, - dot, dotp); - if (result.valid) - { - boolean create; - struct bfd_link_hash_entry *h; - - if (tree->type.node_class == etree_assign) - create = true; - else - create = false; - h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst, - create, false, false); - if (h == (struct bfd_link_hash_entry *) NULL) - { - if (tree->type.node_class == etree_assign) - einfo ("%P%F:%s: hash creation failed\n", - tree->assign.dst); - } - else if (tree->type.node_class == etree_provide - && h->type != bfd_link_hash_undefined - && h->type != bfd_link_hash_common) - { - /* Do nothing. The symbol was defined by some - object. */ - } - else - { - /* FIXME: Should we worry if the symbol is already - defined? */ - h->type = bfd_link_hash_defined; - h->u.def.value = result.value; - h->u.def.section = result.section->bfd_section; - } - } - } - break; - - case etree_name: - result = fold_name (tree, current_section, allocation_done, dot); - break; - - default: - FAIL (); - break; - } - - return result; -} - -static etree_value_type -exp_fold_tree_no_dot (tree, current_section, allocation_done) - etree_type *tree; - lang_output_section_statement_type *current_section; - lang_phase_type allocation_done; -{ -return exp_fold_tree(tree, current_section, allocation_done, (bfd_vma) - 0, (bfd_vma *)NULL); -} - -etree_type * -exp_binop (code, lhs, rhs) - int code; - etree_type *lhs; - etree_type *rhs; -{ - etree_type value, *new; - etree_value_type r; - - value.type.node_code = code; - value.binary.lhs = lhs; - value.binary.rhs = rhs; - value.type.node_class = etree_binary; - r = exp_fold_tree_no_dot(&value, - abs_output_section, - lang_first_phase_enum ); - if (r.valid) - { - return exp_intop(r.value); - } - new = (etree_type *) stat_alloc (sizeof (new->binary)); - memcpy((char *)new, (char *)&value, sizeof(new->binary)); - return new; -} - -etree_type * -exp_trinop (code, cond, lhs, rhs) - int code; - etree_type *cond; - etree_type *lhs; - etree_type *rhs; -{ - etree_type value, *new; - etree_value_type r; - value.type.node_code = code; - value.trinary.lhs = lhs; - value.trinary.cond = cond; - value.trinary.rhs = rhs; - value.type.node_class = etree_trinary; - r= exp_fold_tree_no_dot(&value, (lang_output_section_statement_type - *)NULL,lang_first_phase_enum); - if (r.valid) { - return exp_intop(r.value); - } - new = (etree_type *) stat_alloc (sizeof (new->trinary)); - memcpy((char *)new,(char *) &value, sizeof(new->trinary)); - return new; -} - - -etree_type * -exp_unop (code, child) - int code; - etree_type *child; -{ - etree_type value, *new; - - etree_value_type r; - value.unary.type.node_code = code; - value.unary.child = child; - value.unary.type.node_class = etree_unary; - r = exp_fold_tree_no_dot(&value,abs_output_section, - lang_first_phase_enum); - if (r.valid) { - return exp_intop(r.value); - } - new = (etree_type *) stat_alloc (sizeof (new->unary)); - memcpy((char *)new, (char *)&value, sizeof(new->unary)); - return new; -} - - -etree_type * -exp_nameop (code, name) - int code; - CONST char *name; -{ - etree_type value, *new; - etree_value_type r; - value.name.type.node_code = code; - value.name.name = name; - value.name.type.node_class = etree_name; - - - r = exp_fold_tree_no_dot(&value, - (lang_output_section_statement_type *)NULL, - lang_first_phase_enum); - if (r.valid) { - return exp_intop(r.value); - } - new = (etree_type *) stat_alloc (sizeof (new->name)); - memcpy((char *)new, (char *)&value, sizeof(new->name)); - return new; - -} - - - - -etree_type * -exp_assop (code, dst, src) - int code; - CONST char *dst; - etree_type *src; -{ - etree_type value, *new; - - value.assign.type.node_code = code; - - - value.assign.src = src; - value.assign.dst = dst; - value.assign.type.node_class = etree_assign; - -#if 0 - if (exp_fold_tree_no_dot(&value, &result)) { - return exp_intop(result); - } -#endif - new = (etree_type*) stat_alloc (sizeof (new->assign)); - memcpy((char *)new, (char *)&value, sizeof(new->assign)); - return new; -} - -/* Handle PROVIDE. */ - -etree_type * -exp_provide (dst, src) - const char *dst; - etree_type *src; -{ - etree_type *n; - - n = (etree_type *) stat_alloc (sizeof (n->assign)); - n->assign.type.node_code = '='; - n->assign.type.node_class = etree_provide; - n->assign.src = src; - n->assign.dst = dst; - return n; -} - -void -exp_print_tree (tree) - etree_type *tree; -{ - switch (tree->type.node_class) { - case etree_value: - minfo ("0x%v", tree->value.value); - return; - case etree_rel: - if (tree->rel.section->owner != NULL) - minfo ("%B:", tree->rel.section->owner); - minfo ("%s+0x%v", tree->rel.section->name, tree->rel.value); - return; - case etree_assign: -#if 0 - if (tree->assign.dst->sdefs != (asymbol *)NULL){ - fprintf(config.map_file,"%s (%x) ",tree->assign.dst->name, - tree->assign.dst->sdefs->value); - } - else { - fprintf(config.map_file,"%s (UNDEFINED)",tree->assign.dst->name); - } -#endif - fprintf(config.map_file,"%s",tree->assign.dst); - exp_print_token(tree->type.node_code); - exp_print_tree(tree->assign.src); - break; - case etree_provide: - fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst); - exp_print_tree (tree->assign.src); - fprintf (config.map_file, ")"); - break; - case etree_binary: - fprintf(config.map_file,"("); - exp_print_tree(tree->binary.lhs); - exp_print_token(tree->type.node_code); - exp_print_tree(tree->binary.rhs); - fprintf(config.map_file,")"); - break; - case etree_trinary: - exp_print_tree(tree->trinary.cond); - fprintf(config.map_file,"?"); - exp_print_tree(tree->trinary.lhs); - fprintf(config.map_file,":"); - exp_print_tree(tree->trinary.rhs); - break; - case etree_unary: - exp_print_token(tree->unary.type.node_code); - if (tree->unary.child) - { - - fprintf(config.map_file,"("); - exp_print_tree(tree->unary.child); - fprintf(config.map_file,")"); - } - - break; - case etree_undef: - fprintf(config.map_file,"????????"); - break; - case etree_name: - if (tree->type.node_code == NAME) { - fprintf(config.map_file,"%s", tree->name.name); - } - else { - exp_print_token(tree->type.node_code); - if (tree->name.name) - fprintf(config.map_file,"(%s)", tree->name.name); - } - break; - default: - FAIL(); - break; - } -} - -bfd_vma -exp_get_vma (tree, def, name, allocation_done) - etree_type *tree; - bfd_vma def; - char *name; - lang_phase_type allocation_done; -{ - etree_value_type r; - - if (tree != NULL) - { - r = exp_fold_tree_no_dot (tree, abs_output_section, allocation_done); - if (! r.valid && name != NULL) - einfo ("%F%S nonconstant expression for %s\n", name); - return r.value; - } - else - return def; -} - -int -exp_get_value_int (tree,def,name, allocation_done) - etree_type *tree; - int def; - char *name; - lang_phase_type allocation_done; -{ - return (int)exp_get_vma(tree,(bfd_vma)def,name, allocation_done); -} - - -bfd_vma -exp_get_abs_int (tree, def, name, allocation_done) - etree_type *tree; - int def; - char *name; - lang_phase_type allocation_done; -{ - etree_value_type res; - res = exp_fold_tree_no_dot (tree, abs_output_section, allocation_done); - - if (res.valid) - { - res.value += res.section->bfd_section->vma; - } - else { - einfo ("%F%S non constant expression for %s\n",name); - } - return res.value; -} diff --git a/contrib/binutils/ld/ldexp.h b/contrib/binutils/ld/ldexp.h deleted file mode 100644 index 8726a0166090..000000000000 --- a/contrib/binutils/ld/ldexp.h +++ /dev/null @@ -1,109 +0,0 @@ -/* ldexp.h - - Copyright 1991, 1992, 1993 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LDEXP_H -#define LDEXP_H - -/* The result of an expression tree */ -typedef struct -{ - bfd_vma value; - struct lang_output_section_statement_struct *section; - boolean valid; -} etree_value_type; - - - -typedef struct -{ - int node_code; - enum { etree_binary, - etree_trinary, - etree_unary, - etree_name, - etree_assign, - etree_provide, - etree_undef, - etree_unspec, - etree_value, - etree_rel } node_class; -} node_type; - - - -typedef union etree_union -{ - node_type type; - struct { - node_type type; - union etree_union *lhs; - union etree_union *rhs; - } binary; - struct { - node_type type; - union etree_union *cond; - union etree_union *lhs; - union etree_union *rhs; - } trinary; - struct { - node_type type; - CONST char *dst; - union etree_union *src; - } assign; - - struct { - node_type type; - union etree_union *child; - } unary; - struct { - node_type type; - CONST char *name; - } name; - struct { - node_type type; - bfd_vma value; - } value; - struct { - node_type type; - asection *section; - bfd_vma value; - } rel; - -} etree_type; - - -etree_type *exp_intop PARAMS ((bfd_vma)); -etree_type *exp_relop PARAMS ((asection *, bfd_vma)); -etree_value_type invalid PARAMS ((void)); -etree_value_type exp_fold_tree PARAMS ((etree_type *, struct - lang_output_section_statement_struct *, - lang_phase_type, - bfd_vma, bfd_vma *)); -etree_type *exp_binop PARAMS ((int, etree_type *, etree_type *)); -etree_type *exp_trinop PARAMS ((int,etree_type *, etree_type *, etree_type *)); -etree_type *exp_unop PARAMS ((int, etree_type *)); -etree_type *exp_nameop PARAMS ((int, CONST char *)); -etree_type *exp_assop PARAMS ((int, CONST char *, etree_type *)); -etree_type *exp_provide PARAMS ((const char *, etree_type *)); -void exp_print_tree PARAMS ((etree_type *)); -bfd_vma exp_get_vma PARAMS ((etree_type *, bfd_vma, char *, lang_phase_type)); -int exp_get_value_int PARAMS ((etree_type *, int, char *,lang_phase_type)); -bfd_vma exp_get_abs_int PARAMS ((etree_type *, int, char *,lang_phase_type)); - -#endif diff --git a/contrib/binutils/ld/ldfile.c b/contrib/binutils/ld/ldfile.c deleted file mode 100644 index 3597c4e24fdc..000000000000 --- a/contrib/binutils/ld/ldfile.c +++ /dev/null @@ -1,410 +0,0 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 1998 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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 - - */ - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" -#include "ld.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldfile.h" -#include "ldmain.h" -#include "ldgram.h" -#include "ldlex.h" -#include "ldemul.h" - -#include <ctype.h> - -const char *ldfile_input_filename; -boolean ldfile_assumed_script = false; -const char *ldfile_output_machine_name = ""; -unsigned long ldfile_output_machine; -enum bfd_architecture ldfile_output_architecture; -search_dirs_type *search_head; - -#ifndef MPW -#ifdef VMS -char *slash = ""; -#else -#if defined (_WIN32) && ! defined (__CYGWIN32__) -char *slash = "\\"; -#else -char *slash = "/"; -#endif -#endif -#else /* MPW */ -/* The MPW path char is a colon. */ -char *slash = ":"; -#endif /* MPW */ - -/* LOCAL */ - -static search_dirs_type **search_tail_ptr = &search_head; - -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 boolean ldfile_open_file_search - PARAMS ((const char *arch, lang_input_statement_type *, - const char *lib, const char *suffix)); -static FILE *try_open PARAMS ((const char *name, const char *exten)); - -void -ldfile_add_library_path (name, cmdline) - const char *name; - boolean cmdline; -{ - search_dirs_type *new; - - new = (search_dirs_type *) xmalloc (sizeof (search_dirs_type)); - new->next = NULL; - new->name = name; - new->cmdline = cmdline; - *search_tail_ptr = new; - search_tail_ptr = &new->next; -} - -/* Try to open a BFD for a lang_input_statement. */ - -boolean -ldfile_try_open_bfd (attempt, entry) - const char *attempt; - lang_input_statement_type *entry; -{ - entry->the_bfd = bfd_openr (attempt, entry->target); - - if (trace_file_tries) - info_msg ("attempt to open %s %s\n", attempt, - entry->the_bfd == NULL ? "failed" : "succeeded"); - - if (entry->the_bfd != NULL) - return true; - else - { - if (bfd_get_error () == bfd_error_invalid_target) - einfo ("%F%P: invalid BFD target `%s'\n", entry->target); - return false; - } -} - -/* Search for and open the file specified by ENTRY. If it is an - archive, use ARCH, LIB and SUFFIX to modify the file name. */ - -static boolean -ldfile_open_file_search (arch, entry, lib, suffix) - const char *arch; - lang_input_statement_type *entry; - const char *lib; - const char *suffix; -{ - search_dirs_type *search; - - /* If this is not an archive, try to open it in the current - directory first. */ - if (! entry->is_archive) - { - if (ldfile_try_open_bfd (entry->filename, entry)) - return true; - } - - for (search = search_head; - search != (search_dirs_type *)NULL; - search = search->next) - { - char *string; - - if (entry->dynamic && ! link_info.relocateable) - { - if (ldemul_open_dynamic_archive (arch, search, entry)) - return true; - } - - string = (char *) 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, - 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[1] == ':') -#endif - ) - strcpy (string, entry->filename); - else - sprintf (string, "%s%s%s", search->name, slash, entry->filename); - - if (ldfile_try_open_bfd (string, entry)) - { - entry->filename = string; - return true; - } - - free (string); - } - - return false; -} - -/* Open the input file specified by ENTRY. */ - -void -ldfile_open_file (entry) - lang_input_statement_type *entry; -{ - if (entry->the_bfd != NULL) - return; - - if (! entry->search_dirs_flag) - { - if (ldfile_try_open_bfd (entry->filename, entry)) - return; - } - else - { - search_arch_type *arch; - - /* 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; -#ifdef VMS - if (ldfile_open_file_search (arch->name, entry, ":lib", ".a")) - return; -#endif - } - } - - einfo("%F%P: cannot open %s: %E\n", entry->local_sym_name); -} - -/* 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; -{ - FILE *result; - char buff[1000]; - - result = fopen (name, "r"); - if (trace_file_tries) - { - if (result == NULL) - info_msg ("cannot find script file "); - else - info_msg ("opened script file "); - info_msg ("%s\n",name); - } - - if (result != NULL) - return result; - - if (*exten) - { - sprintf (buff, "%s%s", name, exten); - result = fopen (buff, "r"); - if (trace_file_tries) - { - if (result == NULL) - info_msg ("cannot find script file "); - else - info_msg ("opened script file "); - info_msg ("%s\n", buff); - } - } - - return result; -} - -/* Try to open NAME; if that fails, look for it in any directories - specified with -L, without and with EXTEND apppended. */ - -FILE * -ldfile_find_command_file (name, extend) - const char *name; - const char *extend; -{ - search_dirs_type *search; - 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; - } - } - return result; -} - -void -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); - - ldfile_input_filename = name; - lineno = 1; - had_script = true; -} - - - - - -#ifdef GNU960 -static -char * -gnu960_map_archname( name ) -char *name; -{ - struct tabentry { char *cmd_switch; char *arch; }; - static struct tabentry arch_tab[] = { - "", "", - "KA", "ka", - "KB", "kb", - "KC", "mc", /* Synonym for MC */ - "MC", "mc", - "CA", "ca", - "SA", "ka", /* Functionally equivalent to KA */ - "SB", "kb", /* Functionally equivalent to KB */ - NULL, "" - }; - struct tabentry *tp; - - - 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); - } - return tp->arch; -} - - - -void -ldfile_add_arch(name) -char *name; -{ - search_arch_type *new = - (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; - } - ldfile_output_machine_name = 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 */ - - -void -ldfile_add_arch (in_name) - CONST char * in_name; -{ - char *name = buystring(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; - while (*name) - { - if (isupper ((unsigned char) *name)) - *name = tolower ((unsigned char) *name); - name++; - } - *search_arch_tail_ptr = new; - search_arch_tail_ptr = &new->next; - -} -#endif - -/* 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); - } -} diff --git a/contrib/binutils/ld/ldfile.h b/contrib/binutils/ld/ldfile.h deleted file mode 100644 index f33c9ce94627..000000000000 --- a/contrib/binutils/ld/ldfile.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ldfile.h - - Copyright 1991, 1992 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -extern const char *ldfile_input_filename; -extern boolean ldfile_assumed_script; -extern unsigned long ldfile_output_machine; -extern enum bfd_architecture ldfile_output_architecture; -extern const char *ldfile_output_machine_name; - -/* Structure used to hold the list of directories to search for - libraries. */ - -typedef struct search_dirs -{ - /* Next directory on list. */ - struct search_dirs *next; - /* Name of directory. */ - const char *name; - /* true if this is from the command line. */ - boolean cmdline; -} search_dirs_type; - -extern search_dirs_type *search_head; - -#if ANSI_PROTOTYPES -struct lang_input_statement_struct; -#endif - -extern void ldfile_add_arch PARAMS ((CONST char *)); -extern void ldfile_add_library_path PARAMS ((const char *, boolean cmdline)); -extern void ldfile_open_command_file PARAMS ((const char *name)); -extern void ldfile_open_file PARAMS ((struct lang_input_statement_struct *)); -extern boolean ldfile_try_open_bfd - PARAMS ((const char *, struct lang_input_statement_struct *)); -extern FILE *ldfile_find_command_file - PARAMS ((const char *name, const char *extend)); -extern void ldfile_set_output_arch PARAMS ((CONST char *)); diff --git a/contrib/binutils/ld/ldgram.y b/contrib/binutils/ld/ldgram.y deleted file mode 100644 index 4023770524eb..000000000000 --- a/contrib/binutils/ld/ldgram.y +++ /dev/null @@ -1,1022 +0,0 @@ -/* A YACC grammer to parse a superset of the AT&T linker scripting languaue. - Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com). - -This file is part of GNU ld. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -%{ -/* - - */ - -#define DONTDECLARE_MALLOC - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" -#include "ld.h" -#include "ldexp.h" -#include "ldver.h" -#include "ldlang.h" -#include "ldemul.h" -#include "ldfile.h" -#include "ldmisc.h" -#include "ldmain.h" -#include "mri.h" -#include "ldlex.h" - -#ifndef YYDEBUG -#define YYDEBUG 1 -#endif - -static enum section_type sectype; - -lang_memory_region_type *region; - - -char *current_file; -boolean ldgram_want_filename = true; -boolean had_script = false; -boolean force_make_executable = false; - -boolean ldgram_in_script = false; -boolean ldgram_had_equals = false; - - -#define ERROR_NAME_MAX 20 -static char *error_names[ERROR_NAME_MAX]; -static int error_index; -#define PUSH_ERROR(x) if (error_index < ERROR_NAME_MAX) error_names[error_index] = x; error_index++; -#define POP_ERROR() error_index--; -%} -%union { - bfd_vma integer; - char *name; - int token; - union etree_union *etree; - struct phdr_info - { - boolean filehdr; - boolean phdrs; - union etree_union *at; - union etree_union *flags; - } phdr; - struct lang_nocrossref *nocrossref; - struct lang_output_section_phdr_list *section_phdr; - struct bfd_elf_version_deps *deflist; - struct bfd_elf_version_expr *versyms; - struct bfd_elf_version_tree *versnode; -} - -%type <etree> exp opt_exp_with_type mustbe_exp opt_at phdr_type phdr_val -%type <etree> opt_exp_without_type -%type <integer> fill_opt -%type <name> memspec_opt casesymlist -%token <integer> INT -%token <name> NAME LNAME -%type <integer> length -%type <phdr> phdr_qualifiers -%type <nocrossref> nocrossref_list -%type <section_phdr> phdr_opt -%type <integer> opt_nocrossrefs - -%right <token> PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ -%right <token> '?' ':' -%left <token> OROR -%left <token> ANDAND -%left <token> '|' -%left <token> '^' -%left <token> '&' -%left <token> EQ NE -%left <token> '<' '>' LE GE -%left <token> LSHIFT RSHIFT - -%left <token> '+' '-' -%left <token> '*' '/' '%' - -%right UNARY -%token END -%left <token> '(' -%token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE -%token SECTIONS PHDRS -%token '{' '}' -%token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH -%token SIZEOF_HEADERS -%token INCLUDE -%token MEMORY DEFSYMEND -%token NOLOAD DSECT COPY INFO OVERLAY -%token NAME LNAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY -%token <integer> NEXT -%token SIZEOF ADDR LOADADDR MAX MIN -%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS -%token ORIGIN FILL -%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS -%token ALIGNMOD AT PROVIDE -%type <token> assign_op atype -%type <name> filename -%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD -%token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL -%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START -%token <name> VERS_TAG VERS_IDENTIFIER -%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT -%type <versyms> vers_defns -%type <versnode> vers_tag -%type <deflist> verdep - -%% - -file: - INPUT_SCRIPT script_file - | INPUT_MRI_SCRIPT mri_script_file - | INPUT_VERSION_SCRIPT version_script_file - | INPUT_DEFSYM defsym_expr - ; - - -filename: NAME; - - -defsym_expr: - { ldlex_defsym(); } - NAME '=' exp - { - ldlex_popstate(); - lang_add_assignment(exp_assop($3,$2,$4)); - } - -/* SYNTAX WITHIN AN MRI SCRIPT FILE */ -mri_script_file: - { - ldlex_mri_script (); - PUSH_ERROR ("MRI style script"); - } - mri_script_lines - { - ldlex_popstate (); - mri_draw_tree (); - POP_ERROR (); - } - ; - -mri_script_lines: - mri_script_lines mri_script_command NEWLINE - | - ; - -mri_script_command: - CHIP exp - | CHIP exp ',' exp - | NAME { - einfo("%P%F: unrecognised keyword in MRI style script '%s'\n",$1); - } - | LIST { - config.map_filename = "-"; - } - | ORDER ordernamelist - | ENDWORD - | PUBLIC NAME '=' exp - { mri_public($2, $4); } - | PUBLIC NAME ',' exp - { mri_public($2, $4); } - | PUBLIC NAME exp - { mri_public($2, $3); } - | FORMAT NAME - { mri_format($2); } - | SECT NAME ',' exp - { mri_output_section($2, $4);} - | SECT NAME exp - { mri_output_section($2, $3);} - | SECT NAME '=' exp - { mri_output_section($2, $4);} - | ALIGN_K NAME '=' exp - { mri_align($2,$4); } - | ALIGN_K NAME ',' exp - { mri_align($2,$4); } - | ALIGNMOD NAME '=' exp - { mri_alignmod($2,$4); } - | ALIGNMOD NAME ',' exp - { mri_alignmod($2,$4); } - | ABSOLUTE mri_abs_name_list - | LOAD mri_load_name_list - | NAMEWORD NAME - { mri_name($2); } - | ALIAS NAME ',' NAME - { mri_alias($2,$4,0);} - | ALIAS NAME ',' INT - { mri_alias($2,0,(int) $4);} - | BASE exp - { mri_base($2); } - | TRUNCATE INT - { mri_truncate((unsigned int) $2); } - | CASE casesymlist - | EXTERN extern_name_list - | INCLUDE filename - { ldfile_open_command_file ($2); } mri_script_lines END - | START NAME - { lang_add_entry ($2, false); } - | - ; - -ordernamelist: - ordernamelist ',' NAME { mri_order($3); } - | ordernamelist NAME { mri_order($2); } - | - ; - -mri_load_name_list: - NAME - { mri_load($1); } - | mri_load_name_list ',' NAME { mri_load($3); } - ; - -mri_abs_name_list: - NAME - { mri_only_load($1); } - | mri_abs_name_list ',' NAME - { mri_only_load($3); } - ; - -casesymlist: - /* empty */ { $$ = NULL; } - | NAME - | casesymlist ',' NAME - ; - -extern_name_list: - NAME - { ldlang_add_undef ($1); } - | extern_name_list ',' NAME - { ldlang_add_undef ($3); } - ; - -script_file: - { - ldlex_both(); - } - ifile_list - { - ldlex_popstate(); - } - ; - - -ifile_list: - ifile_list ifile_p1 - | - ; - - - -ifile_p1: - memory - | sections - | phdrs - | startup - | high_level_library - | low_level_library - | floating_point_support - | statement_anywhere - | version - | ';' - | TARGET_K '(' NAME ')' - { lang_add_target($3); } - | SEARCH_DIR '(' filename ')' - { ldfile_add_library_path ($3, false); } - | OUTPUT '(' filename ')' - { lang_add_output($3, 1); } - | OUTPUT_FORMAT '(' NAME ')' - { lang_add_output_format ($3, (char *) NULL, - (char *) NULL, 1); } - | OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')' - { lang_add_output_format ($3, $5, $7, 1); } - | OUTPUT_ARCH '(' NAME ')' - { ldfile_set_output_arch($3); } - | FORCE_COMMON_ALLOCATION - { command_line.force_common_definition = true ; } - | INPUT '(' input_list ')' - | GROUP - { lang_enter_group (); } - '(' input_list ')' - { lang_leave_group (); } - | MAP '(' filename ')' - { lang_add_map($3); } - | INCLUDE filename - { ldfile_open_command_file($2); } ifile_list END - | NOCROSSREFS '(' nocrossref_list ')' - { - lang_add_nocrossref ($3); - } - ; - -input_list: - NAME - { lang_add_input_file($1,lang_input_file_is_search_file_enum, - (char *)NULL); } - | input_list ',' NAME - { lang_add_input_file($3,lang_input_file_is_search_file_enum, - (char *)NULL); } - | input_list NAME - { lang_add_input_file($2,lang_input_file_is_search_file_enum, - (char *)NULL); } - | LNAME - { lang_add_input_file($1,lang_input_file_is_l_enum, - (char *)NULL); } - | input_list ',' LNAME - { lang_add_input_file($3,lang_input_file_is_l_enum, - (char *)NULL); } - | input_list LNAME - { lang_add_input_file($2,lang_input_file_is_l_enum, - (char *)NULL); } - ; - -sections: - SECTIONS '{' sec_or_group_p1 '}' - ; - -sec_or_group_p1: - sec_or_group_p1 section - | sec_or_group_p1 statement_anywhere - | - ; - -statement_anywhere: - ENTRY '(' NAME ')' - { lang_add_entry ($3, false); } - | assignment end - ; - -/* The '*' and '?' cases are there because the lexer returns them as - separate tokens rather than as NAME. */ -file_NAME_list: - NAME - { lang_add_wild ($1, current_file); } - | '*' - { lang_add_wild ("*", current_file); } - | '?' - { lang_add_wild ("?", current_file); } - | file_NAME_list opt_comma NAME - { lang_add_wild ($3, current_file); } - | file_NAME_list opt_comma '*' - { lang_add_wild ("*", current_file); } - | file_NAME_list opt_comma '?' - { lang_add_wild ("?", current_file); } - ; - -input_section_spec: - NAME - { - lang_add_wild((char *)NULL, $1); - } - | '[' - { - current_file = (char *)NULL; - } - file_NAME_list - ']' - | NAME - { - current_file = $1; - } - '(' file_NAME_list ')' - | '?' - /* This case is needed because the lexer returns a - single question mark as '?' rather than NAME. */ - { - current_file = "?"; - } - '(' file_NAME_list ')' - | '*' - { - current_file = (char *)NULL; - } - '(' file_NAME_list ')' - ; - -statement: - assignment end - | CREATE_OBJECT_SYMBOLS - { - lang_add_attribute(lang_object_symbols_statement_enum); - } - | ';' - | CONSTRUCTORS - { - - lang_add_attribute(lang_constructors_statement_enum); - } - | input_section_spec - | length '(' mustbe_exp ')' - { - lang_add_data((int) $1,$3); - } - - | FILL '(' mustbe_exp ')' - { - lang_add_fill - (exp_get_value_int($3, - 0, - "fill value", - lang_first_phase_enum)); - } - ; - -statement_list: - statement_list statement - | statement - ; - -statement_list_opt: - /* empty */ - | statement_list - ; - -length: - QUAD - { $$ = $1; } - | SQUAD - { $$ = $1; } - | LONG - { $$ = $1; } - | SHORT - { $$ = $1; } - | BYTE - { $$ = $1; } - ; - -fill_opt: - '=' mustbe_exp - { - $$ = exp_get_value_int($2, - 0, - "fill value", - lang_first_phase_enum); - } - | { $$ = 0; } - ; - - - -assign_op: - PLUSEQ - { $$ = '+'; } - | MINUSEQ - { $$ = '-'; } - | MULTEQ - { $$ = '*'; } - | DIVEQ - { $$ = '/'; } - | LSHIFTEQ - { $$ = LSHIFT; } - | RSHIFTEQ - { $$ = RSHIFT; } - | ANDEQ - { $$ = '&'; } - | OREQ - { $$ = '|'; } - - ; - -end: ';' | ',' - ; - - -assignment: - NAME '=' mustbe_exp - { - lang_add_assignment (exp_assop ($2, $1, $3)); - } - | NAME assign_op mustbe_exp - { - lang_add_assignment (exp_assop ('=', $1, - exp_binop ($2, - exp_nameop (NAME, - $1), - $3))); - } - | PROVIDE '(' NAME '=' mustbe_exp ')' - { - lang_add_assignment (exp_provide ($3, $5)); - } - ; - - -opt_comma: - ',' | ; - - -memory: - MEMORY '{' memory_spec memory_spec_list '}' - ; - -memory_spec_list: - memory_spec_list memory_spec - | memory_spec_list ',' memory_spec - | - ; - - -memory_spec: NAME - { region = lang_memory_region_lookup($1); } - attributes_opt ':' - origin_spec opt_comma length_spec - - ; origin_spec: - ORIGIN '=' mustbe_exp - { region->current = - region->origin = - exp_get_vma($3, 0L,"origin", lang_first_phase_enum); -} - ; - -length_spec: - LENGTH '=' mustbe_exp - { region->length = exp_get_vma($3, - ~((bfd_vma)0), - "length", - lang_first_phase_enum); - } - - -attributes_opt: - '(' NAME ')' - { - lang_set_flags(region, $2); - } - | - - ; - -startup: - STARTUP '(' filename ')' - { lang_startup($3); } - ; - -high_level_library: - HLL '(' high_level_library_NAME_list ')' - | HLL '(' ')' - { ldemul_hll((char *)NULL); } - ; - -high_level_library_NAME_list: - high_level_library_NAME_list opt_comma filename - { ldemul_hll($3); } - | filename - { ldemul_hll($1); } - - ; - -low_level_library: - SYSLIB '(' low_level_library_NAME_list ')' - ; low_level_library_NAME_list: - low_level_library_NAME_list opt_comma filename - { ldemul_syslib($3); } - | - ; - -floating_point_support: - FLOAT - { lang_float(true); } - | NOFLOAT - { lang_float(false); } - ; - -nocrossref_list: - /* empty */ - { - $$ = NULL; - } - | NAME nocrossref_list - { - struct lang_nocrossref *n; - - n = (struct lang_nocrossref *) xmalloc (sizeof *n); - n->name = $1; - n->next = $2; - $$ = n; - } - | NAME ',' nocrossref_list - { - struct lang_nocrossref *n; - - n = (struct lang_nocrossref *) xmalloc (sizeof *n); - n->name = $1; - n->next = $3; - $$ = n; - } - ; - -mustbe_exp: { ldlex_expression(); } - exp - { ldlex_popstate(); $$=$2;} - ; - -exp : - '-' exp %prec UNARY - { $$ = exp_unop('-', $2); } - | '(' exp ')' - { $$ = $2; } - | NEXT '(' exp ')' %prec UNARY - { $$ = exp_unop((int) $1,$3); } - | '!' exp %prec UNARY - { $$ = exp_unop('!', $2); } - | '+' exp %prec UNARY - { $$ = $2; } - | '~' exp %prec UNARY - { $$ = exp_unop('~', $2);} - - | exp '*' exp - { $$ = exp_binop('*', $1, $3); } - | exp '/' exp - { $$ = exp_binop('/', $1, $3); } - | exp '%' exp - { $$ = exp_binop('%', $1, $3); } - | exp '+' exp - { $$ = exp_binop('+', $1, $3); } - | exp '-' exp - { $$ = exp_binop('-' , $1, $3); } - | exp LSHIFT exp - { $$ = exp_binop(LSHIFT , $1, $3); } - | exp RSHIFT exp - { $$ = exp_binop(RSHIFT , $1, $3); } - | exp EQ exp - { $$ = exp_binop(EQ , $1, $3); } - | exp NE exp - { $$ = exp_binop(NE , $1, $3); } - | exp LE exp - { $$ = exp_binop(LE , $1, $3); } - | exp GE exp - { $$ = exp_binop(GE , $1, $3); } - | exp '<' exp - { $$ = exp_binop('<' , $1, $3); } - | exp '>' exp - { $$ = exp_binop('>' , $1, $3); } - | exp '&' exp - { $$ = exp_binop('&' , $1, $3); } - | exp '^' exp - { $$ = exp_binop('^' , $1, $3); } - | exp '|' exp - { $$ = exp_binop('|' , $1, $3); } - | exp '?' exp ':' exp - { $$ = exp_trinop('?' , $1, $3, $5); } - | exp ANDAND exp - { $$ = exp_binop(ANDAND , $1, $3); } - | exp OROR exp - { $$ = exp_binop(OROR , $1, $3); } - | DEFINED '(' NAME ')' - { $$ = exp_nameop(DEFINED, $3); } - | INT - { $$ = exp_intop($1); } - | SIZEOF_HEADERS - { $$ = exp_nameop(SIZEOF_HEADERS,0); } - - | SIZEOF '(' NAME ')' - { $$ = exp_nameop(SIZEOF,$3); } - | ADDR '(' NAME ')' - { $$ = exp_nameop(ADDR,$3); } - | LOADADDR '(' NAME ')' - { $$ = exp_nameop(LOADADDR,$3); } - | ABSOLUTE '(' exp ')' - { $$ = exp_unop(ABSOLUTE, $3); } - | ALIGN_K '(' exp ')' - { $$ = exp_unop(ALIGN_K,$3); } - | BLOCK '(' exp ')' - { $$ = exp_unop(ALIGN_K,$3); } - | NAME - { $$ = exp_nameop(NAME,$1); } - | MAX '(' exp ',' exp ')' - { $$ = exp_binop (MAX, $3, $5 ); } - | MIN '(' exp ',' exp ')' - { $$ = exp_binop (MIN, $3, $5 ); } - ; - - -opt_at: - AT '(' exp ')' { $$ = $3; } - | { $$ = 0; } - ; - -section: NAME { ldlex_expression(); } - opt_exp_with_type - opt_at { ldlex_popstate (); ldlex_script (); } - '{' - { - lang_enter_output_section_statement($1, $3, - sectype, - 0, 0, 0, $4); - } - statement_list_opt - '}' { ldlex_popstate (); ldlex_expression (); } - memspec_opt phdr_opt fill_opt - { - ldlex_popstate (); - lang_leave_output_section_statement ($13, $11, $12); - } - opt_comma - | OVERLAY - { ldlex_expression (); } - opt_exp_without_type opt_nocrossrefs opt_at - { ldlex_popstate (); ldlex_script (); } - '{' - { - lang_enter_overlay ($3, $5, (int) $4); - } - overlay_section - '}' - { ldlex_popstate (); ldlex_expression (); } - memspec_opt phdr_opt fill_opt - { - ldlex_popstate (); - lang_leave_overlay ($14, $12, $13); - } - opt_comma - | /* The GROUP case is just enough to support the gcc - svr3.ifile script. It is not intended to be full - support. I'm not even sure what GROUP is supposed - to mean. */ - GROUP { ldlex_expression (); } - opt_exp_with_type - { - ldlex_popstate (); - lang_add_assignment (exp_assop ('=', ".", $3)); - } - '{' sec_or_group_p1 '}' - ; - -type: - NOLOAD { sectype = noload_section; } - | DSECT { sectype = dsect_section; } - | COPY { sectype = copy_section; } - | INFO { sectype = info_section; } - | OVERLAY { sectype = overlay_section; } - ; - -atype: - '(' type ')' - | /* EMPTY */ { sectype = normal_section; } - | '(' ')' { sectype = normal_section; } - ; - -opt_exp_with_type: - exp atype ':' { $$ = $1; } - | atype ':' { $$ = (etree_type *)NULL; } - | /* The BIND cases are to support the gcc svr3.ifile - script. They aren't intended to implement full - support for the BIND keyword. I'm not even sure - what BIND is supposed to mean. */ - BIND '(' exp ')' atype ':' { $$ = $3; } - | BIND '(' exp ')' BLOCK '(' exp ')' atype ':' - { $$ = $3; } - ; - -opt_exp_without_type: - exp ':' { $$ = $1; } - | ':' { $$ = (etree_type *) NULL; } - ; - -opt_nocrossrefs: - /* empty */ - { $$ = 0; } - | NOCROSSREFS - { $$ = 1; } - ; - -memspec_opt: - '>' NAME - { $$ = $2; } - | { $$ = "*default*"; } - ; - -phdr_opt: - /* empty */ - { - $$ = NULL; - } - | phdr_opt ':' NAME - { - struct lang_output_section_phdr_list *n; - - n = ((struct lang_output_section_phdr_list *) - xmalloc (sizeof *n)); - n->name = $3; - n->used = false; - n->next = $1; - $$ = n; - } - ; - -overlay_section: - /* empty */ - | overlay_section - NAME - { - ldlex_script (); - lang_enter_overlay_section ($2); - } - '{' statement_list_opt '}' - { ldlex_popstate (); ldlex_expression (); } - phdr_opt fill_opt - { - ldlex_popstate (); - lang_leave_overlay_section ($9, $8); - } - opt_comma - ; - -phdrs: - PHDRS '{' phdr_list '}' - ; - -phdr_list: - /* empty */ - | phdr_list phdr - ; - -phdr: - NAME { ldlex_expression (); } - phdr_type phdr_qualifiers { ldlex_popstate (); } - ';' - { - lang_new_phdr ($1, $3, $4.filehdr, $4.phdrs, $4.at, - $4.flags); - } - ; - -phdr_type: - exp - { - $$ = $1; - - if ($1->type.node_class == etree_name - && $1->type.node_code == NAME) - { - const char *s; - unsigned int i; - static const char * const phdr_types[] = - { - "PT_NULL", "PT_LOAD", "PT_DYNAMIC", - "PT_INTERP", "PT_NOTE", "PT_SHLIB", - "PT_PHDR" - }; - - s = $1->name.name; - for (i = 0; - i < sizeof phdr_types / sizeof phdr_types[0]; - i++) - if (strcmp (s, phdr_types[i]) == 0) - { - $$ = exp_intop (i); - break; - } - } - } - ; - -phdr_qualifiers: - /* empty */ - { - memset (&$$, 0, sizeof (struct phdr_info)); - } - | NAME phdr_val phdr_qualifiers - { - $$ = $3; - if (strcmp ($1, "FILEHDR") == 0 && $2 == NULL) - $$.filehdr = true; - else if (strcmp ($1, "PHDRS") == 0 && $2 == NULL) - $$.phdrs = true; - else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL) - $$.flags = $2; - else - einfo ("%X%P:%S: PHDRS syntax error at `%s'\n", $1); - } - | AT '(' exp ')' phdr_qualifiers - { - $$ = $5; - $$.at = $3; - } - ; - -phdr_val: - /* empty */ - { - $$ = NULL; - } - | '(' exp ')' - { - $$ = $2; - } - ; - -/* This syntax is used within an external version script file. */ - -version_script_file: - { - ldlex_version_file (); - PUSH_ERROR ("VERSION script"); - } - vers_nodes - { - ldlex_popstate (); - POP_ERROR (); - } - ; - -/* This is used within a normal linker script file. */ - -version: - { - ldlex_version_script (); - } - VERSIONK '{' vers_nodes '}' - { - ldlex_popstate (); - } - ; - -vers_nodes: - vers_node - | vers_nodes vers_node - ; - -vers_node: - VERS_TAG '{' vers_tag '}' ';' - { - lang_register_vers_node ($1, $3, NULL); - } - | VERS_TAG '{' vers_tag '}' verdep ';' - { - lang_register_vers_node ($1, $3, $5); - } - ; - -verdep: - VERS_TAG - { - $$ = lang_add_vers_depend (NULL, $1); - } - | verdep VERS_TAG - { - $$ = lang_add_vers_depend ($1, $2); - } - ; - -vers_tag: - /* empty */ - { - $$ = lang_new_vers_node (NULL, NULL); - } - | vers_defns ';' - { - $$ = lang_new_vers_node ($1, NULL); - } - | GLOBAL ':' vers_defns ';' - { - $$ = lang_new_vers_node ($3, NULL); - } - | LOCAL ':' vers_defns ';' - { - $$ = lang_new_vers_node (NULL, $3); - } - | GLOBAL ':' vers_defns ';' LOCAL ':' vers_defns ';' - { - $$ = lang_new_vers_node ($3, $7); - } - ; - -vers_defns: - VERS_IDENTIFIER - { - $$ = lang_new_vers_regex (NULL, $1); - } - | vers_defns ';' VERS_IDENTIFIER - { - $$ = lang_new_vers_regex ($1, $3); - } - ; - -%% -void -yyerror(arg) - const char *arg; -{ - if (ldfile_assumed_script) - einfo ("%P:%s: file format not recognized; treating as linker script\n", - ldfile_input_filename); - if (error_index > 0 && error_index < ERROR_NAME_MAX) - einfo ("%P%F:%S: %s in %s\n", arg, error_names[error_index-1]); - else - einfo ("%P%F:%S: %s\n", arg); -} diff --git a/contrib/binutils/ld/ldint.texinfo b/contrib/binutils/ld/ldint.texinfo deleted file mode 100644 index 612fc2a0135d..000000000000 --- a/contrib/binutils/ld/ldint.texinfo +++ /dev/null @@ -1,412 +0,0 @@ -\input texinfo -@setfilename ldint.info - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Ld-Internals: (ldint). The GNU linker internals. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@ifinfo -This file documents the internals of the GNU linker ld. - -Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. -Contributed by Cygnus Support. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through Tex and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy or distribute modified versions of this -manual under the terms of the GPL (for which purpose this text may be -regarded as a program in the language TeX). -@end ifinfo - -@iftex -@finalout -@setchapternewpage off -@settitle GNU Linker Internals -@titlepage -@title{A guide to the internals of the GNU linker} -@author Per Bothner, Steve Chamberlain, Ian Lance Taylor -@author Cygnus Support -@page - -@tex -\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$ -\xdef\manvers{\$Revision: 1.10 $} % For use in headers, footers too -{\parskip=0pt -\hfill Cygnus Support\par -\hfill \manvers\par -\hfill \TeX{}info \texinfoversion\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@end titlepage -@end iftex - -@node Top -@top - -This file documents the internals of the GNU linker @code{ld}. It is a -collection of miscellaneous information with little form at this point. -Mostly, it is a repository into which you can put information about -GNU @code{ld} as you discover it (or as you design changes to @code{ld}). - -@menu -* README:: The README File -* Emulations:: How linker emulations are generated -@end menu - -@node README -@chapter The @file{README} File - -Check the @file{README} file; it often has useful information that does not -appear anywhere else in the directory. - -@node Emulations -@chapter How linker emulations are generated - -Each linker target has an @dfn{emulation}. The emulation includes the -default linker script, and certain emulations also modify certain types -of linker behaviour. - -Emulations are created during the build process by the shell script -@file{genscripts.sh}. - -The @file{genscripts.sh} script starts by reading a file in the -@file{emulparams} directory. This is a shell script which sets various -shell variables used by @file{genscripts.sh} and the other shell scripts -it invokes. - -The @file{genscripts.sh} script will invoke a shell script in the -@file{scripttempl} directory in order to create default linker scripts -written in the linker command language. The @file{scripttempl} script -will be invoked 5 (or, in some cases, 6) times, with different -assignments to shell variables, to create different default scripts. -The choice of script is made based on the command line options. - -After creating the scripts, @file{genscripts.sh} will invoke yet another -shell script, this time in the @file{emultempl} directory. That shell -script will create the emulation source file, which contains C code. -This C code permits the linker emulation to override various linker -behaviours. Most targets use the generic emulation code, which is in -@file{emultempl/generic.em}. - -To summarize, @file{genscripts.sh} reads three shell scripts: an -emulation parameters script in the @file{emulparams} directory, a linker -script generation script in the @file{scripttempl} directory, and an -emulation source file generation script in the @file{emultempl} -directory. - -For example, the Sun 4 linker sets up variables in -@file{emulparams/sun4.sh}, creates linker scripts using -@file{scripttempl/aout.sc}, and creates the emulation code using -@file{emultempl/sunos.em}. - -Note that the linker can support several emulations simultaneously, -depending upon how it is configured. An emulation can be selected with -the @code{-m} option. The @code{-V} option will list all supported -emulations. - -@menu -* emulation parameters:: @file{emulparams} scripts -* linker scripts:: @file{scripttempl} scripts -* linker emulations:: @file{emultempl} scripts -@end menu - -@node emulation parameters -@section @file{emulparams} scripts - -Each target selects a particular file in the @file{emulparams} directory -by setting the shell variable @code{targ_emul} in @file{configure.tgt}. -This shell variable is used by the @file{configure} script to control -building an emulation source file. - -Certain conventions are enforced. Suppose the @code{targ_emul} variable -is set to @var{emul} in @file{configure.tgt}. The name of the emulation -shell script will be @file{emulparams/@var{emul}.sh}. The -@file{Makefile} must have a target named @file{e@var{emul}.c}; this -target must depend upon @file{emulparams/@var{emul}.sh}, as well as the -appropriate scripts in the @file{scripttempl} and @file{emultempl} -directories. The @file{Makefile} target must invoke @code{GENSCRIPTS} -with two arguments: @var{emul}, and the value of the make variable -@code{tdir_@var{emul}}. The value of the latter variable will be set by -the @file{configure} script, and is used to set the default target -directory to search. - -By convention, the @file{emulparams/@var{emul}.sh} shell script should -only set shell variables. It may set shell variables which are to be -interpreted by the @file{scripttempl} and the @file{emultempl} scripts. -Certain shell variables are interpreted directly by the -@file{genscripts.sh} script. - -Here is a list of shell variables interpreted by @file{genscripts.sh}, -as well as some conventional shell variables interpreted by the -@file{scripttempl} and @file{emultempl} scripts. - -@table @code -@item SCRIPT_NAME -This is the name of the @file{scripttempl} script to use. If -@code{SCRIPT_NAME} is set to @var{script}, @file{genscripts.sh} will use -the script @file{scriptteml/@var{script}.sc}. - -@item TEMPLATE_NAME -This is the name of the @file{emultemlp} script to use. If -@code{TEMPLATE_NAME} is set to @var{template}, @file{genscripts.sh} will -use the script @file{emultempl/@var{template}.em}. If this variable is -not set, the default value is @samp{generic}. - -@item GENERATE_SHLIB_SCRIPT -If this is set to a nonempty string, @file{genscripts.sh} will invoke -the @file{scripttempl} script an extra time to create a shared library -script. @ref{linker scripts}. - -@item OUTPUT_FORMAT -This is normally set to indicate the BFD output format use (e.g., -@samp{"a.out-sunos-big"}. The @file{scripttempl} script will normally -use it in an @code{OUTPUT_FORMAT} expression in the linker script. - -@item ARCH -This is normally set to indicate the architecture to use (e.g., -@samp{sparc}). The @file{scripttempl} script will normally use it in an -@code{OUTPUT_ARCH} expression in the linker script. - -@item ENTRY -Some @file{scripttempl} scripts use this to set the entry address, in an -@code{ENTRY} expression in the linker script. - -@item TEXT_START_ADDR -Some @file{scripttempl} scripts use this to set the start address of the -@samp{.text} section. - -@item NONPAGED_TEXT_START_ADDR -If this is defined, the @file{genscripts.sh} script sets -@code{TEXT_START_ADDR} to its value before running the -@file{scripttempl} script for the @code{-n} and @code{-N} options -(@pxref{linker scripts}). - -@item SEGMENT_SIZE -The @file{genscripts.sh} script uses this to set the default value of -@code{DATA_ALIGNMENT} when running the @file{scripttempl} script. - -@item TARGET_PAGE_SIZE -If @code{SEGMENT_SIZE} is not defined, the @file{genscripts.sh} script -uses this to define it. -@end table - -@node linker scripts -@section @file{scripttempl} scripts - -Each linker target uses a @file{scripttempl} script to generate the -default linker scripts. The name of the @file{scripttempl} script is -set by the @code{SCRIPT_NAME} variable in the @file{emulparams} script. -If @code{SCRIPT_NAME} is set to @var{script}, @code{genscripts.sh} will -invoke @file{scripttempl/@var{script}.sc}. - -The @file{genscripts.sh} script will invoke the @file{scripttempl} -script 5 or 6 times. Each time it will set the shell variable -@code{LD_FLAG} to a different value. When the linker is run, the -options used will direct it to select a particular script. (Script -selection is controlled by the @code{get_script} emulation entry point; -this describes the conventional behaviour). - -The @file{scripttempl} script should just write a linker script, written -in the linker command language, to standard output. If the emulation -name--the name of the @file{emulparams} file without the @file{.sc} -extension--is @var{emul}, then the output will be directed to -@file{ldscripts/@var{emul}.@var{extension}} in the build directory, -where @var{extension} changes each time the @file{scripttempl} script is -invoked. - -Here is the list of values assigned to @code{LD_FLAG}. - -@table @code -@item (empty) -The script generated is used by default (when none of the following -cases apply). The output has an extension of @file{.x}. -@item n -The script generated is used when the linker is invoked with the -@code{-n} option. The output has an extension of @file{.xn}. -@item N -The script generated is used when the linker is invoked with the -@code{-N} option. The output has an extension of @file{.xbn}. -@item r -The script generated is used when the linker is invoked with the -@code{-r} option. The output has an extension of @file{.xr}. -@item u -The script generated is used when the linker is invoked with the -@code{-Ur} option. The output has an extension of @file{.xu}. -@item shared -The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to -this value if @code{GENERATE_SHLIB_SCRIPT} is defined in the -@file{emulparams} file. The @file{emultempl} script must arrange to use -this script at the appropriate time, normally when the linker is invoked -with the @code{-shared} option. The output has an extension of -@file{.xs}. -@end table - -Besides the shell variables set by the @file{emulparams} script, and the -@code{LD_FLAG} variable, the @file{genscripts.sh} script will set -certain variables for each run of the @file{scripttempl} script. - -@table @code -@item RELOCATING -This will be set to a non-empty string when the linker is doing a final -relocation (e.g., all scripts other than @code{-r} and @code{-Ur}). - -@item CONSTRUCTING -This will be set to a non-empty string when the linker is building -global constructor and destructor tables (e.g., all scripts other than -@code{-r}). - -@item DATA_ALIGNMENT -This will be set to an @code{ALIGN} expression when the output should be -page aligned, or to @samp{.} when generating the @code{-N} script. - -@item CREATE_SHLIB -This will be set to a non-empty string when generating a @code{-shared} -script. -@end table - -The conventional way to write a @file{scripttempl} script is to first -set a few shell variables, and then write out a linker script using -@code{cat} with a here document. The linker script will use variable -substitutions, based on the above variables and those set in the -@file{emulparams} script, to control its behaviour. - -When there are parts of the @file{scripttempl} script which should only -be run when doing a final relocation, they should be enclosed within a -variable substitution based on @code{RELOCATING}. For example, on many -targets special symbols such as @code{_end} should be defined when doing -a final link. Naturally, those symbols should not be defined when doing -a relocateable link using @code{-r}. The @file{scripttempl} script -could use a construct like this to define those symbols: -@smallexample - $@{RELOCATING+ _end = .;@} -@end smallexample -This will do the symbol assignment only if the @code{RELOCATING} -variable is defined. - -The basic job of the linker script is to put the sections in the correct -order, and at the correct memory addresses. For some targets, the -linker script may have to do some other operations. - -For example, on most MIPS platforms, the linker is responsible for -defining the special symbol @code{_gp}, used to initialize the -@code{$gp} register. It must be set to the start of the small data -section plus @code{0x8000}. Naturally, it should only be defined when -doing a final relocation. This will typically be done like this: -@smallexample - $@{RELOCATING+ _gp = ALIGN(16) + 0x8000;@} -@end smallexample -This line would appear just before the sections which compose the small -data section (@samp{.sdata}, @samp{.sbss}). All those sections would be -contiguous in memory. - -Many COFF systems build constructor tables in the linker script. The -compiler will arrange to output the address of each global constructor -in a @samp{.ctor} section, and the address of each global destructor in -a @samp{.dtor} section (this is done by defining -@code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR} in the -@code{gcc} configuration files). The @code{gcc} runtime support -routines expect the constructor table to be named @code{__CTOR_LIST__}. -They expect it to be a list of words, with the first word being the -count of the number of entries. There should be a trailing zero word. -(Actually, the count may be -1 if the trailing word is present, and the -trailing word may be omitted if the count is correct, but, as the -@code{gcc} behaviour has changed slightly over the years, it is safest -to provide both). Here is a typical way that might be handled in a -@file{scripttempl} file. -@smallexample - $@{CONSTRUCTING+ __CTOR_LIST__ = .;@} - $@{CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)@} - $@{CONSTRUCTING+ *(.ctors)@} - $@{CONSTRUCTING+ LONG(0)@} - $@{CONSTRUCTING+ __CTOR_END__ = .;@} - $@{CONSTRUCTING+ __DTOR_LIST__ = .;@} - $@{CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)@} - $@{CONSTRUCTING+ *(.dtors)@} - $@{CONSTRUCTING+ LONG(0)@} - $@{CONSTRUCTING+ __DTOR_END__ = .;@} -@end smallexample -The use of @code{CONSTRUCTING} ensures that these linker script commands -will only appear when the linker is supposed to be building the -constructor and destructor tables. This example is written for a target -which uses 4 byte pointers. - -Embedded systems often need to set a stack address. This is normally -best done by using the @code{PROVIDE} construct with a default stack -address. This permits the user to easily override the stack address -using the @code{--defsym} option. Here is an example: -@smallexample - $@{RELOCATING+ PROVIDE (__stack = 0x80000000);@} -@end smallexample -The value of the symbol @code{__stack} would then be used in the startup -code to initialize the stack pointer. - -@node linker emulations -@section @file{emultempl} scripts - -Each linker target uses an @file{emultempl} script to generate the -emulation code. The name of the @file{emultempl} script is set by the -@code{TEMPLATE_NAME} variable in the @file{emulparams} script. If the -@code{TEMPLATE_NAME} variable is not set, the default is -@samp{generic}. If the value of @code{TEMPLATE_NAME} is @var{template}, -@file{genscripts.sh} will use @file{emultempl/@var{template}.em}. - -Most targets use the generic @file{emultempl} script, -@file{emultempl/generic.em}. A different @file{emultempl} script is -only needed if the linker must support unusual actions, such as linking -against shared libraries. - -The @file{emultempl} script is normally written as a simple invocation -of @code{cat} with a here document. The document will use a few -variable substitutions. Typically each function names uses a -substitution involving @code{EMULATION_NAME}, for ease of debugging when -the linker supports multiple emulations. - -Every function and variable in the emitted file should be static. The -only globally visible object must be named -@code{ld_@var{EMULATION_NAME}_emulation}, where @var{EMULATION_NAME} is -the name of the emulation set in @file{configure.tgt} (this is also the -name of the @file{emulparams} file without the @file{.sh} extension). -The @file{genscripts.sh} script will set the shell variable -@code{EMULATION_NAME} before invoking the @file{emultempl} script. - -The @code{ld_@var{EMULATION_NAME}_emulation} variable must be a -@code{struct ld_emulation_xfer_struct}, as defined in @file{ldemul.h}. -It defines a set of function pointers which are invoked by the linker, -as well as strings for the emulation name (normally set from the shell -variable @code{EMULATION_NAME} and the default BFD target name (normally -set from the shell variable @code{OUTPUT_FORMAT} which is normally set -by the @file{emulparams} file). - -The @file{genscripts.sh} script will set the shell variable -@code{COMPILE_IN} when it invokes the @file{emultempl} script for the -default emulation. In this case, the @file{emultempl} script should -include the linker scripts directly, and return them from the -@code{get_scripts} entry point. When the emulation is not the default, -the @code{get_scripts} entry point should just return a file name. See -@file{emultempl/generic.em} for an example of how this is done. - -At some point, the linker emulation entry points should be documented. - -@contents -@bye diff --git a/contrib/binutils/ld/ldlang.c b/contrib/binutils/ld/ldlang.c deleted file mode 100644 index 6cdab2b1e715..000000000000 --- a/contrib/binutils/ld/ldlang.c +++ /dev/null @@ -1,4123 +0,0 @@ -/* Linker command language support. - Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 - Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" -#include "libiberty.h" -#include "obstack.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldgram.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldemul.h" -#include "ldlex.h" -#include "ldmisc.h" -#include "ldctor.h" -#include "ldfile.h" -#include "fnmatch.h" - -#include <ctype.h> - -/* FORWARDS */ -static lang_statement_union_type *new_statement PARAMS ((enum statement_enum, - size_t, - lang_statement_list_type*)); - - -/* LOCALS */ -static struct obstack stat_obstack; - -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free -static CONST char *startup_file; -static lang_statement_list_type input_file_chain; -static boolean placed_commons = false; -static lang_output_section_statement_type *default_common_section; -static boolean map_option_f; -static bfd_vma print_dot; -static lang_input_statement_type *first_file; -static lang_statement_list_type lang_output_section_statement; -static CONST char *current_target; -static CONST char *output_target; -static lang_statement_list_type statement_list; -static struct lang_phdr *lang_phdr_list; - -static void lang_for_each_statement_worker - PARAMS ((void (*func) (lang_statement_union_type *), - lang_statement_union_type *s)); -static lang_input_statement_type *new_afile - PARAMS ((const char *name, lang_input_file_enum_type file_type, - const char *target, boolean add_to_list)); -static void init_os PARAMS ((lang_output_section_statement_type *s)); -static void exp_init_os PARAMS ((etree_type *)); -static void section_already_linked PARAMS ((bfd *, asection *, PTR)); -static boolean wildcardp PARAMS ((const char *)); -static void wild_section PARAMS ((lang_wild_statement_type *ptr, - const char *section, - lang_input_statement_type *file, - lang_output_section_statement_type *output)); -static lang_input_statement_type *lookup_name PARAMS ((const char *name)); -static void load_symbols PARAMS ((lang_input_statement_type *entry, - lang_statement_list_type *)); -static void wild_file PARAMS ((lang_wild_statement_type *, const char *, - lang_input_statement_type *, - lang_output_section_statement_type *)); -static void wild PARAMS ((lang_wild_statement_type *s, - const char *section, const char *file, - const char *target, - lang_output_section_statement_type *output)); -static bfd *open_output PARAMS ((const char *name)); -static void ldlang_open_output PARAMS ((lang_statement_union_type *statement)); -static void open_input_bfds - PARAMS ((lang_statement_union_type *statement, boolean)); -static void lang_reasonable_defaults PARAMS ((void)); -static void lang_place_undefineds PARAMS ((void)); -static void map_input_to_output_sections - PARAMS ((lang_statement_union_type *s, - const char *target, - lang_output_section_statement_type *output_section_statement)); -static void print_output_section_statement - PARAMS ((lang_output_section_statement_type *output_section_statement)); -static void print_assignment - PARAMS ((lang_assignment_statement_type *assignment, - lang_output_section_statement_type *output_section)); -static void print_input_statement PARAMS ((lang_input_statement_type *statm)); -static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR)); -static void print_input_section PARAMS ((lang_input_section_type *in)); -static void print_fill_statement PARAMS ((lang_fill_statement_type *fill)); -static void print_data_statement PARAMS ((lang_data_statement_type *data)); -static void print_address_statement PARAMS ((lang_address_statement_type *)); -static void print_reloc_statement PARAMS ((lang_reloc_statement_type *reloc)); -static void print_padding_statement PARAMS ((lang_padding_statement_type *s)); -static void print_wild_statement - PARAMS ((lang_wild_statement_type *w, - lang_output_section_statement_type *os)); -static void print_group - PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *)); -static void print_statement PARAMS ((lang_statement_union_type *s, - lang_output_section_statement_type *os)); -static void print_statement_list PARAMS ((lang_statement_union_type *s, - lang_output_section_statement_type *os)); -static void print_statements PARAMS ((void)); -static bfd_vma insert_pad PARAMS ((lang_statement_union_type **this_ptr, - fill_type fill, unsigned int power, - asection *output_section_statement, - bfd_vma dot)); -static bfd_vma size_input_section - PARAMS ((lang_statement_union_type **this_ptr, - lang_output_section_statement_type *output_section_statement, - fill_type fill, bfd_vma dot, boolean relax)); -static void lang_finish PARAMS ((void)); -static void ignore_bfd_errors PARAMS ((const char *, ...)); -static void lang_check PARAMS ((void)); -static void lang_common PARAMS ((void)); -static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR)); -static void lang_place_orphans PARAMS ((void)); -static int topower PARAMS ((int)); -static void lang_set_startof PARAMS ((void)); -static void reset_memory_regions PARAMS ((void)); -static void lang_record_phdrs PARAMS ((void)); - -/* EXPORTS */ -lang_output_section_statement_type *abs_output_section; -lang_statement_list_type *stat_ptr = &statement_list; -lang_statement_list_type file_chain = { 0 }; -const char *entry_symbol = NULL; -boolean entry_from_cmdline; -boolean lang_has_input_file = false; -boolean had_output_filename = false; -boolean lang_float_flag = false; -boolean delete_output_file_on_failure = false; -struct lang_nocrossrefs *nocrossref_list; - -etree_type *base; /* Relocation base - or null */ - - -#if defined(__STDC__) || defined(ALMOST_STDC) -#define cat(a,b) a##b -#else -#define cat(a,b) a/**/b -#endif - -#define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y) - -#define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma) - -#define outside_symbol_address(q) ((q)->value + outside_section_address(q->section)) - -#define SECTION_NAME_MAP_LENGTH (16) - -PTR -stat_alloc (size) - size_t size; -{ - return obstack_alloc (&stat_obstack, size); -} - -/*---------------------------------------------------------------------- - lang_for_each_statement walks the parse tree and calls the provided - function for each node -*/ - -static void -lang_for_each_statement_worker (func, s) - void (*func) PARAMS ((lang_statement_union_type *)); - lang_statement_union_type *s; -{ - for (; s != (lang_statement_union_type *) NULL; s = s->next) - { - func (s); - - switch (s->header.type) - { - case lang_constructors_statement_enum: - lang_for_each_statement_worker (func, constructor_list.head); - break; - case lang_output_section_statement_enum: - lang_for_each_statement_worker - (func, - s->output_section_statement.children.head); - break; - case lang_wild_statement_enum: - lang_for_each_statement_worker - (func, - s->wild_statement.children.head); - break; - case lang_group_statement_enum: - lang_for_each_statement_worker (func, - s->group_statement.children.head); - break; - case lang_data_statement_enum: - case lang_reloc_statement_enum: - case lang_object_symbols_statement_enum: - case lang_output_statement_enum: - case lang_target_statement_enum: - case lang_input_section_enum: - case lang_input_statement_enum: - case lang_assignment_statement_enum: - case lang_padding_statement_enum: - case lang_address_statement_enum: - case lang_fill_statement_enum: - break; - default: - FAIL (); - break; - } - } -} - -void -lang_for_each_statement (func) - void (*func) PARAMS ((lang_statement_union_type *)); -{ - lang_for_each_statement_worker (func, - statement_list.head); -} - -/*----------------------------------------------------------------------*/ -void -lang_list_init (list) - lang_statement_list_type *list; -{ - list->head = (lang_statement_union_type *) NULL; - list->tail = &list->head; -} - -/*---------------------------------------------------------------------- - - build a new statement node for the parse tree - - */ - -static -lang_statement_union_type * -new_statement (type, size, list) - enum statement_enum type; - size_t size; - lang_statement_list_type * list; -{ - lang_statement_union_type *new = (lang_statement_union_type *) - stat_alloc (size); - - new->header.type = type; - new->header.next = (lang_statement_union_type *) NULL; - lang_statement_append (list, new, &new->header.next); - return new; -} - -/* - Build a new input file node for the language. There are several ways - in which we treat an input file, eg, we only look at symbols, or - prefix it with a -l etc. - - We can be supplied with requests for input files more than once; - they may, for example be split over serveral lines like foo.o(.text) - foo.o(.data) etc, so when asked for a file we check that we havn't - got it already so we don't duplicate the bfd. - - */ -static lang_input_statement_type * -new_afile (name, file_type, target, add_to_list) - CONST char *name; - lang_input_file_enum_type file_type; - CONST char *target; - boolean add_to_list; -{ - lang_input_statement_type *p; - - if (add_to_list) - p = new_stat (lang_input_statement, stat_ptr); - else - { - p = ((lang_input_statement_type *) - stat_alloc (sizeof (lang_input_statement_type))); - p->header.next = NULL; - } - - lang_has_input_file = true; - p->target = target; - switch (file_type) - { - case lang_input_file_is_symbols_only_enum: - p->filename = name; - p->is_archive = false; - p->real = true; - p->local_sym_name = name; - p->just_syms_flag = true; - p->search_dirs_flag = false; - break; - case lang_input_file_is_fake_enum: - p->filename = name; - p->is_archive = false; - p->real = false; - p->local_sym_name = name; - p->just_syms_flag = false; - p->search_dirs_flag = false; - break; - case lang_input_file_is_l_enum: - p->is_archive = true; - p->filename = name; - p->real = true; - p->local_sym_name = concat ("-l", name, (const char *) NULL); - p->just_syms_flag = false; - p->search_dirs_flag = true; - break; - case lang_input_file_is_marker_enum: - p->filename = name; - p->is_archive = false; - p->real = false; - p->local_sym_name = name; - p->just_syms_flag = false; - p->search_dirs_flag = true; - break; - case lang_input_file_is_search_file_enum: - p->filename = name; - p->is_archive = false; - p->real = true; - p->local_sym_name = name; - p->just_syms_flag = false; - p->search_dirs_flag = true; - break; - case lang_input_file_is_file_enum: - p->filename = name; - p->is_archive = false; - p->real = true; - p->local_sym_name = name; - p->just_syms_flag = false; - p->search_dirs_flag = false; - break; - default: - FAIL (); - } - p->the_bfd = (bfd *) NULL; - p->asymbols = (asymbol **) NULL; - p->next_real_file = (lang_statement_union_type *) NULL; - p->next = (lang_statement_union_type *) NULL; - p->symbol_count = 0; - p->dynamic = config.dynamic_link; - p->whole_archive = whole_archive; - p->loaded = false; - lang_statement_append (&input_file_chain, - (lang_statement_union_type *) p, - &p->next_real_file); - return p; -} - -lang_input_statement_type * -lang_add_input_file (name, file_type, target) - CONST char *name; - lang_input_file_enum_type file_type; - CONST char *target; -{ - lang_has_input_file = true; - return new_afile (name, file_type, target, true); -} - -/* Build enough state so that the parser can build its tree */ -void -lang_init () -{ - obstack_begin (&stat_obstack, 1000); - - stat_ptr = &statement_list; - - lang_list_init (stat_ptr); - - lang_list_init (&input_file_chain); - lang_list_init (&lang_output_section_statement); - lang_list_init (&file_chain); - first_file = lang_add_input_file ((char *) NULL, - lang_input_file_is_marker_enum, - (char *) NULL); - abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME); - - abs_output_section->bfd_section = bfd_abs_section_ptr; - -} - -/*---------------------------------------------------------------------- - A region is an area of memory declared with the - MEMORY { name:org=exp, len=exp ... } - syntax. - - We maintain a list of all the regions here - - If no regions are specified in the script, then the default is used - which is created when looked up to be the entire data space -*/ - -static lang_memory_region_type *lang_memory_region_list; -static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list; - -lang_memory_region_type * -lang_memory_region_lookup (name) - CONST char *CONST name; -{ - lang_memory_region_type *p; - - for (p = lang_memory_region_list; - p != (lang_memory_region_type *) NULL; - p = p->next) - { - if (strcmp (p->name, name) == 0) - { - return p; - } - } - -#if 0 - /* This code used to always use the first region in the list as the - default region. I changed it to instead use a region - encompassing all of memory as the default region. This permits - NOLOAD sections to work reasonably without requiring a region. - People should specify what region they mean, if they really want - a region. */ - if (strcmp (name, "*default*") == 0) - { - if (lang_memory_region_list != (lang_memory_region_type *) NULL) - { - return lang_memory_region_list; - } - } -#endif - - { - lang_memory_region_type *new = - (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type)); - - new->name = buystring (name); - new->next = (lang_memory_region_type *) NULL; - - *lang_memory_region_list_tail = new; - lang_memory_region_list_tail = &new->next; - new->origin = 0; - new->flags = 0; - new->not_flags = 0; - new->length = ~(bfd_size_type)0; - new->current = 0; - new->had_full_message = false; - - return new; - } -} - - -lang_memory_region_type * -lang_memory_default (section) - asection *section; -{ - lang_memory_region_type *p; - - flagword sec_flags = section->flags; - - /* Override SEC_DATA to mean a writable section. */ - if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC) - sec_flags |= SEC_DATA; - - for (p = lang_memory_region_list; - p != (lang_memory_region_type *) NULL; - p = p->next) - { - if ((p->flags & sec_flags) != 0 - && (p->not_flags & sec_flags) == 0) - { - return p; - } - } - return lang_memory_region_lookup ("*default*"); -} - -lang_output_section_statement_type * -lang_output_section_find (name) - CONST char *CONST name; -{ - lang_statement_union_type *u; - lang_output_section_statement_type *lookup; - - for (u = lang_output_section_statement.head; - u != (lang_statement_union_type *) NULL; - u = lookup->next) - { - lookup = &u->output_section_statement; - if (strcmp (name, lookup->name) == 0) - { - return lookup; - } - } - return (lang_output_section_statement_type *) NULL; -} - -lang_output_section_statement_type * -lang_output_section_statement_lookup (name) - CONST char *CONST name; -{ - lang_output_section_statement_type *lookup; - - lookup = lang_output_section_find (name); - if (lookup == (lang_output_section_statement_type *) NULL) - { - - lookup = (lang_output_section_statement_type *) - new_stat (lang_output_section_statement, stat_ptr); - lookup->region = (lang_memory_region_type *) NULL; - lookup->fill = 0; - lookup->block_value = 1; - lookup->name = name; - - lookup->next = (lang_statement_union_type *) NULL; - lookup->bfd_section = (asection *) NULL; - lookup->processed = false; - lookup->sectype = normal_section; - lookup->addr_tree = (etree_type *) NULL; - lang_list_init (&lookup->children); - - lookup->memspec = (CONST char *) NULL; - lookup->flags = 0; - lookup->subsection_alignment = -1; - lookup->section_alignment = -1; - lookup->load_base = (union etree_union *) NULL; - lookup->phdrs = NULL; - - lang_statement_append (&lang_output_section_statement, - (lang_statement_union_type *) lookup, - &lookup->next); - } - return lookup; -} - -static void -lang_map_flags (flag) - flagword flag; -{ - if (flag & SEC_ALLOC) - minfo ("a"); - - if (flag & SEC_CODE) - minfo ("x"); - - if (flag & SEC_READONLY) - minfo ("r"); - - if (flag & SEC_DATA) - minfo ("w"); - - if (flag & SEC_LOAD) - minfo ("l"); -} - -void -lang_map () -{ - lang_memory_region_type *m; - - minfo ("\nMemory Configuration\n\n"); - fprintf (config.map_file, "%-16s %-18s %-18s %s\n", - "Name", "Origin", "Length", "Attributes"); - - for (m = lang_memory_region_list; - m != (lang_memory_region_type *) NULL; - m = m->next) - { - char buf[100]; - int len; - - fprintf (config.map_file, "%-16s ", m->name); - - sprintf_vma (buf, m->origin); - minfo ("0x%s ", buf); - len = strlen (buf); - while (len < 16) - { - print_space (); - ++len; - } - - minfo ("0x%V", m->length); - if (m->flags || m->not_flags) - { -#ifndef BFD64 - minfo (" "); -#endif - if (m->flags) - { - print_space (); - lang_map_flags (m->flags); - } - - if (m->not_flags) - { - minfo (" !"); - lang_map_flags (m->not_flags); - } - } - - print_nl (); - } - - fprintf (config.map_file, "\nLinker script and memory map\n\n"); - - print_statements (); -} - -/* Initialize an output section. */ - -static void -init_os (s) - lang_output_section_statement_type *s; -{ - section_userdata_type *new; - - if (s->bfd_section != NULL) - return; - - if (strcmp (s->name, DISCARD_SECTION_NAME) == 0) - einfo ("%P%F: Illegal use of `%s' section", DISCARD_SECTION_NAME); - - new = ((section_userdata_type *) - stat_alloc (sizeof (section_userdata_type))); - - s->bfd_section = bfd_get_section_by_name (output_bfd, s->name); - if (s->bfd_section == (asection *) NULL) - s->bfd_section = bfd_make_section (output_bfd, s->name); - if (s->bfd_section == (asection *) NULL) - { - einfo ("%P%F: output format %s cannot represent section called %s\n", - output_bfd->xvec->name, s->name); - } - s->bfd_section->output_section = s->bfd_section; - - /* We initialize an output sections output offset to minus its own */ - /* vma to allow us to output a section through itself */ - s->bfd_section->output_offset = 0; - get_userdata (s->bfd_section) = (PTR) new; - - /* If there is a base address, make sure that any sections it might - mention are initialized. */ - if (s->addr_tree != NULL) - exp_init_os (s->addr_tree); -} - -/* Make sure that all output sections mentioned in an expression are - initialized. */ - -static void -exp_init_os (exp) - etree_type *exp; -{ - switch (exp->type.node_class) - { - case etree_assign: - exp_init_os (exp->assign.src); - break; - - case etree_binary: - exp_init_os (exp->binary.lhs); - exp_init_os (exp->binary.rhs); - break; - - case etree_trinary: - exp_init_os (exp->trinary.cond); - exp_init_os (exp->trinary.lhs); - exp_init_os (exp->trinary.rhs); - break; - - case etree_unary: - exp_init_os (exp->unary.child); - break; - - case etree_name: - switch (exp->type.node_code) - { - case ADDR: - case LOADADDR: - case SIZEOF: - { - lang_output_section_statement_type *os; - - os = lang_output_section_find (exp->name.name); - if (os != NULL && os->bfd_section == NULL) - init_os (os); - } - } - break; - - default: - break; - } -} - -/* Sections marked with the SEC_LINK_ONCE flag should only be linked - once into the output. This routine checks each sections, and - arranges to discard it if a section of the same name has already - been linked. This code assumes that all relevant sections have the - SEC_LINK_ONCE flag set; that is, it does not depend solely upon the - section name. This is called via bfd_map_over_sections. */ - -/*ARGSUSED*/ -static void -section_already_linked (abfd, sec, data) - bfd *abfd; - asection *sec; - PTR data; -{ - lang_input_statement_type *entry = (lang_input_statement_type *) data; - struct sec_link_once - { - struct sec_link_once *next; - asection *sec; - }; - static struct sec_link_once *sec_link_once_list; - flagword flags; - const char *name; - struct sec_link_once *l; - - /* If we are only reading symbols from this object, then we want to - discard all sections. */ - if (entry->just_syms_flag) - { - sec->output_section = bfd_abs_section_ptr; - sec->output_offset = sec->vma; - return; - } - - flags = bfd_get_section_flags (abfd, sec); - - if ((flags & SEC_LINK_ONCE) == 0) - return; - - name = bfd_get_section_name (abfd, sec); - - for (l = sec_link_once_list; l != NULL; l = l->next) - { - if (strcmp (name, bfd_get_section_name (l->sec->owner, l->sec)) == 0) - { - /* The section has already been linked. See if we should - issue a warning. */ - switch (flags & SEC_LINK_DUPLICATES) - { - default: - abort (); - - case SEC_LINK_DUPLICATES_DISCARD: - break; - - case SEC_LINK_DUPLICATES_ONE_ONLY: - einfo ("%P: %B: warning: ignoring duplicate section `%s'\n", - abfd, name); - break; - - case SEC_LINK_DUPLICATES_SAME_CONTENTS: - /* FIXME: We should really dig out the contents of both - sections and memcmp them. The COFF/PE spec says that - the Microsoft linker does not implement this - correctly, so I'm not going to bother doing it - either. */ - /* Fall through. */ - case SEC_LINK_DUPLICATES_SAME_SIZE: - if (bfd_section_size (abfd, sec) - != bfd_section_size (l->sec->owner, l->sec)) - einfo ("%P: %B: warning: duplicate section `%s' has different size\n", - abfd, name); - break; - } - - /* Set the output_section field so that wild_doit does not - create a lang_input_section structure for this section. */ - sec->output_section = bfd_abs_section_ptr; - - return; - } - } - - /* This is the first section with this name. Record it. */ - - l = (struct sec_link_once *) xmalloc (sizeof *l); - l->sec = sec; - l->next = sec_link_once_list; - sec_link_once_list = l; -} - -/* The wild routines. - - These expand statements like *(.text) and foo.o to a list of - explicit actions, like foo.o(.text), bar.o(.text) and - foo.o(.text, .data). */ - -/* Return true if the PATTERN argument is a wildcard pattern. - Although backslashes are treated specially if a pattern contains - wildcards, we do not consider the mere presence of a backslash to - be enough to cause the the pattern to be treated as a wildcard. - That lets us handle DOS filenames more naturally. */ - -static boolean -wildcardp (pattern) - const char *pattern; -{ - const char *s; - - for (s = pattern; *s != '\0'; ++s) - if (*s == '?' - || *s == '*' - || *s == '[') - return true; - return false; -} - -/* Add SECTION to the output section OUTPUT. Do this by creating a - lang_input_section statement which is placed at PTR. FILE is the - input file which holds SECTION. */ - -void -wild_doit (ptr, section, output, file) - lang_statement_list_type *ptr; - asection *section; - lang_output_section_statement_type *output; - lang_input_statement_type *file; -{ - flagword flags; - boolean discard; - - flags = bfd_get_section_flags (section->owner, section); - - discard = false; - - /* If we are doing a final link, discard sections marked with - SEC_EXCLUDE. */ - if (! link_info.relocateable - && (flags & SEC_EXCLUDE) != 0) - discard = true; - - /* Discard input sections which are assigned to a section named - DISCARD_SECTION_NAME. */ - if (strcmp (output->name, DISCARD_SECTION_NAME) == 0) - discard = true; - - /* Discard debugging sections if we are stripping debugging - information. */ - if ((link_info.strip == strip_debugger || link_info.strip == strip_all) - && (flags & SEC_DEBUGGING) != 0) - discard = true; - - if (discard) - { - if (section->output_section == NULL) - { - /* This prevents future calls from assigning this section. */ - section->output_section = bfd_abs_section_ptr; - } - return; - } - - if (section->output_section == NULL) - { - boolean first; - lang_input_section_type *new; - flagword flags; - - if (output->bfd_section == NULL) - { - init_os (output); - first = true; - } - else - first = false; - - /* Add a section reference to the list */ - new = new_stat (lang_input_section, ptr); - - new->section = section; - new->ifile = file; - section->output_section = output->bfd_section; - - flags = section->flags; - - /* We don't copy the SEC_NEVER_LOAD flag from an input section - to an output section, because we want to be able to include a - SEC_NEVER_LOAD section in the middle of an otherwise loaded - section (I don't know why we want to do this, but we do). - build_link_order in ldwrite.c handles this case by turning - the embedded SEC_NEVER_LOAD section into a fill. */ - - flags &= ~ SEC_NEVER_LOAD; - - /* If final link, don't copy the SEC_LINK_ONCE flags, they've - already been processed. One reason to do this is that on pe - format targets, .text$foo sections go into .text and it's odd - to see .text with SEC_LINK_ONCE set. */ - - if (! link_info.relocateable) - flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES); - - /* If this is not the first input section, and the SEC_READONLY - flag is not currently set, then don't set it just because the - input section has it set. */ - - if (! first && (section->output_section->flags & SEC_READONLY) == 0) - flags &= ~ SEC_READONLY; - - section->output_section->flags |= flags; - - /* If SEC_READONLY is not set in the input section, then clear - it from the output section. */ - if ((section->flags & SEC_READONLY) == 0) - section->output_section->flags &= ~SEC_READONLY; - - switch (output->sectype) - { - case normal_section: - break; - case dsect_section: - case copy_section: - case info_section: - case overlay_section: - output->bfd_section->flags &= ~SEC_ALLOC; - break; - case noload_section: - output->bfd_section->flags &= ~SEC_LOAD; - output->bfd_section->flags |= SEC_NEVER_LOAD; - break; - } - - if (section->alignment_power > output->bfd_section->alignment_power) - output->bfd_section->alignment_power = section->alignment_power; - - /* If supplied an aligment, then force it. */ - if (output->section_alignment != -1) - output->bfd_section->alignment_power = output->section_alignment; - } -} - -/* Expand a wild statement for a particular FILE. SECTION may be - NULL, in which case it is a wild card. */ - -static void -wild_section (ptr, section, file, output) - lang_wild_statement_type *ptr; - const char *section; - lang_input_statement_type *file; - lang_output_section_statement_type *output; -{ - if (file->just_syms_flag == false) - { - register asection *s; - boolean wildcard; - - if (section == NULL) - wildcard = false; - else - wildcard = wildcardp (section); - - for (s = file->the_bfd->sections; s != NULL; s = s->next) - { - boolean match; - - /* Attach all sections named SECTION. If SECTION is NULL, - then attach all sections. - - Previously, if SECTION was NULL, this code did not call - wild_doit if the SEC_IS_COMMON flag was set for the - section. I did not understand that, and I took it out. - --ian@cygnus.com. */ - - if (section == NULL) - match = true; - else - { - const char *name; - - name = bfd_get_section_name (file->the_bfd, s); - if (wildcard) - match = fnmatch (section, name, 0) == 0 ? true : false; - else - match = strcmp (section, name) == 0 ? true : false; - } - if (match) - wild_doit (&ptr->children, s, output, file); - } - } -} - -/* This is passed a file name which must have been seen already and - added to the statement tree. We will see if it has been opened - already and had its symbols read. If not then we'll read it. */ - -static lang_input_statement_type * -lookup_name (name) - const char *name; -{ - lang_input_statement_type *search; - - for (search = (lang_input_statement_type *) input_file_chain.head; - search != (lang_input_statement_type *) NULL; - search = (lang_input_statement_type *) search->next_real_file) - { - if (search->filename == (char *) NULL && name == (char *) NULL) - return search; - if (search->filename != (char *) NULL - && name != (char *) NULL - && strcmp (search->filename, name) == 0) - break; - } - - if (search == (lang_input_statement_type *) NULL) - search = new_afile (name, lang_input_file_is_file_enum, default_target, - false); - - /* If we have already added this file, or this file is not real - (FIXME: can that ever actually happen?) or the name is NULL - (FIXME: can that ever actually happen?) don't add this file. */ - if (search->loaded - || ! search->real - || search->filename == (const char *) NULL) - return search; - - load_symbols (search, (lang_statement_list_type *) NULL); - - return search; -} - -/* Get the symbols for an input file. */ - -static void -load_symbols (entry, place) - lang_input_statement_type *entry; - lang_statement_list_type *place; -{ - char **matching; - - if (entry->loaded) - return; - - ldfile_open_file (entry); - - if (! bfd_check_format (entry->the_bfd, bfd_archive) - && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching)) - { - bfd_error_type err; - lang_statement_list_type *hold; - - err = bfd_get_error (); - if (err == bfd_error_file_ambiguously_recognized) - { - char **p; - - einfo ("%B: file not recognized: %E\n", entry->the_bfd); - einfo ("%B: matching formats:", entry->the_bfd); - for (p = matching; *p != NULL; p++) - einfo (" %s", *p); - einfo ("%F\n"); - } - else if (err != bfd_error_file_not_recognized - || place == NULL) - einfo ("%F%B: file not recognized: %E\n", entry->the_bfd); - - bfd_close (entry->the_bfd); - entry->the_bfd = NULL; - - /* See if the emulation has some special knowledge. */ - - if (ldemul_unrecognized_file (entry)) - return; - - /* Try to interpret the file as a linker script. */ - - ldfile_open_command_file (entry->filename); - - hold = stat_ptr; - stat_ptr = place; - - ldfile_assumed_script = true; - parser_input = input_script; - yyparse (); - ldfile_assumed_script = false; - - stat_ptr = hold; - - return; - } - - /* We don't call ldlang_add_file for an archive. Instead, the - add_symbols entry point will call ldlang_add_file, via the - add_archive_element callback, for each element of the archive - which is used. */ - switch (bfd_get_format (entry->the_bfd)) - { - default: - break; - - case bfd_object: - ldlang_add_file (entry); - if (trace_files || trace_file_tries) - info_msg ("%I\n", entry); - break; - - case bfd_archive: - if (entry->whole_archive) - { - bfd *member = bfd_openr_next_archived_file (entry->the_bfd, - (bfd *) NULL); - while (member != NULL) - { - if (! bfd_check_format (member, bfd_object)) - einfo ("%F%B: object %B in archive is not object\n", - entry->the_bfd, member); - if (! ((*link_info.callbacks->add_archive_element) - (&link_info, member, "--whole-archive"))) - abort (); - if (! bfd_link_add_symbols (member, &link_info)) - einfo ("%F%B: could not read symbols: %E\n", member); - member = bfd_openr_next_archived_file (entry->the_bfd, - member); - } - - entry->loaded = true; - - return; - } - } - - if (! bfd_link_add_symbols (entry->the_bfd, &link_info)) - einfo ("%F%B: could not read symbols: %E\n", entry->the_bfd); - - entry->loaded = true; -} - -/* Handle a wild statement for a single file F. */ - -static void -wild_file (s, section, f, output) - lang_wild_statement_type *s; - const char *section; - lang_input_statement_type *f; - lang_output_section_statement_type *output; -{ - if (f->the_bfd == NULL - || ! bfd_check_format (f->the_bfd, bfd_archive)) - wild_section (s, section, f, output); - else - { - bfd *member; - - /* This is an archive file. We must map each member of the - archive separately. */ - member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL); - while (member != NULL) - { - /* When lookup_name is called, it will call the add_symbols - entry point for the archive. For each element of the - archive which is included, BFD will call ldlang_add_file, - which will set the usrdata field of the member to the - lang_input_statement. */ - if (member->usrdata != NULL) - { - wild_section (s, section, - (lang_input_statement_type *) member->usrdata, - output); - } - - member = bfd_openr_next_archived_file (f->the_bfd, member); - } - } -} - -/* Handle a wild statement. SECTION or FILE or both may be NULL, - indicating that it is a wildcard. Separate lang_input_section - statements are created for each part of the expansion; they are - added after the wild statement S. OUTPUT is the output section. */ - -static void -wild (s, section, file, target, output) - lang_wild_statement_type *s; - const char *section; - const char *file; - const char *target; - lang_output_section_statement_type *output; -{ - lang_input_statement_type *f; - - if (file == (char *) NULL) - { - /* Perform the iteration over all files in the list */ - for (f = (lang_input_statement_type *) file_chain.head; - f != (lang_input_statement_type *) NULL; - f = (lang_input_statement_type *) f->next) - { - wild_file (s, section, f, output); - } - } - else if (wildcardp (file)) - { - for (f = (lang_input_statement_type *) file_chain.head; - f != (lang_input_statement_type *) NULL; - f = (lang_input_statement_type *) f->next) - { - if (fnmatch (file, f->filename, FNM_FILE_NAME) == 0) - wild_file (s, section, f, output); - } - } - else - { - /* Perform the iteration over a single file */ - f = lookup_name (file); - wild_file (s, section, f, output); - } - - if (section != (char *) NULL - && strcmp (section, "COMMON") == 0 - && default_common_section == NULL) - { - /* Remember the section that common is going to in case we later - get something which doesn't know where to put it. */ - default_common_section = output; - } -} - -/* Open the output file. */ - -static bfd * -open_output (name) - const char *name; -{ - bfd *output; - - if (output_target == (char *) NULL) - { - if (current_target != (char *) NULL) - output_target = current_target; - else - output_target = default_target; - } - output = bfd_openw (name, output_target); - - if (output == (bfd *) NULL) - { - if (bfd_get_error () == bfd_error_invalid_target) - { - einfo ("%P%F: target %s not found\n", output_target); - } - einfo ("%P%F: cannot open output file %s: %E\n", name); - } - - delete_output_file_on_failure = true; - - /* output->flags |= D_PAGED;*/ - - if (! bfd_set_format (output, bfd_object)) - einfo ("%P%F:%s: can not make object file: %E\n", name); - if (! bfd_set_arch_mach (output, - ldfile_output_architecture, - ldfile_output_machine)) - einfo ("%P%F:%s: can not set architecture: %E\n", name); - - link_info.hash = bfd_link_hash_table_create (output); - if (link_info.hash == (struct bfd_link_hash_table *) NULL) - einfo ("%P%F: can not create link hash table: %E\n"); - - bfd_set_gp_size (output, g_switch_value); - return output; -} - - - - -static void -ldlang_open_output (statement) - lang_statement_union_type * statement; -{ - switch (statement->header.type) - { - case lang_output_statement_enum: - ASSERT (output_bfd == (bfd *) NULL); - output_bfd = open_output (statement->output_statement.name); - ldemul_set_output_arch (); - if (config.magic_demand_paged && !link_info.relocateable) - output_bfd->flags |= D_PAGED; - else - output_bfd->flags &= ~D_PAGED; - if (config.text_read_only) - output_bfd->flags |= WP_TEXT; - else - output_bfd->flags &= ~WP_TEXT; - if (link_info.traditional_format) - output_bfd->flags |= BFD_TRADITIONAL_FORMAT; - else - output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT; - break; - - case lang_target_statement_enum: - current_target = statement->target_statement.target; - break; - default: - break; - } -} - -/* Open all the input files. */ - -static void -open_input_bfds (s, force) - lang_statement_union_type *s; - boolean force; -{ - for (; s != (lang_statement_union_type *) NULL; s = s->next) - { - switch (s->header.type) - { - case lang_constructors_statement_enum: - open_input_bfds (constructor_list.head, force); - break; - case lang_output_section_statement_enum: - open_input_bfds (s->output_section_statement.children.head, force); - break; - case lang_wild_statement_enum: - /* Maybe we should load the file's symbols */ - if (s->wild_statement.filename - && ! wildcardp (s->wild_statement.filename)) - (void) lookup_name (s->wild_statement.filename); - open_input_bfds (s->wild_statement.children.head, force); - break; - case lang_group_statement_enum: - { - struct bfd_link_hash_entry *undefs; - - /* We must continually search the entries in the group - until no new symbols are added to the list of undefined - symbols. */ - - do - { - undefs = link_info.hash->undefs_tail; - open_input_bfds (s->group_statement.children.head, true); - } - while (undefs != link_info.hash->undefs_tail); - } - break; - case lang_target_statement_enum: - current_target = s->target_statement.target; - break; - case lang_input_statement_enum: - if (s->input_statement.real == true) - { - lang_statement_list_type add; - - s->input_statement.target = current_target; - - /* If we are being called from within a group, and this - is an archive which has already been searched, then - force it to be researched. */ - if (force - && s->input_statement.loaded - && bfd_check_format (s->input_statement.the_bfd, - bfd_archive)) - s->input_statement.loaded = false; - - lang_list_init (&add); - - load_symbols (&s->input_statement, &add); - - if (add.head != NULL) - { - *add.tail = s->next; - s->next = add.head; - } - } - break; - default: - break; - } - } -} - -/* If there are [COMMONS] statements, put a wild one into the bss section */ - -static void -lang_reasonable_defaults () -{ -#if 0 - lang_output_section_statement_lookup (".text"); - lang_output_section_statement_lookup (".data"); - - default_common_section = - lang_output_section_statement_lookup (".bss"); - - - if (placed_commons == false) - { - lang_wild_statement_type *new = - new_stat (lang_wild_statement, - &default_common_section->children); - - new->section_name = "COMMON"; - new->filename = (char *) NULL; - lang_list_init (&new->children); - } -#endif - -} - -/* - Add the supplied name to the symbol table as an undefined reference. - Remove items from the chain as we open input bfds - */ -typedef struct ldlang_undef_chain_list -{ - struct ldlang_undef_chain_list *next; - char *name; -} ldlang_undef_chain_list_type; - -static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head; - -void -ldlang_add_undef (name) - CONST char *CONST name; -{ - ldlang_undef_chain_list_type *new = - ((ldlang_undef_chain_list_type *) - stat_alloc (sizeof (ldlang_undef_chain_list_type))); - - new->next = ldlang_undef_chain_list_head; - ldlang_undef_chain_list_head = new; - - new->name = buystring (name); -} - -/* Run through the list of undefineds created above and place them - into the linker hash table as undefined symbols belonging to the - script file. -*/ -static void -lang_place_undefineds () -{ - ldlang_undef_chain_list_type *ptr; - - for (ptr = ldlang_undef_chain_list_head; - ptr != (ldlang_undef_chain_list_type *) NULL; - ptr = ptr->next) - { - struct bfd_link_hash_entry *h; - - h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true); - if (h == (struct bfd_link_hash_entry *) NULL) - einfo ("%P%F: bfd_link_hash_lookup failed: %E\n"); - if (h->type == bfd_link_hash_new) - { - h->type = bfd_link_hash_undefined; - h->u.undef.abfd = NULL; - bfd_link_add_undef (link_info.hash, h); - } - } -} - -/* Open input files and attatch to output sections */ -static void -map_input_to_output_sections (s, target, output_section_statement) - lang_statement_union_type * s; - CONST char *target; - lang_output_section_statement_type * output_section_statement; -{ - for (; s != (lang_statement_union_type *) NULL; s = s->next) - { - switch (s->header.type) - { - - - case lang_wild_statement_enum: - wild (&s->wild_statement, s->wild_statement.section_name, - s->wild_statement.filename, target, - output_section_statement); - - break; - case lang_constructors_statement_enum: - map_input_to_output_sections (constructor_list.head, - target, - output_section_statement); - break; - case lang_output_section_statement_enum: - map_input_to_output_sections (s->output_section_statement.children.head, - target, - &s->output_section_statement); - break; - case lang_output_statement_enum: - break; - case lang_target_statement_enum: - target = s->target_statement.target; - break; - case lang_group_statement_enum: - map_input_to_output_sections (s->group_statement.children.head, - target, - output_section_statement); - break; - case lang_fill_statement_enum: - case lang_input_section_enum: - case lang_object_symbols_statement_enum: - case lang_data_statement_enum: - case lang_reloc_statement_enum: - case lang_padding_statement_enum: - case lang_input_statement_enum: - if (output_section_statement != NULL - && output_section_statement->bfd_section == NULL) - init_os (output_section_statement); - break; - case lang_assignment_statement_enum: - if (output_section_statement != NULL - && output_section_statement->bfd_section == NULL) - init_os (output_section_statement); - - /* Make sure that any sections mentioned in the assignment - are initialized. */ - exp_init_os (s->assignment_statement.exp); - break; - case lang_afile_asection_pair_statement_enum: - FAIL (); - break; - case lang_address_statement_enum: - /* Mark the specified section with the supplied address */ - { - lang_output_section_statement_type *os = - lang_output_section_statement_lookup - (s->address_statement.section_name); - - if (os->bfd_section == NULL) - init_os (os); - os->addr_tree = s->address_statement.address; - } - break; - } - } -} - -static void -print_output_section_statement (output_section_statement) - lang_output_section_statement_type * output_section_statement; -{ - asection *section = output_section_statement->bfd_section; - int len; - - if (output_section_statement != abs_output_section) - { - minfo ("\n%s", output_section_statement->name); - - if (section != NULL) - { - print_dot = section->vma; - - len = strlen (output_section_statement->name); - if (len >= SECTION_NAME_MAP_LENGTH - 1) - { - print_nl (); - len = 0; - } - while (len < SECTION_NAME_MAP_LENGTH) - { - print_space (); - ++len; - } - - minfo ("0x%V %W", section->vma, section->_raw_size); - - if (output_section_statement->load_base != NULL) - { - bfd_vma addr; - - addr = exp_get_abs_int (output_section_statement->load_base, 0, - "load base", lang_final_phase_enum); - minfo (" load address 0x%V", addr); - } - } - - print_nl (); - } - - print_statement_list (output_section_statement->children.head, - output_section_statement); -} - -static void -print_assignment (assignment, output_section) - lang_assignment_statement_type * assignment; - lang_output_section_statement_type * output_section; -{ - int i; - etree_value_type result; - - for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++) - print_space (); - - result = exp_fold_tree (assignment->exp->assign.src, output_section, - lang_final_phase_enum, print_dot, &print_dot); - if (result.valid) - minfo ("0x%V", result.value + result.section->bfd_section->vma); - else - { - minfo ("*undef* "); -#ifdef BFD64 - minfo (" "); -#endif - } - - minfo (" "); - - exp_print_tree (assignment->exp); - - print_nl (); -} - -static void -print_input_statement (statm) - lang_input_statement_type * statm; -{ - if (statm->filename != (char *) NULL) - { - fprintf (config.map_file, "LOAD %s\n", statm->filename); - } -} - -/* Print all symbols defined in a particular section. This is called - via bfd_link_hash_traverse. */ - -static boolean -print_one_symbol (hash_entry, ptr) - struct bfd_link_hash_entry *hash_entry; - PTR ptr; -{ - asection *sec = (asection *) ptr; - - if ((hash_entry->type == bfd_link_hash_defined - || hash_entry->type == bfd_link_hash_defweak) - && sec == hash_entry->u.def.section) - { - int i; - - for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++) - print_space (); - minfo ("0x%V ", - (hash_entry->u.def.value - + hash_entry->u.def.section->output_offset - + hash_entry->u.def.section->output_section->vma)); - - minfo (" %T\n", hash_entry->root.string); - } - - return true; -} - -/* Print information about an input section to the map file. */ - -static void -print_input_section (in) - lang_input_section_type * in; -{ - asection *i = in->section; - bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size; - - if (size != 0) - { - print_space (); - - minfo ("%s", i->name); - - if (i->output_section != NULL) - { - int len; - - len = 1 + strlen (i->name); - if (len >= SECTION_NAME_MAP_LENGTH - 1) - { - print_nl (); - len = 0; - } - while (len < SECTION_NAME_MAP_LENGTH) - { - print_space (); - ++len; - } - - minfo ("0x%V %W %B\n", - i->output_section->vma + i->output_offset, size, - i->owner); - - if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size) - { - len = SECTION_NAME_MAP_LENGTH + 3; -#ifdef BFD64 - len += 16; -#else - len += 8; -#endif - while (len > 0) - { - print_space (); - --len; - } - - minfo ("%W (size before relaxing)\n", i->_raw_size); - } - - bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i); - - print_dot = i->output_section->vma + i->output_offset + size; - } - } -} - -static void -print_fill_statement (fill) - lang_fill_statement_type * fill; -{ - fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill); -} - -static void -print_data_statement (data) - lang_data_statement_type * data; -{ - int i; - bfd_vma addr; - bfd_size_type size; - const char *name; - - for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++) - print_space (); - - addr = data->output_vma; - if (data->output_section != NULL) - addr += data->output_section->vma; - - switch (data->type) - { - default: - abort (); - case BYTE: - size = BYTE_SIZE; - name = "BYTE"; - break; - case SHORT: - size = SHORT_SIZE; - name = "SHORT"; - break; - case LONG: - size = LONG_SIZE; - name = "LONG"; - break; - case QUAD: - size = QUAD_SIZE; - name = "QUAD"; - break; - case SQUAD: - size = QUAD_SIZE; - name = "SQUAD"; - break; - } - - minfo ("0x%V %W %s 0x%v", addr, size, name, data->value); - - if (data->exp->type.node_class != etree_value) - { - print_space (); - exp_print_tree (data->exp); - } - - print_nl (); - - print_dot = addr + size; -} - -/* Print an address statement. These are generated by options like - -Ttext. */ - -static void -print_address_statement (address) - lang_address_statement_type *address; -{ - minfo ("Address of section %s set to ", address->section_name); - exp_print_tree (address->address); - print_nl (); -} - -/* Print a reloc statement. */ - -static void -print_reloc_statement (reloc) - lang_reloc_statement_type *reloc; -{ - int i; - bfd_vma addr; - bfd_size_type size; - - for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++) - print_space (); - - addr = reloc->output_vma; - if (reloc->output_section != NULL) - addr += reloc->output_section->vma; - - size = bfd_get_reloc_size (reloc->howto); - - minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name); - - if (reloc->name != NULL) - minfo ("%s+", reloc->name); - else - minfo ("%s+", reloc->section->name); - - exp_print_tree (reloc->addend_exp); - - print_nl (); - - print_dot = addr + size; -} - -static void -print_padding_statement (s) - lang_padding_statement_type *s; -{ - int len; - bfd_vma addr; - - minfo (" *fill*"); - - len = sizeof " *fill*" - 1; - while (len < SECTION_NAME_MAP_LENGTH) - { - print_space (); - ++len; - } - - addr = s->output_offset; - if (s->output_section != NULL) - addr += s->output_section->vma; - minfo ("0x%V %W", addr, s->size); - - if (s->fill != 0) - minfo (" %u", s->fill); - - print_nl (); - - print_dot = addr + s->size; -} - -static void -print_wild_statement (w, os) - lang_wild_statement_type * w; - lang_output_section_statement_type * os; -{ - print_space (); - - if (w->filename != NULL) - minfo ("%s", w->filename); - else - minfo ("*"); - - if (w->section_name != NULL) - minfo ("(%s)", w->section_name); - else - minfo ("(*)"); - - print_nl (); - - print_statement_list (w->children.head, os); -} - -/* Print a group statement. */ - -static void -print_group (s, os) - lang_group_statement_type *s; - lang_output_section_statement_type *os; -{ - fprintf (config.map_file, "START GROUP\n"); - print_statement_list (s->children.head, os); - fprintf (config.map_file, "END GROUP\n"); -} - -/* Print the list of statements in S. - This can be called for any statement type. */ - -static void -print_statement_list (s, os) - lang_statement_union_type *s; - lang_output_section_statement_type *os; -{ - while (s != NULL) - { - print_statement (s, os); - s = s->next; - } -} - -/* Print the first statement in statement list S. - This can be called for any statement type. */ - -static void -print_statement (s, os) - lang_statement_union_type *s; - lang_output_section_statement_type *os; -{ - switch (s->header.type) - { - default: - fprintf (config.map_file, "Fail with %d\n", s->header.type); - FAIL (); - break; - case lang_constructors_statement_enum: - if (constructor_list.head != NULL) - { - minfo (" CONSTRUCTORS\n"); - print_statement_list (constructor_list.head, os); - } - break; - case lang_wild_statement_enum: - print_wild_statement (&s->wild_statement, os); - break; - case lang_address_statement_enum: - print_address_statement (&s->address_statement); - break; - case lang_object_symbols_statement_enum: - minfo (" CREATE_OBJECT_SYMBOLS\n"); - break; - case lang_fill_statement_enum: - print_fill_statement (&s->fill_statement); - break; - case lang_data_statement_enum: - print_data_statement (&s->data_statement); - break; - case lang_reloc_statement_enum: - print_reloc_statement (&s->reloc_statement); - break; - case lang_input_section_enum: - print_input_section (&s->input_section); - break; - case lang_padding_statement_enum: - print_padding_statement (&s->padding_statement); - break; - case lang_output_section_statement_enum: - print_output_section_statement (&s->output_section_statement); - break; - case lang_assignment_statement_enum: - print_assignment (&s->assignment_statement, os); - break; - case lang_target_statement_enum: - fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target); - break; - case lang_output_statement_enum: - minfo ("OUTPUT(%s", s->output_statement.name); - if (output_target != NULL) - minfo (" %s", output_target); - minfo (")\n"); - break; - case lang_input_statement_enum: - print_input_statement (&s->input_statement); - break; - case lang_group_statement_enum: - print_group (&s->group_statement, os); - break; - case lang_afile_asection_pair_statement_enum: - FAIL (); - break; - } -} - -static void -print_statements () -{ - print_statement_list (statement_list.head, abs_output_section); -} - -/* Print the first N statements in statement list S to STDERR. - If N == 0, nothing is printed. - If N < 0, the entire list is printed. - Intended to be called from GDB. */ - -void -dprint_statement (s, n) - lang_statement_union_type * s; - int n; -{ - FILE *map_save = config.map_file; - - config.map_file = stderr; - - if (n < 0) - print_statement_list (s, abs_output_section); - else - { - while (s && --n >= 0) - { - print_statement (s, abs_output_section); - s = s->next; - } - } - - config.map_file = map_save; -} - -static bfd_vma -insert_pad (this_ptr, fill, power, output_section_statement, dot) - lang_statement_union_type ** this_ptr; - fill_type fill; - unsigned int power; - asection * output_section_statement; - bfd_vma dot; -{ - /* Align this section first to the - input sections requirement, then - to the output section's requirement. - If this alignment is > than any seen before, - then record it too. Perform the alignment by - inserting a magic 'padding' statement. - */ - - unsigned int alignment_needed = align_power (dot, power) - dot; - - if (alignment_needed != 0) - { - lang_statement_union_type *new = - ((lang_statement_union_type *) - stat_alloc (sizeof (lang_padding_statement_type))); - - /* Link into existing chain */ - new->header.next = *this_ptr; - *this_ptr = new; - new->header.type = lang_padding_statement_enum; - new->padding_statement.output_section = output_section_statement; - new->padding_statement.output_offset = - dot - output_section_statement->vma; - new->padding_statement.fill = fill; - new->padding_statement.size = alignment_needed; - } - - - /* Remember the most restrictive alignment */ - if (power > output_section_statement->alignment_power) - { - output_section_statement->alignment_power = power; - } - output_section_statement->_raw_size += alignment_needed; - return alignment_needed + dot; - -} - -/* Work out how much this section will move the dot point */ -static bfd_vma -size_input_section (this_ptr, output_section_statement, fill, dot, relax) - lang_statement_union_type ** this_ptr; - lang_output_section_statement_type * output_section_statement; - fill_type fill; - bfd_vma dot; - boolean relax; -{ - lang_input_section_type *is = &((*this_ptr)->input_section); - asection *i = is->section; - - if (is->ifile->just_syms_flag == false) - { - if (output_section_statement->subsection_alignment != -1) - i->alignment_power = - output_section_statement->subsection_alignment; - - dot = insert_pad (this_ptr, fill, i->alignment_power, - output_section_statement->bfd_section, dot); - - /* Remember where in the output section this input section goes */ - - i->output_offset = dot - output_section_statement->bfd_section->vma; - - /* Mark how big the output section must be to contain this now - */ - if (i->_cooked_size != 0) - dot += i->_cooked_size; - else - dot += i->_raw_size; - output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma; - } - else - { - i->output_offset = i->vma - output_section_statement->bfd_section->vma; - } - - return dot; -} - -/* This variable indicates whether bfd_relax_section should be called - again. */ - -static boolean relax_again; - -/* Set the sizes for all the output sections. */ - -bfd_vma -lang_size_sections (s, output_section_statement, prev, fill, dot, relax) - lang_statement_union_type * s; - lang_output_section_statement_type * output_section_statement; - lang_statement_union_type ** prev; - fill_type fill; - bfd_vma dot; - boolean relax; -{ - /* Size up the sections from their constituent parts */ - for (; s != (lang_statement_union_type *) NULL; s = s->next) - { - switch (s->header.type) - { - - case lang_output_section_statement_enum: - { - bfd_vma after; - lang_output_section_statement_type *os = &s->output_section_statement; - - if (os->bfd_section == NULL) - { - /* This section was never actually created. */ - break; - } - - /* If this is a COFF shared library section, use the size and - address from the input section. FIXME: This is COFF - specific; it would be cleaner if there were some other way - to do this, but nothing simple comes to mind. */ - if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0) - { - asection *input; - - if (os->children.head == NULL - || os->children.head->next != NULL - || os->children.head->header.type != lang_input_section_enum) - einfo ("%P%X: Internal error on COFF shared library section %s\n", - os->name); - - input = os->children.head->input_section.section; - bfd_set_section_vma (os->bfd_section->owner, - os->bfd_section, - bfd_section_vma (input->owner, input)); - os->bfd_section->_raw_size = input->_raw_size; - break; - } - - if (bfd_is_abs_section (os->bfd_section)) - { - /* No matter what happens, an abs section starts at zero */ - ASSERT (os->bfd_section->vma == 0); - } - else - { - if (os->addr_tree == (etree_type *) NULL) - { - /* No address specified for this section, get one - from the region specification - */ - if (os->region == (lang_memory_region_type *) NULL - || (((bfd_get_section_flags (output_bfd, os->bfd_section) - & (SEC_ALLOC | SEC_LOAD)) != 0) - && os->region->name[0] == '*' - && strcmp (os->region->name, "*default*") == 0)) - { - os->region = lang_memory_default (os->bfd_section); - } - - /* If a loadable section is using the default memory - region, and some non default memory regions were - defined, issue a warning. */ - if ((bfd_get_section_flags (output_bfd, os->bfd_section) - & (SEC_ALLOC | SEC_LOAD)) != 0 - && ! link_info.relocateable - && strcmp (os->region->name, "*default*") == 0 - && lang_memory_region_list != NULL - && (strcmp (lang_memory_region_list->name, "*default*") != 0 - || lang_memory_region_list->next != NULL)) - einfo ("%P: warning: no memory region specified for section `%s'\n", - bfd_get_section_name (output_bfd, os->bfd_section)); - - dot = os->region->current; - if (os->section_alignment == -1) - { - bfd_vma olddot; - - olddot = dot; - dot = align_power (dot, os->bfd_section->alignment_power); - if (dot != olddot && config.warn_section_align) - einfo ("%P: warning: changing start of section %s by %u bytes\n", - os->name, (unsigned int) (dot - olddot)); - } - } - else - { - etree_value_type r; - - r = exp_fold_tree (os->addr_tree, - abs_output_section, - lang_allocating_phase_enum, - dot, &dot); - if (r.valid == false) - { - einfo ("%F%S: non constant address expression for section %s\n", - os->name); - } - dot = r.value + r.section->bfd_section->vma; - } - /* The section starts here */ - /* First, align to what the section needs */ - - if (os->section_alignment != -1) - dot = align_power (dot, os->section_alignment); - - bfd_set_section_vma (0, os->bfd_section, dot); - - os->bfd_section->output_offset = 0; - } - - (void) lang_size_sections (os->children.head, os, &os->children.head, - os->fill, dot, relax); - /* Ignore the size of the input sections, use the vma and size to */ - /* align against */ - - after = ALIGN_N (os->bfd_section->vma + - os->bfd_section->_raw_size, - /* The coercion here is important, see ld.h. */ - (bfd_vma) os->block_value); - - if (bfd_is_abs_section (os->bfd_section)) - ASSERT (after == os->bfd_section->vma); - else - os->bfd_section->_raw_size = after - os->bfd_section->vma; - dot = os->bfd_section->vma + os->bfd_section->_raw_size; - os->processed = true; - - /* Replace into region ? */ - if (os->region != (lang_memory_region_type *) NULL) - { - os->region->current = dot; - /* Make sure this isn't silly. */ - if (os->region->current < os->region->origin - || (os->region->current - os->region->origin - > os->region->length)) - { - if (os->addr_tree != (etree_type *) NULL) - { - einfo ("%X%P: address 0x%v of %B section %s is not within region %s\n", - os->region->current, - os->bfd_section->owner, - os->bfd_section->name, - os->region->name); - } - else - { - einfo ("%X%P: region %s is full (%B section %s)\n", - os->region->name, - os->bfd_section->owner, - os->bfd_section->name); - } - /* Reset the region pointer. */ - os->region->current = os->region->origin; - } - } - } - break; - - case lang_constructors_statement_enum: - dot = lang_size_sections (constructor_list.head, - output_section_statement, - &s->wild_statement.children.head, - fill, - dot, relax); - break; - - case lang_data_statement_enum: - { - unsigned int size = 0; - - s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma; - s->data_statement.output_section = - output_section_statement->bfd_section; - - switch (s->data_statement.type) - { - case QUAD: - case SQUAD: - size = QUAD_SIZE; - break; - case LONG: - size = LONG_SIZE; - break; - case SHORT: - size = SHORT_SIZE; - break; - case BYTE: - size = BYTE_SIZE; - break; - } - - dot += size; - output_section_statement->bfd_section->_raw_size += size; - /* The output section gets contents, and then we inspect for - any flags set in the input script which override any ALLOC */ - output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS; - if (!(output_section_statement->flags & SEC_NEVER_LOAD)) { - output_section_statement->bfd_section->flags |= SEC_ALLOC | SEC_LOAD; - } - } - break; - - case lang_reloc_statement_enum: - { - int size; - - s->reloc_statement.output_vma = - dot - output_section_statement->bfd_section->vma; - s->reloc_statement.output_section = - output_section_statement->bfd_section; - size = bfd_get_reloc_size (s->reloc_statement.howto); - dot += size; - output_section_statement->bfd_section->_raw_size += size; - } - break; - - case lang_wild_statement_enum: - - dot = lang_size_sections (s->wild_statement.children.head, - output_section_statement, - &s->wild_statement.children.head, - - fill, dot, relax); - - break; - - case lang_object_symbols_statement_enum: - link_info.create_object_symbols_section = - output_section_statement->bfd_section; - break; - case lang_output_statement_enum: - case lang_target_statement_enum: - break; - case lang_input_section_enum: - { - asection *i; - - i = (*prev)->input_section.section; - if (! relax) - { - if (i->_cooked_size == 0) - i->_cooked_size = i->_raw_size; - } - else - { - boolean again; - - if (! bfd_relax_section (i->owner, i, &link_info, &again)) - einfo ("%P%F: can't relax section: %E\n"); - if (again) - relax_again = true; - } - dot = size_input_section (prev, - output_section_statement, - output_section_statement->fill, - dot, relax); - } - break; - case lang_input_statement_enum: - break; - case lang_fill_statement_enum: - s->fill_statement.output_section = output_section_statement->bfd_section; - - fill = s->fill_statement.fill; - break; - case lang_assignment_statement_enum: - { - bfd_vma newdot = dot; - - exp_fold_tree (s->assignment_statement.exp, - output_section_statement, - lang_allocating_phase_enum, - dot, - &newdot); - - if (newdot != dot && !relax) - { - /* The assignment changed dot. Insert a pad. */ - if (output_section_statement == abs_output_section) - { - /* If we don't have an output section, then just adjust - the default memory address. */ - lang_memory_region_lookup ("*default*")->current = newdot; - } - else - { - lang_statement_union_type *new = - ((lang_statement_union_type *) - stat_alloc (sizeof (lang_padding_statement_type))); - - /* Link into existing chain */ - new->header.next = *prev; - *prev = new; - new->header.type = lang_padding_statement_enum; - new->padding_statement.output_section = - output_section_statement->bfd_section; - new->padding_statement.output_offset = - dot - output_section_statement->bfd_section->vma; - new->padding_statement.fill = fill; - new->padding_statement.size = newdot - dot; - output_section_statement->bfd_section->_raw_size += - new->padding_statement.size; - } - - dot = newdot; - } - } - break; - - case lang_padding_statement_enum: - /* If we are relaxing, and this is not the first pass, some - padding statements may have been inserted during previous - passes. We may have to move the padding statement to a new - location if dot has a different value at this point in this - pass than it did at this point in the previous pass. */ - s->padding_statement.output_offset = - dot - output_section_statement->bfd_section->vma; - dot += s->padding_statement.size; - output_section_statement->bfd_section->_raw_size += - s->padding_statement.size; - break; - - case lang_group_statement_enum: - dot = lang_size_sections (s->group_statement.children.head, - output_section_statement, - &s->group_statement.children.head, - fill, dot, relax); - break; - - default: - FAIL (); - break; - - /* This can only get here when relaxing is turned on */ - - case lang_address_statement_enum: - break; - } - prev = &s->header.next; - } - return dot; -} - -bfd_vma -lang_do_assignments (s, output_section_statement, fill, dot) - lang_statement_union_type * s; - lang_output_section_statement_type * output_section_statement; - fill_type fill; - bfd_vma dot; -{ - for (; s != (lang_statement_union_type *) NULL; s = s->next) - { - switch (s->header.type) - { - case lang_constructors_statement_enum: - dot = lang_do_assignments (constructor_list.head, - output_section_statement, - fill, - dot); - break; - - case lang_output_section_statement_enum: - { - lang_output_section_statement_type *os = - &(s->output_section_statement); - - if (os->bfd_section != NULL) - { - dot = os->bfd_section->vma; - (void) lang_do_assignments (os->children.head, os, - os->fill, dot); - dot = os->bfd_section->vma + os->bfd_section->_raw_size; - } - if (os->load_base) - { - /* If nothing has been placed into the output section then - it won't have a bfd_section. */ - if (os->bfd_section) - { - os->bfd_section->lma - = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum); - } - } - } - break; - case lang_wild_statement_enum: - - dot = lang_do_assignments (s->wild_statement.children.head, - output_section_statement, - fill, dot); - - break; - - case lang_object_symbols_statement_enum: - case lang_output_statement_enum: - case lang_target_statement_enum: -#if 0 - case lang_common_statement_enum: -#endif - break; - case lang_data_statement_enum: - { - etree_value_type value; - - value = exp_fold_tree (s->data_statement.exp, - abs_output_section, - lang_final_phase_enum, dot, &dot); - s->data_statement.value = value.value; - if (value.valid == false) - einfo ("%F%P: invalid data statement\n"); - } - switch (s->data_statement.type) - { - case QUAD: - case SQUAD: - dot += QUAD_SIZE; - break; - case LONG: - dot += LONG_SIZE; - break; - case SHORT: - dot += SHORT_SIZE; - break; - case BYTE: - dot += BYTE_SIZE; - break; - } - break; - - case lang_reloc_statement_enum: - { - etree_value_type value; - - value = exp_fold_tree (s->reloc_statement.addend_exp, - abs_output_section, - lang_final_phase_enum, dot, &dot); - s->reloc_statement.addend_value = value.value; - if (value.valid == false) - einfo ("%F%P: invalid reloc statement\n"); - } - dot += bfd_get_reloc_size (s->reloc_statement.howto); - break; - - case lang_input_section_enum: - { - asection *in = s->input_section.section; - - if (in->_cooked_size != 0) - dot += in->_cooked_size; - else - dot += in->_raw_size; - } - break; - - case lang_input_statement_enum: - break; - case lang_fill_statement_enum: - fill = s->fill_statement.fill; - break; - case lang_assignment_statement_enum: - { - exp_fold_tree (s->assignment_statement.exp, - output_section_statement, - lang_final_phase_enum, - dot, - &dot); - } - - break; - case lang_padding_statement_enum: - dot += s->padding_statement.size; - break; - - case lang_group_statement_enum: - dot = lang_do_assignments (s->group_statement.children.head, - output_section_statement, - fill, dot); - - break; - - default: - FAIL (); - break; - case lang_address_statement_enum: - break; - } - - } - return dot; -} - -/* Fix any .startof. or .sizeof. symbols. When the assemblers see the - operator .startof. (section_name), it produces an undefined symbol - .startof.section_name. Similarly, when it sees - .sizeof. (section_name), it produces an undefined symbol - .sizeof.section_name. For all the output sections, we look for - such symbols, and set them to the correct value. */ - -static void -lang_set_startof () -{ - asection *s; - - if (link_info.relocateable) - return; - - for (s = output_bfd->sections; s != NULL; s = s->next) - { - const char *secname; - char *buf; - struct bfd_link_hash_entry *h; - - secname = bfd_get_section_name (output_bfd, s); - buf = xmalloc (10 + strlen (secname)); - - sprintf (buf, ".startof.%s", secname); - h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true); - if (h != NULL && h->type == bfd_link_hash_undefined) - { - h->type = bfd_link_hash_defined; - h->u.def.value = bfd_get_section_vma (output_bfd, s); - h->u.def.section = bfd_abs_section_ptr; - } - - sprintf (buf, ".sizeof.%s", secname); - h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true); - if (h != NULL && h->type == bfd_link_hash_undefined) - { - h->type = bfd_link_hash_defined; - if (s->_cooked_size != 0) - h->u.def.value = s->_cooked_size; - else - h->u.def.value = s->_raw_size; - h->u.def.section = bfd_abs_section_ptr; - } - - free (buf); - } -} - -static void -lang_finish () -{ - struct bfd_link_hash_entry *h; - boolean warn; - - if (link_info.relocateable || link_info.shared) - warn = false; - else - warn = true; - - if (entry_symbol == (char *) NULL) - { - /* No entry has been specified. Look for start, but don't warn - if we don't find it. */ - entry_symbol = "start"; - warn = false; - } - - h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true); - if (h != (struct bfd_link_hash_entry *) NULL - && (h->type == bfd_link_hash_defined - || h->type == bfd_link_hash_defweak) - && h->u.def.section->output_section != NULL) - { - bfd_vma val; - - val = (h->u.def.value - + bfd_get_section_vma (output_bfd, - h->u.def.section->output_section) - + h->u.def.section->output_offset); - if (! bfd_set_start_address (output_bfd, val)) - einfo ("%P%F:%s: can't set start address\n", entry_symbol); - } - else - { - asection *ts; - - /* Can't find the entry symbol. Use the first address in the - text section. */ - ts = bfd_get_section_by_name (output_bfd, ".text"); - if (ts != (asection *) NULL) - { - if (warn) - einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n", - entry_symbol, bfd_get_section_vma (output_bfd, ts)); - if (! bfd_set_start_address (output_bfd, - bfd_get_section_vma (output_bfd, ts))) - einfo ("%P%F: can't set start address\n"); - } - else - { - if (warn) - einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n", - entry_symbol); - } - } -} - -/* This is a small function used when we want to ignore errors from - BFD. */ - -static void -#ifdef ANSI_PROTOTYPES -ignore_bfd_errors (const char *s, ...) -#else -ignore_bfd_errors (s) - const char *s; -#endif -{ - /* Don't do anything. */ -} - -/* Check that the architecture of all the input files is compatible - with the output file. Also call the backend to let it do any - other checking that is needed. */ - -static void -lang_check () -{ - lang_statement_union_type *file; - bfd *input_bfd; - CONST bfd_arch_info_type *compatible; - - for (file = file_chain.head; - file != (lang_statement_union_type *) NULL; - file = file->input_statement.next) - { - input_bfd = file->input_statement.the_bfd; - compatible = bfd_arch_get_compatible (input_bfd, - output_bfd); - if (compatible == NULL) - { - if (command_line.warn_mismatch) - einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n", - bfd_printable_name (input_bfd), input_bfd, - bfd_printable_name (output_bfd)); - } - else - { - bfd_error_handler_type pfn = NULL; - - /* If we aren't supposed to warn about mismatched input - files, temporarily set the BFD error handler to a - function which will do nothing. We still want to call - bfd_merge_private_bfd_data, since it may set up - information which is needed in the output file. */ - if (! command_line.warn_mismatch) - pfn = bfd_set_error_handler (ignore_bfd_errors); - if (! bfd_merge_private_bfd_data (input_bfd, output_bfd)) - { - if (command_line.warn_mismatch) - einfo ("%E%X: failed to merge target specific data of file %B\n", - input_bfd); - } - if (! command_line.warn_mismatch) - bfd_set_error_handler (pfn); - } - } -} - -/* Look through all the global common symbols and attach them to the - correct section. The -sort-common command line switch may be used - to roughly sort the entries by size. */ - -static void -lang_common () -{ - if (link_info.relocateable - && ! command_line.force_common_definition) - return; - - if (! config.sort_common) - bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL); - else - { - int power; - - for (power = 4; power >= 0; power--) - bfd_link_hash_traverse (link_info.hash, lang_one_common, - (PTR) &power); - } -} - -/* Place one common symbol in the correct section. */ - -static boolean -lang_one_common (h, info) - struct bfd_link_hash_entry *h; - PTR info; -{ - unsigned int power_of_two; - bfd_vma size; - asection *section; - - if (h->type != bfd_link_hash_common) - return true; - - size = h->u.c.size; - power_of_two = h->u.c.p->alignment_power; - - if (config.sort_common - && power_of_two < (unsigned int) *(int *) info) - return true; - - section = h->u.c.p->section; - - /* Increase the size of the section. */ - section->_raw_size = ALIGN_N (section->_raw_size, - (bfd_size_type) (1 << power_of_two)); - - /* Adjust the alignment if necessary. */ - if (power_of_two > section->alignment_power) - section->alignment_power = power_of_two; - - /* Change the symbol from common to defined. */ - h->type = bfd_link_hash_defined; - h->u.def.section = section; - h->u.def.value = section->_raw_size; - - /* Increase the size of the section. */ - section->_raw_size += size; - - /* Make sure the section is allocated in memory, and make sure that - it is no longer a common section. */ - section->flags |= SEC_ALLOC; - section->flags &= ~ SEC_IS_COMMON; - - if (config.map_file != NULL) - { - static boolean header_printed; - int len; - char *name; - char buf[50]; - - if (! header_printed) - { - minfo ("\nAllocating common symbols\n"); - minfo ("Common symbol size file\n\n"); - header_printed = true; - } - - name = demangle (h->root.string); - minfo ("%s", name); - len = strlen (name); - free (name); - - if (len >= 19) - { - print_nl (); - len = 0; - } - while (len < 20) - { - print_space (); - ++len; - } - - minfo ("0x"); - if (size <= 0xffffffff) - sprintf (buf, "%lx", (unsigned long) size); - else - sprintf_vma (buf, size); - minfo ("%s", buf); - len = strlen (buf); - - while (len < 16) - { - print_space (); - ++len; - } - - minfo ("%B\n", section->owner); - } - - return true; -} - -/* -run through the input files and ensure that every input -section has somewhere to go. If one is found without -a destination then create an input request and place it -into the statement tree. -*/ - -static void -lang_place_orphans () -{ - lang_input_statement_type *file; - - for (file = (lang_input_statement_type *) file_chain.head; - file != (lang_input_statement_type *) NULL; - file = (lang_input_statement_type *) file->next) - { - asection *s; - - for (s = file->the_bfd->sections; - s != (asection *) NULL; - s = s->next) - { - if (s->output_section == (asection *) NULL) - { - /* This section of the file is not attatched, root - around for a sensible place for it to go */ - - if (file->just_syms_flag) - { - /* We are only retrieving symbol values from this - file. We want the symbols to act as though the - values in the file are absolute. */ - s->output_section = bfd_abs_section_ptr; - s->output_offset = s->vma; - } - else if (strcmp (s->name, "COMMON") == 0) - { - /* This is a lonely common section which must have - come from an archive. We attach to the section - with the wildcard. */ - if (! link_info.relocateable - || command_line.force_common_definition) - { - if (default_common_section == NULL) - { -#if 0 - /* This message happens when using the - svr3.ifile linker script, so I have - disabled it. */ - info_msg ("%P: no [COMMON] command, defaulting to .bss\n"); -#endif - default_common_section = - lang_output_section_statement_lookup (".bss"); - - } - wild_doit (&default_common_section->children, s, - default_common_section, file); - } - } - else if (ldemul_place_orphan (file, s)) - ; - else - { - lang_output_section_statement_type *os = - lang_output_section_statement_lookup (s->name); - - wild_doit (&os->children, s, os, file); - } - } - } - } -} - - -void -lang_set_flags (ptr, flags) - lang_memory_region_type *ptr; - CONST char *flags; -{ - flagword *ptr_flags = &ptr->flags; - - ptr->flags = ptr->not_flags = 0; - while (*flags) - { - switch (*flags) - { - case '!': - ptr_flags = (ptr_flags == &ptr->flags) ? &ptr->not_flags : &ptr->flags; - break; - - case 'A': case 'a': - *ptr_flags |= SEC_ALLOC; - break; - - case 'R': case 'r': - *ptr_flags |= SEC_READONLY; - break; - - case 'W': case 'w': - *ptr_flags |= SEC_DATA; - break; - - case 'X': case 'x': - *ptr_flags |= SEC_CODE; - break; - - case 'L': case 'l': - case 'I': case 'i': - *ptr_flags |= SEC_LOAD; - break; - - default: - einfo ("%P%F: invalid syntax in flags\n"); - break; - } - flags++; - } -} - -/* Call a function on each input file. This function will be called - on an archive, but not on the elements. */ - -void -lang_for_each_input_file (func) - void (*func) PARAMS ((lang_input_statement_type *)); -{ - lang_input_statement_type *f; - - for (f = (lang_input_statement_type *) input_file_chain.head; - f != NULL; - f = (lang_input_statement_type *) f->next_real_file) - func (f); -} - -/* Call a function on each file. The function will be called on all - the elements of an archive which are included in the link, but will - not be called on the archive file itself. */ - -void -lang_for_each_file (func) - void (*func) PARAMS ((lang_input_statement_type *)); -{ - lang_input_statement_type *f; - - for (f = (lang_input_statement_type *) file_chain.head; - f != (lang_input_statement_type *) NULL; - f = (lang_input_statement_type *) f->next) - { - func (f); - } -} - -#if 0 - -/* Not used. */ - -void -lang_for_each_input_section (func) - void (*func) PARAMS ((bfd * ab, asection * as)); -{ - lang_input_statement_type *f; - - for (f = (lang_input_statement_type *) file_chain.head; - f != (lang_input_statement_type *) NULL; - f = (lang_input_statement_type *) f->next) - { - asection *s; - - for (s = f->the_bfd->sections; - s != (asection *) NULL; - s = s->next) - { - func (f->the_bfd, s); - } - } -} - -#endif - -void -ldlang_add_file (entry) - lang_input_statement_type * entry; -{ - bfd **pp; - - lang_statement_append (&file_chain, - (lang_statement_union_type *) entry, - &entry->next); - - /* The BFD linker needs to have a list of all input BFDs involved in - a link. */ - ASSERT (entry->the_bfd->link_next == (bfd *) NULL); - ASSERT (entry->the_bfd != output_bfd); - for (pp = &link_info.input_bfds; - *pp != (bfd *) NULL; - pp = &(*pp)->link_next) - ; - *pp = entry->the_bfd; - entry->the_bfd->usrdata = (PTR) entry; - bfd_set_gp_size (entry->the_bfd, g_switch_value); - - /* Look through the sections and check for any which should not be - included in the link. We need to do this now, so that we can - notice when the backend linker tries to report multiple - definition errors for symbols which are in sections we aren't - going to link. FIXME: It might be better to entirely ignore - symbols which are defined in sections which are going to be - discarded. This would require modifying the backend linker for - each backend which might set the SEC_LINK_ONCE flag. If we do - this, we should probably handle SEC_EXCLUDE in the same way. */ - - bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry); -} - -void -lang_add_output (name, from_script) - CONST char *name; - int from_script; -{ - /* Make -o on command line override OUTPUT in script. */ - if (had_output_filename == false || !from_script) - { - output_filename = name; - had_output_filename = true; - } -} - - -static lang_output_section_statement_type *current_section; - -static int -topower (x) - int x; -{ - unsigned int i = 1; - int l; - - if (x < 0) - return -1; - - for (l = 0; l < 32; l++) - { - if (i >= (unsigned int) x) - return l; - i <<= 1; - } - - return 0; -} - -void -lang_enter_output_section_statement (output_section_statement_name, - address_exp, sectype, block_value, - align, subalign, ebase) - const char *output_section_statement_name; - etree_type * address_exp; - enum section_type sectype; - bfd_vma block_value; - etree_type *align; - etree_type *subalign; - etree_type *ebase; -{ - lang_output_section_statement_type *os; - - current_section = - os = - lang_output_section_statement_lookup (output_section_statement_name); - - - - /* Add this statement to tree */ - /* add_statement(lang_output_section_statement_enum, - output_section_statement);*/ - /* Make next things chain into subchain of this */ - - if (os->addr_tree == - (etree_type *) NULL) - { - os->addr_tree = - address_exp; - } - os->sectype = sectype; - if (sectype != noload_section) - os->flags = SEC_NO_FLAGS; - else - os->flags = SEC_NEVER_LOAD; - os->block_value = block_value ? block_value : 1; - stat_ptr = &os->children; - - os->subsection_alignment = topower( - exp_get_value_int(subalign, -1, - "subsection alignment", - 0)); - os->section_alignment = topower( - exp_get_value_int(align, -1, - "section alignment", 0)); - - os->load_base = ebase; -} - - -void -lang_final () -{ - lang_output_statement_type *new = - new_stat (lang_output_statement, stat_ptr); - - new->name = output_filename; -} - -/* Reset the current counters in the regions */ -static void -reset_memory_regions () -{ - lang_memory_region_type *p = lang_memory_region_list; - - for (p = lang_memory_region_list; - p != (lang_memory_region_type *) NULL; - p = p->next) - { - p->old_length = (bfd_size_type) (p->current - p->origin); - p->current = p->origin; - } -} - -void -lang_process () -{ - lang_reasonable_defaults (); - current_target = default_target; - - lang_for_each_statement (ldlang_open_output); /* Open the output file */ - - ldemul_create_output_section_statements (); - - /* Add to the hash table all undefineds on the command line */ - lang_place_undefineds (); - - /* Create a bfd for each input file */ - current_target = default_target; - open_input_bfds (statement_list.head, false); - - ldemul_after_open (); - - /* Make sure that we're not mixing architectures. We call this - after all the input files have been opened, but before we do any - other processing, so that any operations merge_private_bfd_data - does on the output file will be known during the rest of the - link. */ - lang_check (); - - /* Build all sets based on the information gathered from the input - files. */ - ldctor_build_sets (); - - /* Size up the common data */ - lang_common (); - - /* Run through the contours of the script and attach input sections - to the correct output sections - */ - map_input_to_output_sections (statement_list.head, (char *) NULL, - (lang_output_section_statement_type *) NULL); - - - /* Find any sections not attached explicitly and handle them */ - lang_place_orphans (); - - ldemul_before_allocation (); - - /* We must record the program headers before we try to fix the - section positions, since they will affect SIZEOF_HEADERS. */ - lang_record_phdrs (); - - /* Now run around and relax if we can */ - if (command_line.relax) - { - /* First time round is a trial run to get the 'worst case' - addresses of the objects if there was no relaxing. */ - lang_size_sections (statement_list.head, - abs_output_section, - &(statement_list.head), 0, (bfd_vma) 0, false); - - /* Keep relaxing until bfd_relax_section gives up. */ - do - { - reset_memory_regions (); - - relax_again = false; - - /* Do all the assignments with our current guesses as to - section sizes. */ - lang_do_assignments (statement_list.head, - abs_output_section, - (fill_type) 0, (bfd_vma) 0); - - /* Perform another relax pass - this time we know where the - globals are, so can make better guess. */ - lang_size_sections (statement_list.head, - abs_output_section, - &(statement_list.head), 0, (bfd_vma) 0, true); - } - while (relax_again); - } - else - { - /* Size up the sections. */ - lang_size_sections (statement_list.head, - abs_output_section, - &(statement_list.head), 0, (bfd_vma) 0, false); - } - - /* See if anything special should be done now we know how big - everything is. */ - ldemul_after_allocation (); - - /* Fix any .startof. or .sizeof. symbols. */ - lang_set_startof (); - - /* Do all the assignments, now that we know the final restingplaces - of all the symbols */ - - lang_do_assignments (statement_list.head, - abs_output_section, - (fill_type) 0, (bfd_vma) 0); - - /* Final stuffs */ - - ldemul_finish (); - lang_finish (); -} - -/* EXPORTED TO YACC */ - -void -lang_add_wild (section_name, filename) - CONST char *CONST section_name; - CONST char *CONST filename; -{ - lang_wild_statement_type *new = new_stat (lang_wild_statement, - stat_ptr); - - if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0) - { - placed_commons = true; - } - if (filename != (char *) NULL) - { - lang_has_input_file = true; - } - new->section_name = section_name; - new->filename = filename; - lang_list_init (&new->children); -} - -void -lang_section_start (name, address) - CONST char *name; - etree_type * address; -{ - lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr); - - ad->section_name = name; - ad->address = address; -} - -/* Set the start symbol to NAME. CMDLINE is nonzero if this is called - because of a -e argument on the command line, or zero if this is - called by ENTRY in a linker script. Command line arguments take - precedence. */ - -/* WINDOWS_NT. When an entry point has been specified, we will also force - this symbol to be defined by calling ldlang_add_undef (equivalent to - having switch -u entry_name on the command line). The reason we do - this is so that the user doesn't have to because they would have to use - the -u switch if they were specifying an entry point other than - _mainCRTStartup. Specifically, if creating a windows application, entry - point _WinMainCRTStartup must be specified. - What I have found for non console applications (entry not _mainCRTStartup) - is that the .obj that contains mainCRTStartup is brought in since it is - the first encountered in libc.lib and it has other symbols in it which will - be pulled in by the link process. To avoid this, adding -u with the entry - point name specified forces the correct .obj to be used. We can avoid - making the user do this by always adding the entry point name as an - undefined symbol. */ - -void -lang_add_entry (name, cmdline) - CONST char *name; - boolean cmdline; -{ - if (entry_symbol == NULL - || cmdline - || ! entry_from_cmdline) - { - entry_symbol = name; - entry_from_cmdline = cmdline; - } -#if 0 - /* don't do this yet. It seems to work (the executables run), but the - image created is very different from what I was getting before indicating - that something else is being pulled in. When everything else is working, - then try to put this back in to see if it will do the right thing for - other more complicated applications */ - ldlang_add_undef (name); -#endif -} - -void -lang_add_target (name) - CONST char *name; -{ - lang_target_statement_type *new = new_stat (lang_target_statement, - stat_ptr); - - new->target = name; - -} - -void -lang_add_map (name) - CONST char *name; -{ - while (*name) - { - switch (*name) - { - case 'F': - map_option_f = true; - break; - } - name++; - } -} - -void -lang_add_fill (exp) - int exp; -{ - lang_fill_statement_type *new = new_stat (lang_fill_statement, - stat_ptr); - - new->fill = exp; -} - -void -lang_add_data (type, exp) - int type; - union etree_union *exp; -{ - - lang_data_statement_type *new = new_stat (lang_data_statement, - stat_ptr); - - new->exp = exp; - new->type = type; - -} - -/* Create a new reloc statement. RELOC is the BFD relocation type to - generate. HOWTO is the corresponding howto structure (we could - look this up, but the caller has already done so). SECTION is the - section to generate a reloc against, or NAME is the name of the - symbol to generate a reloc against. Exactly one of SECTION and - NAME must be NULL. ADDEND is an expression for the addend. */ - -void -lang_add_reloc (reloc, howto, section, name, addend) - bfd_reloc_code_real_type reloc; - reloc_howto_type *howto; - asection *section; - const char *name; - union etree_union *addend; -{ - lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr); - - p->reloc = reloc; - p->howto = howto; - p->section = section; - p->name = name; - p->addend_exp = addend; - - p->addend_value = 0; - p->output_section = NULL; - p->output_vma = 0; -} - -void -lang_add_assignment (exp) - etree_type * exp; -{ - lang_assignment_statement_type *new = new_stat (lang_assignment_statement, - stat_ptr); - - new->exp = exp; -} - -void -lang_add_attribute (attribute) - enum statement_enum attribute; -{ - new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr); -} - -void -lang_startup (name) - CONST char *name; -{ - if (startup_file != (char *) NULL) - { - einfo ("%P%Fmultiple STARTUP files\n"); - } - first_file->filename = name; - first_file->local_sym_name = name; - first_file->real = true; - - startup_file = name; -} - -void -lang_float (maybe) - boolean maybe; -{ - lang_float_flag = maybe; -} - -void -lang_leave_output_section_statement (fill, memspec, phdrs) - bfd_vma fill; - const char *memspec; - struct lang_output_section_phdr_list *phdrs; -{ - current_section->fill = fill; - current_section->region = lang_memory_region_lookup (memspec); - current_section->phdrs = phdrs; - stat_ptr = &statement_list; -} - -/* - Create an absolute symbol with the given name with the value of the - address of first byte of the section named. - - If the symbol already exists, then do nothing. -*/ -void -lang_abs_symbol_at_beginning_of (secname, name) - const char *secname; - const char *name; -{ - struct bfd_link_hash_entry *h; - - h = bfd_link_hash_lookup (link_info.hash, name, true, true, true); - if (h == (struct bfd_link_hash_entry *) NULL) - einfo ("%P%F: bfd_link_hash_lookup failed: %E\n"); - - if (h->type == bfd_link_hash_new - || h->type == bfd_link_hash_undefined) - { - asection *sec; - - h->type = bfd_link_hash_defined; - - sec = bfd_get_section_by_name (output_bfd, secname); - if (sec == (asection *) NULL) - h->u.def.value = 0; - else - h->u.def.value = bfd_get_section_vma (output_bfd, sec); - - h->u.def.section = bfd_abs_section_ptr; - } -} - -/* - Create an absolute symbol with the given name with the value of the - address of the first byte after the end of the section named. - - If the symbol already exists, then do nothing. -*/ -void -lang_abs_symbol_at_end_of (secname, name) - const char *secname; - const char *name; -{ - struct bfd_link_hash_entry *h; - - h = bfd_link_hash_lookup (link_info.hash, name, true, true, true); - if (h == (struct bfd_link_hash_entry *) NULL) - einfo ("%P%F: bfd_link_hash_lookup failed: %E\n"); - - if (h->type == bfd_link_hash_new - || h->type == bfd_link_hash_undefined) - { - asection *sec; - - h->type = bfd_link_hash_defined; - - sec = bfd_get_section_by_name (output_bfd, secname); - if (sec == (asection *) NULL) - h->u.def.value = 0; - else - h->u.def.value = (bfd_get_section_vma (output_bfd, sec) - + bfd_section_size (output_bfd, sec)); - - h->u.def.section = bfd_abs_section_ptr; - } -} - -void -lang_statement_append (list, element, field) - lang_statement_list_type * list; - lang_statement_union_type * element; - lang_statement_union_type ** field; -{ - *(list->tail) = element; - list->tail = field; -} - -/* Set the output format type. -oformat overrides scripts. */ - -void -lang_add_output_format (format, big, little, from_script) - const char *format; - const char *big; - const char *little; - int from_script; -{ - if (output_target == NULL || !from_script) - { - if (command_line.endian == ENDIAN_BIG - && big != NULL) - format = big; - else if (command_line.endian == ENDIAN_LITTLE - && little != NULL) - format = little; - - output_target = format; - } -} - -/* Enter a group. This creates a new lang_group_statement, and sets - stat_ptr to build new statements within the group. */ - -void -lang_enter_group () -{ - lang_group_statement_type *g; - - g = new_stat (lang_group_statement, stat_ptr); - lang_list_init (&g->children); - stat_ptr = &g->children; -} - -/* Leave a group. This just resets stat_ptr to start writing to the - regular list of statements again. Note that this will not work if - groups can occur inside anything else which can adjust stat_ptr, - but currently they can't. */ - -void -lang_leave_group () -{ - stat_ptr = &statement_list; -} - -/* Add a new program header. This is called for each entry in a PHDRS - command in a linker script. */ - -void -lang_new_phdr (name, type, filehdr, phdrs, at, flags) - const char *name; - etree_type *type; - boolean filehdr; - boolean phdrs; - etree_type *at; - etree_type *flags; -{ - struct lang_phdr *n, **pp; - - n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr)); - n->next = NULL; - n->name = name; - n->type = exp_get_value_int (type, 0, "program header type", - lang_final_phase_enum); - n->filehdr = filehdr; - n->phdrs = phdrs; - n->at = at; - n->flags = flags; - - for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next) - ; - *pp = n; -} - -/* Record the program header information in the output BFD. FIXME: We - should not be calling an ELF specific function here. */ - -static void -lang_record_phdrs () -{ - unsigned int alc; - asection **secs; - struct lang_output_section_phdr_list *last; - struct lang_phdr *l; - lang_statement_union_type *u; - - alc = 10; - secs = (asection **) xmalloc (alc * sizeof (asection *)); - last = NULL; - for (l = lang_phdr_list; l != NULL; l = l->next) - { - unsigned int c; - flagword flags; - bfd_vma at; - - c = 0; - for (u = lang_output_section_statement.head; - u != NULL; - u = u->output_section_statement.next) - { - lang_output_section_statement_type *os; - struct lang_output_section_phdr_list *pl; - - os = &u->output_section_statement; - - pl = os->phdrs; - if (pl != NULL) - last = pl; - else - { - if (os->sectype == noload_section - || os->bfd_section == NULL - || (os->bfd_section->flags & SEC_ALLOC) == 0) - continue; - pl = last; - } - - if (os->bfd_section == NULL) - continue; - - for (; pl != NULL; pl = pl->next) - { - if (strcmp (pl->name, l->name) == 0) - { - if (c >= alc) - { - alc *= 2; - secs = ((asection **) - xrealloc (secs, alc * sizeof (asection *))); - } - secs[c] = os->bfd_section; - ++c; - pl->used = true; - } - } - } - - if (l->flags == NULL) - flags = 0; - else - flags = exp_get_vma (l->flags, 0, "phdr flags", - lang_final_phase_enum); - - if (l->at == NULL) - at = 0; - else - at = exp_get_vma (l->at, 0, "phdr load address", - lang_final_phase_enum); - - if (! bfd_record_phdr (output_bfd, l->type, - l->flags == NULL ? false : true, - flags, - l->at == NULL ? false : true, - at, l->filehdr, l->phdrs, c, secs)) - einfo ("%F%P: bfd_record_phdr failed: %E\n"); - } - - free (secs); - - /* Make sure all the phdr assignments succeeded. */ - for (u = lang_output_section_statement.head; - u != NULL; - u = u->output_section_statement.next) - { - struct lang_output_section_phdr_list *pl; - - if (u->output_section_statement.bfd_section == NULL) - continue; - - for (pl = u->output_section_statement.phdrs; - pl != NULL; - pl = pl->next) - if (! pl->used && strcmp (pl->name, "NONE") != 0) - einfo ("%X%P: section `%s' assigned to non-existent phdr `%s'\n", - u->output_section_statement.name, pl->name); - } -} - -/* Record a list of sections which may not be cross referenced. */ - -void -lang_add_nocrossref (l) - struct lang_nocrossref *l; -{ - struct lang_nocrossrefs *n; - - n = (struct lang_nocrossrefs *) xmalloc (sizeof *n); - n->next = nocrossref_list; - n->list = l; - nocrossref_list = n; - - /* Set notice_all so that we get informed about all symbols. */ - link_info.notice_all = true; -} - -/* Overlay handling. We handle overlays with some static variables. */ - -/* The overlay virtual address. */ -static etree_type *overlay_vma; - -/* The overlay load address. */ -static etree_type *overlay_lma; - -/* Whether nocrossrefs is set for this overlay. */ -static int overlay_nocrossrefs; - -/* An expression for the maximum section size seen so far. */ -static etree_type *overlay_max; - -/* A list of all the sections in this overlay. */ - -struct overlay_list -{ - struct overlay_list *next; - lang_output_section_statement_type *os; -}; - -static struct overlay_list *overlay_list; - -/* Start handling an overlay. */ - -void -lang_enter_overlay (vma_expr, lma_expr, nocrossrefs) - etree_type *vma_expr; - etree_type *lma_expr; - int nocrossrefs; -{ - /* The grammar should prevent nested overlays from occurring. */ - ASSERT (overlay_vma == NULL - && overlay_lma == NULL - && overlay_list == NULL - && overlay_max == NULL); - - overlay_vma = vma_expr; - overlay_lma = lma_expr; - overlay_nocrossrefs = nocrossrefs; -} - -/* Start a section in an overlay. We handle this by calling - lang_enter_output_section_statement with the correct VMA and LMA. */ - -void -lang_enter_overlay_section (name) - const char *name; -{ - struct overlay_list *n; - etree_type *size; - - lang_enter_output_section_statement (name, overlay_vma, normal_section, - 0, 0, 0, overlay_lma); - - /* If this is the first section, then base the VMA and LMA of future - sections on this one. This will work correctly even if `.' is - used in the addresses. */ - if (overlay_list == NULL) - { - overlay_vma = exp_nameop (ADDR, name); - overlay_lma = exp_nameop (LOADADDR, name); - } - - /* Remember the section. */ - n = (struct overlay_list *) xmalloc (sizeof *n); - n->os = current_section; - n->next = overlay_list; - overlay_list = n; - - size = exp_nameop (SIZEOF, name); - - /* Adjust the LMA for the next section. */ - overlay_lma = exp_binop ('+', overlay_lma, size); - - /* Arrange to work out the maximum section end address. */ - if (overlay_max == NULL) - overlay_max = size; - else - overlay_max = exp_binop (MAX, overlay_max, size); -} - -/* Finish a section in an overlay. There isn't any special to do - here. */ - -void -lang_leave_overlay_section (fill, phdrs) - bfd_vma fill; - struct lang_output_section_phdr_list *phdrs; -{ - const char *name; - char *clean, *s2; - const char *s1; - char *buf; - - name = current_section->name; - - lang_leave_output_section_statement (fill, "*default*", phdrs); - - /* Define the magic symbols. */ - - clean = xmalloc (strlen (name) + 1); - s2 = clean; - for (s1 = name; *s1 != '\0'; s1++) - if (isalnum ((unsigned char) *s1) || *s1 == '_') - *s2++ = *s1; - *s2 = '\0'; - - buf = xmalloc (strlen (clean) + sizeof "__load_start_"); - sprintf (buf, "__load_start_%s", clean); - lang_add_assignment (exp_assop ('=', buf, - exp_nameop (LOADADDR, name))); - - buf = xmalloc (strlen (clean) + sizeof "__load_stop_"); - sprintf (buf, "__load_stop_%s", clean); - lang_add_assignment (exp_assop ('=', buf, - exp_binop ('+', - exp_nameop (LOADADDR, name), - exp_nameop (SIZEOF, name)))); - - free (clean); -} - -/* Finish an overlay. If there are any overlay wide settings, this - looks through all the sections in the overlay and sets them. */ - -void -lang_leave_overlay (fill, memspec, phdrs) - bfd_vma fill; - const char *memspec; - struct lang_output_section_phdr_list *phdrs; -{ - lang_memory_region_type *region; - struct overlay_list *l; - struct lang_nocrossref *nocrossref; - - if (memspec == NULL) - region = NULL; - else - region = lang_memory_region_lookup (memspec); - - nocrossref = NULL; - - l = overlay_list; - while (l != NULL) - { - struct overlay_list *next; - - if (fill != 0 && l->os->fill == 0) - l->os->fill = fill; - if (region != NULL && l->os->region == NULL) - l->os->region = region; - if (phdrs != NULL && l->os->phdrs == NULL) - l->os->phdrs = phdrs; - - if (overlay_nocrossrefs) - { - struct lang_nocrossref *nc; - - nc = (struct lang_nocrossref *) xmalloc (sizeof *nc); - nc->name = l->os->name; - nc->next = nocrossref; - nocrossref = nc; - } - - next = l->next; - free (l); - l = next; - } - - if (nocrossref != NULL) - lang_add_nocrossref (nocrossref); - - /* Update . for the end of the overlay. */ - lang_add_assignment (exp_assop ('=', ".", - exp_binop ('+', overlay_vma, overlay_max))); - - overlay_vma = NULL; - overlay_lma = NULL; - overlay_nocrossrefs = 0; - overlay_list = NULL; - overlay_max = NULL; -} - -/* Version handling. This is only useful for ELF. */ - -/* This global variable holds the version tree that we build. */ - -struct bfd_elf_version_tree *lang_elf_version_info; - -/* This is called for each variable name or match expression. */ - -struct bfd_elf_version_expr * -lang_new_vers_regex (orig, new) - struct bfd_elf_version_expr *orig; - const char *new; -{ - struct bfd_elf_version_expr *ret; - - ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret); - ret->next = orig; - ret->match = new; - return ret; -} - -/* This is called for each set of variable names and match - expressions. */ - -struct bfd_elf_version_tree * -lang_new_vers_node (globals, locals) - struct bfd_elf_version_expr *globals; - struct bfd_elf_version_expr *locals; -{ - struct bfd_elf_version_tree *ret; - - ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret); - ret->next = NULL; - ret->name = NULL; - ret->vernum = 0; - ret->globals = globals; - ret->locals = locals; - ret->deps = NULL; - ret->name_indx = (unsigned int) -1; - ret->used = 0; - return ret; -} - -/* This static variable keeps track of version indices. */ - -static int version_index; - -/* This is called when we know the name and dependencies of the - version. */ - -void -lang_register_vers_node (name, version, deps) - const char *name; - struct bfd_elf_version_tree *version; - struct bfd_elf_version_deps *deps; -{ - struct bfd_elf_version_tree *t, **pp; - struct bfd_elf_version_expr *e1; - - /* Make sure this node has a unique name. */ - for (t = lang_elf_version_info; t != NULL; t = t->next) - if (strcmp (t->name, name) == 0) - einfo ("%X%P: duplicate version tag `%s'\n", name); - - /* Check the global and local match names, and make sure there - aren't any duplicates. */ - - for (e1 = version->globals; e1 != NULL; e1 = e1->next) - { - for (t = lang_elf_version_info; t != NULL; t = t->next) - { - struct bfd_elf_version_expr *e2; - - for (e2 = t->locals; e2 != NULL; e2 = e2->next) - if (strcmp (e1->match, e2->match) == 0) - einfo ("%X%P: duplicate expression `%s' in version information\n", - e1->match); - } - } - - for (e1 = version->locals; e1 != NULL; e1 = e1->next) - { - for (t = lang_elf_version_info; t != NULL; t = t->next) - { - struct bfd_elf_version_expr *e2; - - for (e2 = t->globals; e2 != NULL; e2 = e2->next) - if (strcmp (e1->match, e2->match) == 0) - einfo ("%X%P: duplicate expression `%s' in version information\n", - e1->match); - } - } - - version->deps = deps; - version->name = name; - ++version_index; - version->vernum = version_index; - - for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next) - ; - *pp = version; -} - -/* This is called when we see a version dependency. */ - -struct bfd_elf_version_deps * -lang_add_vers_depend (list, name) - struct bfd_elf_version_deps *list; - const char *name; -{ - struct bfd_elf_version_deps *ret; - struct bfd_elf_version_tree *t; - - ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret); - ret->next = list; - - for (t = lang_elf_version_info; t != NULL; t = t->next) - { - if (strcmp (t->name, name) == 0) - { - ret->version_needed = t; - return ret; - } - } - - einfo ("%X%P: unable to find version dependency `%s'\n", name); - - return ret; -} diff --git a/contrib/binutils/ld/ldlang.h b/contrib/binutils/ld/ldlang.h deleted file mode 100644 index 60edc0f3209d..000000000000 --- a/contrib/binutils/ld/ldlang.h +++ /dev/null @@ -1,485 +0,0 @@ -/* ldlang.h - linker command language support - Copyright 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LDLANG_H -#define LDLANG_H - -typedef enum -{ - lang_input_file_is_l_enum, - lang_input_file_is_symbols_only_enum, - lang_input_file_is_marker_enum, - lang_input_file_is_fake_enum, - lang_input_file_is_search_file_enum, - lang_input_file_is_file_enum -} lang_input_file_enum_type; - -typedef unsigned int fill_type; -typedef struct statement_list -{ - union lang_statement_union *head; - union lang_statement_union **tail; -} lang_statement_list_type; - - -typedef struct memory_region_struct -{ - char *name; - struct memory_region_struct *next; - bfd_vma origin; - bfd_size_type length; - bfd_vma current; - bfd_size_type old_length; - flagword flags; - flagword not_flags; - boolean had_full_message; -} lang_memory_region_type ; - -typedef struct lang_statement_header_struct -{ - union lang_statement_union *next; - enum statement_enum - { - lang_output_section_statement_enum, - lang_assignment_statement_enum, - lang_input_statement_enum, - lang_address_statement_enum, - lang_wild_statement_enum, - lang_input_section_enum, - lang_object_symbols_statement_enum, - lang_fill_statement_enum, - lang_data_statement_enum, - lang_reloc_statement_enum, - lang_target_statement_enum, - lang_output_statement_enum, - lang_padding_statement_enum, - lang_group_statement_enum, - - lang_afile_asection_pair_statement_enum, - lang_constructors_statement_enum - } type; -} lang_statement_header_type; - - -typedef struct -{ - lang_statement_header_type header; - union etree_union *exp; -} lang_assignment_statement_type; - - -typedef struct lang_target_statement_struct -{ - lang_statement_header_type header; - const char *target; -} lang_target_statement_type; - - -typedef struct lang_output_statement_struct -{ - lang_statement_header_type header; - const char *name; -} lang_output_statement_type; - -/* Section types specified in a linker script. */ - -enum section_type -{ - normal_section, - dsect_section, - copy_section, - noload_section, - info_section, - overlay_section -}; - -/* This structure holds a list of program headers describing segments - in which this section should be placed. */ - -struct lang_output_section_phdr_list -{ - struct lang_output_section_phdr_list *next; - const char *name; - boolean used; -}; - -typedef struct lang_output_section_statement_struct -{ - lang_statement_header_type header; - union etree_union *addr_tree; - lang_statement_list_type children; - const char *memspec; - union lang_statement_union *next; - const char *name; - - boolean processed; - - asection *bfd_section; - flagword flags; /* Or together of all input sections */ - enum section_type sectype; - struct memory_region_struct *region; - size_t block_value; - fill_type fill; - - int subsection_alignment; /* alignment of components */ - int section_alignment; /* alignment of start of section */ - - union etree_union *load_base; - - struct lang_output_section_phdr_list *phdrs; -} lang_output_section_statement_type; - - -typedef struct -{ - lang_statement_header_type header; -} lang_common_statement_type; - -typedef struct -{ - lang_statement_header_type header; -} lang_object_symbols_statement_type; - -typedef struct -{ - lang_statement_header_type header; - fill_type fill; - int size; - asection *output_section; -} lang_fill_statement_type; - -typedef struct -{ - lang_statement_header_type header; - unsigned int type; - union etree_union *exp; - bfd_vma value; - asection *output_section; - bfd_vma output_vma; -} lang_data_statement_type; - -/* Generate a reloc in the output file. */ - -typedef struct -{ - lang_statement_header_type header; - - /* Reloc to generate. */ - bfd_reloc_code_real_type reloc; - - /* Reloc howto structure. */ - reloc_howto_type *howto; - - /* Section to generate reloc against. Exactly one of section and - name must be NULL. */ - asection *section; - - /* Name of symbol to generate reloc against. Exactly one of section - and name must be NULL. */ - const char *name; - - /* Expression for addend. */ - union etree_union *addend_exp; - - /* Resolved addend. */ - bfd_vma addend_value; - - /* Output section where reloc should be performed. */ - asection *output_section; - - /* VMA within output section. */ - bfd_vma output_vma; -} lang_reloc_statement_type; - -typedef struct lang_input_statement_struct -{ - lang_statement_header_type header; - /* Name of this file. */ - const char *filename; - /* Name to use for the symbol giving address of text start */ - /* Usually the same as filename, but for a file spec'd with -l - this is the -l switch itself rather than the filename. */ - const char *local_sym_name; - - bfd *the_bfd; - - boolean closed; - file_ptr passive_position; - - /* Symbol table of the file. */ - asymbol **asymbols; - unsigned int symbol_count; - - /* Point to the next file - whatever it is, wanders up and down - archives */ - - union lang_statement_union *next; - /* Point to the next file, but skips archive contents */ - union lang_statement_union *next_real_file; - - boolean is_archive; - - /* 1 means search a set of directories for this file. */ - boolean search_dirs_flag; - - /* 1 means this is base file of incremental load. - Do not load this file's text or data. - Also default text_start to after this file's bss. */ - - boolean just_syms_flag; - - /* Whether to search for this entry as a dynamic archive. */ - boolean dynamic; - - /* Whether to include the entire contents of an archive. */ - boolean whole_archive; - - boolean loaded; - - /* unsigned int globals_in_this_file;*/ - const char *target; - boolean real; -} lang_input_statement_type; - -typedef struct -{ - lang_statement_header_type header; - asection *section; - lang_input_statement_type *ifile; - -} lang_input_section_type; - - -typedef struct -{ - lang_statement_header_type header; - asection *section; - union lang_statement_union *file; -} lang_afile_asection_pair_statement_type; - -typedef struct lang_wild_statement_struct -{ - lang_statement_header_type header; - const char *section_name; - const char *filename; - lang_statement_list_type children; -} lang_wild_statement_type; - -typedef struct lang_address_statement_struct -{ - lang_statement_header_type header; - const char *section_name; - union etree_union *address; -} lang_address_statement_type; - -typedef struct -{ - lang_statement_header_type header; - bfd_vma output_offset; - size_t size; - asection *output_section; - fill_type fill; -} lang_padding_statement_type; - -/* A group statement collects a set of libraries together. The - libraries are searched multiple times, until no new undefined - symbols are found. The effect is to search a group of libraries as - though they were a single library. */ - -typedef struct -{ - lang_statement_header_type header; - lang_statement_list_type children; -} lang_group_statement_type; - -typedef union lang_statement_union -{ - lang_statement_header_type header; - union lang_statement_union *next; - lang_wild_statement_type wild_statement; - lang_data_statement_type data_statement; - lang_reloc_statement_type reloc_statement; - lang_address_statement_type address_statement; - lang_output_section_statement_type output_section_statement; - lang_afile_asection_pair_statement_type afile_asection_pair_statement; - lang_assignment_statement_type assignment_statement; - lang_input_statement_type input_statement; - lang_target_statement_type target_statement; - lang_output_statement_type output_statement; - lang_input_section_type input_section; - lang_common_statement_type common_statement; - lang_object_symbols_statement_type object_symbols_statement; - lang_fill_statement_type fill_statement; - lang_padding_statement_type padding_statement; - lang_group_statement_type group_statement; -} lang_statement_union_type; - -/* This structure holds information about a program header, from the - PHDRS command in the linker script. */ - -struct lang_phdr -{ - struct lang_phdr *next; - const char *name; - unsigned long type; - boolean filehdr; - boolean phdrs; - etree_type *at; - etree_type *flags; -}; - -/* This structure is used to hold a list of sections which may not - cross reference each other. */ - -struct lang_nocrossref -{ - struct lang_nocrossref *next; - const char *name; -}; - -/* The list of nocrossref lists. */ - -struct lang_nocrossrefs -{ - struct lang_nocrossrefs *next; - struct lang_nocrossref *list; -}; - -extern struct lang_nocrossrefs *nocrossref_list; - -extern lang_output_section_statement_type *abs_output_section; -extern boolean lang_has_input_file; -extern etree_type *base; -extern lang_statement_list_type *stat_ptr; -extern boolean delete_output_file_on_failure; - -extern const char *entry_symbol; -extern boolean entry_from_cmdline; - -extern void lang_init PARAMS ((void)); -extern struct memory_region_struct *lang_memory_region_lookup - PARAMS ((const char *const)); -extern struct memory_region_struct *lang_memory_region_default - PARAMS ((asection *)); -extern void lang_map PARAMS ((void)); -extern void lang_set_flags PARAMS ((lang_memory_region_type *, const char *)); -extern void lang_add_output PARAMS ((const char *, int from_script)); -extern void lang_enter_output_section_statement - PARAMS ((const char *output_section_statement_name, - etree_type * address_exp, - enum section_type sectype, - bfd_vma block_value, - etree_type *align, - etree_type *subalign, - etree_type *)); -extern void lang_final PARAMS ((void)); -extern void lang_process PARAMS ((void)); -extern void lang_section_start PARAMS ((const char *, union etree_union *)); -extern void lang_add_entry PARAMS ((const char *, boolean)); -extern void lang_add_target PARAMS ((const char *)); -extern void lang_add_wild PARAMS ((const char *const , const char *const)); -extern void lang_add_map PARAMS ((const char *)); -extern void lang_add_fill PARAMS ((int)); -extern void lang_add_assignment PARAMS ((union etree_union *)); -extern void lang_add_attribute PARAMS ((enum statement_enum)); -extern void lang_startup PARAMS ((const char *)); -extern void lang_float PARAMS ((enum bfd_boolean)); -extern void lang_leave_output_section_statement - PARAMS ((bfd_vma, const char *, struct lang_output_section_phdr_list *)); -extern void lang_abs_symbol_at_end_of PARAMS ((const char *, const char *)); -extern void lang_abs_symbol_at_beginning_of PARAMS ((const char *, - const char *)); -extern void lang_statement_append PARAMS ((struct statement_list *, - union lang_statement_union *, - union lang_statement_union **)); -extern void lang_for_each_input_file - PARAMS ((void (*dothis) (lang_input_statement_type *))); -extern void lang_for_each_file - PARAMS ((void (*dothis) (lang_input_statement_type *))); -extern bfd_vma lang_do_assignments - PARAMS ((lang_statement_union_type * s, - lang_output_section_statement_type *output_section_statement, - fill_type fill, - bfd_vma dot)); - -#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \ - extern lang_statement_list_type file_chain; \ - lang_input_statement_type *statement; \ - for (statement = (lang_input_statement_type *)file_chain.head;\ - statement != (lang_input_statement_type *)NULL; \ - statement = (lang_input_statement_type *)statement->next)\ - -extern void lang_process PARAMS ((void)); -extern void ldlang_add_file PARAMS ((lang_input_statement_type *)); -extern lang_output_section_statement_type *lang_output_section_find - PARAMS ((const char * const)); -extern lang_input_statement_type *lang_add_input_file - PARAMS ((const char *name, lang_input_file_enum_type file_type, - const char *target)); -extern void lang_add_keepsyms_file PARAMS ((const char *filename)); -extern lang_output_section_statement_type * - lang_output_section_statement_lookup PARAMS ((const char * const name)); -extern void ldlang_add_undef PARAMS ((const char *const name)); -extern void lang_add_output_format PARAMS ((const char *, const char *, - const char *, int from_script)); -extern void lang_list_init PARAMS ((lang_statement_list_type*)); -extern void lang_add_data PARAMS ((int type, union etree_union *)); -extern void lang_add_reloc - PARAMS ((bfd_reloc_code_real_type reloc, reloc_howto_type *howto, - asection *section, const char *name, union etree_union *addend)); -extern void lang_for_each_statement - PARAMS ((void (*func) (lang_statement_union_type *))); -extern PTR stat_alloc PARAMS ((size_t size)); -extern void dprint_statement PARAMS ((lang_statement_union_type *, int)); -extern bfd_vma lang_size_sections - PARAMS ((lang_statement_union_type *s, - lang_output_section_statement_type *output_section_statement, - lang_statement_union_type **prev, fill_type fill, - bfd_vma dot, boolean relax)); -extern void lang_enter_group PARAMS ((void)); -extern void lang_leave_group PARAMS ((void)); -extern void wild_doit - PARAMS ((lang_statement_list_type *ptr, asection *section, - lang_output_section_statement_type *output, - lang_input_statement_type *file)); -extern void lang_new_phdr - PARAMS ((const char *, etree_type *, boolean, boolean, etree_type *, - etree_type *)); -extern void lang_add_nocrossref PARAMS ((struct lang_nocrossref *)); -extern void lang_enter_overlay PARAMS ((etree_type *, etree_type *, int)); -extern void lang_enter_overlay_section PARAMS ((const char *)); -extern void lang_leave_overlay_section - PARAMS ((bfd_vma, struct lang_output_section_phdr_list *)); -extern void lang_leave_overlay - PARAMS ((bfd_vma, const char *, struct lang_output_section_phdr_list *)); - -extern struct bfd_elf_version_tree *lang_elf_version_info; - -extern struct bfd_elf_version_expr *lang_new_vers_regex - PARAMS ((struct bfd_elf_version_expr *, const char *)); -extern struct bfd_elf_version_tree *lang_new_vers_node - PARAMS ((struct bfd_elf_version_expr *, struct bfd_elf_version_expr *)); -extern struct bfd_elf_version_deps *lang_add_vers_depend - PARAMS ((struct bfd_elf_version_deps *, const char *)); -extern void lang_register_vers_node - PARAMS ((const char *, struct bfd_elf_version_tree *, - struct bfd_elf_version_deps *)); - -#endif diff --git a/contrib/binutils/ld/ldlex.h b/contrib/binutils/ld/ldlex.h deleted file mode 100644 index 53444cacad78..000000000000 --- a/contrib/binutils/ld/ldlex.h +++ /dev/null @@ -1,62 +0,0 @@ -/* ldlex.h - - Copyright 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LDLEX_H -#define LDLEX_H - -#include <stdio.h> - -/* The initial parser states. */ -typedef enum input_enum { - input_selected, /* We've set the initial state. */ - input_script, - input_mri_script, - input_version_script, - input_defsym -} input_type; - -extern input_type parser_input; - -extern unsigned int lineno; -extern const char *lex_string; - -/* In ldlex.l. */ -extern int yylex PARAMS ((void)); -extern void lex_push_file PARAMS ((FILE *, const char *)); -extern void lex_redirect PARAMS ((const char *)); -extern void ldlex_script PARAMS ((void)); -extern void ldlex_mri_script PARAMS ((void)); -extern void ldlex_version_script PARAMS ((void)); -extern void ldlex_version_file PARAMS ((void)); -extern void ldlex_defsym PARAMS ((void)); -extern void ldlex_expression PARAMS ((void)); -extern void ldlex_both PARAMS ((void)); -extern void ldlex_command PARAMS ((void)); -extern void ldlex_popstate PARAMS ((void)); - -/* In lexsup.c. */ -extern int lex_input PARAMS ((void)); -extern void lex_unput PARAMS ((int)); -#ifndef yywrap -extern int yywrap PARAMS ((void)); -#endif -extern void parse_args PARAMS ((int, char **)); - -#endif diff --git a/contrib/binutils/ld/ldlex.l b/contrib/binutils/ld/ldlex.l deleted file mode 100644 index dfdf73775913..000000000000 --- a/contrib/binutils/ld/ldlex.l +++ /dev/null @@ -1,647 +0,0 @@ -%{ - -/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 - Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -/* -This was written by steve chamberlain - sac@cygnus.com -*/ - - -#include <ansidecl.h> -#include <stdio.h> -#include <ctype.h> - -#ifdef MPW -/* Prevent enum redefinition problems. */ -#define TRUE_FALSE_ALREADY_DEFINED -#endif /* MPW */ - -#include "bfd.h" -#include "sysdep.h" -#include "ld.h" -#include "ldgram.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldfile.h" -#include "ldlex.h" -#include "ldmain.h" - -/* The type of top-level parser input. - yylex and yyparse (indirectly) both check this. */ -input_type parser_input; - -/* Line number in the current input file. - (FIXME Actually, it doesn't appear to get reset for each file?) */ -unsigned int lineno = 1; - -/* The string we are currently lexing, or NULL if we are reading a - file. */ -const char *lex_string = NULL; - -/* Support for flex reading from more than one input file (stream). - `include_stack' is flex's input state for each open file; - `file_name_stack' is the file names. `lineno_stack' is the current - line numbers. - - If `include_stack_ptr' is 0, we haven't started reading anything yet. - Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid. */ - -#undef YY_INPUT -#define YY_INPUT(buf,result,max_size) yy_input(buf, &result, max_size) - -#define MAX_INCLUDE_DEPTH 10 -static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; -static const char *file_name_stack[MAX_INCLUDE_DEPTH]; -static unsigned int lineno_stack[MAX_INCLUDE_DEPTH]; -static unsigned int include_stack_ptr = 0; - -static YY_BUFFER_STATE yy_create_string_buffer PARAMS ((const char *string, - size_t size)); -static void yy_input PARAMS ((char *, int *result, int max_size)); - -static void comment PARAMS ((void)); -static void lex_warn_invalid PARAMS ((char *where, char *what)); - -/* STATES - EXPRESSION definitely in an expression - SCRIPT definitely in a script - BOTH either EXPRESSION or SCRIPT - DEFSYMEXP in an argument to -defsym - MRI in an MRI script - VERS_START starting a Sun style mapfile - VERS_SCRIPT a Sun style mapfile - VERS_NODE a node within a Sun style mapfile -*/ -#define RTOKEN(x) { yylval.token = x; return x; } - -/* Some versions of flex want this. */ -#ifndef yywrap -int yywrap () { return 1; } -#endif -%} - -%a 4000 -%o 5000 - -CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~] -CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~] -FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~] -SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9] -FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~] -WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*] -WHITE [ \t\n\r]+ - -NOCFILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~] - -V_TAG [.$_a-zA-Z][._a-zA-Z0-9]* -V_IDENTIFIER [*?.$_a-zA-Z][*?_a-zA-Z0-9]* - -%s SCRIPT -%s EXPRESSION -%s BOTH -%s DEFSYMEXP -%s MRI -%s VERS_START -%s VERS_SCRIPT -%s VERS_NODE -%% - - if (parser_input != input_selected) - { - /* The first token of the input determines the initial parser state. */ - input_type t = parser_input; - parser_input = input_selected; - switch (t) - { - case input_script: return INPUT_SCRIPT; break; - case input_mri_script: return INPUT_MRI_SCRIPT; break; - case input_version_script: return INPUT_VERSION_SCRIPT; break; - case input_defsym: return INPUT_DEFSYM; break; - default: abort (); - } - } - -<BOTH,SCRIPT,EXPRESSION>"/*" { comment(); } - - -<DEFSYMEXP>"-" { RTOKEN('-');} -<DEFSYMEXP>"+" { RTOKEN('+');} -<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = buystring(yytext); return NAME; } -<DEFSYMEXP>"=" { RTOKEN('='); } - -<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ { - yylval.integer = bfd_scan_vma (yytext+1, 0,16); - return INT; - } - -<MRI,EXPRESSION>([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) { - int ibase ; - switch (yytext[yyleng-1]) { - case 'X': - case 'x': - case 'H': - case 'h': - ibase = 16; - break; - case 'O': - case 'o': - ibase = 8; - break; - case 'B': - case 'b': - ibase = 2; - break; - default: - ibase = 10; - } - yylval.integer = bfd_scan_vma (yytext, 0, - ibase); - return INT; - } -<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>((("$"|"0x")([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? { - char *s = yytext; - - if (*s == '$') - ++s; - yylval.integer = bfd_scan_vma (s, 0, 0); - if (yytext[yyleng-1] == 'M' - || yytext[yyleng-1] == 'm') - yylval.integer *= 1024 * 1024; - if (yytext[yyleng-1] == 'K' - || yytext[yyleng-1]=='k') - yylval.integer *= 1024; - return INT; - } -<BOTH,SCRIPT,EXPRESSION,MRI>"]" { RTOKEN(']');} -<BOTH,SCRIPT,EXPRESSION,MRI>"[" { RTOKEN('[');} -<BOTH,SCRIPT,EXPRESSION,MRI>"<<=" { RTOKEN(LSHIFTEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>">>=" { RTOKEN(RSHIFTEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"||" { RTOKEN(OROR);} -<BOTH,SCRIPT,EXPRESSION,MRI>"==" { RTOKEN(EQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"!=" { RTOKEN(NE);} -<BOTH,SCRIPT,EXPRESSION,MRI>">=" { RTOKEN(GE);} -<BOTH,SCRIPT,EXPRESSION,MRI>"<=" { RTOKEN(LE);} -<BOTH,SCRIPT,EXPRESSION,MRI>"<<" { RTOKEN(LSHIFT);} -<BOTH,SCRIPT,EXPRESSION,MRI>">>" { RTOKEN(RSHIFT);} -<BOTH,SCRIPT,EXPRESSION,MRI>"+=" { RTOKEN(PLUSEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"-=" { RTOKEN(MINUSEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"*=" { RTOKEN(MULTEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"/=" { RTOKEN(DIVEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"&=" { RTOKEN(ANDEQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"|=" { RTOKEN(OREQ);} -<BOTH,SCRIPT,EXPRESSION,MRI>"&&" { RTOKEN(ANDAND);} -<BOTH,SCRIPT,EXPRESSION,MRI>">" { RTOKEN('>');} -<BOTH,SCRIPT,EXPRESSION,MRI>"," { RTOKEN(',');} -<BOTH,SCRIPT,EXPRESSION,MRI>"&" { RTOKEN('&');} -<BOTH,SCRIPT,EXPRESSION,MRI>"|" { RTOKEN('|');} -<BOTH,SCRIPT,EXPRESSION,MRI>"~" { RTOKEN('~');} -<BOTH,SCRIPT,EXPRESSION,MRI>"!" { RTOKEN('!');} -<BOTH,SCRIPT,EXPRESSION,MRI>"?" { RTOKEN('?');} -<BOTH,SCRIPT,EXPRESSION,MRI>"*" { RTOKEN('*');} -<BOTH,SCRIPT,EXPRESSION,MRI>"+" { RTOKEN('+');} -<BOTH,SCRIPT,EXPRESSION,MRI>"-" { RTOKEN('-');} -<BOTH,SCRIPT,EXPRESSION,MRI>"/" { RTOKEN('/');} -<BOTH,SCRIPT,EXPRESSION,MRI>"%" { RTOKEN('%');} -<BOTH,SCRIPT,EXPRESSION,MRI>"<" { RTOKEN('<');} -<BOTH,SCRIPT,EXPRESSION,MRI>"=" { RTOKEN('=');} -<BOTH,SCRIPT,EXPRESSION,MRI>"}" { RTOKEN('}') ; } -<BOTH,SCRIPT,EXPRESSION,MRI>"{" { RTOKEN('{'); } -<BOTH,SCRIPT,EXPRESSION,MRI>")" { RTOKEN(')');} -<BOTH,SCRIPT,EXPRESSION,MRI>"(" { RTOKEN('(');} -<BOTH,SCRIPT,EXPRESSION,MRI>":" { RTOKEN(':'); } -<BOTH,SCRIPT,EXPRESSION,MRI>";" { RTOKEN(';');} -<BOTH,SCRIPT>"MEMORY" { RTOKEN(MEMORY);} -<BOTH,SCRIPT>"ORIGIN" { RTOKEN(ORIGIN);} -<BOTH,SCRIPT>"VERSION" { RTOKEN(VERSIONK);} -<EXPRESSION,BOTH,SCRIPT>"BLOCK" { RTOKEN(BLOCK);} -<EXPRESSION,BOTH,SCRIPT>"BIND" { RTOKEN(BIND);} -<BOTH,SCRIPT>"LENGTH" { RTOKEN(LENGTH);} -<EXPRESSION,BOTH,SCRIPT>"ALIGN" { RTOKEN(ALIGN_K);} -<EXPRESSION,BOTH,SCRIPT>"ADDR" { RTOKEN(ADDR);} -<EXPRESSION,BOTH,SCRIPT>"LOADADDR" { RTOKEN(LOADADDR);} -<EXPRESSION,BOTH>"MAX" { RTOKEN(MAX); } -<EXPRESSION,BOTH>"MIN" { RTOKEN(MIN); } -<BOTH,SCRIPT>"ENTRY" { RTOKEN(ENTRY);} -<EXPRESSION,BOTH,SCRIPT>"NEXT" { RTOKEN(NEXT);} -<EXPRESSION,BOTH,SCRIPT>"sizeof_headers" { RTOKEN(SIZEOF_HEADERS);} -<EXPRESSION,BOTH,SCRIPT>"SIZEOF_HEADERS" { RTOKEN(SIZEOF_HEADERS);} -<BOTH,SCRIPT>"MAP" { RTOKEN(MAP);} -<EXPRESSION,BOTH,SCRIPT>"SIZEOF" { RTOKEN(SIZEOF);} -<BOTH,SCRIPT>"TARGET" { RTOKEN(TARGET_K);} -<BOTH,SCRIPT>"SEARCH_DIR" { RTOKEN(SEARCH_DIR);} -<BOTH,SCRIPT>"OUTPUT" { RTOKEN(OUTPUT);} -<BOTH,SCRIPT>"INPUT" { RTOKEN(INPUT);} -<EXPRESSION,BOTH,SCRIPT>"GROUP" { RTOKEN(GROUP);} -<EXPRESSION,BOTH,SCRIPT>"DEFINED" { RTOKEN(DEFINED);} -<BOTH,SCRIPT>"CREATE_OBJECT_SYMBOLS" { RTOKEN(CREATE_OBJECT_SYMBOLS);} -<BOTH,SCRIPT>"CONSTRUCTORS" { RTOKEN( CONSTRUCTORS);} -<BOTH,SCRIPT>"FORCE_COMMON_ALLOCATION" { RTOKEN(FORCE_COMMON_ALLOCATION);} -<BOTH,SCRIPT>"SECTIONS" { RTOKEN(SECTIONS);} -<BOTH,SCRIPT>"FILL" { RTOKEN(FILL);} -<BOTH,SCRIPT>"STARTUP" { RTOKEN(STARTUP);} -<BOTH,SCRIPT>"OUTPUT_FORMAT" { RTOKEN(OUTPUT_FORMAT);} -<BOTH,SCRIPT>"OUTPUT_ARCH" { RTOKEN( OUTPUT_ARCH);} -<BOTH,SCRIPT>"HLL" { RTOKEN(HLL);} -<BOTH,SCRIPT>"SYSLIB" { RTOKEN(SYSLIB);} -<BOTH,SCRIPT>"FLOAT" { RTOKEN(FLOAT);} -<BOTH,SCRIPT>"QUAD" { RTOKEN( QUAD);} -<BOTH,SCRIPT>"SQUAD" { RTOKEN( SQUAD);} -<BOTH,SCRIPT>"LONG" { RTOKEN( LONG);} -<BOTH,SCRIPT>"SHORT" { RTOKEN( SHORT);} -<BOTH,SCRIPT>"BYTE" { RTOKEN( BYTE);} -<BOTH,SCRIPT>"NOFLOAT" { RTOKEN(NOFLOAT);} -<EXPRESSION,BOTH,SCRIPT>"NOCROSSREFS" { RTOKEN(NOCROSSREFS);} -<BOTH,SCRIPT>"OVERLAY" { RTOKEN(OVERLAY); } -<EXPRESSION,BOTH,SCRIPT>"NOLOAD" { RTOKEN(NOLOAD);} -<EXPRESSION,BOTH,SCRIPT>"DSECT" { RTOKEN(DSECT);} -<EXPRESSION,BOTH,SCRIPT>"COPY" { RTOKEN(COPY);} -<EXPRESSION,BOTH,SCRIPT>"INFO" { RTOKEN(INFO);} -<EXPRESSION,BOTH,SCRIPT>"OVERLAY" { RTOKEN(OVERLAY);} -<BOTH,SCRIPT>"o" { RTOKEN(ORIGIN);} -<BOTH,SCRIPT>"org" { RTOKEN(ORIGIN);} -<BOTH,SCRIPT>"l" { RTOKEN( LENGTH);} -<BOTH,SCRIPT>"len" { RTOKEN( LENGTH);} -<BOTH,SCRIPT>"INCLUDE" { RTOKEN(INCLUDE);} -<BOTH,SCRIPT>"PHDRS" { RTOKEN (PHDRS); } -<EXPRESSION,BOTH,SCRIPT>"AT" { RTOKEN(AT);} -<EXPRESSION,BOTH,SCRIPT>"PROVIDE" { RTOKEN(PROVIDE); } -<MRI>"#".*\n? { ++ lineno; } -<MRI>"\n" { ++ lineno; RTOKEN(NEWLINE); } -<MRI>"*".* { /* Mri comment line */ } -<MRI>";".* { /* Mri comment line */ } -<MRI>"END" { RTOKEN(ENDWORD); } -<MRI>"ALIGNMOD" { RTOKEN(ALIGNMOD);} -<MRI>"ALIGN" { RTOKEN(ALIGN_K);} -<MRI>"CHIP" { RTOKEN(CHIP); } -<MRI>"BASE" { RTOKEN(BASE); } -<MRI>"ALIAS" { RTOKEN(ALIAS); } -<MRI>"TRUNCATE" { RTOKEN(TRUNCATE); } -<MRI>"LOAD" { RTOKEN(LOAD); } -<MRI>"PUBLIC" { RTOKEN(PUBLIC); } -<MRI>"ORDER" { RTOKEN(ORDER); } -<MRI>"NAME" { RTOKEN(NAMEWORD); } -<MRI>"FORMAT" { RTOKEN(FORMAT); } -<MRI>"CASE" { RTOKEN(CASE); } -<MRI>"EXTERN" { RTOKEN(EXTERN); } -<MRI>"START" { RTOKEN(START); } -<MRI>"LIST".* { RTOKEN(LIST); /* LIST and ignore to end of line */ } -<MRI>"SECT" { RTOKEN(SECT); } -<EXPRESSION,BOTH,SCRIPT,MRI>"ABSOLUTE" { RTOKEN(ABSOLUTE); } -<MRI>"end" { RTOKEN(ENDWORD); } -<MRI>"alignmod" { RTOKEN(ALIGNMOD);} -<MRI>"align" { RTOKEN(ALIGN_K);} -<MRI>"chip" { RTOKEN(CHIP); } -<MRI>"base" { RTOKEN(BASE); } -<MRI>"alias" { RTOKEN(ALIAS); } -<MRI>"truncate" { RTOKEN(TRUNCATE); } -<MRI>"load" { RTOKEN(LOAD); } -<MRI>"public" { RTOKEN(PUBLIC); } -<MRI>"order" { RTOKEN(ORDER); } -<MRI>"name" { RTOKEN(NAMEWORD); } -<MRI>"format" { RTOKEN(FORMAT); } -<MRI>"case" { RTOKEN(CASE); } -<MRI>"extern" { RTOKEN(EXTERN); } -<MRI>"start" { RTOKEN(START); } -<MRI>"list".* { RTOKEN(LIST); /* LIST and ignore to end of line */ } -<MRI>"sect" { RTOKEN(SECT); } -<EXPRESSION,BOTH,SCRIPT,MRI>"absolute" { RTOKEN(ABSOLUTE); } - -<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}* { -/* Filename without commas, needed to parse mri stuff */ - yylval.name = buystring(yytext); - return NAME; - } - - -<BOTH,EXPRESSION>{FILENAMECHAR1}{FILENAMECHAR}* { - yylval.name = buystring(yytext); - return NAME; - } -<BOTH,EXPRESSION>"-l"{FILENAMECHAR}+ { - yylval.name = buystring (yytext + 2); - return LNAME; - } -<SCRIPT>{WILDCHAR}* { - /* Annoyingly, this pattern can match comments, and we have - longest match issues to consider. So if the first two - characters are a comment opening, put the input back and - try again. */ - if (yytext[0] == '/' && yytext[1] == '*') - { - yyless(2); - comment (); - } - else - { - yylval.name = buystring(yytext); - return NAME; - } - } - -<EXPRESSION,BOTH,SCRIPT>"\""[^\"]*"\"" { - /* No matter the state, quotes - give what's inside */ - yylval.name = buystring(yytext+1); - yylval.name[yyleng-2] = 0; - return NAME; - } -<BOTH,SCRIPT,EXPRESSION>"\n" { lineno++;} -<MRI,BOTH,SCRIPT,EXPRESSION>[ \t\r]+ { } - -<VERS_NODE,VERS_SCRIPT>[:,;] { return *yytext; } - -<VERS_NODE>global { RTOKEN(GLOBAL); } - -<VERS_NODE>local { RTOKEN(LOCAL); } - -<VERS_NODE>{V_IDENTIFIER} { yylval.name = buystring (yytext); - return VERS_IDENTIFIER; } - -<VERS_SCRIPT>{V_TAG} { yylval.name = buystring (yytext); - return VERS_TAG; } - -<VERS_START>"{" { BEGIN(VERS_SCRIPT); return *yytext; } - -<VERS_SCRIPT>"{" { BEGIN(VERS_NODE); return *yytext; } -<VERS_SCRIPT,VERS_NODE>"}" { BEGIN(VERS_SCRIPT); return *yytext; } - -<VERS_START,VERS_NODE,VERS_SCRIPT>[\n] { lineno++; } - -<VERS_START,VERS_NODE,VERS_SCRIPT>#.* { /* Eat up comments */ } - -<VERS_START,VERS_NODE,VERS_SCRIPT>[ \t\r]+ { /* Eat up whitespace */ } - -<<EOF>> { - include_stack_ptr--; - - if (include_stack_ptr == 0) - { - yyterminate(); - } - else - { - yy_switch_to_buffer(include_stack[include_stack_ptr]); - - } - BEGIN(SCRIPT); - ldfile_input_filename = file_name_stack[include_stack_ptr - 1]; - lineno = lineno_stack[include_stack_ptr - 1]; - - return END; -} - -<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. lex_warn_invalid(" in script", yytext); -<EXPRESSION,DEFSYMEXP,BOTH>. lex_warn_invalid(" in expression", yytext); - -%% - - -/* Switch flex to reading script file NAME, open on FILE, - saving the current input info on the include stack. */ - -void -lex_push_file (file, name) - FILE *file; - const char *name; -{ - if (include_stack_ptr >= MAX_INCLUDE_DEPTH) - { - einfo("%F:includes nested too deeply\n"); - } - file_name_stack[include_stack_ptr] = name; - lineno_stack[include_stack_ptr] = 1; - include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; - - include_stack_ptr++; - yyin = file; - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); - BEGIN (SCRIPT); -} - -/* Return a newly created flex input buffer containing STRING, - which is SIZE bytes long. */ - -static YY_BUFFER_STATE -yy_create_string_buffer (string, size) - CONST char *string; - size_t size; -{ - YY_BUFFER_STATE b; - - /* Calls to m-alloc get turned by sed into xm-alloc. */ - b = (YY_BUFFER_STATE) malloc (sizeof (struct yy_buffer_state)); - b->yy_input_file = 0; - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) malloc ((unsigned) (b->yy_buf_size + 3)); - - b->yy_ch_buf[0] = '\n'; - strcpy (b->yy_ch_buf+1, string); - b->yy_ch_buf[size+1] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[size+2] = YY_END_OF_BUFFER_CHAR; - b->yy_n_chars = size+1; - b->yy_buf_pos = &b->yy_ch_buf[1]; - - /* flex 2.4.7 changed the interface. FIXME: We should not be using - a flex internal interface in the first place! */ -#ifdef YY_BUFFER_NEW - b->yy_buffer_status = YY_BUFFER_NEW; -#else - b->yy_eof_status = EOF_NOT_SEEN; -#endif - - return b; -} - -/* Switch flex to reading from STRING, saving the current input info - on the include stack. */ - -void -lex_redirect (string) - CONST char *string; -{ - YY_BUFFER_STATE tmp; - - yy_init = 0; - if (include_stack_ptr >= MAX_INCLUDE_DEPTH) - { - einfo("%F: macros nested too deeply\n"); - } - file_name_stack[include_stack_ptr] = "redirect"; - lineno_stack[include_stack_ptr] = 0; - include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; - include_stack_ptr++; - tmp = yy_create_string_buffer (string, strlen (string)); - yy_switch_to_buffer (tmp); - BEGIN (SCRIPT); -} - -/* Functions to switch to a different flex start condition, - saving the current start condition on `state_stack'. */ - -static int state_stack[MAX_INCLUDE_DEPTH * 2]; -static int *state_stack_p = state_stack; - -void -ldlex_script () -{ - *(state_stack_p)++ = yy_start; - BEGIN (SCRIPT); -} - -void -ldlex_mri_script () -{ - *(state_stack_p)++ = yy_start; - BEGIN (MRI); -} - -void -ldlex_version_script () -{ - *(state_stack_p)++ = yy_start; - BEGIN (VERS_START); -} - -void -ldlex_version_file () -{ - *(state_stack_p)++ = yy_start; - BEGIN (VERS_SCRIPT); -} - -void -ldlex_defsym () -{ - *(state_stack_p)++ = yy_start; - BEGIN (DEFSYMEXP); -} - -void -ldlex_expression () -{ - *(state_stack_p)++ = yy_start; - BEGIN (EXPRESSION); -} - -void -ldlex_both () -{ - *(state_stack_p)++ = yy_start; - BEGIN (BOTH); -} - -void -ldlex_popstate () -{ - yy_start = *(--state_stack_p); -} - - -/* Place up to MAX_SIZE characters in BUF and return in *RESULT - either the number of characters read, or 0 to indicate EOF. */ - -static void -yy_input (buf, result, max_size) - char *buf; - int *result; - int max_size; -{ - *result = 0; - if (yy_current_buffer->yy_input_file) - { - if (yyin) - { - *result = read (fileno (yyin), (char *) buf, max_size); - if (*result < 0) - einfo ("%F%P: read in flex scanner failed\n"); - } - } -} - -/* Eat the rest of a C-style comment. */ - -static void -comment () -{ - int c; - - while (1) - { - c = input(); - while (c != '*' && c != EOF) - { - if (c == '\n') - lineno++; - c = input(); - } - - if (c == '*') - { - c = input(); - while (c == '*') - c = input(); - if (c == '/') - break; /* found the end */ - } - - if (c == '\n') - lineno++; - - if (c == EOF) - { - einfo( "%F%P: EOF in comment\n"); - break; - } - } -} - -/* Warn the user about a garbage character WHAT in the input - in context WHERE. */ - -static void -lex_warn_invalid (where, what) - char *where, *what; -{ - char buf[5]; - - /* If we have found an input file whose format we do not recognize, - and we are therefore treating it as a linker script, and we find - an invalid character, then most likely this is a real object file - of some different format. Treat it as such. */ - if (ldfile_assumed_script) - { - bfd_set_error (bfd_error_file_not_recognized); - einfo ("%F%s: file not recognized: %E\n", ldfile_input_filename); - } - - if (! isprint ((unsigned char) *what)) - { - sprintf (buf, "\\%03o", (unsigned int) *what); - what = buf; - } - - einfo ("%P:%S: ignoring invalid character `%s'%s\n", what, where); -} diff --git a/contrib/binutils/ld/ldmain.c b/contrib/binutils/ld/ldmain.c deleted file mode 100644 index 97fed9d71eb7..000000000000 --- a/contrib/binutils/ld/ldmain.c +++ /dev/null @@ -1,1272 +0,0 @@ -/* Main program of GNU linker. - Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - Written by Steve Chamberlain steve@cygnus.com - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" -#include <stdio.h> -#include <ctype.h> -#include "libiberty.h" -#include "progress.h" -#include "bfdlink.h" - -#include "ld.h" -#include "ldmain.h" -#include "ldmisc.h" -#include "ldwrite.h" -#include "ldgram.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldemul.h" -#include "ldlex.h" -#include "ldfile.h" -#include "ldctor.h" - -/* Somewhere above, sys/stat.h got included . . . . */ -#if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -#endif - -#include <string.h> - -#ifdef HAVE_SBRK -#ifdef NEED_DECLARATION_SBRK -extern PTR sbrk (); -#endif -#endif - -static char *get_emulation PARAMS ((int, char **)); -static void set_scripts_dir PARAMS ((void)); - -/* EXPORTS */ - -char *default_target; -const char *output_filename = "a.out"; - -/* Name this program was invoked by. */ -char *program_name; - -/* The file that we're creating */ -bfd *output_bfd = 0; - -/* Set by -G argument, for MIPS ECOFF target. */ -int g_switch_value = 8; - -/* Nonzero means print names of input files as processed. */ -boolean trace_files; - -/* Nonzero means same, but note open failures, too. */ -boolean trace_file_tries; - -/* Nonzero means version number was printed, so exit successfully - instead of complaining if no input files are given. */ -boolean version_printed; - -/* Nonzero means link in every member of an archive. */ -boolean whole_archive; - -args_type command_line; - -ld_config_type config; - -static void remove_output PARAMS ((void)); -static boolean check_for_scripts_dir PARAMS ((char *dir)); -static boolean add_archive_element PARAMS ((struct bfd_link_info *, bfd *, - const char *)); -static boolean multiple_definition PARAMS ((struct bfd_link_info *, - const char *, - bfd *, asection *, bfd_vma, - bfd *, asection *, bfd_vma)); -static boolean multiple_common PARAMS ((struct bfd_link_info *, - const char *, bfd *, - enum bfd_link_hash_type, bfd_vma, - bfd *, enum bfd_link_hash_type, - bfd_vma)); -static boolean add_to_set PARAMS ((struct bfd_link_info *, - struct bfd_link_hash_entry *, - bfd_reloc_code_real_type, - bfd *, asection *, bfd_vma)); -static boolean constructor_callback PARAMS ((struct bfd_link_info *, - boolean constructor, - const char *name, - bfd *, asection *, bfd_vma)); -static boolean warning_callback PARAMS ((struct bfd_link_info *, - const char *, const char *, bfd *, - asection *, bfd_vma)); -static void warning_find_reloc PARAMS ((bfd *, asection *, PTR)); -static boolean undefined_symbol PARAMS ((struct bfd_link_info *, - const char *, bfd *, - asection *, bfd_vma)); -static boolean reloc_overflow PARAMS ((struct bfd_link_info *, const char *, - const char *, bfd_vma, - bfd *, asection *, bfd_vma)); -static boolean reloc_dangerous PARAMS ((struct bfd_link_info *, const char *, - bfd *, asection *, bfd_vma)); -static boolean unattached_reloc PARAMS ((struct bfd_link_info *, - const char *, bfd *, asection *, - bfd_vma)); -static boolean notice PARAMS ((struct bfd_link_info *, const char *, - bfd *, asection *, bfd_vma)); - -static struct bfd_link_callbacks link_callbacks = -{ - add_archive_element, - multiple_definition, - multiple_common, - add_to_set, - constructor_callback, - warning_callback, - undefined_symbol, - reloc_overflow, - reloc_dangerous, - unattached_reloc, - notice -}; - -struct bfd_link_info link_info; - -static void -remove_output () -{ - if (output_filename) - { - if (output_bfd && output_bfd->iostream) - fclose((FILE *)(output_bfd->iostream)); - if (delete_output_file_on_failure) - unlink (output_filename); - } -} - -int -main (argc, argv) - int argc; - char **argv; -{ - char *emulation; - long start_time = get_run_time (); - - program_name = argv[0]; - xmalloc_set_program_name (program_name); - - START_PROGRESS (program_name, 0); - - bfd_init (); - - bfd_set_error_program_name (program_name); - - xatexit (remove_output); - - /* Set the default BFD target based on the configured target. Doing - this permits the linker to be configured for a particular target, - and linked against a shared BFD library which was configured for - a different target. The macro TARGET is defined by Makefile. */ - if (! bfd_set_default_target (TARGET)) - { - einfo ("%X%P: can't set BFD default target to `%s': %E\n", TARGET); - xexit (1); - } - - /* Initialize the data about options. */ - trace_files = trace_file_tries = version_printed = false; - whole_archive = false; - config.build_constructors = true; - config.dynamic_link = false; - command_line.force_common_definition = false; - command_line.interpreter = NULL; - command_line.rpath = NULL; - command_line.warn_mismatch = true; - - link_info.callbacks = &link_callbacks; - link_info.relocateable = false; - link_info.shared = false; - link_info.symbolic = false; - link_info.static_link = false; - link_info.traditional_format = false; - link_info.strip = strip_none; - link_info.discard = discard_none; - link_info.keep_memory = true; - link_info.input_bfds = NULL; - link_info.create_object_symbols_section = NULL; - link_info.hash = NULL; - link_info.keep_hash = NULL; - link_info.notice_all = false; - link_info.notice_hash = NULL; - link_info.wrap_hash = NULL; - - ldfile_add_arch (""); - - config.make_executable = true; - force_make_executable = false; - config.magic_demand_paged = true; - config.text_read_only = true; - config.make_executable = true; - - emulation = get_emulation (argc, argv); - ldemul_choose_mode (emulation); - default_target = ldemul_choose_target (); - lang_init (); - ldemul_before_parse (); - lang_has_input_file = false; - parse_args (argc, argv); - - ldemul_set_symbols (); - - if (link_info.relocateable) - { - if (command_line.relax) - einfo ("%P%F: -relax and -r may not be used together\n"); - if (link_info.shared) - einfo ("%P%F: -r and -shared may not be used together\n"); - } - - /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I - don't see how else this can be handled, since in this case we - must preserve all externally visible symbols. */ - if (link_info.relocateable && link_info.strip == strip_all) - { - link_info.strip = strip_debugger; - if (link_info.discard == discard_none) - link_info.discard = discard_all; - } - - /* This essentially adds another -L directory so this must be done after - the -L's in argv have been processed. */ - set_scripts_dir (); - - if (had_script == false) - { - /* Read the emulation's appropriate default script. */ - int isfile; - char *s = ldemul_get_script (&isfile); - - if (isfile) - ldfile_open_command_file (s); - else - { - if (trace_file_tries) - { - info_msg ("using internal linker script:\n"); - info_msg ("==================================================\n"); - info_msg (s); - info_msg ("\n==================================================\n"); - } - lex_string = s; - lex_redirect (s); - } - parser_input = input_script; - yyparse (); - lex_string = NULL; - } - - lang_final (); - - if (lang_has_input_file == false) - { - if (version_printed) - xexit (0); - einfo ("%P%F: no input files\n"); - } - - if (trace_files) - { - info_msg ("%P: mode %s\n", emulation); - } - - ldemul_after_parse (); - - - if (config.map_filename) - { - if (strcmp (config.map_filename, "-") == 0) - { - config.map_file = stdout; - } - else - { - config.map_file = fopen (config.map_filename, FOPEN_WT); - if (config.map_file == (FILE *) NULL) - { - bfd_set_error (bfd_error_system_call); - einfo ("%P%F: cannot open map file %s: %E\n", - config.map_filename); - } - } - } - - - lang_process (); - - /* Print error messages for any missing symbols, for any warning - symbols, and possibly multiple definitions */ - - - if (config.text_read_only) - { - /* Look for a text section and mark the readonly attribute in it */ - asection *found = bfd_get_section_by_name (output_bfd, ".text"); - - if (found != (asection *) NULL) - { - found->flags |= SEC_READONLY; - } - } - - if (link_info.relocateable) - output_bfd->flags &= ~EXEC_P; - else - output_bfd->flags |= EXEC_P; - - ldwrite (); - - if (config.map_file != NULL) - lang_map (); - if (command_line.cref) - output_cref (config.map_file != NULL ? config.map_file : stdout); - if (nocrossref_list != NULL) - check_nocrossrefs (); - - /* Even if we're producing relocateable output, some non-fatal errors should - be reported in the exit status. (What non-fatal errors, if any, do we - want to ignore for relocateable output?) */ - - if (config.make_executable == false && force_make_executable == false) - { - if (trace_files == true) - { - einfo ("%P: link errors found, deleting executable `%s'\n", - output_filename); - } - - /* The file will be removed by remove_output. */ - - xexit (1); - } - else - { - if (! bfd_close (output_bfd)) - einfo ("%F%B: final close failed: %E\n", output_bfd); - - /* If the --force-exe-suffix is enabled, and we're making an - executable file and it doesn't end in .exe, copy it to one which does. */ - - if (! link_info.relocateable && command_line.force_exe_suffix) - { - int len = strlen (output_filename); - if (len < 4 - || (strcasecmp (output_filename + len - 4, ".exe") != 0 - && strcasecmp (output_filename + len - 4, ".dll") != 0)) - { - FILE *src; - FILE *dst; - const int bsize = 4096; - char *buf = xmalloc (bsize); - int l; - char *dst_name = xmalloc (len + 5); - strcpy (dst_name, output_filename); - strcat (dst_name, ".exe"); - src = fopen (output_filename, FOPEN_RB); - dst = fopen (dst_name, FOPEN_WB); - - if (!src) - einfo ("%X%P: unable to open for source of copy `%s'\n", output_filename); - if (!dst) - einfo ("%X%P: unable to open for destination of copy `%s'\n", dst_name); - while ((l = fread (buf, 1, bsize, src)) > 0) - { - int done = fwrite (buf, 1, l, dst); - if (done != l) - { - einfo ("%P: Error writing file `%s'\n", dst_name); - } - } - fclose (src); - if (fclose (dst) == EOF) - { - einfo ("%P: Error closing file `%s'\n", dst_name); - } - free (dst_name); - free (buf); - } - } - } - - END_PROGRESS (program_name); - - if (config.stats) - { - extern char **environ; -#ifdef HAVE_SBRK - char *lim = (char *) sbrk (0); -#endif - long run_time = get_run_time () - start_time; - - fprintf (stderr, "%s: total time in link: %ld.%06ld\n", - program_name, run_time / 1000000, run_time % 1000000); -#ifdef HAVE_SBRK - fprintf (stderr, "%s: data size %ld\n", program_name, - (long) (lim - (char *) &environ)); -#endif - } - - /* Prevent remove_output from doing anything, after a successful link. */ - output_filename = NULL; - - xexit (0); - return 0; -} - -/* We need to find any explicitly given emulation in order to initialize the - state that's needed by the lex&yacc argument parser (parse_args). */ - -static char * -get_emulation (argc, argv) - int argc; - char **argv; -{ - char *emulation; - int i; - - emulation = getenv (EMULATION_ENVIRON); - if (emulation == NULL) - emulation = DEFAULT_EMULATION; - - for (i = 1; i < argc; i++) - { - if (!strncmp (argv[i], "-m", 2)) - { - if (argv[i][2] == '\0') - { - /* -m EMUL */ - if (i < argc - 1) - { - emulation = argv[i + 1]; - i++; - } - else - { - einfo("%P%F: missing argument to -m\n"); - } - } - else if (strcmp (argv[i], "-mips1") == 0 - || strcmp (argv[i], "-mips2") == 0 - || strcmp (argv[i], "-mips3") == 0 - || strcmp (argv[i], "-mips4") == 0) - { - /* FIXME: The arguments -mips1, -mips2 and -mips3 are - passed to the linker by some MIPS compilers. They - generally tell the linker to use a slightly different - library path. Perhaps someday these should be - implemented as emulations; until then, we just ignore - the arguments and hope that nobody ever creates - emulations named ips1, ips2 or ips3. */ - } - else if (strcmp (argv[i], "-m486") == 0) - { - /* FIXME: The argument -m486 is passed to the linker on - some Linux systems. Hope that nobody creates an - emulation named 486. */ - } - else - { - /* -mEMUL */ - emulation = &argv[i][2]; - } - } - } - - return emulation; -} - -/* If directory DIR contains an "ldscripts" subdirectory, - add DIR to the library search path and return true, - else return false. */ - -static boolean -check_for_scripts_dir (dir) - char *dir; -{ - size_t dirlen; - char *buf; - struct stat s; - boolean res; - - dirlen = strlen (dir); - /* sizeof counts the terminating NUL. */ - buf = (char *) xmalloc (dirlen + sizeof("/ldscripts")); - sprintf (buf, "%s/ldscripts", dir); - - res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode); - free (buf); - if (res) - ldfile_add_library_path (dir, false); - return res; -} - -/* Set the default directory for finding script files. - Libraries will be searched for here too, but that's ok. - We look for the "ldscripts" directory in: - - SCRIPTDIR (passed from Makefile) - the dir where this program is (for using it from the build tree) - the dir where this program is/../lib (for installing the tool suite elsewhere) */ - -static void -set_scripts_dir () -{ - char *end, *dir; - size_t dirlen; - - if (check_for_scripts_dir (SCRIPTDIR)) - return; /* We've been installed normally. */ - - /* Look for "ldscripts" in the dir where our binary is. */ - end = strrchr (program_name, '/'); - - if (end == NULL) - { - /* Don't look for ldscripts in the current directory. There is - too much potential for confusion. */ - return; - } - - dirlen = end - program_name; - /* Make a copy of program_name in dir. - Leave room for later "/../lib". */ - dir = (char *) xmalloc (dirlen + 8); - strncpy (dir, program_name, dirlen); - dir[dirlen] = '\0'; - - if (check_for_scripts_dir (dir)) - return; /* Don't free dir. */ - - /* Look for "ldscripts" in <the dir where our binary is>/../lib. */ - strcpy (dir + dirlen, "/../lib"); - if (check_for_scripts_dir (dir)) - return; - - free (dir); /* Well, we tried. */ -} - -void -add_ysym (name) - const char *name; -{ - if (link_info.notice_hash == (struct bfd_hash_table *) NULL) - { - link_info.notice_hash = ((struct bfd_hash_table *) - xmalloc (sizeof (struct bfd_hash_table))); - if (! bfd_hash_table_init_n (link_info.notice_hash, - bfd_hash_newfunc, - 61)) - einfo ("%P%F: bfd_hash_table_init failed: %E\n"); - } - - if (bfd_hash_lookup (link_info.notice_hash, name, true, true) - == (struct bfd_hash_entry *) NULL) - einfo ("%P%F: bfd_hash_lookup failed: %E\n"); -} - -/* Record a symbol to be wrapped, from the --wrap option. */ - -void -add_wrap (name) - const char *name; -{ - if (link_info.wrap_hash == NULL) - { - link_info.wrap_hash = ((struct bfd_hash_table *) - xmalloc (sizeof (struct bfd_hash_table))); - if (! bfd_hash_table_init_n (link_info.wrap_hash, - bfd_hash_newfunc, - 61)) - einfo ("%P%F: bfd_hash_table_init failed: %E\n"); - } - if (bfd_hash_lookup (link_info.wrap_hash, name, true, true) == NULL) - einfo ("%P%F: bfd_hash_lookup failed: %E\n"); -} - -/* Handle the -retain-symbols-file option. */ - -void -add_keepsyms_file (filename) - const char *filename; -{ - FILE *file; - char *buf; - size_t bufsize; - int c; - - if (link_info.strip == strip_some) - einfo ("%X%P: error: duplicate retain-symbols-file\n"); - - file = fopen (filename, "r"); - if (file == (FILE *) NULL) - { - bfd_set_error (bfd_error_system_call); - einfo ("%X%P: %s: %E\n", filename); - return; - } - - link_info.keep_hash = ((struct bfd_hash_table *) - xmalloc (sizeof (struct bfd_hash_table))); - if (! bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc)) - einfo ("%P%F: bfd_hash_table_init failed: %E\n"); - - bufsize = 100; - buf = (char *) xmalloc (bufsize); - - c = getc (file); - while (c != EOF) - { - while (isspace (c)) - c = getc (file); - - if (c != EOF) - { - size_t len = 0; - - while (! isspace (c) && c != EOF) - { - buf[len] = c; - ++len; - if (len >= bufsize) - { - bufsize *= 2; - buf = xrealloc (buf, bufsize); - } - c = getc (file); - } - - buf[len] = '\0'; - - if (bfd_hash_lookup (link_info.keep_hash, buf, true, true) - == (struct bfd_hash_entry *) NULL) - einfo ("%P%F: bfd_hash_lookup for insertion failed: %E\n"); - } - } - - if (link_info.strip != strip_none) - einfo ("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"); - - link_info.strip = strip_some; -} - -/* Callbacks from the BFD linker routines. */ - -/* This is called when BFD has decided to include an archive member in - a link. */ - -/*ARGSUSED*/ -static boolean -add_archive_element (info, abfd, name) - struct bfd_link_info *info; - bfd *abfd; - const char *name; -{ - lang_input_statement_type *input; - - input = ((lang_input_statement_type *) - xmalloc (sizeof (lang_input_statement_type))); - input->filename = abfd->filename; - input->local_sym_name = abfd->filename; - input->the_bfd = abfd; - input->asymbols = NULL; - input->next = NULL; - input->just_syms_flag = false; - input->loaded = false; - input->search_dirs_flag = false; - - /* FIXME: The following fields are not set: header.next, - header.type, closed, passive_position, symbol_count, - next_real_file, is_archive, target, real. This bit of code is - from the old decode_library_subfile function. I don't know - whether any of those fields matters. */ - - ldlang_add_file (input); - - if (config.map_file != (FILE *) NULL) - { - static boolean header_printed; - struct bfd_link_hash_entry *h; - bfd *from; - int len; - - h = bfd_link_hash_lookup (link_info.hash, name, false, false, true); - - if (h == NULL) - from = NULL; - else - { - switch (h->type) - { - default: - from = NULL; - break; - - case bfd_link_hash_defined: - case bfd_link_hash_defweak: - from = h->u.def.section->owner; - break; - - case bfd_link_hash_undefined: - case bfd_link_hash_undefweak: - from = h->u.undef.abfd; - break; - - case bfd_link_hash_common: - from = h->u.c.p->section->owner; - break; - } - } - - if (! header_printed) - { - char buf[100]; - - sprintf (buf, "%-29s %s\n\n", "Archive member included", - "because of file (symbol)"); - minfo ("%s", buf); - header_printed = true; - } - - if (bfd_my_archive (abfd) == NULL) - { - minfo ("%s", bfd_get_filename (abfd)); - len = strlen (bfd_get_filename (abfd)); - } - else - { - minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)), - bfd_get_filename (abfd)); - len = (strlen (bfd_get_filename (bfd_my_archive (abfd))) - + strlen (bfd_get_filename (abfd)) - + 2); - } - - if (len >= 29) - { - print_nl (); - len = 0; - } - while (len < 30) - { - print_space (); - ++len; - } - - if (from != NULL) - minfo ("%B ", from); - if (h != NULL) - minfo ("(%T)\n", h->root.string); - else - minfo ("(%s)\n", name); - } - - if (trace_files || trace_file_tries) - info_msg ("%I\n", input); - - return true; -} - -/* This is called when BFD has discovered a symbol which is defined - multiple times. */ - -/*ARGSUSED*/ -static boolean -multiple_definition (info, name, obfd, osec, oval, nbfd, nsec, nval) - struct bfd_link_info *info; - const char *name; - bfd *obfd; - asection *osec; - bfd_vma oval; - bfd *nbfd; - asection *nsec; - bfd_vma nval; -{ - /* If either section has the output_section field set to - bfd_abs_section_ptr, it means that the section is being - discarded, and this is not really a multiple definition at all. - FIXME: It would be cleaner to somehow ignore symbols defined in - sections which are being discarded. */ - if ((osec->output_section != NULL - && ! bfd_is_abs_section (osec) - && bfd_is_abs_section (osec->output_section)) - || (nsec->output_section != NULL - && ! bfd_is_abs_section (nsec) - && bfd_is_abs_section (nsec->output_section))) - return true; - - einfo ("%X%C: multiple definition of `%T'\n", - nbfd, nsec, nval, name); - if (obfd != (bfd *) NULL) - einfo ("%D: first defined here\n", obfd, osec, oval); - return true; -} - -/* This is called when there is a definition of a common symbol, or - when a common symbol is found for a symbol that is already defined, - or when two common symbols are found. We only do something if - -warn-common was used. */ - -/*ARGSUSED*/ -static boolean -multiple_common (info, name, obfd, otype, osize, nbfd, ntype, nsize) - struct bfd_link_info *info; - const char *name; - bfd *obfd; - enum bfd_link_hash_type otype; - bfd_vma osize; - bfd *nbfd; - enum bfd_link_hash_type ntype; - bfd_vma nsize; -{ - if (! config.warn_common) - return true; - - if (ntype == bfd_link_hash_defined - || ntype == bfd_link_hash_defweak - || ntype == bfd_link_hash_indirect) - { - ASSERT (otype == bfd_link_hash_common); - einfo ("%B: warning: definition of `%T' overriding common\n", - nbfd, name); - if (obfd != NULL) - einfo ("%B: warning: common is here\n", obfd); - } - else if (otype == bfd_link_hash_defined - || otype == bfd_link_hash_defweak - || otype == bfd_link_hash_indirect) - { - ASSERT (ntype == bfd_link_hash_common); - einfo ("%B: warning: common of `%T' overridden by definition\n", - nbfd, name); - if (obfd != NULL) - einfo ("%B: warning: defined here\n", obfd); - } - else - { - ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common); - if (osize > nsize) - { - einfo ("%B: warning: common of `%T' overridden by larger common\n", - nbfd, name); - if (obfd != NULL) - einfo ("%B: warning: larger common is here\n", obfd); - } - else if (nsize > osize) - { - einfo ("%B: warning: common of `%T' overriding smaller common\n", - nbfd, name); - if (obfd != NULL) - einfo ("%B: warning: smaller common is here\n", obfd); - } - else - { - einfo ("%B: warning: multiple common of `%T'\n", nbfd, name); - if (obfd != NULL) - einfo ("%B: warning: previous common is here\n", obfd); - } - } - - return true; -} - -/* This is called when BFD has discovered a set element. H is the - entry in the linker hash table for the set. SECTION and VALUE - represent a value which should be added to the set. */ - -/*ARGSUSED*/ -static boolean -add_to_set (info, h, reloc, abfd, section, value) - struct bfd_link_info *info; - struct bfd_link_hash_entry *h; - bfd_reloc_code_real_type reloc; - bfd *abfd; - asection *section; - bfd_vma value; -{ - if (config.warn_constructors) - einfo ("%P: warning: global constructor %s used\n", - h->root.string); - - if (! config.build_constructors) - return true; - - ldctor_add_set_entry (h, reloc, (const char *) NULL, section, value); - - if (h->type == bfd_link_hash_new) - { - h->type = bfd_link_hash_undefined; - h->u.undef.abfd = abfd; - /* We don't call bfd_link_add_undef to add this to the list of - undefined symbols because we are going to define it - ourselves. */ - } - - return true; -} - -/* This is called when BFD has discovered a constructor. This is only - called for some object file formats--those which do not handle - constructors in some more clever fashion. This is similar to - adding an element to a set, but less general. */ - -static boolean -constructor_callback (info, constructor, name, abfd, section, value) - struct bfd_link_info *info; - boolean constructor; - const char *name; - bfd *abfd; - asection *section; - bfd_vma value; -{ - char *s; - struct bfd_link_hash_entry *h; - char set_name[1 + sizeof "__CTOR_LIST__"]; - - if (config.warn_constructors) - einfo ("%P: warning: global constructor %s used\n", name); - - if (! config.build_constructors) - return true; - - /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a - useful error message. */ - if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL - && (link_info.relocateable - || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL)) - einfo ("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"); - - s = set_name; - if (bfd_get_symbol_leading_char (abfd) != '\0') - *s++ = bfd_get_symbol_leading_char (abfd); - if (constructor) - strcpy (s, "__CTOR_LIST__"); - else - strcpy (s, "__DTOR_LIST__"); - - h = bfd_link_hash_lookup (info->hash, set_name, true, true, true); - if (h == (struct bfd_link_hash_entry *) NULL) - einfo ("%P%F: bfd_link_hash_lookup failed: %E\n"); - if (h->type == bfd_link_hash_new) - { - h->type = bfd_link_hash_undefined; - h->u.undef.abfd = abfd; - /* We don't call bfd_link_add_undef to add this to the list of - undefined symbols because we are going to define it - ourselves. */ - } - - ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value); - return true; -} - -/* A structure used by warning_callback to pass information through - bfd_map_over_sections. */ - -struct warning_callback_info -{ - boolean found; - const char *warning; - const char *symbol; - asymbol **asymbols; -}; - -/* This is called when there is a reference to a warning symbol. */ - -/*ARGSUSED*/ -static boolean -warning_callback (info, warning, symbol, abfd, section, address) - struct bfd_link_info *info; - const char *warning; - const char *symbol; - bfd *abfd; - asection *section; - bfd_vma address; -{ - /* This is a hack to support warn_multiple_gp. FIXME: This should - have a cleaner interface, but what? */ - if (! config.warn_multiple_gp - && strcmp (warning, "using multiple gp values") == 0) - return true; - - if (section != NULL) - einfo ("%C: %s\n", abfd, section, address, warning); - else if (abfd == NULL) - einfo ("%P: %s\n", warning); - else if (symbol == NULL) - einfo ("%B: %s\n", abfd, warning); - else - { - lang_input_statement_type *entry; - asymbol **asymbols; - struct warning_callback_info info; - - /* Look through the relocs to see if we can find a plausible - address. */ - - entry = (lang_input_statement_type *) abfd->usrdata; - if (entry != NULL && entry->asymbols != NULL) - asymbols = entry->asymbols; - else - { - long symsize; - long symbol_count; - - symsize = bfd_get_symtab_upper_bound (abfd); - if (symsize < 0) - einfo ("%B%F: could not read symbols: %E\n", abfd); - asymbols = (asymbol **) xmalloc (symsize); - symbol_count = bfd_canonicalize_symtab (abfd, asymbols); - if (symbol_count < 0) - einfo ("%B%F: could not read symbols: %E\n", abfd); - if (entry != NULL) - { - entry->asymbols = asymbols; - entry->symbol_count = symbol_count; - } - } - - info.found = false; - info.warning = warning; - info.symbol = symbol; - info.asymbols = asymbols; - bfd_map_over_sections (abfd, warning_find_reloc, (PTR) &info); - - if (! info.found) - einfo ("%B: %s\n", abfd, warning); - - if (entry == NULL) - free (asymbols); - } - - return true; -} - -/* This is called by warning_callback for each section. It checks the - relocs of the section to see if it can find a reference to the - symbol which triggered the warning. If it can, it uses the reloc - to give an error message with a file and line number. */ - -static void -warning_find_reloc (abfd, sec, iarg) - bfd *abfd; - asection *sec; - PTR iarg; -{ - struct warning_callback_info *info = (struct warning_callback_info *) iarg; - long relsize; - arelent **relpp; - long relcount; - arelent **p, **pend; - - if (info->found) - return; - - relsize = bfd_get_reloc_upper_bound (abfd, sec); - if (relsize < 0) - einfo ("%B%F: could not read relocs: %E\n", abfd); - if (relsize == 0) - return; - - relpp = (arelent **) xmalloc (relsize); - relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols); - if (relcount < 0) - einfo ("%B%F: could not read relocs: %E\n", abfd); - - p = relpp; - pend = p + relcount; - for (; p < pend && *p != NULL; p++) - { - arelent *q = *p; - - if (q->sym_ptr_ptr != NULL - && *q->sym_ptr_ptr != NULL - && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0) - { - /* We found a reloc for the symbol we are looking for. */ - einfo ("%C: %s\n", abfd, sec, q->address, info->warning); - info->found = true; - break; - } - } - - free (relpp); -} - -/* This is called when an undefined symbol is found. */ - -/*ARGSUSED*/ -static boolean -undefined_symbol (info, name, abfd, section, address) - struct bfd_link_info *info; - const char *name; - bfd *abfd; - asection *section; - bfd_vma address; -{ - static char *error_name; - static unsigned int error_count; - -#define MAX_ERRORS_IN_A_ROW 5 - - if (config.warn_once) - { - static struct bfd_hash_table *hash; - - /* Only warn once about a particular undefined symbol. */ - - if (hash == NULL) - { - hash = ((struct bfd_hash_table *) - xmalloc (sizeof (struct bfd_hash_table))); - if (! bfd_hash_table_init (hash, bfd_hash_newfunc)) - einfo ("%F%P: bfd_hash_table_init failed: %E\n"); - } - - if (bfd_hash_lookup (hash, name, false, false) != NULL) - return true; - - if (bfd_hash_lookup (hash, name, true, true) == NULL) - einfo ("%F%P: bfd_hash_lookup failed: %E\n"); - } - - /* We never print more than a reasonable number of errors in a row - for a single symbol. */ - if (error_name != (char *) NULL - && strcmp (name, error_name) == 0) - ++error_count; - else - { - error_count = 0; - if (error_name != (char *) NULL) - free (error_name); - error_name = buystring (name); - } - - if (section != NULL) - { - if (error_count < MAX_ERRORS_IN_A_ROW) - einfo ("%X%C: undefined reference to `%T'\n", - abfd, section, address, name); - else if (error_count == MAX_ERRORS_IN_A_ROW) - einfo ("%D: more undefined references to `%T' follow\n", - abfd, section, address, name); - } - else - { - if (error_count < MAX_ERRORS_IN_A_ROW) - einfo ("%X%B: undefined reference to `%T'\n", - abfd, name); - else if (error_count == MAX_ERRORS_IN_A_ROW) - einfo ("%B: more undefined references to `%T' follow\n", - abfd, name); - } - - return true; -} - -/* This is called when a reloc overflows. */ - -/*ARGSUSED*/ -static boolean -reloc_overflow (info, name, reloc_name, addend, abfd, section, address) - struct bfd_link_info *info; - const char *name; - const char *reloc_name; - bfd_vma addend; - bfd *abfd; - asection *section; - bfd_vma address; -{ - if (abfd == (bfd *) NULL) - einfo ("%P%X: generated"); - else - einfo ("%X%C:", abfd, section, address); - einfo (" relocation truncated to fit: %s %T", reloc_name, name); - if (addend != 0) - einfo ("+%v", addend); - einfo ("\n"); - return true; -} - -/* This is called when a dangerous relocation is made. */ - -/*ARGSUSED*/ -static boolean -reloc_dangerous (info, message, abfd, section, address) - struct bfd_link_info *info; - const char *message; - bfd *abfd; - asection *section; - bfd_vma address; -{ - if (abfd == (bfd *) NULL) - einfo ("%P%X: generated"); - else - einfo ("%X%C:", abfd, section, address); - einfo ("dangerous relocation: %s\n", message); - return true; -} - -/* This is called when a reloc is being generated attached to a symbol - that is not being output. */ - -/*ARGSUSED*/ -static boolean -unattached_reloc (info, name, abfd, section, address) - struct bfd_link_info *info; - const char *name; - bfd *abfd; - asection *section; - bfd_vma address; -{ - if (abfd == (bfd *) NULL) - einfo ("%P%X: generated"); - else - einfo ("%X%C:", abfd, section, address); - einfo (" reloc refers to symbol `%T' which is not being output\n", name); - return true; -} - -/* This is called if link_info.notice_all is set, or when a symbol in - link_info.notice_hash is found. Symbols are put in notice_hash - using the -y option. */ - -static boolean -notice (info, name, abfd, section, value) - struct bfd_link_info *info; - const char *name; - bfd *abfd; - asection *section; - bfd_vma value; -{ - if (! info->notice_all - || (info->notice_hash != NULL - && bfd_hash_lookup (info->notice_hash, name, false, false) != NULL)) - einfo ("%B: %s %s\n", abfd, - bfd_is_und_section (section) ? "reference to" : "definition of", - name); - - if (command_line.cref || nocrossref_list != NULL) - add_cref (name, abfd, section, value); - - return true; -} diff --git a/contrib/binutils/ld/ldmain.h b/contrib/binutils/ld/ldmain.h deleted file mode 100644 index 5c5f38b84938..000000000000 --- a/contrib/binutils/ld/ldmain.h +++ /dev/null @@ -1,38 +0,0 @@ -/* ldmain.h - - Copyright 1991, 1992, 1993 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LDMAIN_H -#define LDMAIN_H - -extern char *program_name; -extern bfd *output_bfd; -extern char *default_target; -extern boolean trace_files; -extern boolean trace_file_tries; -extern boolean version_printed; -extern boolean whole_archive; -extern int g_switch_value; -extern const char *output_filename; -extern struct bfd_link_info link_info; - -extern void add_ysym PARAMS ((const char *)); -extern void add_wrap PARAMS ((const char *)); -extern void add_keepsyms_file PARAMS ((const char *filename)); - -#endif diff --git a/contrib/binutils/ld/ldmisc.c b/contrib/binutils/ld/ldmisc.c deleted file mode 100644 index a292d40d1d5e..000000000000 --- a/contrib/binutils/ld/ldmisc.c +++ /dev/null @@ -1,535 +0,0 @@ -/* ldmisc.c - Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - Written by Steve Chamberlain of Cygnus Support. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" -#include "libiberty.h" -#include "demangle.h" - -#ifdef ANSI_PROTOTYPES -#include <stdarg.h> -#define USE_STDARG 1 -#else -#include <varargs.h> -#define USE_STDARG 0 -#endif - -#include "ld.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldgram.h" -#include "ldlex.h" -#include "ldmain.h" -#include "ldfile.h" - -static void vfinfo PARAMS ((FILE *, const char *, va_list)); - -/* - %% literal % - %F error is fatal - %P print program name - %S print script file and linenumber - %E current bfd error or errno - %I filename from a lang_input_statement_type - %B filename from a bfd - %T symbol name - %X no object output, fail return - %V hex bfd_vma - %v hex bfd_vma, no leading zeros - %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces - %C clever filename:linenumber with function - %D like %C, but no function name - %G like %D, but only function name - %R info about a relent - %s arbitrary string, like printf - %d integer, like printf - %u integer, like printf -*/ - -char * -demangle (string) - const char *string; -{ - char *res; - - if (output_bfd != NULL - && bfd_get_symbol_leading_char (output_bfd) == string[0]) - ++string; - - /* This is a hack for better error reporting on XCOFF, or the MS PE */ - /* format. Xcoff has a single '.', while the NT PE for PPC has '..'. */ - /* So we remove all of them. */ - while(string[0] == '.') - ++string; - - res = cplus_demangle (string, DMGL_ANSI | DMGL_PARAMS); - return res ? res : xstrdup (string); -} - -static void -vfinfo (fp, fmt, arg) - FILE *fp; - const char *fmt; - va_list arg; -{ - boolean fatal = false; - - while (*fmt != '\0') - { - while (*fmt != '%' && *fmt != '\0') - { - putc (*fmt, fp); - fmt++; - } - - if (*fmt == '%') - { - fmt ++; - switch (*fmt++) - { - default: - fprintf (fp,"%%%c", fmt[-1]); - break; - - case '%': - /* literal % */ - putc ('%', fp); - break; - - case 'X': - /* no object output, fail return */ - config.make_executable = false; - break; - - case 'V': - /* hex bfd_vma */ - { - bfd_vma value = va_arg (arg, bfd_vma); - fprintf_vma (fp, value); - } - break; - - case 'v': - /* hex bfd_vma, no leading zeros */ - { - char buf[100]; - char *p = buf; - bfd_vma value = va_arg (arg, bfd_vma); - sprintf_vma (p, value); - while (*p == '0') - p++; - if (!*p) - p--; - fputs (p, fp); - } - break; - - case 'W': - /* hex bfd_vma with 0x with no leading zeroes taking up - 8 spaces. */ - { - char buf[100]; - bfd_vma value; - char *p; - int len; - - value = va_arg (arg, bfd_vma); - sprintf_vma (buf, value); - for (p = buf; *p == '0'; ++p) - ; - if (*p == '\0') - --p; - len = strlen (p); - while (len < 8) - { - putc (' ', fp); - ++len; - } - fprintf (fp, "0x%s", p); - } - break; - - case 'T': - /* Symbol name. */ - { - const char *name = va_arg (arg, const char *); - - if (name == (const char *) NULL) - fprintf (fp, "no symbol"); - else - { - char *demangled; - - demangled = demangle (name); - fprintf (fp, "%s", demangled); - free (demangled); - } - } - break; - - case 'B': - /* filename from a bfd */ - { - bfd *abfd = va_arg (arg, bfd *); - if (abfd->my_archive) - fprintf (fp, "%s(%s)", abfd->my_archive->filename, - abfd->filename); - else - fprintf (fp, "%s", abfd->filename); - } - break; - - case 'F': - /* error is fatal */ - fatal = true; - break; - - case 'P': - /* print program name */ - fprintf (fp, "%s", program_name); - break; - - case 'E': - /* current bfd error or errno */ - fprintf (fp, bfd_errmsg (bfd_get_error ())); - break; - - case 'I': - /* filename from a lang_input_statement_type */ - { - lang_input_statement_type *i; - - i = va_arg (arg, lang_input_statement_type *); - if (bfd_my_archive (i->the_bfd) != NULL) - fprintf (fp, "(%s)", - bfd_get_filename (bfd_my_archive (i->the_bfd))); - fprintf (fp, "%s", i->local_sym_name); - if (bfd_my_archive (i->the_bfd) == NULL - && strcmp (i->local_sym_name, i->filename) != 0) - fprintf (fp, " (%s)", i->filename); - } - break; - - case 'S': - /* print script file and linenumber */ - if (parsing_defsym) - fprintf (fp, "--defsym %s", lex_string); - else if (ldfile_input_filename != NULL) - fprintf (fp, "%s:%u", ldfile_input_filename, lineno); - else - fprintf (fp, "built in linker script:%u", lineno); - break; - - case 'R': - /* Print all that's interesting about a relent */ - { - arelent *relent = va_arg (arg, arelent *); - - lfinfo (fp, "%s+0x%v (type %s)", - (*(relent->sym_ptr_ptr))->name, - relent->addend, - relent->howto->name); - } - break; - - case 'C': - case 'D': - case 'G': - /* Clever filename:linenumber with function name if possible, - or section name as a last resort. The arguments are a BFD, - a section, and an offset. */ - { - static bfd *last_bfd; - static char *last_file = NULL; - static char *last_function = NULL; - bfd *abfd; - asection *section; - bfd_vma offset; - lang_input_statement_type *entry; - asymbol **asymbols; - const char *filename; - const char *functionname; - unsigned int linenumber; - boolean discard_last; - - abfd = va_arg (arg, bfd *); - section = va_arg (arg, asection *); - offset = va_arg (arg, bfd_vma); - - entry = (lang_input_statement_type *) abfd->usrdata; - if (entry != (lang_input_statement_type *) NULL - && entry->asymbols != (asymbol **) NULL) - asymbols = entry->asymbols; - else - { - long symsize; - long symbol_count; - - symsize = bfd_get_symtab_upper_bound (abfd); - if (symsize < 0) - einfo ("%B%F: could not read symbols\n", abfd); - asymbols = (asymbol **) xmalloc (symsize); - symbol_count = bfd_canonicalize_symtab (abfd, asymbols); - if (symbol_count < 0) - einfo ("%B%F: could not read symbols\n", abfd); - if (entry != (lang_input_statement_type *) NULL) - { - entry->asymbols = asymbols; - entry->symbol_count = symbol_count; - } - } - - discard_last = true; - if (bfd_find_nearest_line (abfd, section, asymbols, offset, - &filename, &functionname, - &linenumber)) - { - if (functionname != NULL && fmt[-1] == 'G') - { - lfinfo (fp, "%B:", abfd); - if (filename != NULL - && strcmp (filename, bfd_get_filename (abfd)) != 0) - fprintf (fp, "%s:", filename); - lfinfo (fp, "%T", functionname); - } - else if (functionname != NULL && fmt[-1] == 'C') - { - if (filename == (char *) NULL) - filename = abfd->filename; - - if (last_bfd == NULL - || last_file == NULL - || last_function == NULL - || last_bfd != abfd - || strcmp (last_file, filename) != 0 - || strcmp (last_function, functionname) != 0) - { - /* We use abfd->filename in this initial line, - in case filename is a .h file or something - similarly unhelpful. */ - lfinfo (fp, "%B: In function `%T':\n", - abfd, functionname); - - last_bfd = abfd; - if (last_file != NULL) - free (last_file); - last_file = buystring (filename); - if (last_function != NULL) - free (last_function); - last_function = buystring (functionname); - } - discard_last = false; - if (linenumber != 0) - fprintf (fp, "%s:%u", filename, linenumber); - else - lfinfo (fp, "%s(%s+0x%v)", filename, section->name, - offset); - } - else if (filename == NULL - || strcmp (filename, abfd->filename) == 0) - { - lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, - offset); - if (linenumber != 0) - lfinfo (fp, ":%u", linenumber); - } - else if (linenumber != 0) - lfinfo (fp, "%B:%s:%u", abfd, filename, linenumber); - else - lfinfo (fp, "%B(%s+0x%v):%s", abfd, section->name, - offset, filename); - } - else - lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, offset); - - if (discard_last) - { - last_bfd = NULL; - if (last_file != NULL) - { - free (last_file); - last_file = NULL; - } - if (last_function != NULL) - { - free (last_function); - last_function = NULL; - } - } - } - break; - - case 's': - /* arbitrary string, like printf */ - fprintf (fp, "%s", va_arg (arg, char *)); - break; - - case 'd': - /* integer, like printf */ - fprintf (fp, "%d", va_arg (arg, int)); - break; - - case 'u': - /* unsigned integer, like printf */ - fprintf (fp, "%u", va_arg (arg, unsigned int)); - break; - } - } - } - - if (fatal == true) - xexit(1); -} - -/* Format info message and print on stdout. */ - -/* (You would think this should be called just "info", but then you - would hosed by LynxOS, which defines that name in its libc.) */ - -void -#if USE_STDARG -info_msg (const char *fmt, ...) -#else -info_msg (va_alist) - va_dcl -#endif -{ - va_list arg; - -#if ! USE_STDARG - const char *fmt; - - va_start (arg); - fmt = va_arg (arg, const char *); -#else - va_start (arg, fmt); -#endif - - vfinfo (stdout, fmt, arg); - va_end (arg); -} - -/* ('e' for error.) Format info message and print on stderr. */ - -void -#if USE_STDARG -einfo (const char *fmt, ...) -#else -einfo (va_alist) - va_dcl -#endif -{ - va_list arg; - -#if ! USE_STDARG - const char *fmt; - - va_start (arg); - fmt = va_arg (arg, const char *); -#else - va_start (arg, fmt); -#endif - - vfinfo (stderr, fmt, arg); - va_end (arg); -} - -void -info_assert (file, line) - const char *file; - unsigned int line; -{ - einfo ("%F%P: internal error %s %d\n", file, line); -} - -char * -buystring (x) - CONST char *CONST x; -{ - size_t l = strlen(x)+1; - char *r = xmalloc(l); - memcpy(r, x,l); - return r; -} - -/* ('m' for map) Format info message and print on map. */ - -void -#if USE_STDARG -minfo (const char *fmt, ...) -#else -minfo (va_alist) - va_dcl -#endif -{ - va_list arg; - -#if ! USE_STDARG - const char *fmt; - va_start (arg); - fmt = va_arg (arg, const char *); -#else - va_start (arg, fmt); -#endif - - vfinfo (config.map_file, fmt, arg); - va_end (arg); -} - -void -#if USE_STDARG -lfinfo (FILE *file, const char *fmt, ...) -#else -lfinfo (va_alist) - va_dcl -#endif -{ - va_list arg; - -#if ! USE_STDARG - FILE *file; - const char *fmt; - - va_start (arg); - file = va_arg (arg, FILE *); - fmt = va_arg (arg, const char *); -#else - va_start (arg, fmt); -#endif - - vfinfo (file, fmt, arg); - va_end (arg); -} - -/* Functions to print the link map. */ - -void -print_space () -{ - fprintf (config.map_file, " "); -} - -void -print_nl () -{ - fprintf (config.map_file, "\n"); -} diff --git a/contrib/binutils/ld/ldmisc.h b/contrib/binutils/ld/ldmisc.h deleted file mode 100644 index f5b3b4f35afc..000000000000 --- a/contrib/binutils/ld/ldmisc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ldmisc.h - - Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LDMISC_H -#define LDMISC_H - -#ifdef ANSI_PROTOTYPES -extern void einfo PARAMS ((const char *, ...)); -extern void minfo PARAMS ((const char *, ...)); -extern void info_msg PARAMS ((const char *, ...)); -extern void lfinfo PARAMS ((FILE *, const char *, ...)); -#else -/* VARARGS*/ -extern void einfo (); -/* VARARGS*/ -extern void minfo (); -/* VARARGS*/ -extern void info_msg (); -/*VARARGS*/ -extern void lfinfo (); -#endif - -extern void info_assert PARAMS ((const char *, unsigned int)); -extern void yyerror PARAMS ((const char *)); -extern PTR xmalloc PARAMS ((size_t)); -extern PTR xrealloc PARAMS ((PTR, size_t)); -extern void xexit PARAMS ((int)); -extern char *buystring PARAMS ((CONST char *CONST)); - -#define ASSERT(x) \ -do { if (!(x)) info_assert(__FILE__,__LINE__); } while (0) - -#define FAIL() \ -do { info_assert(__FILE__,__LINE__); } while (0) - -extern void print_space PARAMS ((void)); -extern void print_nl PARAMS ((void)); -extern char *demangle PARAMS ((const char *)); - -#endif diff --git a/contrib/binutils/ld/ldver.c b/contrib/binutils/ld/ldver.c deleted file mode 100644 index 6a5137b4e25a..000000000000 --- a/contrib/binutils/ld/ldver.c +++ /dev/null @@ -1,49 +0,0 @@ -/* ldver.c -- Print linker version. - Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include <stdio.h> -#include "bfd.h" -#include "sysdep.h" - -#include "ld.h" -#include "ldver.h" -#include "ldemul.h" -#include "ldmain.h" - -const char *ld_program_version = VERSION; - -void -ldversion (noisy) - int noisy; -{ - fprintf (stdout, "GNU ld version %s (with BFD %s)\n", - ld_program_version, BFD_VERSION); - - if (noisy) - { - ld_emulation_xfer_type **ptr = ld_emulations; - - printf (" Supported emulations:\n"); - while (*ptr) - { - printf (" %s\n", (*ptr)->emulation_name); - ptr++; - } - } -} diff --git a/contrib/binutils/ld/ldver.h b/contrib/binutils/ld/ldver.h deleted file mode 100644 index 697b6bc31b3b..000000000000 --- a/contrib/binutils/ld/ldver.h +++ /dev/null @@ -1,22 +0,0 @@ -/* ldver.h -- Header file for ldver.c. - Copyright (C) 1991, 92, 93, 95, 1996 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -extern const char *ld_program_version; - -void ldversion PARAMS ((int)); diff --git a/contrib/binutils/ld/ldwrite.c b/contrib/binutils/ld/ldwrite.c deleted file mode 100644 index 0a1847668d3b..000000000000 --- a/contrib/binutils/ld/ldwrite.c +++ /dev/null @@ -1,530 +0,0 @@ -/* ldwrite.c -- write out the linked file - Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 - Free Software Foundation, Inc. - Written by Steve Chamberlain sac@cygnus.com - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include "bfd.h" -#include "sysdep.h" -#include "bfdlink.h" -#include "libiberty.h" - -#include "ld.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldwrite.h" -#include "ldmisc.h" -#include "ldgram.h" -#include "ldmain.h" - -static void build_link_order PARAMS ((lang_statement_union_type *)); -static asection *clone_section PARAMS ((bfd *, asection *, int *)); -static void split_sections PARAMS ((bfd *, struct bfd_link_info *)); - -/* Build link_order structures for the BFD linker. */ - -static void -build_link_order (statement) - lang_statement_union_type *statement; -{ - switch (statement->header.type) - { - case lang_data_statement_enum: - { - asection *output_section; - struct bfd_link_order *link_order; - bfd_vma value; - boolean big_endian = false; - - output_section = statement->data_statement.output_section; - ASSERT (output_section->owner == output_bfd); - - link_order = bfd_new_link_order (output_bfd, output_section); - if (link_order == NULL) - einfo ("%P%F: bfd_new_link_order failed\n"); - - link_order->type = bfd_data_link_order; - link_order->offset = statement->data_statement.output_vma; - link_order->u.data.contents = (bfd_byte *) xmalloc (QUAD_SIZE); - - value = statement->data_statement.value; - - /* If the endianness of the output BFD is not known, then we - base the endianness of the data on the first input file. - By convention, the bfd_put routines for an unknown - endianness are big endian, so we must swap here if the - input file is little endian. */ - if (bfd_big_endian (output_bfd)) - big_endian = true; - else if (bfd_little_endian (output_bfd)) - big_endian = false; - else - { - boolean swap; - - swap = false; - if (command_line.endian == ENDIAN_BIG) - big_endian = true; - else if (command_line.endian == ENDIAN_LITTLE) - { - big_endian = false; - swap = true; - } - else if (command_line.endian == ENDIAN_UNSET) - { - big_endian = true; - { - LANG_FOR_EACH_INPUT_STATEMENT (s) - { - if (s->the_bfd != NULL) - { - if (bfd_little_endian (s->the_bfd)) - { - big_endian = false; - swap = true; - } - break; - } - } - } - } - - if (swap) - { - bfd_byte buffer[8]; - - switch (statement->data_statement.type) - { - case QUAD: - case SQUAD: - if (sizeof (bfd_vma) >= QUAD_SIZE) - { - bfd_putl64 (value, buffer); - value = bfd_getb64 (buffer); - break; - } - /* Fall through. */ - case LONG: - bfd_putl32 (value, buffer); - value = bfd_getb32 (buffer); - break; - case SHORT: - bfd_putl16 (value, buffer); - value = bfd_getb16 (buffer); - break; - case BYTE: - break; - default: - abort (); - } - } - } - - ASSERT (output_section->owner == output_bfd); - switch (statement->data_statement.type) - { - case QUAD: - case SQUAD: - if (sizeof (bfd_vma) >= QUAD_SIZE) - bfd_put_64 (output_bfd, value, link_order->u.data.contents); - else - { - bfd_vma high; - - if (statement->data_statement.type == QUAD) - high = 0; - else if ((value & 0x80000000) == 0) - high = 0; - else - high = (bfd_vma) -1; - bfd_put_32 (output_bfd, high, - (link_order->u.data.contents - + (big_endian ? 0 : 4))); - bfd_put_32 (output_bfd, value, - (link_order->u.data.contents - + (big_endian ? 4 : 0))); - } - link_order->size = QUAD_SIZE; - break; - case LONG: - bfd_put_32 (output_bfd, value, link_order->u.data.contents); - link_order->size = LONG_SIZE; - break; - case SHORT: - bfd_put_16 (output_bfd, value, link_order->u.data.contents); - link_order->size = SHORT_SIZE; - break; - case BYTE: - bfd_put_8 (output_bfd, value, link_order->u.data.contents); - link_order->size = BYTE_SIZE; - break; - default: - abort (); - } - } - break; - - case lang_reloc_statement_enum: - { - lang_reloc_statement_type *rs; - asection *output_section; - struct bfd_link_order *link_order; - - rs = &statement->reloc_statement; - - output_section = rs->output_section; - ASSERT (output_section->owner == output_bfd); - - link_order = bfd_new_link_order (output_bfd, output_section); - if (link_order == NULL) - einfo ("%P%F: bfd_new_link_order failed\n"); - - link_order->offset = rs->output_vma; - link_order->size = bfd_get_reloc_size (rs->howto); - - link_order->u.reloc.p = - ((struct bfd_link_order_reloc *) - xmalloc (sizeof (struct bfd_link_order_reloc))); - - link_order->u.reloc.p->reloc = rs->reloc; - link_order->u.reloc.p->addend = rs->addend_value; - - if (rs->name == NULL) - { - link_order->type = bfd_section_reloc_link_order; - if (rs->section->owner == output_bfd) - link_order->u.reloc.p->u.section = rs->section; - else - { - link_order->u.reloc.p->u.section = rs->section->output_section; - link_order->u.reloc.p->addend += rs->section->output_offset; - } - } - else - { - link_order->type = bfd_symbol_reloc_link_order; - link_order->u.reloc.p->u.name = rs->name; - } - } - break; - - case lang_input_section_enum: - /* Create a new link_order in the output section with this - attached */ - if (statement->input_section.ifile->just_syms_flag == false) - { - asection *i = statement->input_section.section; - asection *output_section = i->output_section; - - ASSERT (output_section->owner == output_bfd); - - if ((output_section->flags & SEC_HAS_CONTENTS) != 0) - { - struct bfd_link_order *link_order; - - link_order = bfd_new_link_order (output_bfd, output_section); - - if (i->flags & SEC_NEVER_LOAD) - { - /* We've got a never load section inside one which - is going to be output, we'll change it into a - fill link_order */ - link_order->type = bfd_fill_link_order; - link_order->u.fill.value = 0; - } - else - { - link_order->type = bfd_indirect_link_order; - link_order->u.indirect.section = i; - ASSERT (i->output_section == output_section); - } - if (i->_cooked_size) - link_order->size = i->_cooked_size; - else - link_order->size = bfd_get_section_size_before_reloc (i); - link_order->offset = i->output_offset; - } - } - break; - - case lang_padding_statement_enum: - /* Make a new link_order with the right filler */ - { - asection *output_section; - struct bfd_link_order *link_order; - - output_section = statement->padding_statement.output_section; - ASSERT (statement->padding_statement.output_section->owner - == output_bfd); - if ((output_section->flags & SEC_HAS_CONTENTS) != 0) - { - link_order = bfd_new_link_order (output_bfd, output_section); - link_order->type = bfd_fill_link_order; - link_order->size = statement->padding_statement.size; - link_order->offset = statement->padding_statement.output_offset; - link_order->u.fill.value = statement->padding_statement.fill; - } - } - break; - - default: - /* All the other ones fall through */ - break; - } -} - -/* Call BFD to write out the linked file. */ - - -/**********************************************************************/ - - -/* Wander around the input sections, make sure that - we'll never try and create an output section with more relocs - than will fit.. Do this by always assuming the worst case, and - creating new output sections with all the right bits */ -#define TESTIT 1 -static asection * -clone_section (abfd, s, count) - bfd *abfd; - asection *s; - int *count; -{ -#define SSIZE 8 - char sname[SSIZE]; /* ?? find the name for this size */ - asection *n; - struct bfd_link_hash_entry *h; - /* Invent a section name - use first five - chars of base section name and a digit suffix */ - do - { - unsigned int i; - char b[6]; - for (i = 0; i < sizeof (b) - 1 && s->name[i]; i++) - b[i] = s->name[i]; - b[i] = 0; - sprintf (sname, "%s%d", b, (*count)++); - } - while (bfd_get_section_by_name (abfd, sname)); - - n = bfd_make_section_anyway (abfd, xstrdup (sname)); - - /* Create a symbol of the same name */ - - h = bfd_link_hash_lookup (link_info.hash, - sname, true, true, false); - h->type = bfd_link_hash_defined; - h->u.def.value = 0; - h->u.def.section = n ; - - - n->flags = s->flags; - n->vma = s->vma; - n->user_set_vma = s->user_set_vma; - n->lma = s->lma; - n->_cooked_size = 0; - n->_raw_size = 0; - n->output_offset = s->output_offset; - n->output_section = n; - n->orelocation = 0; - n->reloc_count = 0; - n->alignment_power = s->alignment_power; - return n; -} - -#if TESTING -static void -ds (s) - asection *s; -{ - struct bfd_link_order *l = s->link_order_head; - printf ("vma %x size %x\n", s->vma, s->_raw_size); - while (l) - { - if (l->type == bfd_indirect_link_order) - { - printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename); - } - else - { - printf ("%8x something else\n", l->offset); - } - l = l->next; - } - printf ("\n"); -} -dump (s, a1, a2) - char *s; - asection *a1; - asection *a2; -{ - printf ("%s\n", s); - ds (a1); - ds (a2); -} - -static void -sanity_check (abfd) - bfd *abfd; -{ - asection *s; - for (s = abfd->sections; s; s = s->next) - { - struct bfd_link_order *p; - bfd_vma prev = 0; - for (p = s->link_order_head; p; p = p->next) - { - if (p->offset > 100000) - abort (); - if (p->offset < prev) - abort (); - prev = p->offset; - } - } -} -#else -#define sanity_check(a) -#define dump(a, b, c) -#endif - -static void -split_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - asection *original_sec; - int nsecs = abfd->section_count; - sanity_check (abfd); - /* look through all the original sections */ - for (original_sec = abfd->sections; - original_sec && nsecs; - original_sec = original_sec->next, nsecs--) - { - boolean first = true; - int count = 0; - int lines = 0; - int relocs = 0; - struct bfd_link_order **pp; - bfd_vma vma = original_sec->vma; - bfd_vma shift_offset = 0; - asection *cursor = original_sec; - - /* count up the relocations and line entries to see if - anything would be too big to fit */ - for (pp = &(cursor->link_order_head); *pp; pp = &((*pp)->next)) - { - struct bfd_link_order *p = *pp; - int thislines = 0; - int thisrelocs = 0; - if (p->type == bfd_indirect_link_order) - { - asection *sec; - - sec = p->u.indirect.section; - - if (info->strip == strip_none - || info->strip == strip_some) - thislines = sec->lineno_count; - - if (info->relocateable) - thisrelocs = sec->reloc_count; - - } - else if (info->relocateable - && (p->type == bfd_section_reloc_link_order - || p->type == bfd_symbol_reloc_link_order)) - thisrelocs++; - - if (! first - && (thisrelocs + relocs > config.split_by_reloc - || thislines + lines > config.split_by_reloc - || config.split_by_file)) - { - /* create a new section and put this link order and the - following link orders into it */ - struct bfd_link_order *l = p; - asection *n = clone_section (abfd, cursor, &count); - *pp = NULL; /* Snip off link orders from old section */ - n->link_order_head = l; /* attach to new section */ - pp = &n->link_order_head; - - /* change the size of the original section and - update the vma of the new one */ - - dump ("before snip", cursor, n); - - n->_raw_size = cursor->_raw_size - l->offset; - cursor->_raw_size = l->offset; - - vma += cursor->_raw_size; - n->lma = n->vma = vma; - - shift_offset = l->offset; - - /* run down the chain and change the output section to - the right one, update the offsets too */ - - while (l) - { - l->offset -= shift_offset; - if (l->type == bfd_indirect_link_order) - { - l->u.indirect.section->output_section = n; - l->u.indirect.section->output_offset = l->offset; - } - l = l->next; - } - dump ("after snip", cursor, n); - cursor = n; - relocs = thisrelocs; - lines = thislines; - } - else - { - relocs += thisrelocs; - lines += thislines; - } - - first = false; - } - } - sanity_check (abfd); -} -/**********************************************************************/ -void -ldwrite () -{ - /* Reset error indicator, which can typically something like invalid - format from openning up the .o files */ - bfd_set_error (bfd_error_no_error); - lang_for_each_statement (build_link_order); - - if (config.split_by_reloc || config.split_by_file) - split_sections (output_bfd, &link_info); - if (!bfd_final_link (output_bfd, &link_info)) - { - /* If there was an error recorded, print it out. Otherwise assume - an appropriate error message like unknown symbol was printed - out. */ - - if (bfd_get_error () != bfd_error_no_error) - einfo ("%F%P: final link failed: %E\n", output_bfd); - else - xexit(1); - } -} diff --git a/contrib/binutils/ld/ldwrite.h b/contrib/binutils/ld/ldwrite.h deleted file mode 100644 index 68d8b52db0a5..000000000000 --- a/contrib/binutils/ld/ldwrite.h +++ /dev/null @@ -1,20 +0,0 @@ -/* ldwrite.h - - Copyright 1991, 1992, 1993 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -void ldwrite PARAMS ((void)); diff --git a/contrib/binutils/ld/lexsup.c b/contrib/binutils/ld/lexsup.c deleted file mode 100644 index 257c2f8ea210..000000000000 --- a/contrib/binutils/ld/lexsup.c +++ /dev/null @@ -1,982 +0,0 @@ -/* Parse options for the GNU linker. - Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 - Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - -#include "bfd.h" -#include "sysdep.h" -#include "libiberty.h" -#include <stdio.h> -#include <string.h> -#include <ctype.h> -#include "getopt.h" -#include "bfdlink.h" -#include "ld.h" -#include "ldmain.h" -#include "ldmisc.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldgram.h" -#include "ldlex.h" -#include "ldfile.h" -#include "ldver.h" -#include "ldemul.h" - -#ifndef PATH_SEPARATOR -#if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__)) -#define PATH_SEPARATOR ';' -#else -#define PATH_SEPARATOR ':' -#endif -#endif - -/* Somewhere above, sys/stat.h got included . . . . */ -#if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -#endif - -/* Omit args to avoid the possibility of clashing with a system header - that might disagree about consts. */ -unsigned long strtoul (); - -static void set_default_dirlist PARAMS ((char *dirlist_ptr)); -static void set_section_start PARAMS ((char *sect, char *valstr)); -static void help PARAMS ((void)); - -/* Non-zero if we are processing a --defsym from the command line. */ -int parsing_defsym = 0; - -/* Codes used for the long options with no short synonyms. 150 isn't - special; it's just an arbitrary non-ASCII char value. */ - -#define OPTION_ASSERT 150 -#define OPTION_CALL_SHARED (OPTION_ASSERT + 1) -#define OPTION_CREF (OPTION_CALL_SHARED + 1) -#define OPTION_DEFSYM (OPTION_CREF + 1) -#define OPTION_DYNAMIC_LINKER (OPTION_DEFSYM + 1) -#define OPTION_EB (OPTION_DYNAMIC_LINKER + 1) -#define OPTION_EL (OPTION_EB + 1) -#define OPTION_EMBEDDED_RELOCS (OPTION_EL + 1) -#define OPTION_EXPORT_DYNAMIC (OPTION_EMBEDDED_RELOCS + 1) -#define OPTION_HELP (OPTION_EXPORT_DYNAMIC + 1) -#define OPTION_IGNORE (OPTION_HELP + 1) -#define OPTION_MAP (OPTION_IGNORE + 1) -#define OPTION_NO_KEEP_MEMORY (OPTION_MAP + 1) -#define OPTION_NO_WARN_MISMATCH (OPTION_NO_KEEP_MEMORY + 1) -#define OPTION_NOINHIBIT_EXEC (OPTION_NO_WARN_MISMATCH + 1) -#define OPTION_NON_SHARED (OPTION_NOINHIBIT_EXEC + 1) -#define OPTION_NO_WHOLE_ARCHIVE (OPTION_NON_SHARED + 1) -#define OPTION_OFORMAT (OPTION_NO_WHOLE_ARCHIVE + 1) -#define OPTION_RELAX (OPTION_OFORMAT + 1) -#define OPTION_RETAIN_SYMBOLS_FILE (OPTION_RELAX + 1) -#define OPTION_RPATH (OPTION_RETAIN_SYMBOLS_FILE + 1) -#define OPTION_RPATH_LINK (OPTION_RPATH + 1) -#define OPTION_SHARED (OPTION_RPATH_LINK + 1) -#define OPTION_SONAME (OPTION_SHARED + 1) -#define OPTION_SORT_COMMON (OPTION_SONAME + 1) -#define OPTION_STATS (OPTION_SORT_COMMON + 1) -#define OPTION_SYMBOLIC (OPTION_STATS + 1) -#define OPTION_TASK_LINK (OPTION_SYMBOLIC + 1) -#define OPTION_TBSS (OPTION_TASK_LINK + 1) -#define OPTION_TDATA (OPTION_TBSS + 1) -#define OPTION_TTEXT (OPTION_TDATA + 1) -#define OPTION_TRADITIONAL_FORMAT (OPTION_TTEXT + 1) -#define OPTION_UR (OPTION_TRADITIONAL_FORMAT + 1) -#define OPTION_VERBOSE (OPTION_UR + 1) -#define OPTION_VERSION (OPTION_VERBOSE + 1) -#define OPTION_VERSION_SCRIPT (OPTION_VERSION + 1) -#define OPTION_WARN_COMMON (OPTION_VERSION_SCRIPT + 1) -#define OPTION_WARN_CONSTRUCTORS (OPTION_WARN_COMMON + 1) -#define OPTION_WARN_MULTIPLE_GP (OPTION_WARN_CONSTRUCTORS + 1) -#define OPTION_WARN_ONCE (OPTION_WARN_MULTIPLE_GP + 1) -#define OPTION_WARN_SECTION_ALIGN (OPTION_WARN_ONCE + 1) -#define OPTION_SPLIT_BY_RELOC (OPTION_WARN_SECTION_ALIGN + 1) -#define OPTION_SPLIT_BY_FILE (OPTION_SPLIT_BY_RELOC + 1) -#define OPTION_WHOLE_ARCHIVE (OPTION_SPLIT_BY_FILE + 1) -#define OPTION_WRAP (OPTION_WHOLE_ARCHIVE + 1) -#define OPTION_FORCE_EXE_SUFFIX (OPTION_WRAP + 1) - -/* The long options. This structure is used for both the option - parsing and the help text. */ - -struct ld_option -{ - /* The long option information. */ - struct option opt; - /* The short option with the same meaning ('\0' if none). */ - char shortopt; - /* The name of the argument (NULL if none). */ - const char *arg; - /* The documentation string. If this is NULL, this is a synonym for - the previous option. */ - const char *doc; - enum - { - /* Use one dash before long option name. */ - ONE_DASH, - /* Use two dashes before long option name. */ - TWO_DASHES, - /* Don't mention this option in --help output. */ - NO_HELP - } control; -}; - -static const struct ld_option ld_options[] = -{ - { {NULL, required_argument, NULL, '\0'}, - 'a', "KEYWORD", "Shared library control for HP/UX compatibility", - ONE_DASH }, - { {"architecture", required_argument, NULL, 'A'}, - 'A', "ARCH", "Set architecture" , TWO_DASHES }, - { {"format", required_argument, NULL, 'b'}, - 'b', "TARGET", "Specify target for following input files", TWO_DASHES }, - { {"mri-script", required_argument, NULL, 'c'}, - 'c', "FILE", "Read MRI format linker script", TWO_DASHES }, - { {"dc", no_argument, NULL, 'd'}, - 'd', NULL, "Force common symbols to be defined", ONE_DASH }, - { {"dp", no_argument, NULL, 'd'}, - '\0', NULL, NULL, ONE_DASH }, - { {"entry", required_argument, NULL, 'e'}, - 'e', "ADDRESS", "Set start address", TWO_DASHES }, - { {"export-dynamic", no_argument, NULL, OPTION_EXPORT_DYNAMIC}, - 'E', NULL, "Export all dynamic symbols", TWO_DASHES }, - { {"auxiliary", required_argument, NULL, 'f'}, - 'f', "SHLIB", "Auxiliary filter for shared object symbol table", - TWO_DASHES }, - { {"filter", required_argument, NULL, 'F'}, - 'F', "SHLIB", "Filter for shared object symbol table", TWO_DASHES }, - { {NULL, no_argument, NULL, '\0'}, - 'g', NULL, "Ignored", ONE_DASH }, - { {"gpsize", required_argument, NULL, 'G'}, - 'G', "SIZE", "Small data size (if no size, same as --shared)", - TWO_DASHES }, - { {"soname", required_argument, NULL, OPTION_SONAME}, - 'h', "FILENAME", "Set internal name of shared library", ONE_DASH }, - { {"library", required_argument, NULL, 'l'}, - 'l', "LIBNAME", "Search for library LIBNAME", TWO_DASHES }, - { {"library-path", required_argument, NULL, 'L'}, - 'L', "DIRECTORY", "Add DIRECTORY to library search path", TWO_DASHES }, - { {NULL, required_argument, NULL, '\0'}, - 'm', "EMULATION", "Set emulation", ONE_DASH }, - { {"print-map", no_argument, NULL, 'M'}, - 'M', NULL, "Print map file on standard output", TWO_DASHES }, - { {"nmagic", no_argument, NULL, 'n'}, - 'n', NULL, "Do not page align data", TWO_DASHES }, - { {"omagic", no_argument, NULL, 'N'}, - 'N', NULL, "Do not page align data, do not make text readonly", - TWO_DASHES }, - { {"output", required_argument, NULL, 'o'}, - 'o', "FILE", "Set output file name", TWO_DASHES }, - { {NULL, required_argument, NULL, '\0'}, - 'O', NULL, "Ignored", ONE_DASH }, - { {"relocateable", no_argument, NULL, 'r'}, - 'r', NULL, "Generate relocateable output", TWO_DASHES }, - { {NULL, no_argument, NULL, '\0'}, - 'i', NULL, NULL, ONE_DASH }, - { {"just-symbols", required_argument, NULL, 'R'}, - 'R', "FILE", "Just link symbols (if directory, same as --rpath)", - TWO_DASHES }, - { {"strip-all", no_argument, NULL, 's'}, - 's', NULL, "Strip all symbols", TWO_DASHES }, - { {"strip-debug", no_argument, NULL, 'S'}, - 'S', NULL, "Strip debugging symbols", TWO_DASHES }, - { {"trace", no_argument, NULL, 't'}, - 't', NULL, "Trace file opens", TWO_DASHES }, - { {"script", required_argument, NULL, 'T'}, - 'T', "FILE", "Read linker script", TWO_DASHES }, - { {"undefined", required_argument, NULL, 'u'}, - 'u', "SYMBOL", "Start with undefined reference to SYMBOL", TWO_DASHES }, - { {"version", no_argument, NULL, OPTION_VERSION}, - 'v', NULL, "Print version information", TWO_DASHES }, - { {NULL, no_argument, NULL, '\0'}, - 'V', NULL, "Print version and emulation information", ONE_DASH }, - { {"discard-all", no_argument, NULL, 'x'}, - 'x', NULL, "Discard all local symbols", TWO_DASHES }, - { {"discard-locals", no_argument, NULL, 'X'}, - 'X', NULL, "Discard temporary local symbols", TWO_DASHES }, - { {"trace-symbol", required_argument, NULL, 'y'}, - 'y', "SYMBOL", "Trace mentions of SYMBOL", TWO_DASHES }, - { {NULL, required_argument, NULL, '\0'}, - 'Y', "PATH", "Default search path for Solaris compatibility", ONE_DASH }, - { {NULL, required_argument, NULL, '\0'}, - 'z', "KEYWORD", "Ignored for Solaris compatibility", ONE_DASH }, - { {"start-group", no_argument, NULL, '('}, - '(', NULL, "Start a group", TWO_DASHES }, - { {"end-group", no_argument, NULL, ')'}, - ')', NULL, "End a group", TWO_DASHES }, - { {"assert", required_argument, NULL, OPTION_ASSERT}, - '\0', "KEYWORD", "Ignored for SunOS compatibility", ONE_DASH }, - { {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED}, - '\0', NULL, "Link against shared libraries", ONE_DASH }, - { {"dy", no_argument, NULL, OPTION_CALL_SHARED}, - '\0', NULL, NULL, ONE_DASH }, - { {"call_shared", no_argument, NULL, OPTION_CALL_SHARED}, - '\0', NULL, NULL, ONE_DASH }, - { {"Bstatic", no_argument, NULL, OPTION_NON_SHARED}, - '\0', NULL, "Do not link against shared libraries", ONE_DASH }, - { {"dn", no_argument, NULL, OPTION_NON_SHARED}, - '\0', NULL, NULL, ONE_DASH }, - { {"non_shared", no_argument, NULL, OPTION_NON_SHARED}, - '\0', NULL, NULL, ONE_DASH }, - { {"static", no_argument, NULL, OPTION_NON_SHARED}, - '\0', NULL, NULL, ONE_DASH }, - { {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC}, - '\0', NULL, "Bind global references locally", ONE_DASH }, - { {"cref", no_argument, NULL, OPTION_CREF}, - '\0', NULL, "Output cross reference table", TWO_DASHES }, - { {"defsym", required_argument, NULL, OPTION_DEFSYM}, - '\0', "SYMBOL=EXPRESSION", "Define a symbol", TWO_DASHES }, - { {"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER}, - '\0', "PROGRAM", "Set the dynamic linker to use", TWO_DASHES }, - { {"EB", no_argument, NULL, OPTION_EB}, - '\0', NULL, "Link big-endian objects", ONE_DASH }, - { {"EL", no_argument, NULL, OPTION_EL}, - '\0', NULL, "Link little-endian objects", ONE_DASH }, - { {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS}, - '\0', NULL, "Generate embedded relocs", TWO_DASHES}, - { {"force-exe-suffix", no_argument, NULL, OPTION_FORCE_EXE_SUFFIX}, - '\0', NULL, "Force generation of file with .exe suffix", TWO_DASHES}, - { {"help", no_argument, NULL, OPTION_HELP}, - '\0', NULL, "Print option help", TWO_DASHES }, - { {"Map", required_argument, NULL, OPTION_MAP}, - '\0', "FILE", "Write a map file", ONE_DASH }, - { {"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY}, - '\0', NULL, "Use less memory and more disk I/O", TWO_DASHES }, - { {"no-warn-mismatch", no_argument, NULL, OPTION_NO_WARN_MISMATCH}, - '\0', NULL, "Don't warn about mismatched input files", TWO_DASHES}, - { {"no-whole-archive", no_argument, NULL, OPTION_NO_WHOLE_ARCHIVE}, - '\0', NULL, "Turn off --whole-archive", TWO_DASHES }, - { {"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC}, - '\0', NULL, "Create an output file even if errors occur", TWO_DASHES }, - { {"noinhibit_exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC}, - '\0', NULL, NULL, NO_HELP }, - { {"oformat", required_argument, NULL, OPTION_OFORMAT}, - '\0', "TARGET", "Specify target of output file", TWO_DASHES }, - { {"qmagic", no_argument, NULL, OPTION_IGNORE}, - '\0', NULL, "Ignored for Linux compatibility", ONE_DASH }, - { {"Qy", no_argument, NULL, OPTION_IGNORE}, - '\0', NULL, "Ignored for SVR4 compatibility", ONE_DASH }, - { {"relax", no_argument, NULL, OPTION_RELAX}, - '\0', NULL, "Relax branches on certain targets", TWO_DASHES }, - { {"retain-symbols-file", required_argument, NULL, - OPTION_RETAIN_SYMBOLS_FILE}, - '\0', "FILE", "Keep only symbols listed in FILE", TWO_DASHES }, - { {"rpath", required_argument, NULL, OPTION_RPATH}, - '\0', "PATH", "Set runtime shared library search path", ONE_DASH }, - { {"rpath-link", required_argument, NULL, OPTION_RPATH_LINK}, - '\0', "PATH", "Set link time shared library search path", ONE_DASH }, - { {"shared", no_argument, NULL, OPTION_SHARED}, - '\0', NULL, "Create a shared library", ONE_DASH }, - { {"Bshareable", no_argument, NULL, OPTION_SHARED }, /* FreeBSD. */ - '\0', NULL, NULL, ONE_DASH }, - { {"sort-common", no_argument, NULL, OPTION_SORT_COMMON}, - '\0', NULL, "Sort common symbols by size", TWO_DASHES }, - { {"sort_common", no_argument, NULL, OPTION_SORT_COMMON}, - '\0', NULL, NULL, NO_HELP }, - { {"split-by-file", no_argument, NULL, OPTION_SPLIT_BY_FILE}, - '\0', NULL, "Split output sections for each file", TWO_DASHES }, - { {"split-by-reloc", required_argument, NULL, OPTION_SPLIT_BY_RELOC}, - '\0', "COUNT", "Split output sections every COUNT relocs", TWO_DASHES }, - { {"stats", no_argument, NULL, OPTION_STATS}, - '\0', NULL, "Print memory usage statistics", TWO_DASHES }, - { {"task-link", required_argument, NULL, OPTION_TASK_LINK}, - '\0', "SYMBOL", "Do task level linking", TWO_DASHES }, - { {"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}, - '\0', NULL, "Use same format as native linker", TWO_DASHES }, - { {"Tbss", required_argument, NULL, OPTION_TBSS}, - '\0', "ADDRESS", "Set address of .bss section", ONE_DASH }, - { {"Tdata", required_argument, NULL, OPTION_TDATA}, - '\0', "ADDRESS", "Set address of .data section", ONE_DASH }, - { {"Ttext", required_argument, NULL, OPTION_TTEXT}, - '\0', "ADDRESS", "Set address of .text section", ONE_DASH }, - { {"Ur", no_argument, NULL, OPTION_UR}, - '\0', NULL, "Build global constructor/destructor tables", ONE_DASH }, - { {"verbose", no_argument, NULL, OPTION_VERBOSE}, - '\0', NULL, "Output lots of information during link", TWO_DASHES }, - { {"dll-verbose", no_argument, NULL, OPTION_VERBOSE}, /* Linux. */ - '\0', NULL, NULL, NO_HELP }, - { {"version-script", required_argument, NULL, OPTION_VERSION_SCRIPT }, - '\0', "FILE", "Read version information script", TWO_DASHES }, - { {"warn-common", no_argument, NULL, OPTION_WARN_COMMON}, - '\0', NULL, "Warn about duplicate common symbols", TWO_DASHES }, - { {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS}, - '\0', NULL, "Warn if global constructors/destructors are seen", - TWO_DASHES }, - { {"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP}, - '\0', NULL, "Warn if the multiple GP values are used", TWO_DASHES }, - { {"warn-once", no_argument, NULL, OPTION_WARN_ONCE}, - '\0', NULL, "Warn only once per undefined symbol", TWO_DASHES }, - { {"warn-section-align", no_argument, NULL, OPTION_WARN_SECTION_ALIGN}, - '\0', NULL, "Warn if start of section changes due to alignment", - TWO_DASHES }, - { {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE}, - '\0', NULL, "Include all objects from following archives", TWO_DASHES }, - { {"wrap", required_argument, NULL, OPTION_WRAP}, - '\0', "SYMBOL", "Use wrapper functions for SYMBOL", TWO_DASHES } -}; - -#define OPTION_COUNT ((int) (sizeof ld_options / sizeof ld_options[0])) - -void -parse_args (argc, argv) - int argc; - char **argv; -{ - int i, is, il; - int ingroup = 0; - char *default_dirlist = NULL; - char shortopts[OPTION_COUNT * 3 + 2]; - struct option longopts[OPTION_COUNT + 1]; - int last_optind; - - /* Starting the short option string with '-' is for programs that - expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. */ - shortopts[0] = '-'; - is = 1; - il = 0; - for (i = 0; i < OPTION_COUNT; i++) - { - if (ld_options[i].shortopt != '\0') - { - shortopts[is] = ld_options[i].shortopt; - ++is; - if (ld_options[i].opt.has_arg == required_argument - || ld_options[i].opt.has_arg == optional_argument) - { - shortopts[is] = ':'; - ++is; - if (ld_options[i].opt.has_arg == optional_argument) - { - shortopts[is] = ':'; - ++is; - } - } - } - if (ld_options[i].opt.name != NULL) - { - longopts[il] = ld_options[i].opt; - ++il; - } - } - shortopts[is] = '\0'; - longopts[il].name = NULL; - - /* The -G option is ambiguous on different platforms. Sometimes it - specifies the largest data size to put into the small data - section. Sometimes it is equivalent to --shared. Unfortunately, - the first form takes an argument, while the second does not. - - We need to permit the --shared form because on some platforms, - such as Solaris, gcc -shared will pass -G to the linker. - - To permit either usage, we look through the argument list. If we - find -G not followed by a number, we change it into --shared. - This will work for most normal cases. */ - for (i = 1; i < argc; i++) - if (strcmp (argv[i], "-G") == 0 - && (i + 1 >= argc - || ! isdigit ((unsigned char) argv[i + 1][0]))) - argv[i] = (char *) "--shared"; - - last_optind = -1; - while (1) - { - /* getopt_long_only is like getopt_long, but '-' as well as '--' can - indicate a long option. */ - int longind; - int optc; - - /* Using last_optind lets us avoid calling ldemul_parse_args - multiple times on a single option, which would lead to - confusion in the internal static variables maintained by - getopt. This could otherwise happen for an argument like - -nx, in which the -n is parsed as a single option, and we - loop around to pick up the -x. */ - if (optind != last_optind) - { - if (ldemul_parse_args (argc, argv)) - continue; - last_optind = optind; - } - - optc = getopt_long_only (argc, argv, shortopts, longopts, &longind); - - if (optc == -1) - break; - switch (optc) - { - default: - xexit (1); - case 1: /* File name. */ - lang_add_input_file (optarg, lang_input_file_is_file_enum, - (char *) NULL); - break; - - case OPTION_IGNORE: - break; - case 'a': - /* For HP/UX compatibility. Actually -a shared should mean - ``use only shared libraries'' but, then, we don't - currently support shared libraries on HP/UX anyhow. */ - if (strcmp (optarg, "archive") == 0) - config.dynamic_link = false; - else if (strcmp (optarg, "shared") == 0 - || strcmp (optarg, "default") == 0) - config.dynamic_link = true; - else - einfo ("%P%F: unrecognized -a option `%s'\n", optarg); - break; - case OPTION_ASSERT: - /* FIXME: We just ignore these, but we should handle them. */ - if (strcmp (optarg, "definitions") == 0) - ; - else if (strcmp (optarg, "nodefinitions") == 0) - ; - else if (strcmp (optarg, "nosymbolic") == 0) - ; - else if (strcmp (optarg, "pure-text") == 0) - ; - else - einfo ("%P%F: unrecognized -assert option `%s'\n", optarg); - break; - case 'A': - ldfile_add_arch (optarg); - break; - case 'b': - lang_add_target (optarg); - break; - case 'c': - ldfile_open_command_file (optarg); - parser_input = input_mri_script; - yyparse (); - break; - case OPTION_CALL_SHARED: - config.dynamic_link = true; - break; - case OPTION_NON_SHARED: - config.dynamic_link = false; - break; - case OPTION_CREF: - command_line.cref = true; - link_info.notice_all = true; - break; - case 'd': - command_line.force_common_definition = true; - break; - case OPTION_DEFSYM: - lex_string = optarg; - lex_redirect (optarg); - parser_input = input_defsym; - parsing_defsym = 1; - yyparse (); - parsing_defsym = 0; - lex_string = NULL; - break; - case OPTION_DYNAMIC_LINKER: - command_line.interpreter = optarg; - break; - case OPTION_EB: - command_line.endian = ENDIAN_BIG; - break; - case OPTION_EL: - command_line.endian = ENDIAN_LITTLE; - break; - case OPTION_EMBEDDED_RELOCS: - command_line.embedded_relocs = true; - break; - case OPTION_EXPORT_DYNAMIC: - case 'E': /* HP/UX compatibility. */ - command_line.export_dynamic = true; - break; - case 'e': - lang_add_entry (optarg, true); - break; - case 'f': - if (command_line.auxiliary_filters == NULL) - { - command_line.auxiliary_filters = - (char **) xmalloc (2 * sizeof (char *)); - command_line.auxiliary_filters[0] = optarg; - command_line.auxiliary_filters[1] = NULL; - } - else - { - int c; - char **p; - - c = 0; - for (p = command_line.auxiliary_filters; *p != NULL; p++) - ++c; - command_line.auxiliary_filters = - (char **) xrealloc (command_line.auxiliary_filters, - (c + 2) * sizeof (char *)); - command_line.auxiliary_filters[c] = optarg; - command_line.auxiliary_filters[c + 1] = NULL; - } - break; - case 'F': - command_line.filter_shlib = optarg; - break; - case OPTION_FORCE_EXE_SUFFIX: - command_line.force_exe_suffix = true; - break; - case 'G': - { - char *end; - g_switch_value = strtoul (optarg, &end, 0); - if (*end) - einfo ("%P%F: invalid number `%s'\n", optarg); - } - break; - case 'g': - /* Ignore. */ - break; - case OPTION_HELP: - help (); - xexit (0); - break; - case 'L': - ldfile_add_library_path (optarg, true); - break; - case 'l': - lang_add_input_file (optarg, lang_input_file_is_l_enum, - (char *) NULL); - break; - case 'M': - config.map_filename = "-"; - break; - case 'm': - /* Ignore. Was handled in a pre-parse. */ - break; - case OPTION_MAP: - config.map_filename = optarg; - break; - case 'N': - config.text_read_only = false; - config.magic_demand_paged = false; - config.dynamic_link = false; - break; - case 'n': - config.magic_demand_paged = false; - config.dynamic_link = false; - break; - case OPTION_NO_KEEP_MEMORY: - link_info.keep_memory = false; - break; - case OPTION_NO_WARN_MISMATCH: - command_line.warn_mismatch = false; - break; - case OPTION_NOINHIBIT_EXEC: - force_make_executable = true; - break; - case OPTION_NO_WHOLE_ARCHIVE: - whole_archive = false; - break; - case 'O': - /* FIXME "-O<non-digits> <value>" used to set the address of - section <non-digits>. Was this for compatibility with - something, or can we create a new option to do that - (with a syntax similar to -defsym)? - getopt can't handle two args to an option without kludges. */ - break; - case 'o': - lang_add_output (optarg, 0); - break; - case OPTION_OFORMAT: - lang_add_output_format (optarg, (char *) NULL, (char *) NULL, 0); - break; - case 'i': - case 'r': - link_info.relocateable = true; - config.build_constructors = false; - config.magic_demand_paged = false; - config.text_read_only = false; - config.dynamic_link = false; - break; - case 'R': - /* The GNU linker traditionally uses -R to mean to include - only the symbols from a file. The Solaris linker uses -R - to set the path used by the runtime linker to find - libraries. This is the GNU linker -rpath argument. We - try to support both simultaneously by checking the file - named. If it is a directory, rather than a regular file, - we assume -rpath was meant. */ - { - struct stat s; - - if (stat (optarg, &s) >= 0 - && ! S_ISDIR (s.st_mode)) - { - lang_add_input_file (optarg, - lang_input_file_is_symbols_only_enum, - (char *) NULL); - break; - } - } - /* Fall through. */ - case OPTION_RPATH: - if (command_line.rpath == NULL) - command_line.rpath = buystring (optarg); - else - { - char *buf; - - buf = xmalloc (strlen (command_line.rpath) - + strlen (optarg) - + 2); - sprintf (buf, "%s:%s", command_line.rpath, optarg); - free (command_line.rpath); - command_line.rpath = buf; - } - break; - case OPTION_RPATH_LINK: - if (command_line.rpath_link == NULL) - command_line.rpath_link = buystring (optarg); - else - { - char *buf; - - buf = xmalloc (strlen (command_line.rpath_link) - + strlen (optarg) - + 2); - sprintf (buf, "%s:%s", command_line.rpath_link, optarg); - free (command_line.rpath_link); - command_line.rpath_link = buf; - } - break; - case OPTION_RELAX: - command_line.relax = true; - break; - case OPTION_RETAIN_SYMBOLS_FILE: - add_keepsyms_file (optarg); - break; - case 'S': - link_info.strip = strip_debugger; - break; - case 's': - link_info.strip = strip_all; - break; - case OPTION_SHARED: - link_info.shared = true; - break; - case 'h': /* Used on Solaris. */ - case OPTION_SONAME: - command_line.soname = optarg; - break; - case OPTION_SORT_COMMON: - config.sort_common = true; - break; - case OPTION_STATS: - config.stats = true; - break; - case OPTION_SYMBOLIC: - link_info.symbolic = true; - break; - case 't': - trace_files = true; - break; - case 'T': - ldfile_open_command_file (optarg); - parser_input = input_script; - yyparse (); - break; - case OPTION_TBSS: - set_section_start (".bss", optarg); - break; - case OPTION_TDATA: - set_section_start (".data", optarg); - break; - case OPTION_TTEXT: - set_section_start (".text", optarg); - break; - case OPTION_TRADITIONAL_FORMAT: - link_info.traditional_format = true; - break; - case OPTION_TASK_LINK: - link_info.task_link = true; - /* Fall through - do an implied -r option. */ - case OPTION_UR: - link_info.relocateable = true; - config.build_constructors = true; - config.magic_demand_paged = false; - config.text_read_only = false; - config.dynamic_link = false; - break; - case 'u': - ldlang_add_undef (optarg); - break; - case OPTION_VERBOSE: - ldversion (1); - version_printed = true; - trace_file_tries = true; - break; - case 'v': - ldversion (0); - version_printed = true; - break; - case 'V': - ldversion (1); - version_printed = true; - break; - case OPTION_VERSION: - /* This output is intended to follow the GNU standards document. */ - printf ("GNU ld %s\n", ld_program_version); - printf ("Copyright 1997 Free Software Foundation, Inc.\n"); - printf ("\ -This program is free software; you may redistribute it under the terms of\n\ -the GNU General Public License. This program has absolutely no warranty.\n"); - { - ld_emulation_xfer_type **ptr = ld_emulations; - - printf (" Supported emulations:\n"); - while (*ptr) - { - printf (" %s\n", (*ptr)->emulation_name); - ptr++; - } - } - xexit (0); - break; - case OPTION_VERSION_SCRIPT: - /* This option indicates a small script that only specifies - version information. Read it, but don't assume that - we've seen a linker script. */ - { - boolean hold_had_script; - - hold_had_script = had_script; - ldfile_open_command_file (optarg); - had_script = hold_had_script; - parser_input = input_version_script; - yyparse (); - } - break; - case OPTION_WARN_COMMON: - config.warn_common = true; - break; - case OPTION_WARN_CONSTRUCTORS: - config.warn_constructors = true; - break; - case OPTION_WARN_MULTIPLE_GP: - config.warn_multiple_gp = true; - break; - case OPTION_WARN_ONCE: - config.warn_once = true; - break; - case OPTION_WARN_SECTION_ALIGN: - config.warn_section_align = true; - break; - case OPTION_WHOLE_ARCHIVE: - whole_archive = true; - break; - case OPTION_WRAP: - add_wrap (optarg); - break; - case 'X': - link_info.discard = discard_l; - break; - case 'x': - link_info.discard = discard_all; - break; - case 'Y': - if (strncmp (optarg, "P,", 2) == 0) - optarg += 2; - default_dirlist = xstrdup (optarg); - break; - case 'y': - add_ysym (optarg); - break; - case 'z': - /* We accept and ignore this option for Solaris - compatibility. Actually, on Solaris, optarg is not - ignored. Someday we should handle it correctly. FIXME. */ - break; - case OPTION_SPLIT_BY_RELOC: - config.split_by_reloc = atoi (optarg); - break; - case OPTION_SPLIT_BY_FILE: - config.split_by_file = true; - break; - case '(': - if (ingroup) - { - fprintf (stderr, - "%s: may not nest groups (--help for usage)\n", - program_name); - xexit (1); - } - lang_enter_group (); - ingroup = 1; - break; - case ')': - if (! ingroup) - { - fprintf (stderr, - "%s: group ended before it began (--help for usage)\n", - program_name); - xexit (1); - } - lang_leave_group (); - ingroup = 0; - break; - - } - } - - if (ingroup) - lang_leave_group (); - - if (default_dirlist != NULL) - set_default_dirlist (default_dirlist); - -} - -/* Add the (colon-separated) elements of DIRLIST_PTR to the - library search path. */ - -static void -set_default_dirlist (dirlist_ptr) - char *dirlist_ptr; -{ - char *p; - - while (1) - { - p = strchr (dirlist_ptr, PATH_SEPARATOR); - if (p != NULL) - *p = '\0'; - if (*dirlist_ptr != '\0') - ldfile_add_library_path (dirlist_ptr, true); - if (p == NULL) - break; - dirlist_ptr = p + 1; - } -} - -static void -set_section_start (sect, valstr) - char *sect, *valstr; -{ - char *end; - unsigned long val = strtoul (valstr, &end, 16); - if (*end) - einfo ("%P%F: invalid hex number `%s'\n", valstr); - lang_section_start (sect, exp_intop (val)); -} - -/* Print help messages for the options. */ - -static void -help () -{ - int i; - const char **targets, **pp; - - printf ("Usage: %s [options] file...\n", program_name); - - printf ("Options:\n"); - for (i = 0; i < OPTION_COUNT; i++) - { - if (ld_options[i].doc != NULL) - { - boolean comma; - int len; - int j; - - printf (" "); - - comma = false; - len = 2; - - j = i; - do - { - if (ld_options[j].shortopt != '\0' - && ld_options[j].control != NO_HELP) - { - printf ("%s-%c", comma ? ", " : "", ld_options[j].shortopt); - len += (comma ? 2 : 0) + 2; - if (ld_options[j].arg != NULL) - { - if (ld_options[j].opt.has_arg != optional_argument) - { - printf (" "); - ++len; - } - printf ("%s", ld_options[j].arg); - len += strlen (ld_options[j].arg); - } - comma = true; - } - ++j; - } - while (j < OPTION_COUNT && ld_options[j].doc == NULL); - - j = i; - do - { - if (ld_options[j].opt.name != NULL - && ld_options[j].control != NO_HELP) - { - printf ("%s-%s%s", - comma ? ", " : "", - ld_options[j].control == TWO_DASHES ? "-" : "", - ld_options[j].opt.name); - len += ((comma ? 2 : 0) - + 1 - + (ld_options[j].control == TWO_DASHES ? 1 : 0) - + strlen (ld_options[j].opt.name)); - if (ld_options[j].arg != NULL) - { - printf (" %s", ld_options[j].arg); - len += 1 + strlen (ld_options[j].arg); - } - comma = true; - } - ++j; - } - while (j < OPTION_COUNT && ld_options[j].doc == NULL); - - if (len >= 30) - { - printf ("\n"); - len = 0; - } - - for (; len < 30; len++) - putchar (' '); - - printf ("%s\n", ld_options[i].doc); - } - } - - printf ("%s: supported targets:", program_name); - targets = bfd_target_list (); - for (pp = targets; *pp != NULL; pp++) - printf (" %s", *pp); - free (targets); - printf ("\n"); - - printf ("%s: supported emulations: ", program_name); - ldemul_list_emulations (stdout); - printf ("\n"); - printf ("\nReport bugs to bug-gnu-utils@gnu.org\n"); -} diff --git a/contrib/binutils/ld/mri.c b/contrib/binutils/ld/mri.c deleted file mode 100644 index d07622a1ab4e..000000000000 --- a/contrib/binutils/ld/mri.c +++ /dev/null @@ -1,377 +0,0 @@ -/* mri.c -- handle MRI style linker scripts - Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) -any later version. - -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -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. */ - - -/* This bit does the tree decoration when MRI style link scripts are parsed */ - -/* - contributed by Steve Chamberlain - sac@cygnus.com - -*/ - -#include "bfd.h" -#include "sysdep.h" -#include "ld.h" -#include "ldexp.h" -#include "ldlang.h" -#include "ldmisc.h" -#include "mri.h" -#include "ldgram.h" -#include "libiberty.h" - -struct section_name_struct { - struct section_name_struct *next; - CONST char *name; - CONST char *alias; - etree_type *vma; - etree_type *align; - etree_type *subalign; - int ok_to_load; -} ; - -unsigned int symbol_truncate = 10000; -struct section_name_struct *order; -struct section_name_struct *only_load; -struct section_name_struct *address; -struct section_name_struct *alias; - -struct section_name_struct *alignment; -struct section_name_struct *subalignment; - -static struct section_name_struct **lookup - PARAMS ((const char *name, struct section_name_struct **list)); -static void mri_add_to_list PARAMS ((struct section_name_struct **list, - const char *name, etree_type *vma, - const char *zalias, etree_type *align, - etree_type *subalign)); - -static struct section_name_struct ** -lookup (name, list) - CONST char *name; - struct section_name_struct **list; -{ - - struct section_name_struct **ptr = list; - while (*ptr) - { - if (strcmp(name, (*ptr)->name) == 0) { - /* If this is a match, delete it, we only keep the last instance - of any name */ - *ptr = (*ptr)->next; - } - else { - ptr = &((*ptr)->next); - } - } - - *ptr = (struct section_name_struct *)xmalloc(sizeof(struct section_name_struct)); - return ptr; -} - -static void -mri_add_to_list (list, name, vma, zalias, align, subalign) - struct section_name_struct **list; - CONST char *name; - etree_type *vma; - CONST char *zalias; - etree_type *align; - etree_type *subalign; -{ - struct section_name_struct **ptr = lookup(name,list); - (*ptr)->name = name; - (*ptr)->vma = vma; - (*ptr)->next = (struct section_name_struct *)NULL; - (*ptr)->ok_to_load = 0; - (*ptr)->alias = zalias; - (*ptr)->align = align; - (*ptr)->subalign = subalign; -} - - -void -mri_output_section (name, vma) - CONST char *name; - etree_type *vma; -{ - mri_add_to_list(&address, name, vma, 0,0,0); -} - -/* if any ABSOLUTE <name> are in the script, only load those files -marked thus */ - -void -mri_only_load (name) - CONST char *name; -{ - mri_add_to_list(&only_load, name, 0, 0,0,0); -} - - -void -mri_base (exp) - etree_type *exp; -{ - base = exp; -} - -static int done_tree = 0; - -void -mri_draw_tree () -{ - if (done_tree) return; - - /* We don't bother with memory regions. */ -#if 0 - /* Create the regions */ - { - lang_memory_region_type *r; - r = lang_memory_region_lookup("long"); - r->current = r->origin = exp_get_vma(base, (bfd_vma)0, "origin", - lang_first_phase_enum); - r->length = (bfd_size_type) exp_get_vma(0, (bfd_vma) ~((bfd_size_type)0), - "length", lang_first_phase_enum); - } -#endif - - /* Now build the statements for the ldlang machine */ - - - /* Attatch the addresses of any which have addresses, and add the - ones not mentioned */ - if (address != (struct section_name_struct *)NULL) { - struct section_name_struct *alist; - struct section_name_struct *olist; - if (order == (struct section_name_struct *)NULL) { - order = address; - } - - for (alist = address; - alist != (struct section_name_struct*)NULL; - alist = alist->next) - { - int done = 0; - for (olist = order; - done == 0 && - olist != (struct section_name_struct *)NULL; - olist = olist->next) - { - if (strcmp(alist->name, olist->name) == 0) - { - olist->vma = alist->vma; - done = 1; - } - } - if (!done) { - /* add this onto end of order list */ - mri_add_to_list(&order, alist->name, alist->vma, 0,0,0); - } - - } - - } - - /* If we're only supposed to load a subset of them in, then prune - the list. */ - - if (only_load != (struct section_name_struct *)NULL) - { - struct section_name_struct *ptr1; - struct section_name_struct *ptr2; - if (order == (struct section_name_struct*)NULL) - order = only_load; - - /* See if this name is in the list, if it is then we can load it - */ - for (ptr1 = only_load; ptr1; ptr1 = ptr1->next) - { - for (ptr2= order; ptr2; ptr2=ptr2->next) - { - if (strcmp(ptr2->name, ptr1->name)==0) { - ptr2->ok_to_load = 1; - } - } - } - } - else - { - /* No only load list, so everything is ok to load */ - struct section_name_struct *ptr; - for (ptr = order; ptr; ptr=ptr->next) { - ptr->ok_to_load = 1; - } - } - - - - /* Create the order of sections to load */ - if (order != (struct section_name_struct *)NULL) - { - /* Been told to output the sections in a certain order */ - struct section_name_struct *p = order; - while (p) - { - struct section_name_struct *aptr; - etree_type *align = 0; - etree_type *subalign = 0; - /* See if an alignment has been specified */ - - for (aptr = alignment; aptr; aptr= aptr->next) - { - if (strcmp(aptr->name, p->name)==0) { - align = aptr->align; - } - } - - for (aptr = subalignment; aptr; aptr= aptr->next) - { - if (strcmp(aptr->name, p->name)==0) { - subalign = aptr->subalign; - } - } - - if (base == 0) { - base = p->vma ? p->vma :exp_nameop(NAME, "."); - } - lang_enter_output_section_statement (p->name, base, - p->ok_to_load ? 0 : noload_section, - 1, align, subalign, - (etree_type *) NULL); - base = 0; - lang_add_wild(p->name, (char *)NULL); - /* If there is an alias for this section, add it too */ - for (aptr = alias; aptr; aptr = aptr->next) { - - if (strcmp(aptr->alias, p->name)== 0) { - lang_add_wild(aptr->name, (char *)NULL); - } - } - - lang_leave_output_section_statement - (0, "*default*", (struct lang_output_section_phdr_list *) NULL); - - p = p->next; - } - } - - - done_tree = 1; - -} -void -mri_load (name) - CONST char *name; -{ - base = 0; - lang_add_input_file(name, - lang_input_file_is_file_enum, (char *)NULL); - /* lang_leave_output_section_statement(0,"*default*");*/ -} - - -void -mri_order (name) - CONST char *name; -{ - mri_add_to_list(&order, name, 0, 0,0,0); -} - -void -mri_alias (want, is, isn) - CONST char *want; - CONST char *is; - int isn; -{ - if (!is) { - /* Some sections are digits - */ - char buf[20]; - sprintf(buf, "%d", isn); - is = xstrdup (buf); - if (is == NULL) - abort (); - } - mri_add_to_list(&alias, is, 0, want,0,0); - -} - - -void -mri_name (name) - CONST char *name; -{ - lang_add_output(name, 1); - -} - - -void -mri_format (name) - CONST char *name; -{ - if (strcmp(name, "S") == 0) - { - lang_add_output_format("srec", (char *) NULL, (char *) NULL, 1); - } - else if (strcmp(name, "IEEE") == 0) - { - lang_add_output_format("ieee", (char *) NULL, (char *) NULL, 1); - } - else if (strcmp(name, "COFF") == 0) - { - lang_add_output_format("coff-m68k", (char *) NULL, (char *) NULL, 1); - } - else { - einfo("%P%F: unknown format type %s\n", name); - } -} - - -void -mri_public (name, exp) - CONST char *name; - etree_type *exp; -{ - lang_add_assignment(exp_assop('=', name, exp)); -} - -void -mri_align (name, exp) - CONST char *name; - etree_type *exp; -{ - mri_add_to_list(&alignment, name,0,0,exp,0); -} - -void -mri_alignmod (name, exp) - CONST char *name; - etree_type *exp; -{ - mri_add_to_list(&subalignment, name,0,0,0,exp); -} - - -void -mri_truncate (exp) - unsigned int exp; -{ - symbol_truncate = exp; -} diff --git a/contrib/binutils/ld/mri.h b/contrib/binutils/ld/mri.h deleted file mode 100644 index dc3f0f3a190e..000000000000 --- a/contrib/binutils/ld/mri.h +++ /dev/null @@ -1,39 +0,0 @@ -/* mri.h -- header file for MRI scripting functions - Copyright 1993, 95, 1996 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef MRI_H -#define MRI_H - -extern unsigned int symbol_truncate; - -extern void mri_output_section PARAMS ((const char *name, etree_type *vma)); -extern void mri_only_load PARAMS ((const char *name)); -extern void mri_base PARAMS ((etree_type *exp)); -extern void mri_load PARAMS ((const char *name)); -extern void mri_order PARAMS ((const char *name)); -extern void mri_alias PARAMS ((const char *want, const char *is, int isn)); -extern void mri_name PARAMS ((const char *name)); -extern void mri_format PARAMS ((const char *name)); -extern void mri_public PARAMS ((const char *name, etree_type *exp)); -extern void mri_align PARAMS ((const char *name, etree_type *exp)); -extern void mri_alignmod PARAMS ((const char *name, etree_type *exp)); -extern void mri_truncate PARAMS ((unsigned int exp)); -extern void mri_draw_tree PARAMS ((void)); - -#endif diff --git a/contrib/binutils/ld/scripttempl/README b/contrib/binutils/ld/scripttempl/README deleted file mode 100644 index 26ad2e934e2e..000000000000 --- a/contrib/binutils/ld/scripttempl/README +++ /dev/null @@ -1,4 +0,0 @@ -The files in this directory are linker script templates. -genscripts.sh sets some shell variables, then sources -EMULATION.sc, to generate EMULATION.{x,xr,xu,xn,xbn} -- the script -files for default, -r, -Ur, -n, -N. diff --git a/contrib/binutils/ld/scripttempl/alpha.sc b/contrib/binutils/ld/scripttempl/alpha.sc deleted file mode 100644 index 44a10c469cd2..000000000000 --- a/contrib/binutils/ld/scripttempl/alpha.sc +++ /dev/null @@ -1,74 +0,0 @@ -# Linker script for Alpha systems. -# Ian Lance Taylor <ian@cygnus.com>. -# These variables may be overridden by the emulation file. The -# defaults are appropriate for an Alpha running OSF/1. -test -z "$ENTRY" && ENTRY=__start -test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x120000000 + SIZEOF_HEADERS" -if test "x$LD_FLAG" = "xn" -o "x$LD_FLAG" = "xN"; then - DATA_ADDR=. -else - test -z "$DATA_ADDR" && DATA_ADDR=0x140000000 -fi -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -${LIB_SEARCH_DIRS} - -ENTRY(${ENTRY}) - -SECTIONS -{ - ${RELOCATING+. = ${TEXT_START_ADDR};} - .text : { - ${RELOCATING+ _ftext = . }; - ${RELOCATING+ __istart = . }; - ${RELOCATING+ *(.init) } - ${RELOCATING+ LONG (0x6bfa8001)} - ${RELOCATING+ eprol = .}; - *(.text) - ${RELOCATING+ __fstart = . }; - ${RELOCATING+ *(.fini)} - ${RELOCATING+ LONG (0x6bfa8001)} - ${RELOCATING+ _etext = .}; - } - .rdata : { - *(.rdata) - } - .rconst : { - *(.rconst) - } - .pdata : { - ${RELOCATING+ _fpdata = .;} - *(.pdata) - } - ${RELOCATING+. = ${DATA_ADDR};} - .data : { - ${RELOCATING+ _fdata = .;} - *(.data) - ${CONSTRUCTING+CONSTRUCTORS} - } - .xdata : { - *(.xdata) - } - ${RELOCATING+ _gp = ALIGN (16) + 0x8000;} - .lit8 : { - *(.lit8) - } - .lita : { - *(.lita) - } - .sdata : { - *(.sdata) - } - ${RELOCATING+ _EDATA = .;} - ${RELOCATING+ _FBSS = .;} - .sbss : { - *(.sbss) - *(.scommon) - } - .bss : { - *(.bss) - *(COMMON) - } - ${RELOCATING+ _end = .;} -} -EOF diff --git a/contrib/binutils/ld/scripttempl/aout.sc b/contrib/binutils/ld/scripttempl/aout.sc deleted file mode 100644 index 66cc42dfeb65..000000000000 --- a/contrib/binutils/ld/scripttempl/aout.sc +++ /dev/null @@ -1,55 +0,0 @@ -test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} - -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", - "${LITTLE_OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -${RELOCATING+${LIB_SEARCH_DIRS}} -${STACKZERO+${RELOCATING+${STACKZERO}}} -${SHLIB_PATH+${RELOCATING+${SHLIB_PATH}}} -${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING+PROVIDE (__stack = 0);} -SECTIONS -{ - ${RELOCATING+. = ${TEXT_START_ADDR};} - .text : - { - CREATE_OBJECT_SYMBOLS - *(.text) - /* The next six sections are for SunOS dynamic linking. The order - is important. */ - *(.dynrel) - *(.hash) - *(.dynsym) - *(.dynstr) - *(.rules) - *(.need) - ${RELOCATING+_etext = .;} - ${RELOCATING+__etext = .;} - ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}} - } - ${RELOCATING+. = ${DATA_ALIGNMENT};} - .data : - { - /* The first three sections are for SunOS dynamic linking. */ - *(.dynamic) - *(.got) - *(.plt) - *(.data) - *(.linux-dynamic) /* For Linux dynamic linking. */ - ${CONSTRUCTING+CONSTRUCTORS} - ${RELOCATING+_edata = .;} - ${RELOCATING+__edata = .;} - } - .bss : - { - ${RELOCATING+ __bss_start = .}; - *(.bss) - *(COMMON) - ${RELOCATING+_end = ALIGN(4) }; - ${RELOCATING+__end = ALIGN(4) }; - } -} -EOF diff --git a/contrib/binutils/ld/scripttempl/elf.sc b/contrib/binutils/ld/scripttempl/elf.sc deleted file mode 100644 index 83e589aaa4ec..000000000000 --- a/contrib/binutils/ld/scripttempl/elf.sc +++ /dev/null @@ -1,218 +0,0 @@ -# -# Unusual variables checked by this code: -# NOP - two byte opcode for no-op (defaults to 0) -# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start -# INITIAL_READONLY_SECTIONS - at start of text segment -# OTHER_READONLY_SECTIONS - other than .text .init .rodata ... -# (e.g., .PARISC.milli) -# OTHER_TEXT_SECTIONS - these get put in .text when relocating -# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ... -# (e.g., .PARISC.global) -# OTHER_SECTIONS - at the end -# EXECUTABLE_SYMBOLS - symbols that must be defined for an -# executable (e.g., _DYNAMIC_LINK) -# TEXT_START_SYMBOLS - symbols that appear at the start of the -# .text section. -# DATA_START_SYMBOLS - symbols that appear at the start of the -# .data section. -# OTHER_GOT_SYMBOLS - symbols defined just before .got. -# OTHER_GOT_SECTIONS - sections just after .got and .sdata. -# OTHER_BSS_SYMBOLS - symbols that appear at the start of the -# .bss section besides __bss_start. -# DATA_PLT - .plt should be in data segment, not text segment. -# TEXT_DYNAMIC - .dynamic in text segment, not data segment. -# EMBEDDED - whether this is for an embedded system. -# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set -# start address of shared library. -# -# When adding sections, do note that the names of some sections are used -# when specifying the start address of the next. -# - -test -z "$ENTRY" && ENTRY=_start -test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} -if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi -test -z "${ELFSIZE}" && ELFSIZE=32 -test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" - -# if this is for an embedded system, don't add SIZEOF_HEADERS. -if [ -z "$EMBEDDED" ]; then - test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS" -else - test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}" -fi - -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", - "${LITTLE_OUTPUT_FORMAT}") -OUTPUT_ARCH(${OUTPUT_ARCH}) -ENTRY(${ENTRY}) - -${RELOCATING+${LIB_SEARCH_DIRS}} -${RELOCATING+/* Do we need any of these for elf? - __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} -${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_BASE_ADDRESS};}} - ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}} - ${CREATE_SHLIB-${INTERP}} - ${INITIAL_READONLY_SECTIONS} - ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - .rel.text ${RELOCATING-0} : - { *(.rel.text) ${RELOCATING+*(.rel.gnu.linkonce.t*)} } - .rela.text ${RELOCATING-0} : - { *(.rela.text) ${RELOCATING+*(.rela.gnu.linkonce.t*)} } - .rel.data ${RELOCATING-0} : - { *(.rel.data) ${RELOCATING+*(.rel.gnu.linkonce.d*)} } - .rela.data ${RELOCATING-0} : - { *(.rela.data) ${RELOCATING+*(.rela.gnu.linkonce.d*)} } - .rel.rodata ${RELOCATING-0} : - { *(.rel.rodata) ${RELOCATING+*(.rel.gnu.linkonce.r*)} } - .rela.rodata ${RELOCATING-0} : - { *(.rela.rodata) ${RELOCATING+*(.rela.gnu.linkonce.r*)} } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - .init ${RELOCATING-0} : { *(.init) } =${NOP-0} - ${DATA_PLT-${PLT}} - .text ${RELOCATING-0} : - { - ${RELOCATING+${TEXT_START_SYMBOLS}} - *(.text) - *(.stub) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - ${RELOCATING+*(.gnu.linkonce.t*)} - ${RELOCATING+${OTHER_TEXT_SECTIONS}} - } =${NOP-0} - ${RELOCATING+_etext = .;} - ${RELOCATING+PROVIDE (etext = .);} - .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0} - .rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.gnu.linkonce.r*)} } - .rodata1 ${RELOCATING-0} : { *(.rodata1) } - ${RELOCATING+${OTHER_READONLY_SECTIONS}} - - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - ${CREATE_SHLIB-${RELOCATING+. = ${DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}} - ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}} - - .data ${RELOCATING-0} : - { - ${RELOCATING+${DATA_START_SYMBOLS}} - *(.data) - ${RELOCATING+*(.gnu.linkonce.d*)} - ${CONSTRUCTING+CONSTRUCTORS} - } - .data1 ${RELOCATING-0} : { *(.data1) } - ${RELOCATING+${OTHER_READWRITE_SECTIONS}} - .ctors ${RELOCATING-0} : - { - ${CONSTRUCTING+${CTOR_START}} - *(.ctors) - ${CONSTRUCTING+${CTOR_END}} - } - .dtors ${RELOCATING-0} : - { - ${CONSTRUCTING+${DTOR_START}} - *(.dtors) - ${CONSTRUCTING+${DTOR_END}} - } - ${DATA_PLT+${PLT}} - ${RELOCATING+${OTHER_GOT_SYMBOLS}} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } - ${TEXT_DYNAMIC-${DYNAMIC}} - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata ${RELOCATING-0} : { *(.sdata) } - ${RELOCATING+${OTHER_GOT_SECTIONS}} - ${RELOCATING+_edata = .;} - ${RELOCATING+PROVIDE (edata = .);} - ${RELOCATING+__bss_start = .;} - ${RELOCATING+${OTHER_BSS_SYMBOLS}} - .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) } - .bss ${RELOCATING-0} : - { - *(.dynbss) - *(.bss) - *(COMMON) - } - ${RELOCATING+. = ALIGN(${ELFSIZE} / 8);} - ${RELOCATING+_end = . ;} - ${RELOCATING+PROVIDE (end = .);} - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - - .comment 0 : { *(.comment) } - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - - ${RELOCATING+${OTHER_RELOCATING_SECTIONS}} - - /* These must appear regardless of ${RELOCATING}. */ - ${OTHER_SECTIONS} -} -EOF diff --git a/contrib/binutils/ld/scripttempl/i386coff.sc b/contrib/binutils/ld/scripttempl/i386coff.sc deleted file mode 100644 index fbb1b7918c76..000000000000 --- a/contrib/binutils/ld/scripttempl/i386coff.sc +++ /dev/null @@ -1,43 +0,0 @@ -# Linker script for 386 COFF. This works on SVR3.2 and SCO Unix 3.2.2. -# Ian Taylor <ian@cygnus.com>. -test -z "$ENTRY" && ENTRY=_start -# These are substituted in as variables in order to get '}' in a shell -# conditional expansion. -INIT='.init : { *(.init) }' -FINI='.fini : { *(.fini) }' -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -${LIB_SEARCH_DIRS} - -ENTRY(${ENTRY}) - -SECTIONS -{ - .text ${RELOCATING+ SIZEOF_HEADERS} : { - ${RELOCATING+ *(.init)} - *(.text) - ${RELOCATING+ *(.fini)} - ${RELOCATING+ etext = .}; - } - .data ${RELOCATING+ 0x400000 + (. & 0xffc00fff)} : { - *(.data) - ${RELOCATING+ edata = .}; - } - .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} : - { - *(.bss) - *(COMMON) - ${RELOCATING+ end = .}; - } - ${RELOCATING- ${INIT}} - ${RELOCATING- ${FINI}} - .stab 0 ${RELOCATING+(NOLOAD)} : - { - [ .stab ] - } - .stabstr 0 ${RELOCATING+(NOLOAD)} : - { - [ .stabstr ] - } -} -EOF diff --git a/contrib/binutils/ld/scripttempl/nw.sc b/contrib/binutils/ld/scripttempl/nw.sc deleted file mode 100644 index 725522c78956..000000000000 --- a/contrib/binutils/ld/scripttempl/nw.sc +++ /dev/null @@ -1,131 +0,0 @@ -# -# Unusual variables checked by this code: -# NOP - two byte opcode for no-op (defaults to 0) -# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start -# OTHER_READONLY_SECTIONS - other than .text .init .ctors .rodata ... -# (e.g., .PARISC.milli) -# OTHER_READWRITE_SECTIONS - other than .data .bss .sdata ... -# (e.g., .PARISC.global) -# OTHER_SECTIONS - at the end -# EXECUTABLE_SYMBOLS - symbols that must be defined for an -# executable (e.g., _DYNAMIC_LINK) -# TEXT_START_SYMBOLS - symbols that appear at the start of the -# .text section. -# DATA_START_SYMBOLS - symbols that appear at the start of the -# .data section. -# OTHER_BSS_SYMBOLS - symbols that appear at the start of the -# .bss section besides __bss_start. -# DATA_PLT - .plt should be in data segment, not text segment. -# -# When adding sections, do note that the names of some sections are used -# when specifying the start address of the next. -# -test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", - "${LITTLE_OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -${RELOCATING+${LIB_SEARCH_DIRS}} -${RELOCATING+/* Do we need any of these for elf? - __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} -${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}} - ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}} - ${CREATE_SHLIB-${INTERP}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .rel.text ${RELOCATING-0} : { *(.rel.text) } - .rela.text ${RELOCATING-0} : { *(.rela.text) } - .rel.data ${RELOCATING-0} : { *(.rel.data) } - .rela.data ${RELOCATING-0} : { *(.rela.data) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - .init ${RELOCATING-0} : { *(.init) } =${NOP-0} - ${DATA_PLT-${PLT}} - .text ${RELOCATING-0} : - { - ${RELOCATING+${TEXT_START_SYMBOLS}} - *(.text) - ${CONSTRUCTING+ __CTOR_LIST__ = .;} - ${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)} - ${CONSTRUCTING+ *(.ctors)} - ${CONSTRUCTING+ LONG(0)} - ${CONSTRUCTING+ __CTOR_END__ = .;} - ${CONSTRUCTING+ __DTOR_LIST__ = .;} - ${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)} - ${CONSTRUCTING+ *(.dtors)} - ${CONSTRUCTING+ LONG(0)} - ${CONSTRUCTING+ __DTOR_END__ = .;} - } - ${RELOCATING+_etext = .;} - ${RELOCATING+PROVIDE (etext = .);} - .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0} - .ctors ${RELOCATING-0} : { *(.ctors) } - .dtors ${RELOCATING-0} : { *(.dtors) } - .rodata ${RELOCATING-0} : { *(.rodata) } - .rodata1 ${RELOCATING-0} : { *(.rodata1) } - ${RELOCATING+${OTHER_READONLY_SECTIONS}} - - /* Read-write section, merged into data segment: */ - ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};} - .data ${RELOCATING-0} : - { - ${RELOCATING+${DATA_START_SYMBOLS}} - *(.data) - ${CONSTRUCTING+CONSTRUCTORS} - } - .data1 ${RELOCATING-0} : { *(.data1) } - ${RELOCATING+${OTHER_READWRITE_SECTIONS}} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } - .dynamic ${RELOCATING-0} : { *(.dynamic) } - ${DATA_PLT+${PLT}} - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata ${RELOCATING-0} : { *(.sdata) } - ${RELOCATING+_edata = .;} - ${RELOCATING+PROVIDE (edata = .);} - ${RELOCATING+__bss_start = .;} - ${RELOCATING+${OTHER_BSS_SYMBOLS}} - .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) } - .bss ${RELOCATING-0} : - { - *(.dynbss) - *(.bss) - *(COMMON) - } - ${RELOCATING+_end = . ;} - ${RELOCATING+PROVIDE (end = .);} - - /* These are needed for ELF backends which have not yet been - converted to the new style linker. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - - /* These must appear regardless of ${RELOCATING}. */ - ${OTHER_SECTIONS} -} -EOF diff --git a/contrib/binutils/ld/scripttempl/pe.sc b/contrib/binutils/ld/scripttempl/pe.sc deleted file mode 100644 index f5cfc70492b1..000000000000 --- a/contrib/binutils/ld/scripttempl/pe.sc +++ /dev/null @@ -1,145 +0,0 @@ -# Linker script for PE. - -if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then - RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} -fi - -# We can't easily and portably get an unquoted $ in a shell -# substitution, so we do this instead. -if test "${RELOCATING}"; then - R_TEXT='*(.text$*)' - R_DATA='*(.data$*)' - R_RDATA='*(.rdata$*)' - R_IDATA=' - *(.idata$2) - *(.idata$3) - /* These zeroes mark the end of the import list. */ - LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); - *(.idata$4) - *(.idata$5) - *(.idata$6) - *(.idata$7)' - R_CRT='*(.CRT$*)' - R_RSRC='*(.rsrc$*)' -else - R_TEXT= - R_DATA= - R_RDATA= - R_IDATA= - R_CRT= - R_RSRC= -fi - -cat <<EOF -${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})} -${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})} - -${LIB_SEARCH_DIRS} - -ENTRY(_mainCRTStartup) - -SECTIONS -{ - .text ${RELOCATING+ __image_base__ + __section_alignment__ } : - { - ${RELOCATING+ *(.init)} - *(.text) - ${R_TEXT} - *(.glue_7t) - *(.glue_7) - ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; - LONG (-1); *(.ctors); *(.ctor); LONG (0); } - ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; - LONG (-1); *(.dtors); *(.dtor); LONG (0); } - ${RELOCATING+ *(.fini)} - /* ??? Why is .gcc_exc here? */ - ${RELOCATING+ *(.gcc_exc)} - ${RELOCATING+ etext = .;} - *(.gcc_except_table) - } - - /* The Cygwin32 library uses a section to avoid copying certain data - on fork. This used to be named ".data$nocopy". The linker used - to include this between __data_start__ and __data_end__, but that - breaks building the cygwin32 dll. Instead, we name the section - ".data_cygwin_nocopy" and explictly include it after __data_end__. */ - - .data ${RELOCATING+BLOCK(__section_alignment__)} : - { - ${RELOCATING+__data_start__ = . ;} - *(.data) - *(.data2) - ${R_DATA} - ${RELOCATING+__data_end__ = . ;} - ${RELOCATING+*(.data_cygwin_nocopy)} - } - - .bss ${RELOCATING+BLOCK(__section_alignment__)} : - { - ${RELOCATING+__bss_start__ = . ;} - *(.bss) - *(COMMON) - ${RELOCATING+__bss_end__ = . ;} - } - - .rdata ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.rdata) - ${R_RDATA} - *(.eh_frame) - } - - .edata ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.edata) - } - - /DISCARD/ : - { - *(.debug\$S) - *(.debug\$T) - *(.debug\$F) - *(.drectve) - } - - .idata ${RELOCATING+BLOCK(__section_alignment__)} : - { - /* This cannot currently be handled with grouped sections. - See pe.em:sort_sections. */ - ${R_IDATA} - } - .CRT ${RELOCATING+BLOCK(__section_alignment__)} : - { - ${R_CRT} - } - - .endjunk ${RELOCATING+BLOCK(__section_alignment__)} : - { - /* end is deprecated, don't use it */ - ${RELOCATING+ end = .;} - ${RELOCATING+ __end__ = .;} - } - - .reloc ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.reloc) - } - - .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.rsrc) - ${R_RSRC} - } - - .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : - { - [ .stab ] - } - - .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : - { - [ .stabstr ] - } - -} -EOF diff --git a/contrib/binutils/ld/scripttempl/sh.sc b/contrib/binutils/ld/scripttempl/sh.sc deleted file mode 100644 index 036dd216db2f..000000000000 --- a/contrib/binutils/ld/scripttempl/sh.sc +++ /dev/null @@ -1,59 +0,0 @@ -TORS=".tors : - { - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; - } > ram" - -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -MEMORY -{ - ram : o = 0x1000, l = 512k -} - -SECTIONS -{ - .text : - { - *(.text) - *(.strings) - ${RELOCATING+ _etext = . ; } - } ${RELOCATING+ > ram} - ${CONSTRUCTING+${TORS}} - .data : - { - *(.data) - ${RELOCATING+ _edata = . ; } - } ${RELOCATING+ > ram} - .bss : - { - ${RELOCATING+ _bss_start = . ; } - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } - } ${RELOCATING+ > ram} - .stack ${RELOCATING+ 0x30000 } : - { - ${RELOCATING+ _stack = . ; } - *(.stack) - } ${RELOCATING+ > ram} - .stab 0 ${RELOCATING+(NOLOAD)} : - { - *(.stab) - } - .stabstr 0 ${RELOCATING+(NOLOAD)} : - { - *(.stabstr) - } -} -EOF - - - - diff --git a/contrib/binutils/ld/scripttempl/tic30aout.sc b/contrib/binutils/ld/scripttempl/tic30aout.sc deleted file mode 100644 index 28baed37e614..000000000000 --- a/contrib/binutils/ld/scripttempl/tic30aout.sc +++ /dev/null @@ -1,34 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -${STACKZERO+${RELOCATING+${STACKZERO}}} -${RELOCATING+PROVIDE (__stack = 0);} -SECTIONS -{ - ${RELOCATING+. = ${TEXT_START_ADDR};} - .text : - { - CREATE_OBJECT_SYMBOLS - *(.text) - ${RELOCATING+_etext = .;} - ${RELOCATING+__etext = .;} - ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}} - } - ${RELOCATING+. = ${DATA_ALIGNMENT};} - .data : - { - *(.data) - ${RELOCATING+_edata = .;} - ${RELOCATING+__edata = .;} - } - .bss : - { - ${RELOCATING+ __bss_start = .}; - *(.bss) - *(COMMON) - ${RELOCATING+_end = ALIGN(4) }; - ${RELOCATING+__end = ALIGN(4) }; - } -} -EOF diff --git a/contrib/binutils/ld/scripttempl/tic30coff.sc b/contrib/binutils/ld/scripttempl/tic30coff.sc deleted file mode 100644 index df2d4f737cd3..000000000000 --- a/contrib/binutils/ld/scripttempl/tic30coff.sc +++ /dev/null @@ -1,58 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH("${OUTPUT_ARCH}") - -MEMORY -{ - rom : ORIGIN = 0x00000300, LENGTH = 16k - ram : ORIGIN = 0x00000300 + 16k, LENGTH = 16k - ramblk0 : ORIGIN = 0x02026000, LENGTH = 0x1000 - ramblk1 : ORIGIN = 0x02027000, LENGTH = 0x1000 -} - -SECTIONS -{ -.vectors 0x00000000 : -{ - *(vectors) -} - -.text : -{ - *(.text) -} > rom - -.const : -{ - *(.const) - __etext = . ; -} > rom - -.mdata : AT( ADDR(.const) + SIZEOF(.const) ) -{ - __data = . ; - *(.data); - __edata = . ; -} > ram - -.bss : -{ - __bss = . ; - *(.bss); - *(COMMON); - __ebss = . ; -} > ram - -.ram0 : -{ - *(ram0) -} > ramblk0 - -.ram1 : -{ - *(ram1) -} > ramblk1 - -} - -EOF diff --git a/contrib/binutils/ld/scripttempl/v850.sc b/contrib/binutils/ld/scripttempl/v850.sc deleted file mode 100644 index 6f3844ee43e5..000000000000 --- a/contrib/binutils/ld/scripttempl/v850.sc +++ /dev/null @@ -1,183 +0,0 @@ -cat << EOF -OUTPUT_FORMAT("elf32-v850", "elf32-v850", - "elf32-v850") -OUTPUT_ARCH(v850) -ENTRY(_start) -SEARCH_DIR(.); -/*/critters/slug/grossman/install/sun4/v850-elf/lib*/ -SECTIONS -{ - /* This saves a little space in the ELF file, since the zda starts - at a higher location that the ELF headers take up. */ - - .zdata ${ZDATA_START_ADDR} : { - *(.zdata) - *(.zbss) - *(reszdata) - *(.zcommon) - } - - /* This is the read only part of the zero data area. - Having it as a seperate section prevents its - attributes from being inherited by the zdata - section. Specifically it prevents the zdata - section from being marked READONLY. */ - - .rozdata ${ROZDATA_START_ADDR} : { - *(.rozdata) - *(romzdata) - *(romzbss) - } - - /* Read-only sections, merged into text segment: */ - . = ${TEXT_START_ADDR}; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .rel.text : { *(.rel.text) } - .rela.text : { *(.rela.text) } - .rel.data : { *(.rel.data) } - .rela.data : { *(.rela.data) } - .rel.rodata : { *(.rel.rodata) } - .rela.rodata : { *(.rela.rodata) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .init : { *(.init) } =0 - .plt : { *(.plt) } - - .text : { - *(.text) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - *(.gnu.linkonce.t*) - } =0 - - ${RELOCATING+_etext = .;} - ${RELOCATING+PROVIDE (etext = .);} - - - .fini : { *(.fini) } =0 - .rodata : { *(.rodata) *(.gnu.linkonce.r*) } - .rodata1 : { *(.rodata1) } - - .data : { - *(.data) - *(.gnu.linkonce.d*) - CONSTRUCTORS - } - .data1 : { *(.data1) } - .ctors : { - ${RELOCATING+___ctors = .;} - *(.ctors) - ${RELOCATING+___ctors_end = .;} - } - - .dtors : { - ${RELOCATING+___dtors = .;} - *(.dtors) - ${RELOCATING+___dtors_end = .;} - } - - .got : { *(.got.plt) *(.got) } - .dynamic : { *(.dynamic) } - - .tdata ${TDATA_START_ADDR} : { - ${RELOCATING+PROVIDE (__ep = .);} - *(.tbyte) - *(.tcommon_byte) - *(.tdata) - *(.tbss) - *(.tcommon) - } - - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata ${SDATA_START_ADDR} : { - ${RELOCATING+PROVIDE (__gp = . + 0x8000);} - *(.sdata) - ${RELOCATING+__sbss_start = .;} - *(.sbss) - *(.scommon) - } - - /* See comment about .rozdata */ - .rosdata ${ROSDATA_START_ADDR} : { - *(.rosdata) - } - - ${RELOCATING+_edata = DEFINED (__sbss_start) ? __sbss_start : . ;} - ${RELOCATING+PROVIDE (edata = _edata);} - - .bss : - { - ${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;} - *(.dynbss) - *(.bss) - *(COMMON) - } - - ${RELOCATING+_end = . ;} - ${RELOCATING+PROVIDE (end = .);} - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - - /* User stack */ - .stack 0x200000 : { - ${RELOCATING+__stack = .;} - *(.stack) - } - /* These must appear regardless of . */ -} -EOF diff --git a/contrib/binutils/ld/scripttempl/vanilla.sc b/contrib/binutils/ld/scripttempl/vanilla.sc deleted file mode 100644 index 1798480e69b0..000000000000 --- a/contrib/binutils/ld/scripttempl/vanilla.sc +++ /dev/null @@ -1 +0,0 @@ -# Nothing to do. diff --git a/contrib/binutils/ld/scripttempl/z8000.sc b/contrib/binutils/ld/scripttempl/z8000.sc deleted file mode 100644 index 2b87930100e5..000000000000 --- a/contrib/binutils/ld/scripttempl/z8000.sc +++ /dev/null @@ -1,54 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH("${OUTPUT_ARCH}") -ENTRY(_start) - -SECTIONS -{ -.text ${BIG+ ${RELOCATING+ 0x0000000}} : { - *(.text) - *(.strings) - *(.rdata) - } - -.ctors ${BIG+ ${RELOCATING+ 0x2000000}} : - { - ${RELOCATING+ ___ctors = . ; } - *(.ctors); - ${RELOCATING+ ___ctors_end = . ; } - ___dtors = . ; - *(.dtors); - ${RELOCATING+ ___dtors_end = . ; } - } - -.data ${BIG+ ${RELOCATING+ 0x3000000}} : { - *(.data) - } - -.bss ${BIG+ ${RELOCATING+ 0x4000000}} : - { - ${RELOCATING+ __start_bss = . ; } - *(.bss); - *(COMMON); - ${RELOCATING+ __end_bss = . ; } - } - -.heap ${BIG+ ${RELOCATING+ 0x5000000}} : { - ${RELOCATING+ __start_heap = . ; } - ${RELOCATING+ . = . + 20k ; } - ${RELOCATING+ __end_heap = . ; } - } - -.stack ${RELOCATING+ 0xf000 } : - { - ${RELOCATING+ _stack = . ; } - *(.stack) - ${RELOCATING+ __stack_top = . ; } - } - -} -EOF - - - - diff --git a/contrib/binutils/ld/stamp-h.in b/contrib/binutils/ld/stamp-h.in deleted file mode 100644 index 9788f70238c9..000000000000 --- a/contrib/binutils/ld/stamp-h.in +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/contrib/binutils/ld/sysdep.h b/contrib/binutils/ld/sysdep.h deleted file mode 100644 index a018436ea7b6..000000000000 --- a/contrib/binutils/ld/sysdep.h +++ /dev/null @@ -1,69 +0,0 @@ -/* sysdep.h -- handle host dependencies for the GNU linker - Copyright (C) 1995, 96, 1997 Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. - - GLD is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GLD is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - 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. */ - -#ifndef LD_SYSDEP_H -#define LD_SYSDEP_H - -#include "ansidecl.h" - -#include "config.h" - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> - -#ifdef HAVE_STRING_H -#include <string.h> -#else -#ifdef HAVE_STRINGS_H -#include <strings.h> -#else -extern char *strchr (); -extern char *strrchr (); -#endif -#endif - -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif - -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif - -#ifdef USE_BINARY_FOPEN -#include "fopen-bin.h" -#else -#include "fopen-same.h" -#endif - -#ifdef NEED_DECLARATION_STRSTR -extern char *strstr (); -#endif - -#ifdef NEED_DECLARATION_FREE -extern void free (); -#endif - -#ifdef NEED_DECLARATION_GETENV -extern char *getenv (); -#endif - -#endif /* ! defined (LD_SYSDEP_H) */ |