/* A YACC grammar to parse a superset of the AT&T linker scripting language.
- Copyright (C) 1991-2019 Free Software Foundation, Inc.
+ Copyright (C) 1991-2021 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
This file is part of the GNU Binutils.
#include "sysdep.h"
#include "bfd.h"
#include "bfdlink.h"
+#include "ctf-api.h"
#include "ld.h"
#include "ldexp.h"
#include "ldver.h"
static enum section_type sectype;
static lang_memory_region_type *region;
-static bfd_boolean ldgram_had_keep = FALSE;
+static bool ldgram_had_keep = false;
static char *ldgram_vers_current_lang = NULL;
#define ERROR_NAME_MAX 20
union etree_union *etree;
struct phdr_info
{
- bfd_boolean filehdr;
- bfd_boolean phdrs;
+ bool filehdr;
+ bool phdrs;
union etree_union *at;
union etree_union *flags;
} phdr;
defsym_expr:
- { ldlex_defsym(); }
- NAME '=' exp
- {
- ldlex_popstate();
- lang_add_assignment (exp_defsym ($2, $4));
- }
+ { ldlex_expression(); }
+ assignment
+ { ldlex_popstate(); }
;
/* SYNTAX WITHIN AN MRI SCRIPT FILE */
mri_script_lines END
{ ldlex_popstate (); }
| START NAME
- { lang_add_entry ($2, FALSE); }
+ { lang_add_entry ($2, false); }
|
;
extern_name_list_body:
NAME
- { ldlang_add_undef ($1, FALSE); }
+ { ldlang_add_undef ($1, false); }
| extern_name_list_body NAME
- { ldlang_add_undef ($2, FALSE); }
+ { ldlang_add_undef ($2, false); }
| extern_name_list_body ',' NAME
- { ldlang_add_undef ($3, FALSE); }
+ { ldlang_add_undef ($3, false); }
;
script_file:
| TARGET_K '(' NAME ')'
{ lang_add_target($3); }
| SEARCH_DIR '(' filename ')'
- { ldfile_add_library_path ($3, FALSE); }
+ { ldfile_add_library_path ($3, false); }
| OUTPUT '(' filename ')'
{ lang_add_output($3, 1); }
| OUTPUT_FORMAT '(' NAME ')'
| OUTPUT_ARCH '(' NAME ')'
{ ldfile_set_output_arch ($3, bfd_arch_unknown); }
| FORCE_COMMON_ALLOCATION
- { command_line.force_common_definition = TRUE ; }
+ { command_line.force_common_definition = true ; }
| FORCE_GROUP_ALLOCATION
- { command_line.force_group_allocation = TRUE ; }
+ { command_line.force_group_allocation = true ; }
| INHIBIT_COMMON_ALLOCATION
- { link_info.inhibit_common_definition = TRUE ; }
+ { link_info.inhibit_common_definition = true ; }
| INPUT '(' input_list ')'
| GROUP
{ lang_enter_group (); }
(char *)NULL); }
| AS_NEEDED '('
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
- input_flags.add_DT_NEEDED_for_regular = TRUE; }
+ 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_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_flags.add_DT_NEEDED_for_regular = true; }
input_list1 ')'
{ input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
;
statement_anywhere:
ENTRY '(' NAME ')'
- { lang_add_entry ($3, FALSE); }
+ { lang_add_entry ($3, false); }
| assignment end
| ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')'
{ ldlex_popstate ();
n->with = with_flags;
n->name = $1;
}
- n->valid = FALSE;
+ n->valid = false;
n->next = NULL;
$$ = n;
}
n->with = with_flags;
n->name = $3;
}
- n->valid = FALSE;
+ n->valid = false;
n->next = $1;
$$ = n;
}
struct flag_info *n;
n = ((struct flag_info *) xmalloc (sizeof *n));
n->flag_list = $3;
- n->flags_initialized = FALSE;
+ n->flags_initialized = false;
n->not_with_flags = 0;
n->only_with_flags = 0;
$$ = n;
input_section_spec:
input_section_spec_no_keep
| KEEP '('
- { ldgram_had_keep = TRUE; }
+ { ldgram_had_keep = true; }
input_section_spec_no_keep ')'
- { ldgram_had_keep = FALSE; }
+ { ldgram_had_keep = false; }
;
statement:
}
| SORT_BY_NAME '(' CONSTRUCTORS ')'
{
- constructors_sorted = TRUE;
+ constructors_sorted = true;
lang_add_attribute (lang_constructors_statement_enum);
}
| input_section_spec
assignment:
NAME '=' mustbe_exp
{
- lang_add_assignment (exp_assign ($1, $3, FALSE));
+ lang_add_assignment (exp_assign ($1, $3, false));
}
| NAME assign_op mustbe_exp
{
exp_binop ($2,
exp_nameop (NAME,
$1),
- $3), FALSE));
+ $3), false));
}
| HIDDEN '(' NAME '=' mustbe_exp ')'
{
- lang_add_assignment (exp_assign ($3, $5, TRUE));
+ lang_add_assignment (exp_assign ($3, $5, true));
}
| PROVIDE '(' NAME '=' mustbe_exp ')'
{
- lang_add_assignment (exp_provide ($3, $5, FALSE));
+ lang_add_assignment (exp_provide ($3, $5, false));
}
| PROVIDE_HIDDEN '(' NAME '=' mustbe_exp ')'
{
- lang_add_assignment (exp_provide ($3, $5, TRUE));
+ lang_add_assignment (exp_provide ($3, $5, true));
}
;
memory_spec: NAME
- { region = lang_memory_region_lookup ($1, TRUE); }
+ { region = lang_memory_region_lookup ($1, true); }
attributes_opt ':'
origin_spec opt_comma length_spec
{}
{ ldemul_hll($3); }
| filename
{ ldemul_hll($1); }
-
;
low_level_library:
SYSLIB '(' low_level_library_NAME_list ')'
- ; low_level_library_NAME_list:
+ ;
+
+low_level_library_NAME_list:
low_level_library_NAME_list opt_comma filename
{ ldemul_syslib($3); }
|
floating_point_support:
FLOAT
- { lang_float(TRUE); }
+ { lang_float(true); }
| NOFLOAT
- { lang_float(FALSE); }
+ { lang_float(false); }
;
nocrossref_list:
'}' { ldlex_popstate (); ldlex_expression (); }
memspec_opt memspec_at_opt phdr_opt fill_opt
{
+ if (yychar == NAME)
+ {
+ yyclearin;
+ ldlex_backup ();
+ }
ldlex_popstate ();
lang_leave_output_section_statement ($18, $15, $17, $16);
}
opt_comma
- {}
| OVERLAY
{ ldlex_expression (); }
opt_exp_without_type opt_nocrossrefs opt_at opt_subalign
{ ldlex_popstate (); ldlex_expression (); }
memspec_opt memspec_at_opt phdr_opt fill_opt
{
+ if (yychar == NAME)
+ {
+ yyclearin;
+ ldlex_backup ();
+ }
ldlex_popstate ();
lang_leave_overlay ($5, (int) $4,
$16, $13, $15, $14);
opt_exp_with_type
{
ldlex_popstate ();
- lang_add_assignment (exp_assign (".", $3, FALSE));
+ lang_add_assignment (exp_assign (".", $3, false));
}
'{' sec_or_group_p1 '}'
| INCLUDE filename
n = ((struct lang_output_section_phdr_list *)
xmalloc (sizeof *n));
n->name = $3;
- n->used = FALSE;
+ n->used = false;
n->next = $1;
$$ = n;
}
{
$$ = $3;
if (strcmp ($1, "FILEHDR") == 0 && $2 == NULL)
- $$.filehdr = TRUE;
+ $$.filehdr = true;
else if (strcmp ($1, "PHDRS") == 0 && $2 == NULL)
- $$.phdrs = TRUE;
+ $$.phdrs = true;
else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
$$.flags = $2;
else
dynamic_list_tag:
vers_defns ';'
{
- lang_append_dynamic_list ($1);
+ lang_append_dynamic_list (current_dynamic_list_p, $1);
}
;
vers_defns:
VERS_IDENTIFIER
{
- $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, false);
}
| NAME
{
- $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, TRUE);
+ $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, true);
}
| vers_defns ';' VERS_IDENTIFIER
{
- $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, false);
}
| vers_defns ';' NAME
{
- $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, TRUE);
+ $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, true);
}
| vers_defns ';' EXTERN NAME '{'
{
}
| GLOBAL
{
- $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, false);
}
| vers_defns ';' GLOBAL
{
- $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang, false);
}
| LOCAL
{
- $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, false);
}
| vers_defns ';' LOCAL
{
- $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang, false);
}
| EXTERN
{
- $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, false);
}
| vers_defns ';' EXTERN
{
- $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang, FALSE);
+ $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang, false);
}
;