ld: Don't allow '~' as the first char in symbol name

Don't allow '~' as the first character in symbol name in linker script.

	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.
This commit is contained in:
H.J. Lu
2017-10-09 04:17:10 -07:00
parent 5d3b558acd
commit 76f361eb49
6 changed files with 36 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2017-10-09 H.J. Lu <hongjiu.lu@intel.com>
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 <hongjiu.lu@intel.com> 2017-10-07 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-elf/merge.d: Don't expect to fail for sparc. * testsuite/ld-elf/merge.d: Don't expect to fail for sparc.

View File

@ -94,6 +94,7 @@ static void lex_warn_invalid (char *where, char *what);
CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~] CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~]
CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~] CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~]
FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~] FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~]
SYMBOLNAMECHAR1 [_a-zA-Z\/\.\\\$\_]
SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9] SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9]
FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~] FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~]
WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*\^\!] WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*\^\!]
@ -136,7 +137,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
<DEFSYMEXP>"-" { RTOKEN('-');} <DEFSYMEXP>"-" { RTOKEN('-');}
<DEFSYMEXP>"+" { RTOKEN('+');} <DEFSYMEXP>"+" { RTOKEN('+');}
<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; } <DEFSYMEXP>{SYMBOLNAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; }
<DEFSYMEXP>"=" { RTOKEN('='); } <DEFSYMEXP>"=" { RTOKEN('='); }
<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ { <MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {
@ -390,7 +391,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
yylval.name = xstrdup (yytext + 2); yylval.name = xstrdup (yytext + 2);
return LNAME; return LNAME;
} }
<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* { <EXPRESSION>{SYMBOLNAMECHAR1}{NOCFILENAMECHAR}* {
yylval.name = xstrdup (yytext); yylval.name = xstrdup (yytext);
return NAME; return NAME;
} }

View File

@ -25,6 +25,7 @@ run_dump_test sane1
run_dump_test assign-loc run_dump_test assign-loc
run_dump_test pr14962 run_dump_test pr14962
run_dump_test pr14962-2 run_dump_test pr14962-2
run_dump_test pr22267
set old_ldflags $LDFLAGS set old_ldflags $LDFLAGS
if { [istarget spu*-*-*] } { if { [istarget spu*-*-*] } {

View File

@ -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

View File

@ -0,0 +1,10 @@
.globl main
.globl start
.globl _start
.globl __start
.text
main:
start:
_start:
__start:
.dc.a foo

View File

@ -0,0 +1,4 @@
SECTIONS
{
foo = ~0xFF;
}