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.
This commit is contained in:
Ian Lance Taylor 1993-01-26 19:56:17 +00:00
parent 4b9c23a9f5
commit 8a045e502f
3 changed files with 125 additions and 67 deletions

View File

@ -1,3 +1,8 @@
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

View File

@ -54,6 +54,9 @@ bfd *output_bfd = 0;
extern boolean option_v;
/* set if -y on the command line */
int had_y;
/* The local symbol prefix */
char lprefix = 'L';
@ -342,6 +345,8 @@ DEFUN (Q_enter_global_ref, (nlist_p, name),
flagword this_symbol_flags = sym->flags;
sp = ldsym_get (name);
/* If this symbol already has udata, it means that something strange
has happened.
@ -371,7 +376,7 @@ DEFUN (Q_enter_global_ref, (nlist_p, name),
}
else
{
if (sym->section == &bfd_com_section)
if (bfd_is_com_section (sym->section))
{
/* If we have a definition of this symbol already then
this common turns into a reference. Also we only
@ -431,17 +436,19 @@ DEFUN (Q_enter_global_ref, (nlist_p, name),
{
/* Multiple definition */
asymbol *sy = *(sp->sdefs_chain);
lang_input_statement_type *stat = (lang_input_statement_type *) sy->the_bfd->usrdata;
lang_input_statement_type *stat1 = (lang_input_statement_type *) sym->the_bfd->usrdata;
lang_input_statement_type *stat =
(lang_input_statement_type *) bfd_asymbol_bfd(sy)->usrdata;
lang_input_statement_type *stat1 =
(lang_input_statement_type *) bfd_asymbol_bfd(sym)->usrdata;
asymbol **stat1_symbols = stat1 ? stat1->asymbols : 0;
asymbol **stat_symbols = stat ? stat->asymbols : 0;
multiple_def_count++;
einfo ("%X%C: multiple definition of `%T'\n",
sym->the_bfd, sym->section, stat1_symbols, sym->value, sym);
bfd_asymbol_bfd(sym), sym->section, stat1_symbols, sym->value, sym);
einfo ("%X%C: first seen here\n",
sy->the_bfd, sy->section, stat_symbols, sy->value);
bfd_asymbol_bfd(sy), sy->section, stat_symbols, sy->value);
}
else
{
@ -489,62 +496,77 @@ Q_enter_file_symbols (entry)
asymbol **q;
entry->common_section =
bfd_make_section_old_way (entry->the_bfd, "COMMON");
bfd_make_section_old_way (entry->the_bfd, "COMMON");
ldlang_add_file (entry);
if (trace_files || option_v)
{
info ("%I\n", entry);
}
{
info ("%I\n", entry);
}
total_symbols_seen += entry->symbol_count;
total_files_seen++;
if (entry->symbol_count)
{
for (q = entry->asymbols; *q; q++)
{
for (q = entry->asymbols; *q; q++)
asymbol *p = *q;
if (had_y && p->name)
{
/* look up the symbol anyway to see if the trace bit was
set */
ldsym_type *s = ldsym_get(p->name);
if (s->flags & SYM_Y)
{
asymbol *p = *q;
if (p->flags & BSF_INDIRECT)
{
add_indirect (q);
}
else if (p->flags & BSF_WARNING)
{
add_warning (p);
}
else if (p->section == &bfd_und_section
|| (p->flags & BSF_GLOBAL)
|| p->section == &bfd_com_section
|| (p->flags & BSF_CONSTRUCTOR))
{
asymbol *p = *q;
if (p->flags & BSF_INDIRECT)
{
add_indirect (q);
}
else if (p->flags & BSF_WARNING)
{
add_warning (p);
}
else if (p->section == &bfd_und_section
|| (p->flags & BSF_GLOBAL)
|| p->section == &bfd_com_section
|| (p->flags & BSF_CONSTRUCTOR))
{
Q_enter_global_ref (q, p->name);
}
}
einfo("%B: %s %T\n", entry->the_bfd,
p->section == &bfd_und_section ? "reference to" : "definition of ",
p);
}
}
if (p->flags & BSF_INDIRECT)
{
add_indirect (q);
}
else if (p->flags & BSF_WARNING)
{
add_warning (p);
}
else if (p->section == &bfd_und_section
|| (p->flags & BSF_GLOBAL)
|| bfd_is_com_section (p->section)
|| (p->flags & BSF_CONSTRUCTOR))
{
asymbol *p = *q;
if (p->flags & BSF_INDIRECT)
{
add_indirect (q);
}
else if (p->flags & BSF_WARNING)
{
add_warning (p);
}
else if (p->section == &bfd_und_section
|| (p->flags & BSF_GLOBAL)
|| bfd_is_com_section (p->section)
|| (p->flags & BSF_CONSTRUCTOR))
{
Q_enter_global_ref (q, p->name);
}
}
}
}
}
/* Searching libraries */
struct lang_input_statement_struct *decode_library_subfile ();
@ -652,21 +674,37 @@ decode_library_subfile (library_entry, subfile_offset)
bfd *subfile_offset;
{
register struct lang_input_statement_struct *subentry;
subentry = (struct lang_input_statement_struct *) ldmalloc ((bfd_size_type) (sizeof (struct lang_input_statement_struct)));
subentry->filename = subfile_offset->filename;
subentry->local_sym_name = subfile_offset->filename;
subentry->asymbols = 0;
subentry->the_bfd = subfile_offset;
subentry->subfiles = 0;
subentry->next = 0;
subentry->superfile = library_entry;
subentry->is_archive = false;
subentry->just_syms_flag = false;
subentry->loaded = false;
subentry->chain = 0;
/* First, check if we already have a loaded
lang_input_statement_struct for this library subfile. If so,
just return it. Otherwise, allocate some space and build a new one. */
if ( subfile_offset->usrdata
&& ((struct lang_input_statement_struct *)subfile_offset->usrdata)->
loaded == true )
{
subentry = (struct lang_input_statement_struct *)subfile_offset->usrdata;
}
else
{
subentry =
(struct lang_input_statement_struct *)
ldmalloc ((bfd_size_type) (sizeof (struct lang_input_statement_struct)));
subentry->filename = subfile_offset->filename;
subentry->local_sym_name = subfile_offset->filename;
subentry->asymbols = 0;
subentry->the_bfd = subfile_offset;
subentry->subfiles = 0;
subentry->next = 0;
subentry->superfile = library_entry;
subentry->is_archive = false;
subentry->just_syms_flag = false;
subentry->loaded = false;
subentry->chain = 0;
}
return subentry;
}
@ -818,9 +856,15 @@ linear_library (entry)
if (entry->complained == false)
{
einfo ("%P: library %s has bad table of contents, rerun ranlib\n",
entry->the_bfd->filename);
if (entry->the_bfd->xvec->flavour != bfd_target_ieee_flavour)
{
/* IEEE can use table of contents, so this message is bogus */
einfo ("%P: library %s has bad table of contents, rerun ranlib\n",
entry->the_bfd->filename);
}
entry->complained = true;
}
while (more_to_do)
{
@ -900,7 +944,7 @@ subfile_wanted_p (entry)
/** add_indirect(q);*/
}
if (p->section == &bfd_com_section
if (bfd_is_com_section (p->section)
|| (p->flags & BSF_GLOBAL)
|| (p->flags & BSF_INDIRECT))
{
@ -917,7 +961,7 @@ subfile_wanted_p (entry)
/* This is a symbol we are looking for. It is either
not yet defined or common. */
if (p->section == &bfd_com_section)
if (bfd_is_com_section (p->section))
{
/* If the symbol in the table is a constructor, we won't to
@ -962,12 +1006,12 @@ subfile_wanted_p (entry)
asymbol *com = *(sp->scoms_chain);
if (((lang_input_statement_type *)
(com->the_bfd->usrdata))->common_section ==
(bfd_asymbol_bfd(com)->usrdata))->common_section ==
(asection *) NULL)
{
((lang_input_statement_type *)
(com->the_bfd->usrdata))->common_section =
bfd_make_section_old_way (com->the_bfd, "COMMON");
(bfd_asymbol_bfd(com)->usrdata))->common_section =
bfd_make_section_old_way (bfd_asymbol_bfd(com), "COMMON");
}
}
}
@ -989,3 +1033,12 @@ subfile_wanted_p (entry)
return false;
}
void
add_ysym(text)
char *text;
{
ldsym_type *lookup = ldsym_get(text);
lookup->flags |= SYM_Y;
had_y = 1;
}

View File

@ -275,7 +275,7 @@ process_keepsyms (table, size)
{
asymbol *s = *sym;
if (s->section == &bfd_und_section
|| s->section == &bfd_com_section
|| bfd_is_com_section (s->section)
|| s->flags & BSF_KEEP_G)
KEEP (sym);
}
@ -483,7 +483,7 @@ asymbol **output_buffer;
}
}
else if (p->section == &bfd_und_section
|| p->section == &bfd_com_section)
|| bfd_is_com_section (p->section))
{
/* These must be global. */
}