aboutsummaryrefslogtreecommitdiff
path: root/ld/ldexp.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2012-06-15 15:13:41 +0000
committerAlan Modra <amodra@gmail.com>2012-06-15 15:13:41 +0000
commitd2667025dd30611514810c28bee9709e4623012a (patch)
tree7364422fa955cf289aef9008298bb0bc79394d65 /ld/ldexp.c
parent8e09ad05eda21f6772d6bcca1eb8b42e5d77be03 (diff)
downloadgdb-d2667025dd30611514810c28bee9709e4623012a.zip
gdb-d2667025dd30611514810c28bee9709e4623012a.tar.gz
gdb-d2667025dd30611514810c28bee9709e4623012a.tar.bz2
ld/
* ldlang.h (lang_output_section_statement_type): Add after_end field. (lang_abs_symbol_at_beginning_of, lang_abs_symbol_at_end_of): Delete. (section_for_dot): Declare. * ldlang.c (lang_size_sections_1): Correct comment. (current_section): Move earlier. (current_assign, prefer_next_section): New static vars. (lang_do_assignments_1): Add found_end param. Detect _end assignment to set found_end. Set os->after_end. Set above statics. (lang_do_assignments): Adjust lang_do_assignments_1 call. Init vars. (section_for_dot): New function. (lang_set_startof): Don't make an absolute symbol. (lang_abs_symbol_at_beginning_of, lang_abs_symbol_at_end_of): Delete. * ldexp.c (new_rel_from_abs): Use section_for_dot. * emultempl/lnk960.em (symbol_at_beginning_of): New function. (symbol_at_end_of): Likewise. (lnk960_after_allocation): Use them. * scripttempl/elf.sc: Precede OTHER_GOT_SYMBOLS with . = .; and likewise before __bss_start. ld/testsuite/ Update far too many tests.
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r--ld/ldexp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ld/ldexp.c b/ld/ldexp.c
index d83e274..be296bc 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -213,10 +213,14 @@ new_rel (bfd_vma value, asection *section)
static void
new_rel_from_abs (bfd_vma value)
{
+ asection *s = expld.section;
+
+ if (s == bfd_abs_section_ptr && expld.phase == lang_final_phase_enum)
+ s = section_for_dot ();
expld.result.valid_p = TRUE;
- expld.result.value = value - expld.section->vma;
+ expld.result.value = value - s->vma;
expld.result.str = NULL;
- expld.result.section = expld.section;
+ expld.result.section = s;
}
static void