1 /* Copyright (C) 1991 Free Software Foundation, Inc.
3 This file is part of GLD, the Gnu Linker.
5 GLD is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 1, or (at your option)
10 GLD is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GLD; see the file COPYING. If not, write to
17 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 * Written by Steve Chamberlain steve@cygnus.com
44 extern boolean lang_has_input_file
;
45 extern boolean trace_files
;
49 char *output_filename
= "a.out";
50 /* Name this program was invoked by. */
53 /* The file that we're creating */
56 extern boolean option_v
;
58 /* The local symbol prefix */
61 /* Count the number of global symbols multiply defined. */
62 int multiple_def_count
;
65 /* Count the number of symbols defined through common declarations.
66 This count is referenced in symdef_library, linear_library, and
67 modified by enter_global_ref.
69 It is incremented when a symbol is created as a common, and
70 decremented when the common declaration is overridden
72 Another way of thinking of it is that this is a count of
73 all ldsym_types with a ->scoms field */
75 unsigned int commons_pending
;
77 /* Count the number of global symbols referenced and not defined.
78 common symbols are not included in this count. */
80 unsigned int undefined_global_sym_count
;
84 /* Count the number of warning symbols encountered. */
87 /* have we had a load script ? */
88 extern boolean had_script
;
90 /* Nonzero means print names of input files as processed. */
95 /* 1 => write load map. */
101 /* Indicates whether output file will be b.out (default) or coff */
102 enum target_flavour_enum output_flavor
= BFD_BOUT_FORMAT
;
105 /* Force the make_executable to be output, even if there are non-fatal
107 boolean force_make_executable
;
109 /* A count of the total number of local symbols ever seen - by adding
110 the symbol_count field of each newly read afile.*/
112 unsigned int total_symbols_seen
;
114 /* A count of the number of read files - the same as the number of elements
117 unsigned int total_files_seen
;
120 args_type command_line
;
121 ld_config_type config
;
128 program_name
= argv
[0];
129 output_filename
= "a.out";
136 check_v960( argc
, argv
);
137 emulation
= GLD960_EMULATION_NAME
;
138 for ( i
= 1; i
< argc
; i
++ ){
139 if ( !strcmp(argv
[i
],"-Fcoff") ){
140 emulation
= LNK960_EMULATION_NAME
;
141 output_flavor
= BFD_COFF_FORMAT
;
147 emulation
= (char *) getenv(EMULATION_ENVIRON
);
150 /* Initialize the data about options. */
154 config
.relocateable_output
= false;
156 command_line
.force_common_definition
= false;
159 ldfile_add_library_path("./");
160 config
.make_executable
= true;
161 force_make_executable
= false;
164 /* Initialize the cumulative counts of symbols. */
165 undefined_global_sym_count
= 0;
167 multiple_def_count
= 0;
170 config
.magic_demand_paged
= true ;
171 config
.make_executable
= true;
172 if (emulation
== (char *)NULL
) {
173 emulation
= DEFAULT_EMULATION
;
176 ldemul_choose_mode(emulation
);
177 default_target
= ldemul_choose_target();
179 ldemul_before_parse();
180 lang_has_input_file
= false;
181 parse_args(argc
, argv
);
184 info("%P: mode %s\n", emulation
);
186 if (lang_has_input_file
== false) {
187 info("%P%F: No input files\n");
190 ldemul_after_parse();
193 /* Print error messages for any missing symbols, for any warning
194 symbols, and possibly multiple definitions */
196 /* Print a map, if requested. */
199 ldsym_print_symbol_table ();
203 if (config
.text_read_only
) {
204 /* Look for a text section and mark the readonly attribute in it */
205 asection
*found
= bfd_get_section_by_name(output_bfd
, ".text");
206 if (found
== (asection
*)NULL
) {
207 info("%P%F: text marked read only, but no text section present");
209 found
->flags
|= SEC_READONLY
;
210 output_bfd
->flags
|= WP_TEXT
;
213 output_bfd
->flags
|= WP_TEXT
;
217 if (config
.relocateable_output
) {
218 output_bfd
->flags
&= ~( D_PAGED
);
219 output_bfd
->flags
|= EXEC_P
;
221 bfd_close(output_bfd
);
224 output_bfd
->flags
|= EXEC_P
;
227 bfd_close(output_bfd
);
228 if (config
.make_executable
== false && force_make_executable
== false) {
229 unlink(output_filename
);
231 return (!config
.make_executable
);
239 Q_read_entry_symbols (desc
, entry
)
241 struct lang_input_statement_struct
*entry
;
243 if (entry
->asymbols
== (asymbol
**)NULL
) {
244 bfd_size_type table_size
= get_symtab_upper_bound(desc
);
245 entry
->asymbols
= (asymbol
**)ldmalloc(table_size
);
246 entry
->symbol_count
= bfd_canonicalize_symtab(desc
, entry
->asymbols
) ;
252 * turn this item into a reference
259 asymbol
*sym
= *nlist_p
;
261 sym
->flags
= BSF_UNDEFINED
;
262 sym
->section
= (asection
*)NULL
;
263 sym
->udata
=(PTR
)( sp
->srefs_chain
);
264 sp
->srefs_chain
= nlist_p
;
267 This function is called for each name which is seen which has a global
268 scope. It enters the name into the global symbol table in the correct
269 symbol on the correct chain. Remember that each ldsym_type has three
270 chains attatched, one of all definitions of a symbol, one of all
271 references of a symbol and one of all common definitions of a symbol.
273 When the function is over, the supplied is left connected to the bfd
274 to which is was born, with its udata field pointing to the next member
275 on the chain in which it has been inserted.
277 A certain amount of jigery pokery is necessary since commons come
278 along and upset things, we only keep one item in the common chain; the
279 one with the biggest size seen sofar. When another common comes along
280 it either bumps the previous definition into the ref chain, since it
281 is bigger, or gets turned into a ref on the spot since the one on the
282 common chain is already bigger. If a real definition comes along then
283 the common gets bumped off anyway.
285 Whilst all this is going on we keep a count of the number of multiple
286 definitions seen, undefined global symbols and pending commons.
291 Q_enter_global_ref (nlist_p
)
295 asymbol
*sym
= *nlist_p
;
296 CONST
char *name
= sym
->name
;
297 ldsym_type
*sp
= ldsym_get (name
);
299 flagword this_symbol_flags
= sym
->flags
;
302 ASSERT(sym
->udata
== 0);
305 if (flag_is_constructor(this_symbol_flags
)) {
306 /* Add this constructor to the list we keep */
307 ldlang_add_constructor(sp
);
308 /* Turn any commons into refs */
309 if (sp
->scoms_chain
!= (asymbol
**)NULL
) {
310 refize(sp
, sp
->scoms_chain
);
317 if (flag_is_common(this_symbol_flags
)) {
318 /* If we have a definition of this symbol already then
319 this common turns into a reference. Also we only
320 ever point to the largest common, so if we
321 have a common, but it's bigger that the new symbol
322 the turn this into a reference too. */
325 /* This is a common symbol, but we already have a definition
326 for it, so just link it into the ref chain as if
327 it were a reference */
330 else if (sp
->scoms_chain
) {
331 /* If we have a previous common, keep only the biggest */
332 if ( (*(sp
->scoms_chain
))->value
> sym
->value
) {
333 /* other common is bigger, throw this one away */
336 else if (sp
->scoms_chain
!= nlist_p
) {
337 /* other common is smaller, throw that away */
338 refize(sp
, sp
->scoms_chain
);
339 sp
->scoms_chain
= nlist_p
;
343 /* This is the first time we've seen a common, so remember it
344 - if it was undefined before, we know it's defined now. If
345 the symbol has been marked as really being a constructor,
346 then treat this as a ref
348 if (sp
->flags
& SYM_CONSTRUCTOR
) {
349 /* Turn this into a ref */
353 /* treat like a common */
355 undefined_global_sym_count
--;
358 sp
->scoms_chain
= nlist_p
;
363 else if (flag_is_defined(this_symbol_flags
)) {
364 /* This is the definition of a symbol, add to def chain */
365 if (sp
->sdefs_chain
&& (*(sp
->sdefs_chain
))->section
!= sym
->section
) {
366 /* Multiple definition */
367 asymbol
*sy
= *(sp
->sdefs_chain
);
368 lang_input_statement_type
*stat
= (lang_input_statement_type
*) sy
->the_bfd
->usrdata
;
369 lang_input_statement_type
*stat1
= (lang_input_statement_type
*) sym
->the_bfd
->usrdata
;
370 asymbol
** stat1_symbols
= stat1
? stat1
->asymbols
: 0;
371 asymbol
** stat_symbols
= stat
? stat
->asymbols
:0;
373 multiple_def_count
++;
374 info("%C: multiple definition of `%T'\n",
381 info("%C: first seen here\n",
388 sym
->udata
=(PTR
)( sp
->sdefs_chain
);
389 sp
->sdefs_chain
= nlist_p
;
391 /* A definition overrides a common symbol */
392 if (sp
->scoms_chain
) {
393 refize(sp
, sp
->scoms_chain
);
397 else if (sp
->srefs_chain
) {
398 /* If previously was undefined, then remember as defined */
399 undefined_global_sym_count
--;
403 if (sp
->scoms_chain
== (asymbol
**)NULL
404 && sp
->srefs_chain
== (asymbol
**)NULL
405 && sp
->sdefs_chain
== (asymbol
**)NULL
) {
406 /* And it's the first time we've seen it */
407 undefined_global_sym_count
++;
415 ASSERT(sp
->sdefs_chain
== 0 || sp
->scoms_chain
== 0);
416 ASSERT(sp
->scoms_chain
==0 || (*(sp
->scoms_chain
))->udata
== 0);
422 Q_enter_file_symbols (entry
)
423 lang_input_statement_type
*entry
;
426 entry
->common_section
=
427 bfd_make_section(entry
->the_bfd
, "COMMON");
429 ldlang_add_file(entry
);
432 if (trace_files
|| option_v
) {
436 total_symbols_seen
+= entry
->symbol_count
;
438 for (q
= entry
->asymbols
; *q
; q
++)
442 if (flag_is_undefined_or_global_or_common_or_constructor(p
->flags
))
444 Q_enter_global_ref(q
);
446 if (p
->flags
& BSF_INDIRECT
) {
450 if (p
->flags
& BSF_WARNING
) {
453 ASSERT(p
->flags
!= 0);
459 /* Searching libraries */
461 struct lang_input_statement_struct
*decode_library_subfile ();
462 void linear_library (), symdef_library ();
464 /* Search the library ENTRY, already open on descriptor DESC.
465 This means deciding which library members to load,
466 making a chain of `struct lang_input_statement_struct' for those members,
467 and entering their global symbols in the hash table. */
470 search_library (entry
)
471 struct lang_input_statement_struct
*entry
;
474 /* No need to load a library if no undefined symbols */
475 if (!undefined_global_sym_count
) return;
477 if (bfd_has_map(entry
->the_bfd
))
478 symdef_library (entry
);
480 linear_library (entry
);
488 gnu960_check_format (abfd
, format
)
494 if ((bfd_check_format(abfd
,format
) == true)
495 && (abfd
->xvec
->flavour
== output_flavor
) ){
505 ldmain_open_file_read_symbol (entry
)
506 struct lang_input_statement_struct
*entry
;
508 if (entry
->asymbols
== (asymbol
**)NULL
509 &&entry
->real
== true
510 && entry
->filename
!= (char *)NULL
)
512 ldfile_open_file (entry
);
515 if (gnu960_check_format(entry
->the_bfd
, bfd_object
))
517 if (bfd_check_format(entry
->the_bfd
, bfd_object
))
520 entry
->the_bfd
->usrdata
= (PTR
)entry
;
523 Q_read_entry_symbols (entry
->the_bfd
, entry
);
524 Q_enter_file_symbols (entry
);
527 else if (gnu960_check_format(entry
->the_bfd
, bfd_archive
))
529 else if (bfd_check_format(entry
->the_bfd
, bfd_archive
))
532 entry
->the_bfd
->usrdata
= (PTR
)entry
;
534 entry
->subfiles
= (lang_input_statement_type
*)NULL
;
535 search_library (entry
);
539 info("%F%B: malformed input file (not rel or archive) \n",
547 /* Construct and return a lang_input_statement_struct for a library member.
548 The library's lang_input_statement_struct is library_entry,
549 and the library is open on DESC.
550 SUBFILE_OFFSET is the byte index in the library of this member's header.
551 We store the length of the member into *LENGTH_LOC. */
553 lang_input_statement_type
*
554 decode_library_subfile (library_entry
, subfile_offset
)
555 struct lang_input_statement_struct
*library_entry
;
558 register struct lang_input_statement_struct
*subentry
;
559 subentry
= (struct lang_input_statement_struct
*) ldmalloc ((bfd_size_type
)(sizeof (struct lang_input_statement_struct
)));
560 subentry
->filename
= subfile_offset
-> filename
;
561 subentry
->local_sym_name
= subfile_offset
->filename
;
562 subentry
->asymbols
= 0;
563 subentry
->the_bfd
= subfile_offset
;
564 subentry
->subfiles
= 0;
566 subentry
->superfile
= library_entry
;
567 subentry
->is_archive
= false;
569 subentry
->just_syms_flag
= false;
570 subentry
->loaded
= false;
576 boolean
subfile_wanted_p ();
578 clear_syms(entry
, offset
)
579 struct lang_input_statement_struct
*entry
;
583 unsigned long indx
= bfd_get_next_mapent(entry
->the_bfd
,
586 while (indx
!= BFD_NO_MORE_SYMBOLS
) {
587 if (car
->file_offset
== offset
) {
590 indx
= bfd_get_next_mapent(entry
->the_bfd
, indx
, &car
);
595 /* Search a library that has a map
598 symdef_library (entry
)
599 struct lang_input_statement_struct
*entry
;
602 register struct lang_input_statement_struct
*prev
= 0;
604 boolean not_finished
= true;
607 while (not_finished
== true)
609 carsym
*exported_library_name
;
610 bfd
*prev_archive_member_bfd
= 0;
612 int idx
= bfd_get_next_mapent(entry
->the_bfd
,
614 &exported_library_name
);
616 not_finished
= false;
618 while (idx
!= BFD_NO_MORE_SYMBOLS
&& undefined_global_sym_count
)
621 if (exported_library_name
->name
)
624 ldsym_type
*sp
= ldsym_get_soft (exported_library_name
->name
);
626 /* If we find a symbol that appears to be needed, think carefully
627 about the archive member that the symbol is in. */
628 /* So - if it exists, and is referenced somewhere and is
630 if (sp
&& sp
->srefs_chain
&& !sp
->sdefs_chain
)
632 bfd
*archive_member_bfd
= bfd_get_elt_at_index(entry
->the_bfd
, idx
);
633 struct lang_input_statement_struct
*archive_member_lang_input_statement_struct
;
636 if (archive_member_bfd
&& gnu960_check_format(archive_member_bfd
, bfd_object
))
638 if (archive_member_bfd
&& bfd_check_format(archive_member_bfd
, bfd_object
))
642 /* Don't think carefully about any archive member
643 more than once in a given pass. */
644 if (prev_archive_member_bfd
!= archive_member_bfd
)
647 prev_archive_member_bfd
= archive_member_bfd
;
649 /* Read the symbol table of the archive member. */
651 if (archive_member_bfd
->usrdata
!= (PTR
)NULL
) {
653 archive_member_lang_input_statement_struct
=(lang_input_statement_type
*) archive_member_bfd
->usrdata
;
657 archive_member_lang_input_statement_struct
=
658 decode_library_subfile (entry
, archive_member_bfd
);
659 archive_member_bfd
->usrdata
= (PTR
) archive_member_lang_input_statement_struct
;
663 if (archive_member_lang_input_statement_struct
== 0) {
664 info ("%F%I contains invalid archive member %s\n",
669 if (archive_member_lang_input_statement_struct
->loaded
== false)
672 Q_read_entry_symbols (archive_member_bfd
, archive_member_lang_input_statement_struct
);
673 /* Now scan the symbol table and decide whether to load. */
676 if (subfile_wanted_p (archive_member_lang_input_statement_struct
) == true)
679 /* This member is needed; load it.
680 Since we are loading something on this pass,
681 we must make another pass through the symdef data. */
685 Q_enter_file_symbols (archive_member_lang_input_statement_struct
);
688 prev
->chain
= archive_member_lang_input_statement_struct
;
690 entry
->subfiles
= archive_member_lang_input_statement_struct
;
693 prev
= archive_member_lang_input_statement_struct
;
696 /* Clear out this member's symbols from the symdef data
697 so that following passes won't waste time on them. */
698 clear_syms(entry
, exported_library_name
->file_offset
);
699 archive_member_lang_input_statement_struct
->loaded
= true;
706 idx
= bfd_get_next_mapent(entry
->the_bfd
, idx
, &exported_library_name
);
712 linear_library (entry
)
713 struct lang_input_statement_struct
*entry
;
715 boolean more_to_do
= true;
716 register struct lang_input_statement_struct
*prev
= 0;
720 bfd
* archive
= bfd_openr_next_archived_file(entry
->the_bfd
,0);
725 if (gnu960_check_format(archive
, bfd_object
))
727 if (bfd_check_format(archive
, bfd_object
))
730 register struct lang_input_statement_struct
*subentry
;
732 subentry
= decode_library_subfile (entry
,
735 archive
->usrdata
= (PTR
) subentry
;
736 if (!subentry
) return;
737 if (subentry
->loaded
== false) {
738 Q_read_entry_symbols (archive
, subentry
);
740 if (subfile_wanted_p (subentry
) == true)
742 Q_enter_file_symbols (subentry
);
745 prev
->chain
= subentry
;
747 entry
->subfiles
= subentry
;
751 subentry
->loaded
= true;
755 archive
= bfd_openr_next_archived_file(entry
->the_bfd
,archive
);
762 /* ENTRY is an entry for a library member.
763 Its symbols have been read into core, but not entered.
764 Return nonzero if we ought to load this member. */
767 subfile_wanted_p (entry
)
768 struct lang_input_statement_struct
*entry
;
772 for (q
= entry
->asymbols
; *q
; q
++)
776 /* If the symbol has an interesting definition, we could
777 potentially want it. */
779 if (p
->flags
& BSF_INDIRECT
) {
780 /* Grab out the name we've indirected to, and keep the insides
785 if (p
->flags
& BSF_FORT_COMM
786 || p
->flags
& BSF_GLOBAL
)
788 register ldsym_type
*sp
= ldsym_get_soft (p
->name
);
791 /* If this symbol has not been hashed,
792 we can't be looking for it. */
793 if (sp
!= (ldsym_type
*)NULL
794 && sp
->sdefs_chain
== (asymbol
**)NULL
) {
795 if (sp
->srefs_chain
!= (asymbol
**)NULL
796 || sp
->scoms_chain
!= (asymbol
**)NULL
)
798 /* This is a symbol we are looking for. It is either
799 not yet defined or common. */
801 if (flag_is_common(p
->flags
))
804 /* If the symbol in the table is a constructor, we won't to
805 anything fancy with it */
806 if ((sp
->flags
& SYM_CONSTRUCTOR
) == 0) {
807 /* This libary member has something to
808 say about this element. We should
809 remember if its a new size */
810 /* Move something from the ref list to the com list */
811 if(sp
->scoms_chain
) {
812 /* Already a common symbol, maybe update it */
813 if (p
->value
> (*(sp
->scoms_chain
))->value
) {
814 (*(sp
->scoms_chain
))->value
= p
->value
;
818 /* Take a value from the ref chain
819 Here we are moving a symbol from the owning bfd
820 to another bfd. We must set up the
821 common_section portion of the bfd thing */
825 sp
->scoms_chain
= sp
->srefs_chain
;
827 (asymbol
**)((*(sp
->srefs_chain
))->udata
);
828 (*(sp
->scoms_chain
))->udata
= (PTR
)NULL
;
830 (*( sp
->scoms_chain
))->flags
= BSF_FORT_COMM
;
831 /* Remember the size of this item */
832 sp
->scoms_chain
[0]->value
= p
->value
;
834 undefined_global_sym_count
--;
836 asymbol
*com
= *(sp
->scoms_chain
);
837 if (((lang_input_statement_type
*)
838 (com
->the_bfd
->usrdata
))->common_section
==
840 ((lang_input_statement_type
*)
841 (com
->the_bfd
->usrdata
))->common_section
=
842 bfd_make_section(com
->the_bfd
, "COMMON");
846 ASSERT(p
->udata
== 0);
852 info("%I needed due to %s\n",entry
, sp
->name
);