diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/deffilep.y | 45 | ||||
-rw-r--r-- | ld/pe-dll.c | 3 |
3 files changed, 43 insertions, 16 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 64cbbef..f4ca897 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +1999-09-28 Mumit Khan <khan@xraylith.wisc.edu> + + * deffilep.y (tokens): Add upper and lower case versions of DATA, + CONSTANT, NONAME and PRIVATE tokens. + (command): Use DATAU. + (expline): Allow for drectve syntax as well. + (exp_opt_list): Likewise. + (exp_opt): Likewise. + * pe-dll.c (make_one): Only generate the idata entries for data + symbols. + 1999-09-28 Geoffrey Keating <geoffk@cygnus.com> * scripttempl/elf.sc (.sdata): Include .gnu.linkonce.s.* sections diff --git a/ld/deffilep.y b/ld/deffilep.y index 70e517c..31aa703 100644 --- a/ld/deffilep.y +++ b/ld/deffilep.y @@ -106,9 +106,10 @@ static const char *lex_parse_string_end = 0; int number; }; -%token NAME, LIBRARY, DESCRIPTION, STACKSIZE, HEAPSIZE, CODE, DATA -%token SECTIONS, EXPORTS, IMPORTS, VERSIONK, BASE, CONSTANT, PRIVATE -%token READ WRITE EXECUTE SHARED NONAME DIRECTIVE +%token NAME, LIBRARY, DESCRIPTION, STACKSIZE, HEAPSIZE, CODE, DATAU, DATAL +%token SECTIONS, EXPORTS, IMPORTS, VERSIONK, BASE, CONSTANTU, CONSTANTL +%token PRIVATEU, PRIVATEL +%token READ WRITE EXECUTE SHARED NONAMEU NONAMEL DIRECTIVE %token <id> ID %token <number> NUMBER %type <number> opt_base opt_ordinal @@ -128,7 +129,7 @@ command: | STACKSIZE NUMBER opt_number { def_stacksize ($2, $3);} | HEAPSIZE NUMBER opt_number { def_heapsize ($2, $3);} | CODE attr_list { def_section ("CODE", $2);} - | DATA attr_list { def_section ("DATA", $2);} + | DATAU attr_list { def_section ("DATA", $2);} | SECTIONS seclist | EXPORTS explist | IMPORTS implist @@ -145,18 +146,28 @@ explist: ; expline: - ID opt_equal_name opt_ordinal exp_opt_list - { def_exports ($1, $2, $3, $4); } + /* The opt_comma is necessary to support both the usual + DEF file syntax as well as .drectve syntax which + mandates <expsym>,<expoptlist>. */ + ID opt_equal_name opt_ordinal opt_comma exp_opt_list + { def_exports ($1, $2, $3, $5); } ; exp_opt_list: - exp_opt exp_opt_list { $$ = $1 | $2; } + /* The opt_comma is necessary to support both the usual + DEF file syntax as well as .drectve syntax which + allows for comma separated opt list. */ + exp_opt opt_comma exp_opt_list { $$ = $1 | $3; } | { $$ = 0; } ; exp_opt: - NONAME { $$ = 1; } - | CONSTANT { $$ = 2; } - | DATA { $$ = 4; } - | PRIVATE { $$ = 8; } + NONAMEU { $$ = 1; } + | NONAMEL { $$ = 1; } + | CONSTANTU { $$ = 2; } + | CONSTANTL { $$ = 2; } + | DATAU { $$ = 4; } + | DATAL { $$ = 4; } + | PRIVATEU { $$ = 8; } + | PRIVATEL { $$ = 8; } ; implist: implist impline @@ -827,8 +838,10 @@ tokens[] = { { "BASE", BASE }, { "CODE", CODE }, - { "CONSTANT", CONSTANT }, - { "DATA", DATA }, + { "CONSTANT", CONSTANTU }, + { "constant", CONSTANTL }, + { "DATA", DATAU }, + { "data", DATAL }, { "DESCRIPTION", DESCRIPTION }, { "DIRECTIVE", DIRECTIVE }, { "EXECUTE", EXECUTE }, @@ -837,8 +850,10 @@ tokens[] = { "IMPORTS", IMPORTS }, { "LIBRARY", LIBRARY }, { "NAME", NAME }, - { "NONAME", NONAME }, - { "PRIVATE", PRIVATE }, + { "NONAME", NONAMEU }, + { "noname", NONAMEL }, + { "PRIVATE", PRIVATEU }, + { "private", PRIVATEL }, { "READ", READ }, { "SECTIONS", SECTIONS }, { "SEGMENTS", SECTIONS }, diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 5afdfbb..61f57f0 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -1307,7 +1307,8 @@ make_one (exp, parent) id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2); id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2); id6 = quick_section (abfd, ".idata$6", SEC_HAS_CONTENTS, 2); - quick_symbol (abfd, U(""), exp->internal_name, "", tx, BSF_GLOBAL, 0); + if (! exp->flag_data) + quick_symbol (abfd, U(""), exp->internal_name, "", tx, BSF_GLOBAL, 0); quick_symbol (abfd, U("_head_"), dll_symname, "", UNDSEC, BSF_GLOBAL, 0); quick_symbol (abfd, U("__imp_"), exp->internal_name, "", id5, BSF_GLOBAL, 0); quick_symbol (abfd, U("_imp__"), exp->internal_name, "", id5, BSF_GLOBAL, 0); |