diff --git a/ld/ChangeLog b/ld/ChangeLog index 55e36a515b..18d4b1e047 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +2017-10-09 H.J. Lu + + PR ld/22267 + * ldlex.l (SYMBOLNAMECHAR1) New. + (DEFSYMEXP): Replace FILENAMECHAR1 with SYMBOLNAMECHAR1. + (EXPRESSION): Likewise. + * testsuite/ld-scripts/expr.exp: Run pr22267. + * testsuite/ld-scripts/pr22267.d: New file. + * testsuite/ld-scripts/pr22267.s: Likewise. + * testsuite/ld-scripts/pr22267.t: Likewise. + 2017-10-07 H.J. Lu * testsuite/ld-elf/merge.d: Don't expect to fail for sparc. diff --git a/ld/ldlex.l b/ld/ldlex.l index ba618ecc27..795a4d7c8e 100644 --- a/ld/ldlex.l +++ b/ld/ldlex.l @@ -94,6 +94,7 @@ static void lex_warn_invalid (char *where, char *what); CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~] CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~] FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~] +SYMBOLNAMECHAR1 [_a-zA-Z\/\.\\\$\_] SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9] FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~] WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*\^\!] @@ -136,7 +137,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* "-" { RTOKEN('-');} "+" { RTOKEN('+');} -{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; } +{SYMBOLNAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; } "=" { RTOKEN('='); } "$"([0-9A-Fa-f])+ { @@ -390,7 +391,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* yylval.name = xstrdup (yytext + 2); return LNAME; } -{FILENAMECHAR1}{NOCFILENAMECHAR}* { +{SYMBOLNAMECHAR1}{NOCFILENAMECHAR}* { yylval.name = xstrdup (yytext); return NAME; } diff --git a/ld/testsuite/ld-scripts/expr.exp b/ld/testsuite/ld-scripts/expr.exp index 9db5366c12..62d45dc5de 100644 --- a/ld/testsuite/ld-scripts/expr.exp +++ b/ld/testsuite/ld-scripts/expr.exp @@ -25,6 +25,7 @@ run_dump_test sane1 run_dump_test assign-loc run_dump_test pr14962 run_dump_test pr14962-2 +run_dump_test pr22267 set old_ldflags $LDFLAGS if { [istarget spu*-*-*] } { diff --git a/ld/testsuite/ld-scripts/pr22267.d b/ld/testsuite/ld-scripts/pr22267.d new file mode 100644 index 0000000000..f66d4be49c --- /dev/null +++ b/ld/testsuite/ld-scripts/pr22267.d @@ -0,0 +1,7 @@ +#ld: -T pr22267.t +#nm: -n + +# Some targets may zero-extend 32-bit address to 64 bits. +#... +0*f+00 A foo +#pass diff --git a/ld/testsuite/ld-scripts/pr22267.s b/ld/testsuite/ld-scripts/pr22267.s new file mode 100644 index 0000000000..c0a5cda6e9 --- /dev/null +++ b/ld/testsuite/ld-scripts/pr22267.s @@ -0,0 +1,10 @@ + .globl main + .globl start + .globl _start + .globl __start + .text +main: +start: +_start: +__start: + .dc.a foo diff --git a/ld/testsuite/ld-scripts/pr22267.t b/ld/testsuite/ld-scripts/pr22267.t new file mode 100644 index 0000000000..a0754058e5 --- /dev/null +++ b/ld/testsuite/ld-scripts/pr22267.t @@ -0,0 +1,4 @@ +SECTIONS +{ + foo = ~0xFF; +}