1 /* Copyright (C) 1991 Free Software Foundation, Inc.
2 Written by Steve Chamberlain steve@cygnus.com
4 This file is part of GLD, the Gnu Linker.
6 GLD is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GLD is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GLD; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
41 extern boolean lang_has_input_file
;
42 extern boolean trace_files
;
47 char *output_filename
= "a.out";
49 /* Name this program was invoked by. */
52 /* The file that we're creating */
55 extern boolean option_v
;
57 /* The local symbol prefix */
60 /* Count the number of global symbols multiply defined. */
61 int multiple_def_count
;
63 /* Count the number of symbols defined through common declarations.
64 This count is referenced in symdef_library, linear_library, and
65 modified by enter_global_ref.
67 It is incremented when a symbol is created as a common, and
68 decremented when the common declaration is overridden
70 Another way of thinking of it is that this is a count of
71 all ldsym_types with a ->scoms field */
73 unsigned int commons_pending
;
75 /* Count the number of global symbols referenced and not defined.
76 common symbols are not included in this count. */
78 unsigned int undefined_global_sym_count
;
80 /* Count the number of warning symbols encountered. */
83 /* have we had a load script ? */
84 extern boolean had_script
;
86 /* Nonzero means print names of input files as processed. */
89 /* 1 => write load map. */
96 /* Indicates whether output file will be b.out (default) or coff */
97 enum target_flavour output_flavor
= BFD_BOUT_FORMAT
;
101 /* Force the make_executable to be output, even if there are non-fatal
103 boolean force_make_executable
;
105 /* A count of the total number of local symbols ever seen - by adding
106 the symbol_count field of each newly read afile.*/
108 unsigned int total_symbols_seen
;
110 /* A count of the number of read files - the same as the number of elements
113 unsigned int total_files_seen
;
116 args_type command_line
;
117 ld_config_type config
;
125 program_name
= argv
[0];
126 output_filename
= "a.out";
134 check_v960 (argc
, argv
);
135 emulation
= "gld960";
136 for (i
= 1; i
< argc
; i
++)
138 if (!strcmp (argv
[i
], "-Fcoff"))
140 emulation
= "lnk960";
141 output_flavor
= BFD_COFF_FORMAT
;
147 emulation
= (char *) getenv (EMULATION_ENVIRON
);
150 /* Initialize the data about options. */
155 config
.relocateable_output
= false;
157 command_line
.force_common_definition
= false;
159 init_bfd_error_vector ();
161 ldfile_add_arch ("");
163 config
.make_executable
= true;
164 force_make_executable
= false;
167 /* Initialize the cumulative counts of symbols. */
168 undefined_global_sym_count
= 0;
170 multiple_def_count
= 0;
173 config
.magic_demand_paged
= true;
174 config
.text_read_only
= true;
175 config
.make_executable
= true;
176 if (emulation
== (char *) NULL
)
178 emulation
= DEFAULT_EMULATION
;
181 ldemul_choose_mode (emulation
);
182 default_target
= ldemul_choose_target ();
184 ldemul_before_parse ();
185 lang_has_input_file
= false;
186 parse_args (argc
, argv
);
188 if (config
.relocateable_output
&& command_line
.relax
)
190 einfo ("%P%F: -relax and -r may not be used together\n");
196 info ("%P: mode %s\n", emulation
);
198 if (lang_has_input_file
== false)
200 einfo ("%P%F: No input files\n");
203 ldemul_after_parse ();
206 if (config
.map_filename
)
208 if (strcmp (config
.map_filename
, "-") == 0)
210 config
.map_file
= stdout
;
214 config
.map_file
= fopen (config
.map_filename
, FOPEN_WT
);
215 if (config
.map_file
== (FILE *) NULL
)
217 einfo ("%P%F: can't open map file %s\n",
218 config
.map_filename
);
226 /* Print error messages for any missing symbols, for any warning
227 symbols, and possibly multiple definitions */
230 if (config
.text_read_only
)
232 /* Look for a text section and mark the readonly attribute in it */
233 asection
*found
= bfd_get_section_by_name (output_bfd
, ".text");
235 if (found
!= (asection
*) NULL
)
237 found
->flags
|= SEC_READONLY
;
241 if (config
.relocateable_output
)
242 output_bfd
->flags
&= ~EXEC_P
;
244 output_bfd
->flags
|= EXEC_P
;
248 /* Even if we're producing relocateable output, some non-fatal errors should
249 be reported in the exit status. (What non-fatal errors, if any, do we
250 want to ignore for relocateable output?) */
252 if (config
.make_executable
== false && force_make_executable
== false)
254 if (trace_files
== true)
256 einfo ("%P: Link errors found, deleting executable `%s'\n",
260 if (output_bfd
->iostream
)
261 fclose ((FILE *) (output_bfd
->iostream
));
263 unlink (output_filename
);
268 bfd_close (output_bfd
);
275 Q_read_entry_symbols (desc
, entry
)
277 struct lang_input_statement_struct
*entry
;
279 if (entry
->asymbols
== (asymbol
**) NULL
)
281 bfd_size_type table_size
= get_symtab_upper_bound (desc
);
283 entry
->asymbols
= (asymbol
**) ldmalloc (table_size
);
284 entry
->symbol_count
= bfd_canonicalize_symtab (desc
, entry
->asymbols
);
289 * turn this item into a reference
296 asymbol
*sym
= *nlist_p
;
300 sym
->section
= &bfd_und_section
;
301 sym
->udata
= (PTR
) (sp
->srefs_chain
);
302 sp
->srefs_chain
= nlist_p
;
306 This function is called for each name which is seen which has a global
307 scope. It enters the name into the global symbol table in the correct
308 symbol on the correct chain. Remember that each ldsym_type has three
309 chains attatched, one of all definitions of a symbol, one of all
310 references of a symbol and one of all common definitions of a symbol.
312 When the function is over, the supplied is left connected to the bfd
313 to which is was born, with its udata field pointing to the next member
314 on the chain in which it has been inserted.
316 A certain amount of jigery pokery is necessary since commons come
317 along and upset things, we only keep one item in the common chain; the
318 one with the biggest size seen sofar. When another common comes along
319 it either bumps the previous definition into the ref chain, since it
320 is bigger, or gets turned into a ref on the spot since the one on the
321 common chain is already bigger. If a real definition comes along then
322 the common gets bumped off anyway.
324 Whilst all this is going on we keep a count of the number of multiple
325 definitions seen, undefined global symbols and pending commons.
328 extern boolean relaxing
;
331 DEFUN (Q_enter_global_ref
, (nlist_p
, name
),
332 asymbol
** nlist_p AND
/* pointer into symbol table from incoming bfd */
333 CONST
char *name
/* name of symbol in linker table */ )
335 asymbol
*sym
= *nlist_p
;
338 /* Lookup the name from the incoming bfd's symbol table in the
339 linker's global symbol table */
342 flagword this_symbol_flags
= sym
->flags
;
344 sp
= ldsym_get (name
);
345 /* If this symbol already has udata, it means that something strange
348 The strange thing is that we've had an undefined symbol resolved by
349 an alias, but the thing the alias defined wasn't in the file. So
350 the symbol got a udata entry, but the file wasn't loaded. Then
351 later on the file was loaded, but we don't need to do this
359 if (flag_is_constructor (this_symbol_flags
))
361 /* Add this constructor to the list we keep */
362 ldlang_add_constructor (sp
);
363 /* Turn any commons into refs */
364 if (sp
->scoms_chain
!= (asymbol
**) NULL
)
366 refize (sp
, sp
->scoms_chain
);
374 if (sym
->section
== &bfd_com_section
)
376 /* If we have a definition of this symbol already then
377 this common turns into a reference. Also we only
378 ever point to the largest common, so if we
379 have a common, but it's bigger that the new symbol
380 the turn this into a reference too. */
383 /* This is a common symbol, but we already have a definition
384 for it, so just link it into the ref chain as if
385 it were a reference */
386 refize (sp
, nlist_p
);
388 else if (sp
->scoms_chain
)
390 /* If we have a previous common, keep only the biggest */
391 if ((*(sp
->scoms_chain
))->value
> sym
->value
)
393 /* other common is bigger, throw this one away */
394 refize (sp
, nlist_p
);
396 else if (sp
->scoms_chain
!= nlist_p
)
398 /* other common is smaller, throw that away */
399 refize (sp
, sp
->scoms_chain
);
400 sp
->scoms_chain
= nlist_p
;
405 /* This is the first time we've seen a common, so remember it
406 - if it was undefined before, we know it's defined now. If
407 the symbol has been marked as really being a constructor,
408 then treat this as a ref
410 if (sp
->flags
& SYM_CONSTRUCTOR
)
412 /* Turn this into a ref */
413 refize (sp
, nlist_p
);
417 /* treat like a common */
419 undefined_global_sym_count
--;
422 sp
->scoms_chain
= nlist_p
;
427 else if (sym
->section
!= &bfd_und_section
)
429 /* This is the definition of a symbol, add to def chain */
430 if (sp
->sdefs_chain
&& (*(sp
->sdefs_chain
))->section
!= sym
->section
)
432 /* Multiple definition */
433 asymbol
*sy
= *(sp
->sdefs_chain
);
434 lang_input_statement_type
*stat
= (lang_input_statement_type
*) sy
->the_bfd
->usrdata
;
435 lang_input_statement_type
*stat1
= (lang_input_statement_type
*) sym
->the_bfd
->usrdata
;
436 asymbol
**stat1_symbols
= stat1
? stat1
->asymbols
: 0;
437 asymbol
**stat_symbols
= stat
? stat
->asymbols
: 0;
439 multiple_def_count
++;
440 einfo ("%X%C: multiple definition of `%T'\n",
441 sym
->the_bfd
, sym
->section
, stat1_symbols
, sym
->value
, sym
);
443 einfo ("%X%C: first seen here\n",
444 sy
->the_bfd
, sy
->section
, stat_symbols
, sy
->value
);
448 sym
->udata
= (PTR
) (sp
->sdefs_chain
);
449 sp
->sdefs_chain
= nlist_p
;
451 /* A definition overrides a common symbol */
454 refize (sp
, sp
->scoms_chain
);
458 else if (sp
->srefs_chain
&& relaxing
== false)
460 /* If previously was undefined, then remember as defined */
461 undefined_global_sym_count
--;
466 if (sp
->scoms_chain
== (asymbol
**) NULL
467 && sp
->srefs_chain
== (asymbol
**) NULL
468 && sp
->sdefs_chain
== (asymbol
**) NULL
)
470 /* And it's the first time we've seen it */
471 undefined_global_sym_count
++;
475 refize (sp
, nlist_p
);
479 ASSERT (sp
->sdefs_chain
== 0 || sp
->scoms_chain
== 0);
480 ASSERT (sp
->scoms_chain
== 0 || (*(sp
->scoms_chain
))->udata
== 0);
486 Q_enter_file_symbols (entry
)
487 lang_input_statement_type
*entry
;
491 entry
->common_section
=
492 bfd_make_section_old_way (entry
->the_bfd
, "COMMON");
494 ldlang_add_file (entry
);
497 if (trace_files
|| option_v
)
499 info ("%I\n", entry
);
502 total_symbols_seen
+= entry
->symbol_count
;
504 if (entry
->symbol_count
)
506 for (q
= entry
->asymbols
; *q
; q
++)
510 if (p
->flags
& BSF_INDIRECT
)
514 else if (p
->flags
& BSF_WARNING
)
518 else if (p
->section
== &bfd_und_section
519 || (p
->flags
& BSF_GLOBAL
)
520 || p
->section
== &bfd_com_section
521 || (p
->flags
& BSF_CONSTRUCTOR
))
527 if (p
->flags
& BSF_INDIRECT
)
531 else if (p
->flags
& BSF_WARNING
)
535 else if (p
->section
== &bfd_und_section
536 || (p
->flags
& BSF_GLOBAL
)
537 || p
->section
== &bfd_com_section
538 || (p
->flags
& BSF_CONSTRUCTOR
))
540 Q_enter_global_ref (q
, p
->name
);
548 /* Searching libraries */
550 struct lang_input_statement_struct
*decode_library_subfile ();
551 void linear_library (), symdef_library ();
553 /* Search the library ENTRY, already open on descriptor DESC.
554 This means deciding which library members to load,
555 making a chain of `struct lang_input_statement_struct' for those members,
556 and entering their global symbols in the hash table. */
559 search_library (entry
)
560 struct lang_input_statement_struct
*entry
;
563 /* No need to load a library if no undefined symbols */
564 if (!undefined_global_sym_count
)
567 if (bfd_has_map (entry
->the_bfd
))
568 symdef_library (entry
);
570 linear_library (entry
);
577 gnu960_check_format (abfd
, format
)
583 if ((bfd_check_format (abfd
, format
) == true)
584 && (abfd
->xvec
->flavour
== output_flavor
))
596 ldmain_open_file_read_symbol (entry
)
597 struct lang_input_statement_struct
*entry
;
599 if (entry
->asymbols
== (asymbol
**) NULL
600 && entry
->real
== true
601 && entry
->filename
!= (char *) NULL
)
603 ldfile_open_file (entry
);
607 if (gnu960_check_format (entry
->the_bfd
, bfd_object
))
609 if (bfd_check_format (entry
->the_bfd
, bfd_object
))
612 entry
->the_bfd
->usrdata
= (PTR
) entry
;
615 Q_read_entry_symbols (entry
->the_bfd
, entry
);
617 /* look through the sections in the file and see if any of them
619 ldlang_check_for_constructors (entry
);
621 Q_enter_file_symbols (entry
);
624 else if (gnu960_check_format (entry
->the_bfd
, bfd_archive
))
626 else if (bfd_check_format (entry
->the_bfd
, bfd_archive
))
629 entry
->the_bfd
->usrdata
= (PTR
) entry
;
631 entry
->subfiles
= (lang_input_statement_type
*) NULL
;
632 search_library (entry
);
636 einfo ("%F%B: malformed input file (not rel or archive) \n",
643 /* Construct and return a lang_input_statement_struct for a library member.
644 The library's lang_input_statement_struct is library_entry,
645 and the library is open on DESC.
646 SUBFILE_OFFSET is the byte index in the library of this member's header.
647 We store the length of the member into *LENGTH_LOC. */
649 lang_input_statement_type
*
650 decode_library_subfile (library_entry
, subfile_offset
)
651 struct lang_input_statement_struct
*library_entry
;
654 register struct lang_input_statement_struct
*subentry
;
655 subentry
= (struct lang_input_statement_struct
*) ldmalloc ((bfd_size_type
) (sizeof (struct lang_input_statement_struct
)));
657 subentry
->filename
= subfile_offset
->filename
;
658 subentry
->local_sym_name
= subfile_offset
->filename
;
659 subentry
->asymbols
= 0;
660 subentry
->the_bfd
= subfile_offset
;
661 subentry
->subfiles
= 0;
663 subentry
->superfile
= library_entry
;
664 subentry
->is_archive
= false;
666 subentry
->just_syms_flag
= false;
667 subentry
->loaded
= false;
673 boolean
subfile_wanted_p ();
675 clear_syms (entry
, offset
)
676 struct lang_input_statement_struct
*entry
;
680 unsigned long indx
= bfd_get_next_mapent (entry
->the_bfd
,
684 while (indx
!= BFD_NO_MORE_SYMBOLS
)
686 if (car
->file_offset
== offset
)
690 indx
= bfd_get_next_mapent (entry
->the_bfd
, indx
, &car
);
695 /* Search a library that has a map
698 symdef_library (entry
)
699 struct lang_input_statement_struct
*entry
;
702 register struct lang_input_statement_struct
*prev
= 0;
704 boolean not_finished
= true;
706 while (not_finished
== true)
708 carsym
*exported_library_name
;
709 bfd
*prev_archive_member_bfd
= 0;
711 int idx
= bfd_get_next_mapent (entry
->the_bfd
,
713 &exported_library_name
);
715 not_finished
= false;
717 while (idx
!= BFD_NO_MORE_SYMBOLS
&& undefined_global_sym_count
)
720 if (exported_library_name
->name
)
723 ldsym_type
*sp
= ldsym_get_soft (exported_library_name
->name
);
725 /* If we find a symbol that appears to be needed, think carefully
726 about the archive member that the symbol is in. */
727 /* So - if it exists, and is referenced somewhere and is
729 if (sp
&& sp
->srefs_chain
&& !sp
->sdefs_chain
)
731 bfd
*archive_member_bfd
= bfd_get_elt_at_index (entry
->the_bfd
, idx
);
732 struct lang_input_statement_struct
*archive_member_lang_input_statement_struct
;
735 if (archive_member_bfd
&& gnu960_check_format (archive_member_bfd
, bfd_object
))
737 if (archive_member_bfd
&& bfd_check_format (archive_member_bfd
, bfd_object
))
741 /* Don't think carefully about any archive member
742 more than once in a given pass. */
743 if (prev_archive_member_bfd
!= archive_member_bfd
)
746 prev_archive_member_bfd
= archive_member_bfd
;
748 /* Read the symbol table of the archive member. */
750 if (archive_member_bfd
->usrdata
!= (PTR
) NULL
)
753 archive_member_lang_input_statement_struct
= (lang_input_statement_type
*) archive_member_bfd
->usrdata
;
758 archive_member_lang_input_statement_struct
=
759 decode_library_subfile (entry
, archive_member_bfd
);
760 archive_member_bfd
->usrdata
= (PTR
) archive_member_lang_input_statement_struct
;
764 if (archive_member_lang_input_statement_struct
== 0)
766 einfo ("%F%I contains invalid archive member %s\n",
770 if (archive_member_lang_input_statement_struct
->loaded
== false)
773 Q_read_entry_symbols (archive_member_bfd
, archive_member_lang_input_statement_struct
);
774 /* Now scan the symbol table and decide whether to load. */
777 if (subfile_wanted_p (archive_member_lang_input_statement_struct
) == true)
780 /* This member is needed; load it.
781 Since we are loading something on this pass,
782 we must make another pass through the symdef data. */
786 Q_enter_file_symbols (archive_member_lang_input_statement_struct
);
789 prev
->chain
= archive_member_lang_input_statement_struct
;
791 entry
->subfiles
= archive_member_lang_input_statement_struct
;
794 prev
= archive_member_lang_input_statement_struct
;
797 /* Clear out this member's symbols from the symdef data
798 so that following passes won't waste time on them. */
799 clear_syms (entry
, exported_library_name
->file_offset
);
800 archive_member_lang_input_statement_struct
->loaded
= true;
807 idx
= bfd_get_next_mapent (entry
->the_bfd
, idx
, &exported_library_name
);
813 linear_library (entry
)
814 struct lang_input_statement_struct
*entry
;
816 boolean more_to_do
= true;
817 register struct lang_input_statement_struct
*prev
= 0;
819 if (entry
->complained
== false)
821 einfo ("%P: library %s has bad table of contents, rerun ranlib\n",
822 entry
->the_bfd
->filename
);
823 entry
->complained
= true;
828 bfd
*archive
= bfd_openr_next_archived_file (entry
->the_bfd
, 0);
833 /* Don't check this file if it's already been read in
836 if (!archive
->usrdata
||
837 ! ((lang_input_statement_type
*)(archive
->usrdata
))->loaded
)
840 if (gnu960_check_format (archive
, bfd_object
))
842 if (bfd_check_format (archive
, bfd_object
))
845 register struct lang_input_statement_struct
*subentry
;
847 subentry
= decode_library_subfile (entry
,
850 archive
->usrdata
= (PTR
) subentry
;
853 if (subentry
->loaded
== false)
855 Q_read_entry_symbols (archive
, subentry
);
857 if (subfile_wanted_p (subentry
) == true)
859 Q_enter_file_symbols (subentry
);
862 prev
->chain
= subentry
;
864 entry
->subfiles
= subentry
;
868 subentry
->loaded
= true;
873 archive
= bfd_openr_next_archived_file (entry
->the_bfd
, archive
);
880 /* ENTRY is an entry for a file inside an archive
881 Its symbols have been read into core, but not entered into the
883 Return nonzero if we ought to load this file */
886 subfile_wanted_p (entry
)
887 struct lang_input_statement_struct
*entry
;
891 for (q
= entry
->asymbols
; *q
; q
++)
895 /* If the symbol has an interesting definition, we could
896 potentially want it. */
898 if (p
->flags
& BSF_INDIRECT
)
900 /** add_indirect(q);*/
903 if (p
->section
== &bfd_com_section
904 || (p
->flags
& BSF_GLOBAL
)
905 || (p
->flags
& BSF_INDIRECT
))
907 register ldsym_type
*sp
= ldsym_get_soft (p
->name
);
909 /* If this symbol has not been hashed,
910 we can't be looking for it. */
911 if (sp
!= (ldsym_type
*) NULL
912 && sp
->sdefs_chain
== (asymbol
**) NULL
)
914 if (sp
->srefs_chain
!= (asymbol
**) NULL
915 || sp
->scoms_chain
!= (asymbol
**) NULL
)
917 /* This is a symbol we are looking for. It is either
918 not yet defined or common. */
920 if (p
->section
== &bfd_com_section
)
923 /* If the symbol in the table is a constructor, we won't to
924 anything fancy with it */
925 if ((sp
->flags
& SYM_CONSTRUCTOR
) == 0)
927 /* This libary member has something to
928 say about this element. We should
929 remember if its a new size */
930 /* Move something from the ref list to the com list */
933 /* Already a common symbol, maybe update it */
934 if (p
->value
> (*(sp
->scoms_chain
))->value
)
936 (*(sp
->scoms_chain
))->value
= p
->value
;
941 /* Take a value from the ref chain
942 Here we are moving a symbol from the owning bfd
943 to another bfd. We must set up the
944 common_section portion of the bfd thing */
948 sp
->scoms_chain
= sp
->srefs_chain
;
950 (asymbol
**) ((*(sp
->srefs_chain
))->udata
);
951 (*(sp
->scoms_chain
))->udata
= (PTR
) NULL
;
953 (*(sp
->scoms_chain
))->section
=
955 (*(sp
->scoms_chain
))->flags
= 0;
956 /* Remember the size of this item */
957 sp
->scoms_chain
[0]->value
= p
->value
;
959 undefined_global_sym_count
--;
962 asymbol
*com
= *(sp
->scoms_chain
);
964 if (((lang_input_statement_type
*)
965 (com
->the_bfd
->usrdata
))->common_section
==
968 ((lang_input_statement_type
*)
969 (com
->the_bfd
->usrdata
))->common_section
=
970 bfd_make_section_old_way (com
->the_bfd
, "COMMON");
974 ASSERT (p
->udata
== 0);
981 info ("%I needed due to %s\n", entry
, sp
->name
);