diff --git a/ld/ldlang.c b/ld/ldlang.c index d1f4f27e49..cabcf9de19 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -107,7 +107,7 @@ static void DEFUN(print_alignment,(value), unsigned int value) { - printf("2**%2u",value); + printf("2**%1u",value); } static void DEFUN(print_fill,(value), @@ -449,8 +449,11 @@ DEFUN(lang_map,(outfile), { lang_memory_region_type *m; fprintf(outfile,"**MEMORY CONFIGURATION**\n\n"); - +#ifdef HOST_64_BIT fprintf(outfile,"name\t\torigin\t\tlength\t\tattributes\n"); +#else + fprintf(outfile,"name\t\torigin length\t\tattributes\n"); +#endif for (m = lang_memory_region_list; m != (lang_memory_region_type *)NULL; m = m->next) @@ -464,8 +467,8 @@ DEFUN(lang_map,(outfile), fprintf(outfile,"\n"); } fprintf(outfile,"\n\n**LINK EDITOR MEMORY MAP**\n\n"); - fprintf(outfile,"output\t\tinput\t\tvirtual\n"); - fprintf(outfile,"section\t\tsection\t\taddress\tsize\n\n"); + fprintf(outfile,"output input virtual\n"); + fprintf(outfile,"section section address tsize\n\n"); print_statements(); @@ -864,6 +867,10 @@ DEFUN(map_input_to_output_sections,(s, target, output_section_statement), lang_output_section_statement_lookup (s->address_statement.section_name); os->addr_tree = s->address_statement.address; + if (os->bfd_section == (asection *)NULL) { + info("%P%F can't set the address of undefined section %s\n", + s->address_statement.section_name); + } } break; case lang_input_statement_enum: @@ -997,7 +1004,7 @@ DEFUN(print_input_section,(in), else { printf("%s", abfd->filename); } - printf("(%d bytes)", (int)bfd_alloc_size(abfd)); + printf("(overhead %d bytes)", (int)bfd_alloc_size(abfd)); print_nl(); /* Find all the symbols in this file defined in this section */ @@ -1090,6 +1097,7 @@ DEFUN(print_wild_statement,(w,os), lang_wild_statement_type *w AND lang_output_section_statement_type *os) { + printf(" from "); if (w->filename != (char *)NULL) { printf("%s",w->filename); } diff --git a/ld/ldlex.l b/ld/ldlex.l index 7d50ccdfa0..9967b69a18 100644 --- a/ld/ldlex.l +++ b/ld/ldlex.l @@ -37,7 +37,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "ld.h" #include "ldexp.h" -#include "ldgram.tab.h" +#include "ldgramtb.h" #include "ldmisc.h" #undef input @@ -317,6 +317,10 @@ WHITE [ \t]+ yylval.name = ".bss"; return OPTION_Texp; } +"\ -O"{FILENAME} { + yylval.name = buystring(yytext+3); + return OPTION_Texp; + } "\ -T"{FILENAME} { yylval.name = buystring(yytext+3); diff --git a/ld/ldsym.c b/ld/ldsym.c index 4e6bec5712..2bdb7a6bd8 100644 --- a/ld/ldsym.c +++ b/ld/ldsym.c @@ -169,45 +169,46 @@ static void print_file_stuff(f) lang_input_statement_type *f; { - fprintf (stdout, " %s", f->filename); - fprintf (stdout, " "); + fprintf (stdout, " %s\n", f->filename); if (f->just_syms_flag) - { - fprintf (stdout, " symbols only\n"); - } + { + fprintf (stdout, " symbols only\n"); + } else - { - asection *s; - if (true || option_longmap) { - for (s = f->the_bfd->sections; - s != (asection *)NULL; - s = s->next) { - print_address(s->output_offset); - printf ( "%08x 2**%2ud %s\n", - (unsigned)s->size, s->alignment_power, s->name); + { + asection *s; + if (true || option_longmap) { + for (s = f->the_bfd->sections; + s != (asection *)NULL; + s = s->next) { + print_address(s->output_offset); + printf (" %08x 2**%2ud %s\n", + (unsigned)s->size, s->alignment_power, s->name); + } + } + else { + for (s = f->the_bfd->sections; + s != (asection *)NULL; + s = s->next) { + printf("%s ", s->name); + print_address(s->output_offset); + printf("(%x)", (unsigned)s->size); + } + printf("hex \n"); } } - else { - for (s = f->the_bfd->sections; - s != (asection *)NULL; - s = s->next) { - printf("%s ", s->name); - print_address(s->output_offset); - printf("(%x)", (unsigned)s->size); - } - printf("hex \n"); - } - } + fprintf (stdout, "\n"); } void ldsym_print_symbol_table () { - fprintf (stdout, "\nFiles:\n\n"); + fprintf (stdout, "**FILES**\n\n"); lang_for_each_file(print_file_stuff); - fprintf (stdout, "\nGlobal symbols:\n\n"); + fprintf(stdout, "**GLOBAL SYMBOLS**\n\n"); + fprintf(stdout, "offset section offset symbol\n"); { register ldsym_type *sp; @@ -220,11 +221,11 @@ ldsym_print_symbol_table () print_address(defsym->value); if (defsec) { - print_space(); - print_address(defsym->value+defsec->vma); - printf("%7s", + printf(" %-10s", bfd_section_name(output_bfd, defsec)); + print_space(); + print_address(defsym->value+defsec->vma); } else @@ -233,23 +234,18 @@ ldsym_print_symbol_table () } } - else { - printf("undefined"); - } if (sp->scoms_chain) { - printf(" common size "); + printf("common "); print_address((*(sp->scoms_chain))->value); - printf("%s ",sp->name); + printf(" %s ",sp->name); } - if (sp->sdefs_chain) { - printf(" symbol def "); - print_address((*(sp->sdefs_chain))->value); - printf("%s ",sp->name); + else if (sp->sdefs_chain) { + printf(" %s ",sp->name); } else { - printf(" undefined "); + printf("undefined "); printf("%s ",sp->name); } print_nl();