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>
* 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\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~]
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\[\]\-\!\^\\]|::)*
<DEFSYMEXP>"-" { RTOKEN('-');}
<DEFSYMEXP>"+" { RTOKEN('+');}
<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; }
<DEFSYMEXP>{SYMBOLNAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; }
<DEFSYMEXP>"=" { RTOKEN('='); }
<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {
@ -390,7 +391,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
yylval.name = xstrdup (yytext + 2);
return LNAME;
}
<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
<EXPRESSION>{SYMBOLNAMECHAR1}{NOCFILENAMECHAR}* {
yylval.name = xstrdup (yytext);
return NAME;
}

View File

@ -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*-*-*] } {

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;
}