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.
* 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.
(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.
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.
* 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.
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.
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.
* 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.
* 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.
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.
(lang_size_sections): If the canonical symbols have not already
been read in, read them in before relaxing.
* ldlang.h (relaxing): Removed declaration.
De Muyter).
* configure.in (m68k-motorola-sysv*) New target.
* config/delta68.mt: New file.
* emulparams/delta68.sh: New file.
* scripttempl/delta68.sc: New file.
* Makefile.in (ALL_EMULATIONS): Added em_delta68.o.
(em_delta68.c): New target.
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.
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.
* 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.
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.
(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).
* 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.
* 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.
INPUT(), then change the file type to lang_input_file_is_l_enum.
* 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.
* 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.
* 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.
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.
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.
* 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.
(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.
* 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.
* 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
* 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.
* 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.
* 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.
* 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.
* 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.
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.
* 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.
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.
* 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).
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.
(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.
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.
please let me know, or plug them in yourself.
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.
Also fixed an error message in configure.in so that it started with
'***' like the other error messages do.
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.
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.
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.
* 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.
(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
* 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
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.
* 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.
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.