mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
* coffgen.c (coff_real_object_p): Set obj_conv_table_size here,
rather than waiting until coff_slurp_symbol_table. (coff_write_alien_symbol): Just ignore BSF_DEBUGGING symbols. From Antti.Miettinen@ntc.nokia.com.
This commit is contained in:
@ -1,5 +1,10 @@
|
|||||||
Wed Aug 24 11:49:19 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
|
Wed Aug 24 11:49:19 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
|
||||||
|
|
||||||
|
* coffgen.c (coff_real_object_p): Set obj_conv_table_size here,
|
||||||
|
rather than waiting until coff_slurp_symbol_table.
|
||||||
|
(coff_write_alien_symbol): Just ignore BSF_DEBUGGING symbols.
|
||||||
|
From Antti.Miettinen@ntc.nokia.com.
|
||||||
|
|
||||||
* section.c (bfd_make_section_anyway): Fix failure check of
|
* section.c (bfd_make_section_anyway): Fix failure check of
|
||||||
bfd_make_empty_symbol. From Antti.Miettinen@ntc.nokia.com.
|
bfd_make_empty_symbol. From Antti.Miettinen@ntc.nokia.com.
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ coff_real_object_p (abfd, nscns, internal_f, internal_a)
|
|||||||
if ((internal_f->f_flags & F_EXEC) != 0)
|
if ((internal_f->f_flags & F_EXEC) != 0)
|
||||||
abfd->flags |= D_PAGED;
|
abfd->flags |= D_PAGED;
|
||||||
|
|
||||||
bfd_get_symcount(abfd) = internal_f->f_nsyms;
|
obj_conv_table_size (abfd) = bfd_get_symcount(abfd) = internal_f->f_nsyms;
|
||||||
if (internal_f->f_nsyms)
|
if (internal_f->f_nsyms)
|
||||||
abfd->flags |= HAS_SYMS;
|
abfd->flags |= HAS_SYMS;
|
||||||
|
|
||||||
@ -781,9 +781,10 @@ coff_write_alien_symbol (abfd, symbol, written)
|
|||||||
}
|
}
|
||||||
else if (symbol->flags & BSF_DEBUGGING)
|
else if (symbol->flags & BSF_DEBUGGING)
|
||||||
{
|
{
|
||||||
/* Remove the symbol name so that it does not take up any space.
|
/* There isn't much point to writing out a debugging symbol
|
||||||
COFF won't know what to do with it anyhow. */
|
unless we are prepared to convert it into COFF debugging
|
||||||
symbol->name = "";
|
format. So, we just ignore them. */
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1351,7 +1352,8 @@ coff_get_normalized_symtab (abfd)
|
|||||||
for (internal_ptr = internal; internal_ptr < internal_end;
|
for (internal_ptr = internal; internal_ptr < internal_end;
|
||||||
internal_ptr ++)
|
internal_ptr ++)
|
||||||
{
|
{
|
||||||
if (internal_ptr->u.syment.n_sclass == C_FILE) {
|
if (internal_ptr->u.syment.n_sclass == C_FILE
|
||||||
|
&& internal_ptr->u.syment.n_numaux > 0) {
|
||||||
/* make a file symbol point to the name in the auxent, since
|
/* make a file symbol point to the name in the auxent, since
|
||||||
the text ".file" is redundant */
|
the text ".file" is redundant */
|
||||||
if ((internal_ptr+1)->u.auxent.x_file.x_n.x_zeroes == 0) {
|
if ((internal_ptr+1)->u.auxent.x_file.x_n.x_zeroes == 0) {
|
||||||
@ -1609,10 +1611,11 @@ coff_find_nearest_line (abfd, section, ignore_symbols, offset, filename_ptr,
|
|||||||
static CONST char *cache_function;
|
static CONST char *cache_function;
|
||||||
static unsigned int line_base = 0;
|
static unsigned int line_base = 0;
|
||||||
|
|
||||||
unsigned int i = 0;
|
unsigned int i;
|
||||||
coff_data_type *cof = coff_data(abfd);
|
coff_data_type *cof = coff_data(abfd);
|
||||||
/* Run through the raw syments if available */
|
/* Run through the raw syments if available */
|
||||||
combined_entry_type *p;
|
combined_entry_type *p;
|
||||||
|
combined_entry_type *pend;
|
||||||
alent *l;
|
alent *l;
|
||||||
|
|
||||||
|
|
||||||
@ -1627,16 +1630,52 @@ coff_find_nearest_line (abfd, section, ignore_symbols, offset, filename_ptr,
|
|||||||
if (cof == NULL)
|
if (cof == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* Find the first C_FILE symbol. */
|
||||||
p = cof->raw_syments;
|
p = cof->raw_syments;
|
||||||
|
pend = p + cof->raw_syment_count;
|
||||||
for (i = 0; i < cof->raw_syment_count; i++) {
|
while (p < pend)
|
||||||
if (p->u.syment.n_sclass == C_FILE) {
|
{
|
||||||
/* File name has been moved into symbol */
|
if (p->u.syment.n_sclass == C_FILE)
|
||||||
*filename_ptr = (char *) p->u.syment._n._n_n._n_offset;
|
break;
|
||||||
break;
|
p += 1 + p->u.syment.n_numaux;
|
||||||
}
|
}
|
||||||
p += 1 + p->u.syment.n_numaux;
|
|
||||||
}
|
if (p < pend)
|
||||||
|
{
|
||||||
|
/* Look through the C_FILE symbols to find the best one. */
|
||||||
|
*filename_ptr = (char *) p->u.syment._n._n_n._n_offset;
|
||||||
|
i = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
combined_entry_type *p2;
|
||||||
|
|
||||||
|
/* Avoid endless loops on erroneous files by ensuring that
|
||||||
|
we always move forward in the file. */
|
||||||
|
if (i >= p->u.syment.n_value)
|
||||||
|
break;
|
||||||
|
|
||||||
|
i = p->u.syment.n_value;
|
||||||
|
if (i >= cof->raw_syment_count)
|
||||||
|
break;
|
||||||
|
|
||||||
|
p = cof->raw_syments + i;
|
||||||
|
if (p->u.syment.n_sclass != C_FILE)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (p2 = p; p2 < pend; p2 += 1 + p2->u.syment.n_numaux)
|
||||||
|
{
|
||||||
|
if (section ==
|
||||||
|
coff_section_from_bfd_index (abfd, p2->u.syment.n_scnum))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (p2 < pend
|
||||||
|
&& offset < p2->u.syment.n_value)
|
||||||
|
break;
|
||||||
|
|
||||||
|
*filename_ptr = (char *) p->u.syment._n._n_n._n_offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Now wander though the raw linenumbers of the section */
|
/* Now wander though the raw linenumbers of the section */
|
||||||
/*
|
/*
|
||||||
If this is the same BFD as we were previously called with and this is
|
If this is the same BFD as we were previously called with and this is
|
||||||
@ -1664,6 +1703,12 @@ coff_find_nearest_line (abfd, section, ignore_symbols, offset, filename_ptr,
|
|||||||
if (coff->native) {
|
if (coff->native) {
|
||||||
combined_entry_type *s = coff->native;
|
combined_entry_type *s = coff->native;
|
||||||
s = s + 1 + s->u.syment.n_numaux;
|
s = s + 1 + s->u.syment.n_numaux;
|
||||||
|
|
||||||
|
/* In XCOFF a debugging symbol can follow the function
|
||||||
|
symbol. */
|
||||||
|
if (s->u.syment.n_scnum == N_DEBUG)
|
||||||
|
s = s + 1 + s->u.syment.n_numaux;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
S should now point to the .bf of the function
|
S should now point to the .bf of the function
|
||||||
*/
|
*/
|
||||||
@ -1678,7 +1723,7 @@ coff_find_nearest_line (abfd, section, ignore_symbols, offset, filename_ptr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (l->u.offset > offset)
|
if (l->u.offset + bfd_get_section_vma (abfd, section) > offset)
|
||||||
break;
|
break;
|
||||||
*line_ptr = l->line_number + line_base - 1;
|
*line_ptr = l->line_number + line_base - 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user