From b6ca8815ef79f8fef380079e69b6984972a36f2a Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 18 Feb 2004 16:37:21 +0000 Subject: [PATCH] * ldgram.y (statement_anywhere): Add assert rule. * ldlang.c (exp_init_os): Add assert case. * testsuite/ld-scripts/assert.{s,t,exp}: New. --- ld/ChangeLog | 5 +++++ ld/ldgram.y | 3 +++ ld/ldlang.c | 4 ++++ ld/testsuite/ChangeLog | 4 ++++ ld/testsuite/ld-scripts/assert.exp | 31 ++++++++++++++++++++++++++++++ ld/testsuite/ld-scripts/assert.s | 1 + ld/testsuite/ld-scripts/assert.t | 5 +++++ 7 files changed, 53 insertions(+) create mode 100644 ld/testsuite/ld-scripts/assert.exp create mode 100644 ld/testsuite/ld-scripts/assert.s create mode 100644 ld/testsuite/ld-scripts/assert.t diff --git a/ld/ChangeLog b/ld/ChangeLog index 358b76717b0..fc4b1be195c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2004-02-18 Nathan Sidwell + + * ldgram.y (statement_anywhere): Add assert rule. + * ldlang.c (exp_init_os): Add assert case. + 2004-02-14 Andrew Cagney * ldmain.c (remove_output): Call bfd_cache_close. diff --git a/ld/ldgram.y b/ld/ldgram.y index 927114a8a1c..e885f7d55fb 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -386,6 +386,9 @@ statement_anywhere: ENTRY '(' NAME ')' { lang_add_entry ($3, FALSE); } | assignment end + | ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')' + { ldlex_popstate (); + lang_add_assignment (exp_assert ($4, $6)); } ; /* The '*' and '?' cases are there because the lexer returns them as diff --git a/ld/ldlang.c b/ld/ldlang.c index 108ad584320..487ee02b067 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -775,6 +775,10 @@ exp_init_os (etree_type *exp) exp_init_os (exp->trinary.rhs); break; + case etree_assert: + exp_init_os (exp->assert_s.child); + break; + case etree_unary: exp_init_os (exp->unary.child); break; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 3b5993833d9..282ee0c8065 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-02-18 Nathan Sidwell + + * ld-scripts/assert.{s,t,exp}: New. + 2004-02-17 Richard Sandiford * ld-mips/elf/elf-rel-xgot-{n32,n64-linux}.d: Update after 2004-02-02 diff --git a/ld/testsuite/ld-scripts/assert.exp b/ld/testsuite/ld-scripts/assert.exp new file mode 100644 index 00000000000..5ba3a519a2a --- /dev/null +++ b/ld/testsuite/ld-scripts/assert.exp @@ -0,0 +1,31 @@ +# Test ASSERT in a linker script. +# By Nathan Sidwell, CodeSourcery LLC +# Copyright 2004 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +set testname "ASSERT" + +if ![ld_assemble $as $srcdir/$subdir/assert.s tmpdir/assert.o] { + unresolved $testname + return +} + +if ![ld_simple_link $ld tmpdir/assert "-T $srcdir/$subdir/assert.t tmpdir/assert.o"] { + fail $testname +} else { + pass $testname +} diff --git a/ld/testsuite/ld-scripts/assert.s b/ld/testsuite/ld-scripts/assert.s new file mode 100644 index 00000000000..0517ffe8297 --- /dev/null +++ b/ld/testsuite/ld-scripts/assert.s @@ -0,0 +1 @@ +#nothing here diff --git a/ld/testsuite/ld-scripts/assert.t b/ld/testsuite/ld-scripts/assert.t new file mode 100644 index 00000000000..62aee34ed34 --- /dev/null +++ b/ld/testsuite/ld-scripts/assert.t @@ -0,0 +1,5 @@ +SECTIONS +{ + .empty : {} + ASSERT (!SIZEOF(.empty), "Empty is not empty") +} -- 2.30.2