* ldlex.l: ASSERT is recognized in SCRIPT env. NAMES cannot
contain commas in EXP env. * ldgram.y (extern_name_list): Push to EXP env, move body to ... (extern_name_list_body): ... here. (script_file, ifile_list): Reformat. (statement): Add ASSERT. testsuite: * ld-scripts/assert.t: Add additional cases. * ld-scripts/extern.t, ld-scripts/extern.s, ld-scripts/extern.exp: New.
This commit is contained in:
parent
01be46b59d
commit
8545d1a9dd
@ -1,3 +1,12 @@
|
||||
2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* ldlex.l: ASSERT is recognized in SCRIPT env. NAMES cannot
|
||||
contain commas in EXP env.
|
||||
* ldgram.y (extern_name_list): Push to EXP env, move body to ...
|
||||
(extern_name_list_body): ... here.
|
||||
(script_file, ifile_list): Reformat.
|
||||
(statement): Add ASSERT.
|
||||
|
||||
2007-05-22 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* ld.texinfo: Use @copying around the copyright notice.
|
||||
|
27
ld/ldgram.y
27
ld/ldgram.y
@ -280,33 +280,33 @@ casesymlist:
|
||||
| casesymlist ',' NAME
|
||||
;
|
||||
|
||||
/* Parsed as expressions so that commas separate entries */
|
||||
extern_name_list:
|
||||
{ ldlex_expression (); }
|
||||
extern_name_list_body
|
||||
{ ldlex_popstate (); }
|
||||
|
||||
extern_name_list_body:
|
||||
NAME
|
||||
{ ldlang_add_undef ($1); }
|
||||
| extern_name_list NAME
|
||||
| extern_name_list_body NAME
|
||||
{ ldlang_add_undef ($2); }
|
||||
| extern_name_list ',' NAME
|
||||
| extern_name_list_body ',' NAME
|
||||
{ ldlang_add_undef ($3); }
|
||||
;
|
||||
|
||||
script_file:
|
||||
{
|
||||
ldlex_both();
|
||||
}
|
||||
ifile_list
|
||||
{
|
||||
ldlex_popstate();
|
||||
}
|
||||
{ ldlex_both(); }
|
||||
ifile_list
|
||||
{ ldlex_popstate(); }
|
||||
;
|
||||
|
||||
|
||||
ifile_list:
|
||||
ifile_list ifile_p1
|
||||
ifile_list ifile_p1
|
||||
|
|
||||
;
|
||||
|
||||
|
||||
|
||||
ifile_p1:
|
||||
memory
|
||||
| sections
|
||||
@ -573,6 +573,9 @@ statement:
|
||||
{
|
||||
lang_add_fill ($3);
|
||||
}
|
||||
| ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')' end
|
||||
{ ldlex_popstate ();
|
||||
lang_add_assignment (exp_assert ($4, $6)); }
|
||||
;
|
||||
|
||||
statement_list:
|
||||
|
14
ld/ldlex.l
14
ld/ldlex.l
@ -256,7 +256,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
|
||||
<EXPRESSION,BOTH,SCRIPT>"LOADADDR" { RTOKEN(LOADADDR);}
|
||||
<EXPRESSION,BOTH>"MAX" { RTOKEN(MAX_K); }
|
||||
<EXPRESSION,BOTH>"MIN" { RTOKEN(MIN_K); }
|
||||
<EXPRESSION,BOTH>"ASSERT" { RTOKEN(ASSERT_K); }
|
||||
<EXPRESSION,BOTH,SCRIPT>"ASSERT" { RTOKEN(ASSERT_K); }
|
||||
<BOTH,SCRIPT>"ENTRY" { RTOKEN(ENTRY);}
|
||||
<BOTH,SCRIPT,MRI>"EXTERN" { RTOKEN(EXTERN);}
|
||||
<EXPRESSION,BOTH,SCRIPT>"NEXT" { RTOKEN(NEXT);}
|
||||
@ -363,11 +363,19 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
|
||||
}
|
||||
|
||||
|
||||
<BOTH,EXPRESSION>{FILENAMECHAR1}{FILENAMECHAR}* {
|
||||
<BOTH>{FILENAMECHAR1}{FILENAMECHAR}* {
|
||||
yylval.name = xstrdup (yytext);
|
||||
return NAME;
|
||||
}
|
||||
<BOTH,EXPRESSION>"-l"{FILENAMECHAR}+ {
|
||||
<BOTH>"-l"{FILENAMECHAR}+ {
|
||||
yylval.name = xstrdup (yytext + 2);
|
||||
return LNAME;
|
||||
}
|
||||
<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
|
||||
yylval.name = xstrdup (yytext);
|
||||
return NAME;
|
||||
}
|
||||
<EXPRESSION>"-l"{NOCFILENAMECHAR}+ {
|
||||
yylval.name = xstrdup (yytext + 2);
|
||||
return LNAME;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* ld-scripts/assert.t: Add additional cases.
|
||||
* ld-scripts/extern.t, ld-scripts/extern.s,
|
||||
ld-scripts/extern.exp: New.
|
||||
|
||||
2007-05-22 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* ld-arm/arm-pic-veneer.d: Update expected output.
|
||||
|
@ -1,5 +1,9 @@
|
||||
SECTIONS
|
||||
{
|
||||
.empty : {}
|
||||
.empty : {
|
||||
here = !.;
|
||||
ASSERT (!., "dot is not zero");
|
||||
ASSERT (here, "here is zero");
|
||||
}
|
||||
ASSERT (!SIZEOF(.empty), "Empty is not empty")
|
||||
}
|
||||
|
68
ld/testsuite/ld-scripts/extern.exp
Normal file
68
ld/testsuite/ld-scripts/extern.exp
Normal file
@ -0,0 +1,68 @@
|
||||
# Test EXTERN in a linker script.
|
||||
# By Nathan Sidwell, CodeSourcery LLC
|
||||
# Copyright 2007
|
||||
# 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.
|
||||
|
||||
set testname "EXTERN"
|
||||
|
||||
if ![ld_assemble $as $srcdir/$subdir/extern.s tmpdir/extern.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![ld_simple_link $ld tmpdir/extern "-T $srcdir/$subdir/extern.t tmpdir/extern.o"] {
|
||||
fail $testname
|
||||
}
|
||||
|
||||
if ![ld_nm $nm "" tmpdir/extern] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
|
||||
if {![info exists nm_output(sym1)] || $nm_output(sym1) != 1} {
|
||||
send_log "sym1 wrong\n"
|
||||
verbose "sym1 wrong"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if {![info exists nm_output(sym2)] || $nm_output(sym2) != 2} {
|
||||
send_log "sym1 wrong\n"
|
||||
verbose "sym1 wrong"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
if {![info exists nm_output(sym3)] || $nm_output(sym3) != 3} {
|
||||
send_log "sym1 wrong\n"
|
||||
verbose "sym1 wrong"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
if {![info exists nm_output(sym4)] || $nm_output(sym4) != 4} {
|
||||
send_log "sym1 wrong\n"
|
||||
verbose "sym1 wrong"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
if {![info exists nm_output(sym5)] || $nm_output(sym5) != 5} {
|
||||
send_log "sym1 wrong\n"
|
||||
verbose "sym1 wrong"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
pass $testname
|
1
ld/testsuite/ld-scripts/extern.s
Normal file
1
ld/testsuite/ld-scripts/extern.s
Normal file
@ -0,0 +1 @@
|
||||
.text
|
14
ld/testsuite/ld-scripts/extern.t
Normal file
14
ld/testsuite/ld-scripts/extern.t
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
EXTERN(sym1)
|
||||
EXTERN(sym2, sym3)
|
||||
EXTERN(sym4 sym5)
|
||||
|
||||
PROVIDE(sym1 = 1);
|
||||
PROVIDE(sym2 = 2);
|
||||
PROVIDE(sym3 = 3);
|
||||
PROVIDE(sym4 = 4);
|
||||
PROVIDE(sym5 = 5);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user