From cc3e2771c5def765623e1fb173f8211ddbe5ccb6 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Sat, 6 Jan 2007 22:03:46 +0000 Subject: [PATCH] ld/ * ldexp.c (fold_name): Issue error on undefined sections. ld/testsuite/ * ld-scripts/expr.exp: New. * ld-scripts/expr1.s: New. * ld-scripts/expr1.d: New. * ld-scripts/expr1.t: New. --- ld/ChangeLog | 4 ++++ ld/ldexp.c | 23 ++++++++++++++++++++--- ld/testsuite/ChangeLog | 7 +++++++ ld/testsuite/ld-scripts/expr.exp | 20 ++++++++++++++++++++ ld/testsuite/ld-scripts/expr1.d | 2 ++ ld/testsuite/ld-scripts/expr1.s | 2 ++ ld/testsuite/ld-scripts/expr1.t | 12 ++++++++++++ 7 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 ld/testsuite/ld-scripts/expr.exp create mode 100644 ld/testsuite/ld-scripts/expr1.d create mode 100644 ld/testsuite/ld-scripts/expr1.s create mode 100644 ld/testsuite/ld-scripts/expr1.t diff --git a/ld/ChangeLog b/ld/ChangeLog index 60e2d79a45..798d2fc5e5 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,7 @@ +2007-01-06 Nathan Sidwell + + * ldexp.c (fold_name): Issue error on undefined sections. + 2007-01-02 Alan Modra * pe-dll.c: Include pe-dll.h. diff --git a/ld/ldexp.c b/ld/ldexp.c index 4f279b853b..eb6451be72 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -563,7 +563,13 @@ fold_name (etree_type *tree) lang_output_section_statement_type *os; os = lang_output_section_find (tree->name.name); - if (os != NULL && os->processed_vma) + if (os == NULL) + { + if (expld.phase == lang_final_phase_enum) + einfo (_("%F%S: undefined section `%s' referenced in expression\n"), + tree->name.name); + } + else if (os->processed_vma) new_rel (0, NULL, os->bfd_section); } break; @@ -574,7 +580,13 @@ fold_name (etree_type *tree) lang_output_section_statement_type *os; os = lang_output_section_find (tree->name.name); - if (os != NULL && os->processed_lma) + if (os == NULL) + { + if (expld.phase == lang_final_phase_enum) + einfo (_("%F%S: undefined section `%s' referenced in expression\n"), + tree->name.name); + } + else if (os->processed_lma) { if (os->load_base == NULL) new_abs (os->bfd_section->lma); @@ -592,7 +604,12 @@ fold_name (etree_type *tree) os = lang_output_section_find (tree->name.name); if (os == NULL) - new_abs (0); + { + if (expld.phase == lang_final_phase_enum) + einfo (_("%F%S: undefined section `%s' referenced in expression\n"), + tree->name.name); + new_abs (0); + } else if (os->processed_vma) new_abs (os->bfd_section->size / opb); } diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 2ff0c39945..e7ac70c60e 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2007-01-06 Nathan Sidwell + + * ld-scripts/expr.exp: New. + * ld-scripts/expr1.s: New. + * ld-scripts/expr1.d: New. + * ld-scripts/expr1.t: New. + 2006-12-29 H.J. Lu * ld-elf/wrap.exp: New file. diff --git a/ld/testsuite/ld-scripts/expr.exp b/ld/testsuite/ld-scripts/expr.exp new file mode 100644 index 0000000000..43ca1c6c89 --- /dev/null +++ b/ld/testsuite/ld-scripts/expr.exp @@ -0,0 +1,20 @@ +# Test ALIGN in a linker script. +# By Nathan Sidwell, CodeSourcery LLC +# Copyright 2006 +# Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +run_dump_test expr1 diff --git a/ld/testsuite/ld-scripts/expr1.d b/ld/testsuite/ld-scripts/expr1.d new file mode 100644 index 0000000000..d96dfc1e1c --- /dev/null +++ b/ld/testsuite/ld-scripts/expr1.d @@ -0,0 +1,2 @@ +# ld: -T expr1.t +# error: undefined section .* in expression diff --git a/ld/testsuite/ld-scripts/expr1.s b/ld/testsuite/ld-scripts/expr1.s new file mode 100644 index 0000000000..ec0ce903bb --- /dev/null +++ b/ld/testsuite/ld-scripts/expr1.s @@ -0,0 +1,2 @@ + .word 0 + diff --git a/ld/testsuite/ld-scripts/expr1.t b/ld/testsuite/ld-scripts/expr1.t new file mode 100644 index 0000000000..e0810ba07e --- /dev/null +++ b/ld/testsuite/ld-scripts/expr1.t @@ -0,0 +1,12 @@ +ENTRY(RAM) + +MEMORY +{ + ram (rwx) : ORIGIN = 0, LENGTH = 0x1000000 +} + +SECTIONS +{ +.text : { } >ram +} +RAM = ADDR(ram);