From e802f0be04f551980508893f172a7b2642eda098 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Wed, 1 Feb 1995 00:23:47 +0000 Subject: [PATCH] * ldlang.c (lang_size_sections): Clarify error message when user specified start addr conflicts with region. Fix resetting of region pointer. --- ld/ChangeLog | 6 ++++++ ld/ldlang.c | 62 ++++++++++++++++++++++++++++++++++++------------------------ 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index a383930..3ffe39e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +Tue Jan 31 16:20:52 1995 Doug Evans + + * ldlang.c (lang_size_sections): Clarify error message when user + specified start addr conflicts with region. Fix resetting of + region pointer. + Tue Jan 31 12:37:09 1995 Ian Lance Taylor * ldexp.c (fold_name): In case NAME, permit an absolute symbol 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 -- 2.7.4