diff options
author | David Edelsohn <dje.gcc@gmail.com> | 1995-02-01 00:23:47 +0000 |
---|---|---|
committer | David Edelsohn <dje.gcc@gmail.com> | 1995-02-01 00:23:47 +0000 |
commit | e802f0be04f551980508893f172a7b2642eda098 (patch) | |
tree | 506ed29f16bba89663ff44d74621931392432846 /ld/ldlang.c | |
parent | 23676ab802c8069020e8f0af00aacc30df338dd9 (diff) | |
download | gdb-e802f0be04f551980508893f172a7b2642eda098.zip gdb-e802f0be04f551980508893f172a7b2642eda098.tar.gz gdb-e802f0be04f551980508893f172a7b2642eda098.tar.bz2 |
* ldlang.c (lang_size_sections): Clarify error message when user
specified start addr conflicts with region. Fix resetting of
region pointer.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 3f3809c..c2b8e7d 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -1,5 +1,5 @@ /* Linker command language support. - Copyright (C) 1991, 92, 93, 94 Free Software Foundation, Inc. + Copyright (C) 1991, 92, 93, 94, 1995 Free Software Foundation, Inc. This file is part of GLD, the Gnu Linker. @@ -1779,28 +1779,35 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax) /* Replace into region ? */ if (os->region != (lang_memory_region_type *) NULL) - { - os->region->current = dot; - /* Make sure this isn't silly */ - if (( os->region->current - > os->region->origin + os->region->length) - || ( os->region->origin > os->region->current )) - { - einfo ("%X%P: region %s is full (%B section %s)\n", - os->region->name, - os->bfd_section->owner, - os->bfd_section->name); - /* Reset the region pointer */ - os->region->current = 0; - - } - - } - - + { + os->region->current = dot; + /* Make sure this isn't silly. */ + if ((os->region->current < os->region->origin) + || (os->region->current + > os->region->origin + os->region->length)) + { + if (os->addr_tree != (etree_type *) NULL) + { + einfo ("%X%P: address 0x%v of %B section %s is not within region %s\n", + os->region->current, + os->bfd_section->owner, + os->bfd_section->name, + os->region->name); + } + else + { + einfo ("%X%P: region %s is full (%B section %s)\n", + os->region->name, + os->bfd_section->owner, + os->bfd_section->name); + } + /* Reset the region pointer. */ + os->region->current = os->region->origin; + } + } } + break; - break; case lang_constructors_statement_enum: dot = lang_size_sections (constructor_list.head, output_section_statement, @@ -2294,9 +2301,6 @@ lang_place_orphans () { asection *s; - if (file->just_syms_flag) - continue; - for (s = file->the_bfd->sections; s != (asection *) NULL; s = s->next) @@ -2306,7 +2310,15 @@ lang_place_orphans () /* This section of the file is not attatched, root around for a sensible place for it to go */ - if (file->common_section == s) + if (file->just_syms_flag) + { + /* We are only retrieving symbol values from this + file. We want the symbols to act as though the + values in the file are absolute. */ + s->output_section = bfd_abs_section_ptr; + s->output_offset = s->vma; + } + else if (file->common_section == s) { /* This is a lonely common section which must have come from an archive. We attatch to the |