mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-14 20:46:12 +08:00
2005-02-25 Mark Kettenis <kettenis@gnu.org>
Committed by Elena Zannoni <ezannoni@redhat.com> * dwarf2read.c (dwarf2_build_psymtabs_hard): Adjust info_ptr before building psymtabs for included files. (create_all_comp_units): Initailize initial length size of compilation header to zero. (read_initial_length): Complain if both 32-bit and 64-bit DWARF sections are encountered within the same compilation header. (dwarf_decode_line_header): Pass compilation header in call to read_initial_length.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
2005-02-25 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
|
Committed by Elena Zannoni <ezannoni@redhat.com>
|
||||||
|
|
||||||
|
* dwarf2read.c (dwarf2_build_psymtabs_hard): Adjust
|
||||||
|
info_ptr before building psymtabs for included files.
|
||||||
|
(create_all_comp_units): Initailize initial length size of
|
||||||
|
compilation header to zero.
|
||||||
|
(read_initial_length): Complain if both 32-bit and 64-bit DWARF
|
||||||
|
sections are encountered within the same compilation header.
|
||||||
|
(dwarf_decode_line_header): Pass compilation header in call to
|
||||||
|
read_initial_length.
|
||||||
|
|
||||||
2005-02-24 Andrew Cagney <cagney@gnu.org>
|
2005-02-24 Andrew Cagney <cagney@gnu.org>
|
||||||
|
|
||||||
Add show_VARIABLE functions, update add_setshow call.
|
Add show_VARIABLE functions, update add_setshow call.
|
||||||
|
@ -1542,6 +1542,9 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline)
|
|||||||
also happen.) This happens in VxWorks. */
|
also happen.) This happens in VxWorks. */
|
||||||
free_named_symtabs (pst->filename);
|
free_named_symtabs (pst->filename);
|
||||||
|
|
||||||
|
info_ptr = beg_of_comp_unit + cu.header.length
|
||||||
|
+ cu.header.initial_length_size;
|
||||||
|
|
||||||
if (comp_unit_die.has_stmt_list)
|
if (comp_unit_die.has_stmt_list)
|
||||||
{
|
{
|
||||||
/* Get the list of files included in the current compilation unit,
|
/* Get the list of files included in the current compilation unit,
|
||||||
@ -1549,9 +1552,6 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline)
|
|||||||
dwarf2_build_include_psymtabs (&cu, &comp_unit_die, pst);
|
dwarf2_build_include_psymtabs (&cu, &comp_unit_die, pst);
|
||||||
}
|
}
|
||||||
|
|
||||||
info_ptr = beg_of_comp_unit + cu.header.length
|
|
||||||
+ cu.header.initial_length_size;
|
|
||||||
|
|
||||||
do_cleanups (back_to_inner);
|
do_cleanups (back_to_inner);
|
||||||
}
|
}
|
||||||
do_cleanups (back_to);
|
do_cleanups (back_to);
|
||||||
@ -1641,6 +1641,7 @@ create_all_comp_units (struct objfile *objfile)
|
|||||||
|
|
||||||
/* Read just enough information to find out where the next
|
/* Read just enough information to find out where the next
|
||||||
compilation unit is. */
|
compilation unit is. */
|
||||||
|
cu_header.initial_length_size = 0;
|
||||||
cu_header.length = read_initial_length (objfile->obfd, info_ptr,
|
cu_header.length = read_initial_length (objfile->obfd, info_ptr,
|
||||||
&cu_header, &bytes_read);
|
&cu_header, &bytes_read);
|
||||||
|
|
||||||
@ -5860,7 +5861,7 @@ read_address (bfd *abfd, char *buf, struct dwarf2_cu *cu, int *bytes_read)
|
|||||||
As a side effect, this function sets the fields initial_length_size
|
As a side effect, this function sets the fields initial_length_size
|
||||||
and offset_size in cu_header to the values appropriate for the
|
and offset_size in cu_header to the values appropriate for the
|
||||||
length field. (The format of the initial length field determines
|
length field. (The format of the initial length field determines
|
||||||
the width of file offsets to be fetched later with fetch_offset().)
|
the width of file offsets to be fetched later with read_offset().)
|
||||||
|
|
||||||
[ Note: read_initial_length() and read_offset() are based on the
|
[ Note: read_initial_length() and read_offset() are based on the
|
||||||
document entitled "DWARF Debugging Information Format", revision
|
document entitled "DWARF Debugging Information Format", revision
|
||||||
@ -5882,43 +5883,41 @@ static LONGEST
|
|||||||
read_initial_length (bfd *abfd, char *buf, struct comp_unit_head *cu_header,
|
read_initial_length (bfd *abfd, char *buf, struct comp_unit_head *cu_header,
|
||||||
int *bytes_read)
|
int *bytes_read)
|
||||||
{
|
{
|
||||||
LONGEST retval = 0;
|
LONGEST length = bfd_get_32 (abfd, (bfd_byte *) buf);
|
||||||
|
|
||||||
retval = bfd_get_32 (abfd, (bfd_byte *) buf);
|
if (length == 0xffffffff)
|
||||||
|
|
||||||
if (retval == 0xffffffff)
|
|
||||||
{
|
{
|
||||||
retval = bfd_get_64 (abfd, (bfd_byte *) buf + 4);
|
length = bfd_get_64 (abfd, (bfd_byte *) buf + 4);
|
||||||
*bytes_read = 12;
|
*bytes_read = 12;
|
||||||
if (cu_header != NULL)
|
|
||||||
{
|
|
||||||
cu_header->initial_length_size = 12;
|
|
||||||
cu_header->offset_size = 8;
|
|
||||||
}
|
}
|
||||||
}
|
else if (length == 0)
|
||||||
else if (retval == 0)
|
|
||||||
{
|
{
|
||||||
/* Handle (non-standard) 64-bit DWARF2 formats such as that used
|
/* Handle the (non-standard) 64-bit DWARF2 format used by IRIX. */
|
||||||
by IRIX. */
|
length = bfd_get_64 (abfd, (bfd_byte *) buf);
|
||||||
retval = bfd_get_64 (abfd, (bfd_byte *) buf);
|
|
||||||
*bytes_read = 8;
|
*bytes_read = 8;
|
||||||
if (cu_header != NULL)
|
|
||||||
{
|
|
||||||
cu_header->initial_length_size = 8;
|
|
||||||
cu_header->offset_size = 8;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*bytes_read = 4;
|
*bytes_read = 4;
|
||||||
if (cu_header != NULL)
|
|
||||||
{
|
|
||||||
cu_header->initial_length_size = 4;
|
|
||||||
cu_header->offset_size = 4;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
if (cu_header)
|
||||||
|
{
|
||||||
|
gdb_assert (cu_header->initial_length_size == 0
|
||||||
|
|| cu_header->initial_length_size == 4
|
||||||
|
|| cu_header->initial_length_size == 8
|
||||||
|
|| cu_header->initial_length_size == 12);
|
||||||
|
|
||||||
|
if (cu_header->initial_length_size != 0
|
||||||
|
&& cu_header->initial_length_size != *bytes_read)
|
||||||
|
complaint (&symfile_complaints,
|
||||||
|
_("intermixed 32-bit and 64-bit DWARF sections"));
|
||||||
|
|
||||||
|
cu_header->initial_length_size = *bytes_read;
|
||||||
|
cu_header->offset_size = (*bytes_read == 4) ? 4 : 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read an offset from the data stream. The size of the offset is
|
/* Read an offset from the data stream. The size of the offset is
|
||||||
@ -6296,7 +6295,8 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
|
|||||||
line_ptr = dwarf2_per_objfile->line_buffer + offset;
|
line_ptr = dwarf2_per_objfile->line_buffer + offset;
|
||||||
|
|
||||||
/* Read in the header. */
|
/* Read in the header. */
|
||||||
lh->total_length = read_initial_length (abfd, line_ptr, NULL, &bytes_read);
|
lh->total_length =
|
||||||
|
read_initial_length (abfd, line_ptr, &cu->header, &bytes_read);
|
||||||
line_ptr += bytes_read;
|
line_ptr += bytes_read;
|
||||||
if (line_ptr + lh->total_length > (dwarf2_per_objfile->line_buffer
|
if (line_ptr + lh->total_length > (dwarf2_per_objfile->line_buffer
|
||||||
+ dwarf2_per_objfile->line_size))
|
+ dwarf2_per_objfile->line_size))
|
||||||
|
Reference in New Issue
Block a user