projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make host_address_to_string/gdb_print_host_address cast parameter to 'void *'
[deliverable/binutils-gdb.git]
/
ld
/
ldgram.y
diff --git
a/ld/ldgram.y
b/ld/ldgram.y
index c4f163fd5e1daab60b019762250e98c70261d8c2..f46aa9ea21096914603c7045290fb0f27aa51ce3 100644
(file)
--- a/
ld/ldgram.y
+++ b/
ld/ldgram.y
@@
-1,7
+1,5
@@
/* A YACC grammar to parse a superset of the AT&T linker scripting language.
/* A YACC grammar to parse a superset of the AT&T linker scripting language.
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2015 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
This file is part of the GNU Binutils.
Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
This file is part of the GNU Binutils.
@@
-129,7
+127,7
@@
static int error_index;
%token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE
%token SECTIONS PHDRS INSERT_K AFTER BEFORE
%token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
%token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE
%token SECTIONS PHDRS INSERT_K AFTER BEFORE
%token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
-%token SORT_BY_NAME SORT_BY_ALIGNMENT
+%token SORT_BY_NAME SORT_BY_ALIGNMENT
SORT_NONE
%token SORT_BY_INIT_PRIORITY
%token '{' '}'
%token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
%token SORT_BY_INIT_PRIORITY
%token '{' '}'
%token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
@@
-146,15
+144,15
@@
static int error_index;
%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
%token ORIGIN FILL
%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
%token ORIGIN FILL
%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
-%token ALIGNMOD AT SUBALIGN PROVIDE PROVIDE_HIDDEN AS_NEEDED
-%type <token> assign_op atype attributes_opt sect_constraint
+%token ALIGNMOD AT SUBALIGN
HIDDEN
PROVIDE PROVIDE_HIDDEN AS_NEEDED
+%type <token> assign_op atype attributes_opt sect_constraint
opt_align_with_input
%type <name> filename
%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
%type <name> filename
%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
-%token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
+%token
LOG2CEIL
FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
%token <name> VERS_TAG VERS_IDENTIFIER
%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
%token <name> VERS_TAG VERS_IDENTIFIER
%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
-%token KEEP ONLY_IF_RO ONLY_IF_RW SPECIAL INPUT_SECTION_FLAGS
+%token KEEP ONLY_IF_RO ONLY_IF_RW SPECIAL INPUT_SECTION_FLAGS
ALIGN_WITH_INPUT
%token EXCLUDE_FILE
%token CONSTANT
%type <versyms> vers_defns
%token EXCLUDE_FILE
%token CONSTANT
%type <versyms> vers_defns
@@
-367,36
+365,44
@@
ifile_p1:
;
input_list:
;
input_list:
+ { ldlex_inputlist(); }
+ input_list1
+ { ldlex_popstate(); }
+
+input_list1:
NAME
{ lang_add_input_file($1,lang_input_file_is_search_file_enum,
(char *)NULL); }
NAME
{ lang_add_input_file($1,lang_input_file_is_search_file_enum,
(char *)NULL); }
- | input_list ',' NAME
+ | input_list
1
',' NAME
{ lang_add_input_file($3,lang_input_file_is_search_file_enum,
(char *)NULL); }
{ lang_add_input_file($3,lang_input_file_is_search_file_enum,
(char *)NULL); }
- | input_list NAME
+ | input_list
1
NAME
{ lang_add_input_file($2,lang_input_file_is_search_file_enum,
(char *)NULL); }
| LNAME
{ lang_add_input_file($1,lang_input_file_is_l_enum,
(char *)NULL); }
{ lang_add_input_file($2,lang_input_file_is_search_file_enum,
(char *)NULL); }
| LNAME
{ lang_add_input_file($1,lang_input_file_is_l_enum,
(char *)NULL); }
- | input_list ',' LNAME
+ | input_list
1
',' LNAME
{ lang_add_input_file($3,lang_input_file_is_l_enum,
(char *)NULL); }
{ lang_add_input_file($3,lang_input_file_is_l_enum,
(char *)NULL); }
- | input_list LNAME
+ | input_list
1
LNAME
{ lang_add_input_file($2,lang_input_file_is_l_enum,
(char *)NULL); }
| AS_NEEDED '('
{ lang_add_input_file($2,lang_input_file_is_l_enum,
(char *)NULL); }
| AS_NEEDED '('
- { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
- { add_DT_NEEDED_for_regular = $<integer>3; }
- | input_list ',' AS_NEEDED '('
- { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
- { add_DT_NEEDED_for_regular = $<integer>5; }
- | input_list AS_NEEDED '('
- { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
- { add_DT_NEEDED_for_regular = $<integer>4; }
+ { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+ input_list1 ')'
+ { input_flags.add_DT_NEEDED_for_regular = $<integer>3; }
+ | input_list1 ',' AS_NEEDED '('
+ { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+ input_list1 ')'
+ { input_flags.add_DT_NEEDED_for_regular = $<integer>5; }
+ | input_list1 AS_NEEDED '('
+ { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+ input_list1 ')'
+ { input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
;
sections:
;
sections:
@@
-464,6
+470,13
@@
wildcard_spec:
$$.exclude_name_list = NULL;
$$.section_flag_list = NULL;
}
$$.exclude_name_list = NULL;
$$.section_flag_list = NULL;
}
+ | SORT_NONE '(' wildcard_name ')'
+ {
+ $$.name = $3;
+ $$.sorted = by_none;
+ $$.exclude_name_list = NULL;
+ $$.section_flag_list = NULL;
+ }
| SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
{
$$.name = $5;
| SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
{
$$.name = $5;
@@
-749,7
+762,7
@@
end: ';' | ','
assignment:
NAME '=' mustbe_exp
{
assignment:
NAME '=' mustbe_exp
{
- lang_add_assignment (exp_assign ($1, $3));
+ lang_add_assignment (exp_assign ($1, $3
, FALSE
));
}
| NAME assign_op mustbe_exp
{
}
| NAME assign_op mustbe_exp
{
@@
-757,7
+770,11
@@
assignment:
exp_binop ($2,
exp_nameop (NAME,
$1),
exp_binop ($2,
exp_nameop (NAME,
$1),
- $3)));
+ $3), FALSE));
+ }
+ | HIDDEN '(' NAME '=' mustbe_exp ')'
+ {
+ lang_add_assignment (exp_assign ($3, $5, TRUE));
}
| PROVIDE '(' NAME '=' mustbe_exp ')'
{
}
| PROVIDE '(' NAME '=' mustbe_exp ')'
{
@@
-800,7
+817,7
@@
memory_spec: NAME
origin_spec:
ORIGIN '=' mustbe_exp
{
origin_spec:
ORIGIN '=' mustbe_exp
{
- region->origin
= exp_get_vma ($3, 0, "origin")
;
+ region->origin
_exp = $3
;
region->current = region->origin;
}
;
region->current = region->origin;
}
;
@@
-808,7
+825,7
@@
origin_spec:
length_spec:
LENGTH '=' mustbe_exp
{
length_spec:
LENGTH '=' mustbe_exp
{
- region->length
= exp_get_vma ($3, -1, "length")
;
+ region->length
_exp = $3
;
}
;
}
;
@@
-998,6
+1015,8
@@
exp :
{ $$ = exp_nameop (ORIGIN, $3); }
| LENGTH '(' NAME ')'
{ $$ = exp_nameop (LENGTH, $3); }
{ $$ = exp_nameop (ORIGIN, $3); }
| LENGTH '(' NAME ')'
{ $$ = exp_nameop (LENGTH, $3); }
+ | LOG2CEIL '(' exp ')'
+ { $$ = exp_unop (LOG2CEIL, $3); }
;
;
@@
-1016,6
+1035,11
@@
opt_align:
| { $$ = 0; }
;
| { $$ = 0; }
;
+opt_align_with_input:
+ ALIGN_WITH_INPUT { $$ = ALIGN_WITH_INPUT; }
+ | { $$ = 0; }
+ ;
+
opt_subalign:
SUBALIGN '(' exp ')' { $$ = $3; }
| { $$ = 0; }
opt_subalign:
SUBALIGN '(' exp ')' { $$ = $3; }
| { $$ = 0; }
@@
-1032,20
+1056,21
@@
section: NAME { ldlex_expression(); }
opt_exp_with_type
opt_at
opt_align
opt_exp_with_type
opt_at
opt_align
+ opt_align_with_input
opt_subalign { ldlex_popstate (); ldlex_script (); }
sect_constraint
'{'
{
lang_enter_output_section_statement($1, $3,
sectype,
opt_subalign { ldlex_popstate (); ldlex_script (); }
sect_constraint
'{'
{
lang_enter_output_section_statement($1, $3,
sectype,
- $5, $
6, $4, $8
);
+ $5, $
7, $4, $9, $6
);
}
statement_list_opt
'}' { ldlex_popstate (); ldlex_expression (); }
memspec_opt memspec_at_opt phdr_opt fill_opt
{
ldlex_popstate ();
}
statement_list_opt
'}' { ldlex_popstate (); ldlex_expression (); }
memspec_opt memspec_at_opt phdr_opt fill_opt
{
ldlex_popstate ();
- lang_leave_output_section_statement ($1
7, $14, $16, $15
);
+ lang_leave_output_section_statement ($1
8, $15, $17, $16
);
}
opt_comma
{}
}
opt_comma
{}
@@
-1075,7
+1100,7
@@
section: NAME { ldlex_expression(); }
opt_exp_with_type
{
ldlex_popstate ();
opt_exp_with_type
{
ldlex_popstate ();
- lang_add_assignment (exp_assign (".", $3));
+ lang_add_assignment (exp_assign (".", $3
, FALSE
));
}
'{' sec_or_group_p1 '}'
| INCLUDE filename
}
'{' sec_or_group_p1 '}'
| INCLUDE filename
@@
-1219,7
+1244,7
@@
phdr_type:
{
einfo (_("\
%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
{
einfo (_("\
%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
- s);
+
NULL,
s);
$$ = exp_intop (0);
}
}
$$ = exp_intop (0);
}
}
@@
-1242,7
+1267,8
@@
phdr_qualifiers:
else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
$$.flags = $2;
else
else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
$$.flags = $2;
else
- einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"), $1);
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"),
+ NULL, $1);
}
| AT '(' exp ')' phdr_qualifiers
{
}
| AT '(' exp ')' phdr_qualifiers
{
@@
-1448,9
+1474,9
@@
yyerror(arg)
{
if (ldfile_assumed_script)
einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
{
if (ldfile_assumed_script)
einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
- ld
file_input_filename
);
+ ld
lex_filename ()
);
if (error_index > 0 && error_index < ERROR_NAME_MAX)
if (error_index > 0 && error_index < ERROR_NAME_MAX)
-
einfo ("%P%F:%S: %s in %s\n", arg, error_names[error_index-
1]);
+
einfo ("%P%F:%S: %s in %s\n", NULL, arg, error_names[error_index -
1]);
else
else
-
einfo ("%P%F:%S: %s\n"
, arg);
+
einfo ("%P%F:%S: %s\n", NULL
, arg);
}
}
This page took
0.027198 seconds
and
4
git commands to generate.