* coffgen.c (coff_write_symbols): Check to see if a symbol's flags

do not match it class and if necessary update the class.
       (null_error_handler): New function.  Suppresses the generation of
       bfd error messages.
     * coff64-rs6000.c (bfd_xcoff_backend_data): Update comment.
     * config/tc-tic4x.c (tic4x_globl): Call S_SET_EXTERNAL as well as
     S_SET_STORAGE_CLASS.
This commit is contained in:
Nick Clifton 2008-09-30 10:50:03 +00:00
parent 34b23dab7e
commit e144674af8
5 changed files with 67 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2008-09-30 Wesley W. Terpstra <wesley@terpstra.ca>
Nick Clifton <nickc@redhat.com>
* coffgen.c (coff_write_symbols): Check to see if a symbol's flags
do not match it class and if necessary update the class.
(null_error_handler): New function. Suppresses the generation of
bfd error messages.
* coff64-rs6000.c (bfd_xcoff_backend_data): Update comment.
2008-09-30 Alan Modra <amodra@bigpond.net.au>
* Makefile.am: Run "make dep-am".

View File

@ -2580,7 +2580,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data =
coff_print_aux,
dummy_reloc16_extra_cases,
dummy_reloc16_estimate,
NULL, /* bfd_coff_sym_is_global */
NULL, /* bfd_coff_symbol_classification */
coff_compute_section_file_positions,
NULL, /* _bfd_coff_start_final_link */
xcoff64_ppc_relocate_section,

View File

@ -1082,6 +1082,11 @@ coff_write_native_symbol (bfd *abfd,
debug_string_size_p);
}
static void
null_error_handler (const char * fmt ATTRIBUTE_UNUSED, ...)
{
}
/* Write out the COFF symbols. */
bfd_boolean
@ -1138,6 +1143,42 @@ coff_write_symbols (bfd *abfd)
}
else
{
if (coff_backend_info (abfd)->_bfd_coff_classify_symbol != NULL)
{
bfd_error_handler_type current_error_handler;
enum coff_symbol_classification class;
unsigned char *n_sclass;
/* Suppress error reporting by bfd_coff_classify_symbol.
Error messages can be generated when we are processing a local
symbol which has no associated section and we do not have to
worry about this, all we need to know is that it is local. */
current_error_handler = bfd_set_error_handler (null_error_handler);
class = bfd_coff_classify_symbol (abfd, &c_symbol->native->u.syment);
(void) bfd_set_error_handler (current_error_handler);
n_sclass = &c_symbol->native->u.syment.n_sclass;
/* If the symbol class has been changed (eg objcopy/ld script/etc)
we cannot retain the existing sclass from the original symbol.
Weak symbols only have one valid sclass, so just set it always.
If it is not local class and should be, set it C_STAT.
If it is global and not classified as global, or if it is
weak (which is also classified as global), set it C_EXT. */
if (symbol->flags & BSF_WEAK)
*n_sclass = obj_pe (abfd) ? C_NT_WEAK : C_WEAKEXT;
else if (symbol->flags & BSF_LOCAL && class != COFF_SYMBOL_LOCAL)
*n_sclass = C_STAT;
else if (symbol->flags & BSF_GLOBAL
&& (class != COFF_SYMBOL_GLOBAL
#ifdef COFF_WITH_PE
|| *n_sclass == C_NT_WEAK
#endif
|| *n_sclass == C_WEAKEXT))
c_symbol->native->u.syment.n_sclass = C_EXT;
}
if (!coff_write_native_symbol (abfd, c_symbol, &written,
&string_size, &debug_string_section,
&debug_string_size))

View File

@ -1,3 +1,18 @@
2008-09-30 Wesley W. Terpstra <wesley@terpstra.ca>
Nick Clifton <nickc@redhat.com>
* config/tc-tic4x.c (tic4x_globl): Call S_SET_EXTERNAL as well as
S_SET_STORAGE_CLASS.
2008-09-30 Wesley W. Terpstra <wesley@terpstra.ca>
Nick Clifton <nickc@redhat.com>
* coffgen.c (coff_write_symbols): Check to see if a symbol's flags
do not match it class and if necessary update the class.
(null_error_handler): New function. Suppresses the generation of
bfd error messages.
* coff64-rs6000.c (bfd_xcoff_backend_data): Update comment.
2008-09-30 Alan Modra <amodra@bigpond.net.au>
* Makefile.am: Run "make dep-am".

View File

@ -821,6 +821,7 @@ tic4x_globl (int ignore ATTRIBUTE_UNUSED)
*input_line_pointer = c;
SKIP_WHITESPACE ();
S_SET_STORAGE_CLASS (symbolP, C_EXT);
S_SET_EXTERNAL (symbolP);
if (c == ',')
{
input_line_pointer++;