* ieee.c (ieee_write_debug_part): Change return type to boolean.

If there is a SEC_DEBUGGING section, get the contents of the debug
	information part from it.
	(ieee_set_section_contents): Store the contents of a SEC_DEBUGGING
	section in memory.
	(ieee_write_object_contents): Check ieee_write_debug_part return.
This commit is contained in:
Ian Lance Taylor
1996-01-08 22:02:36 +00:00
parent ed3b618d8d
commit efa77952c8
2 changed files with 44 additions and 50 deletions

View File

@ -1,3 +1,12 @@
Mon Jan 8 17:00:57 1996 Ian Lance Taylor <ian@cygnus.com>
* ieee.c (ieee_write_debug_part): Change return type to boolean.
If there is a SEC_DEBUGGING section, get the contents of the debug
information part from it.
(ieee_set_section_contents): Store the contents of a SEC_DEBUGGING
section in memory.
(ieee_write_object_contents): Check ieee_write_debug_part return.
Thu Jan 4 17:12:37 1996 Fred Fish <fnf@cygnus.com> Thu Jan 4 17:12:37 1996 Fred Fish <fnf@cygnus.com>
* config.bfd (i[345]86-*-freebsd*): Add target. * config.bfd (i[345]86-*-freebsd*): Add target.

View File

@ -44,6 +44,7 @@ static boolean do_as_repeat PARAMS ((bfd *, asection *));
static boolean do_without_relocs PARAMS ((bfd *, asection *)); static boolean do_without_relocs PARAMS ((bfd *, asection *));
static boolean ieee_write_external_part PARAMS ((bfd *)); static boolean ieee_write_external_part PARAMS ((bfd *));
static boolean ieee_write_data_part PARAMS ((bfd *)); static boolean ieee_write_data_part PARAMS ((bfd *));
static boolean ieee_write_debug_part PARAMS ((bfd *));
static boolean ieee_write_me_part PARAMS ((bfd *)); static boolean ieee_write_me_part PARAMS ((bfd *));
static boolean ieee_slurp_debug PARAMS ((bfd *)); static boolean ieee_slurp_debug PARAMS ((bfd *));
@ -2905,7 +2906,7 @@ relocate_debug (output, input)
the debug info in each, and copy it out, relocating it as we go. the debug info in each, and copy it out, relocating it as we go.
*/ */
static void static boolean
ieee_write_debug_part (abfd) ieee_write_debug_part (abfd)
bfd *abfd; bfd *abfd;
{ {
@ -2922,53 +2923,20 @@ ieee_write_debug_part (abfd)
if (chain == (bfd_chain_type *) NULL) if (chain == (bfd_chain_type *) NULL)
{ {
#if 0 asection *s;
/* There is no debug info, so we'll fake some up */
CONST static char fake[] =
{
0xf8, 0xa, 0, 5, 't', 't', 't', 't', 't', 0, 2, 3,
'1', '.', '1', 0x82, 1991 >> 8, 1991 & 0xff, 9, 20, 11, 07, 50};
ieee->w.r.debug_information_part = 0;
for (s = abfd->sections; s != NULL; s = s->next)
if ((s->flags & SEC_DEBUGGING) != 0)
break;
if (s == NULL)
{
ieee->w.r.debug_information_part = 0;
return true;
}
here; ieee->w.r.debug_information_part = here;
if (bfd_write (s->contents, 1, s->_raw_size, abfd) != s->_raw_size)
return false;
/* bfd_write(fake, 1, sizeof(fake), abfd);*/
/* Now write a header for each section */
{
int i = 0;
asection *s = abfd->sections;
while (s)
{
if (s != abfd->abs_section
&& (s->flags & SEC_DEBUGGING) == 0)
{
if (! ieee_write_byte (abfd, 0xf8)
|| ! ieee_write_byte (abfd, 0x0b)
|| ! ieee_write_byte (abfd, 0)
|| ! ieee_write_byte (abfd, 0)
|| ! ieee_write_byte (abfd, 1)
|| ! ieee_write_byte (abfd, i + IEEE_SECTION_NUMBER_BASE)
|| ! ieee_write_expression (abfd, 0, s->symbol, 0, 0, 0)
|| ! ieee_write_byte (abfd, 0)
|| ! ieee_write_byte (abfd, 0xf9)
|| ! ieee_write_expression (abfd, s->size,
bfd_abs_section_ptr->symbol,
0, 0, 0))
return false;
i++;
}
s = s->next;
}
/* Close the scope */
if (! ieee_write_byte (abfd, 0xf9))
return false;
}
#endif
} }
else else
{ {
@ -2981,7 +2949,7 @@ ieee_write_debug_part (abfd)
if (bfd_seek (entry, entry_ieee->w.r.debug_information_part, if (bfd_seek (entry, entry_ieee->w.r.debug_information_part,
SEEK_SET) SEEK_SET)
!= 0) != 0)
abort (); return false;
relocate_debug (abfd, entry); relocate_debug (abfd, entry);
} }
@ -2995,9 +2963,11 @@ ieee_write_debug_part (abfd)
{ {
ieee->w.r.debug_information_part = 0; ieee->w.r.debug_information_part = 0;
} }
}
flush ();
flush ();
}
return true;
} }
/* Write the data in an ieee way. */ /* Write the data in an ieee way. */
@ -3063,6 +3033,20 @@ ieee_set_section_contents (abfd, section, location, offset, count)
file_ptr offset; file_ptr offset;
bfd_size_type count; bfd_size_type count;
{ {
if ((section->flags & SEC_DEBUGGING) != 0)
{
if (section->contents == NULL)
{
section->contents = bfd_alloc (abfd, section->_raw_size);
if (section->contents == NULL)
return false;
}
/* bfd_set_section_contents has already checked that everything
is within range. */
memcpy (section->contents + offset, location, count);
return true;
}
if (ieee_per_section (section)->data == (bfd_byte *) NULL) if (ieee_per_section (section)->data == (bfd_byte *) NULL)
{ {
if (!init_for_output (abfd)) if (!init_for_output (abfd))
@ -3300,7 +3284,8 @@ ieee_write_object_contents (abfd)
/* Write any debugs we have been told about. */ /* Write any debugs we have been told about. */
ieee_write_debug_part (abfd); if (! ieee_write_debug_part (abfd))
return false;
/* Can only write the data once the symbols have been written, since /* Can only write the data once the symbols have been written, since
the data contains relocation information which points to the the data contains relocation information which points to the