diff options
author | Ian Lance Taylor <ian@airs.com> | 1999-06-12 21:24:56 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1999-06-12 21:24:56 +0000 |
commit | aa8804e46ee31cc1d2e00f57467c8e5a4a84a273 (patch) | |
tree | 90968c910b1a22483da719d90e576f8f9f8efcdf /ld | |
parent | 57e21befb98e8ad0b2c6dda814869145a8bcd60b (diff) | |
download | gdb-aa8804e46ee31cc1d2e00f57467c8e5a4a84a273.zip gdb-aa8804e46ee31cc1d2e00f57467c8e5a4a84a273.tar.gz gdb-aa8804e46ee31cc1d2e00f57467c8e5a4a84a273.tar.bz2 |
This fixes ! to work as documented in a memory region attribute list.
From Thomas Zenker <thz@lennartz-electronic.de>:
* ldgram.y (attributes_opt): Use attributes_list instead of NAME.
(attributes_list, attributes_string): New nonterminals.
* ldlang.c (lang_set_flags): Add invert parameter. Don't handle
'!'.
* ldlang.c (lang_set_flags): Update declaration.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/ldgram.y | 27 | ||||
-rw-r--r-- | ld/ldlang.c | 11 | ||||
-rw-r--r-- | ld/ldlang.h | 6 |
4 files changed, 35 insertions, 18 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 060b9ab..cbc6f9b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +1999-06-13 Ian Lance Taylor <ian@zembu.com> + + From Thomas Zenker <thz@lennartz-electronic.de>: + * ldgram.y (attributes_opt): Use attributes_list instead of NAME. + (attributes_list, attributes_string): New nonterminals. + * ldlang.c (lang_set_flags): Add invert parameter. Don't handle + '!'. + * ldlang.c (lang_set_flags): Update declaration. + 1999-06-12 Ian Lance Taylor <ian@zembu.com> * emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Don't add diff --git a/ld/ldgram.y b/ld/ldgram.y index a1f3ed6..002b9fb 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -1,5 +1,5 @@ /* A YACC grammer to parse a superset of the AT&T linker scripting languaue. - Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 + Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com). @@ -132,7 +132,7 @@ static int error_index; %token ORIGIN FILL %token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS %token ALIGNMOD AT PROVIDE -%type <token> assign_op atype +%type <token> assign_op atype attributes_opt %type <name> filename %token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K %token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL @@ -610,15 +610,24 @@ length_spec: "length", lang_first_phase_enum); } - + ; attributes_opt: - '(' NAME ')' - { - lang_set_flags(region, $2); - } - | - + /* empty */ + { /* dummy action to avoid bison 1.25 error message */ } + | '(' attributes_list ')' + ; + +attributes_list: + attributes_string + | attributes_list attributes_string + ; + +attributes_string: + NAME + { lang_set_flags (region, $1, 0); } + | '!' NAME + { lang_set_flags (region, $2, 1); } ; startup: diff --git a/ld/ldlang.c b/ld/ldlang.c index a2c533d..862e4e2 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -3255,21 +3255,18 @@ lang_place_orphans () void -lang_set_flags (ptr, flags) +lang_set_flags (ptr, flags, invert) lang_memory_region_type *ptr; CONST char *flags; + int invert; { - flagword *ptr_flags = &ptr->flags; + flagword *ptr_flags; - ptr->flags = ptr->not_flags = 0; + ptr_flags = invert ? &ptr->not_flags : &ptr->flags; while (*flags) { switch (*flags) { - case '!': - ptr_flags = (ptr_flags == &ptr->flags) ? &ptr->not_flags : &ptr->flags; - break; - case 'A': case 'a': *ptr_flags |= SEC_ALLOC; break; diff --git a/ld/ldlang.h b/ld/ldlang.h index 7bd7972..8c63938 100644 --- a/ld/ldlang.h +++ b/ld/ldlang.h @@ -1,5 +1,6 @@ /* ldlang.h - linker command language support - Copyright 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. + Copyright 1991, 92, 93, 94, 95, 96, 97, 98, 1999 + Free Software Foundation, Inc. This file is part of GLD, the Gnu Linker. @@ -383,7 +384,8 @@ extern struct memory_region_struct *lang_memory_region_lookup extern struct memory_region_struct *lang_memory_region_default PARAMS ((asection *)); extern void lang_map PARAMS ((void)); -extern void lang_set_flags PARAMS ((lang_memory_region_type *, const char *)); +extern void lang_set_flags PARAMS ((lang_memory_region_type *, const char *, + int)); extern void lang_add_output PARAMS ((const char *, int from_script)); extern void lang_enter_output_section_statement PARAMS ((const char *output_section_statement_name, |