mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
* ldmisc.h (demangle): Declare.
* ldmisc.c: Include "libiberty.h". Include demangle.h with "", not <>. (demangle): Make non-static. Remove remove_underscore paramter. Always return an allocated string. (vfinfo): Free result of demangle. Add case 'G'. Use %T to print functionname, rather than calling demangle. Print a colon between the BFD(section+offset) and the line number. * ldmain.c (add_archive_element): Improve format of archive information in map file. (constructor_callback): Don't print anything to the map file. * ldlang.c (lang_one_common): Improve format of common symbol information in map file. * ldctor.c (ldctor_build_sets): If producing a map file, print set information. * ldwrite.c (print_symbol_table): Print a newline before the header in the map file. * Makefile.in: Rebuild dependencies.
This commit is contained in:
58
ld/ldwrite.c
58
ld/ldwrite.c
@@ -64,6 +64,58 @@ build_link_order (statement)
|
||||
|
||||
value = statement->data_statement.value;
|
||||
|
||||
/* If the endianness of the output BFD is not known, then we
|
||||
base the endianness of the data on the first input file.
|
||||
By convention, the bfd_put routines for an unknown
|
||||
endianness are big endian, so we must swap here if the
|
||||
input file is little endian. */
|
||||
if (! bfd_big_endian (output_bfd)
|
||||
&& ! bfd_little_endian (output_bfd))
|
||||
{
|
||||
boolean swap;
|
||||
|
||||
swap = false;
|
||||
if (command_line.endian == ENDIAN_LITTLE)
|
||||
swap = true;
|
||||
else if (command_line.endian == ENDIAN_UNSET)
|
||||
{
|
||||
LANG_FOR_EACH_INPUT_STATEMENT (s)
|
||||
{
|
||||
if (s->the_bfd != NULL)
|
||||
{
|
||||
if (bfd_little_endian (s->the_bfd))
|
||||
swap = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (swap)
|
||||
{
|
||||
bfd_byte buffer[8];
|
||||
|
||||
switch (statement->data_statement.type)
|
||||
{
|
||||
case QUAD:
|
||||
bfd_putl64 (value, buffer);
|
||||
value = bfd_getb64 (buffer);
|
||||
break;
|
||||
case LONG:
|
||||
bfd_putl32 (value, buffer);
|
||||
value = bfd_getb32 (buffer);
|
||||
break;
|
||||
case SHORT:
|
||||
bfd_putl16 (value, buffer);
|
||||
value = bfd_getb16 (buffer);
|
||||
break;
|
||||
case BYTE:
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT (output_section->owner == output_bfd);
|
||||
switch (statement->data_statement.type)
|
||||
{
|
||||
@@ -114,9 +166,8 @@ build_link_order (statement)
|
||||
link_order->u.reloc.p->reloc = rs->reloc;
|
||||
link_order->u.reloc.p->addend = rs->addend_value;
|
||||
|
||||
if (rs->section != (asection *) NULL)
|
||||
if (rs->name == NULL)
|
||||
{
|
||||
ASSERT (rs->name == (const char *) NULL);
|
||||
link_order->type = bfd_section_reloc_link_order;
|
||||
if (rs->section->owner == output_bfd)
|
||||
link_order->u.reloc.p->u.section = rs->section;
|
||||
@@ -128,7 +179,6 @@ build_link_order (statement)
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT (rs->name != (const char *) NULL);
|
||||
link_order->type = bfd_symbol_reloc_link_order;
|
||||
link_order->u.reloc.p->u.name = rs->name;
|
||||
}
|
||||
@@ -453,7 +503,7 @@ ldwrite ()
|
||||
static void
|
||||
print_symbol_table ()
|
||||
{
|
||||
fprintf (config.map_file, "**FILES**\n\n");
|
||||
fprintf (config.map_file, "\n**FILES**\n\n");
|
||||
lang_for_each_file (print_file_stuff);
|
||||
|
||||
fprintf (config.map_file, "**GLOBAL SYMBOLS**\n\n");
|
||||
|
||||
Reference in New Issue
Block a user