From aa83d1ec50580e15fe002044c8d8babb6da8a4c0 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Sat, 11 Feb 2012 20:02:03 +0000 Subject: [PATCH] ChangeLog binutils 2012-02-11 Kai Tietz PR binutils/13657 * defparse.y (%union): New type id_const. (opt_name2): New rule. (keyword_as_name): New rule. (opt_name): Adjust rule. (opt_import_name): Likewise. (opt_equal_name): Likewise. ChangeLog binutils/testsuite 2012-02-11 Kai Tietz * binutils-all/version.def: New file. * binutils-all/dlltool.exp: Add version-dll test. ChangeLog ld 2012-02-11 Kai Tietz * deffilep.y (%union): New type id_const. (opt_name2): New rule. (keyword_as_name): New rule. (dot_name): Replaced by opt_name2 rule. (opt_name): Adjust rule. (opt_equal_name): Likewise. --- binutils/ChangeLog | 10 +++ binutils/defparse.y | 66 +++++++++++++++---- binutils/testsuite/ChangeLog | 5 ++ binutils/testsuite/binutils-all/dlltool.exp | 11 ++++ binutils/testsuite/binutils-all/version.def | 17 +++++ ld/ChangeLog | 9 +++ ld/deffilep.y | 70 ++++++++++++++------- 7 files changed, 156 insertions(+), 32 deletions(-) create mode 100644 binutils/testsuite/binutils-all/version.def diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 1040f9e218b..261684e1ba0 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,13 @@ +2012-02-11 Kai Tietz + + PR binutils/13657 + * defparse.y (%union): New type id_const. + (opt_name2): New rule. + (keyword_as_name): New rule. + (opt_name): Adjust rule. + (opt_import_name): Likewise. + (opt_equal_name): Likewise. + 2012-02-11 Kai Tietz PR binutils/13297 diff --git a/binutils/defparse.y b/binutils/defparse.y index c05254a0557..b21ce932150 100644 --- a/binutils/defparse.y +++ b/binutils/defparse.y @@ -28,6 +28,7 @@ %union { char *id; + const char *id_const; int number; }; @@ -40,7 +41,8 @@ %token NUMBER %type opt_base opt_ordinal opt_NONAME opt_CONSTANT opt_DATA opt_PRIVATE %type attr attr_list opt_number -%type opt_name opt_equal_name opt_import_name +%type opt_name opt_name2 opt_equal_name opt_import_name +%type keyword_as_name %% @@ -150,13 +152,61 @@ opt_PRIVATE: | { $$ = 0; } ; -opt_name: ID { $$ =$1; } - | ID '.' ID +keyword_as_name: NAME { $$ = "NAME"; } + | LIBRARY { $$ = "LIBRARY"; } + | DESCRIPTION { $$ = "DESCRIPTION"; } + | STACKSIZE { $$ = "STACKSIZE"; } + | HEAPSIZE { $$ = "HEAPSIZE"; } + | CODE { $$ = "CODE"; } + | DATA { $$ = "DATA"; } + | SECTIONS { $$ = "SECTIONS"; } + | EXPORTS { $$ = "EXPORTS"; } + | IMPORTS { $$ = "IMPORTS"; } + | VERSIONK { $$ = "VERSION"; } + | BASE { $$ = "BASE"; } + | CONSTANT { $$ = "CONSTANT"; } + | NONAME { $$ = "NONAME"; } + | PRIVATE { $$ = "PRIVATE"; } + | READ { $$ = "READ"; } + | WRITE { $$ = "WRITE"; } + | EXECUTE { $$ = "EXECUTE"; } + | SHARED { $$ = "SHARED"; } + | NONSHARED { $$ = "NONSHARED"; } + | SINGLE { $$ = "SINGLE"; } + | MULTIPLE { $$ = "MULTIPLE"; } + | INITINSTANCE { $$ = "INITINSTANCE"; } + | INITGLOBAL { $$ = "INITGLOBAL"; } + | TERMINSTANCE { $$ = "TERMINSTANCE"; } + | TERMGLOBAL { $$ = "TERMGLOBAL"; } + ; + +opt_name2: ID { $$ = $1; } + | '.' keyword_as_name + { + char *name = xmalloc (strlen ($2) + 2); + sprintf (name, ".%s", $2); + $$ = name; + } + | '.' opt_name2 + { + char *name = xmalloc (strlen ($2) + 2); + sprintf (name, ".%s", $2); + $$ = name; + } + | keyword_as_name '.' opt_name2 + { + char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1); + sprintf (name, "%s.%s", $1, $3); + $$ = name; + } + | ID '.' opt_name2 { char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1); sprintf (name, "%s.%s", $1, $3); $$ = name; } + ; +opt_name: opt_name2 { $$ =$1; } | { $$=""; } ; @@ -166,18 +216,12 @@ opt_ordinal: ; opt_import_name: - EQUAL ID { $$ = $2; } + EQUAL opt_name2 { $$ = $2; } | { $$ = 0; } ; opt_equal_name: - '=' ID { $$ = $2; } - | '=' ID '.' ID - { - char *name = xmalloc (strlen ($2) + 1 + strlen ($4) + 1); - sprintf (name, "%s.%s", $2, $4); - $$ = name; - } + '=' opt_name2 { $$ = $2; } | { $$ = 0; } ; diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index 6f59bafe363..604c824bcb3 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-11 Kai Tietz + + * binutils-all/version.def: New file. + * binutils-all/dlltool.exp: Add version-dll test. + 2012-02-02 Nick Clifton * binutils-all/readelf.n: Add #pass to cope with targets that add diff --git a/binutils/testsuite/binutils-all/dlltool.exp b/binutils/testsuite/binutils-all/dlltool.exp index 5a19cf27332..1493e6e1983 100644 --- a/binutils/testsuite/binutils-all/dlltool.exp +++ b/binutils/testsuite/binutils-all/dlltool.exp @@ -53,6 +53,17 @@ if { "$target_xfail" == "yes" } { setup_xfail *-* } +verbose "$DLLTOOL -l libversion.a --def $srcdir/$subdir/version.def" 1 +catch "exec $DLLTOOL -l libersion.a --def $srcdir/$subdir/version.def" err + +if ![string match "" $err] then { + send_log "$err\n" + verbose "$err" 1 + fail "dlltool (version.dll)" +} else { + pass "dlltool (version.dll)" +} + verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1 catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err diff --git a/binutils/testsuite/binutils-all/version.def b/binutils/testsuite/binutils-all/version.def new file mode 100644 index 00000000000..ce1c4b54344 --- /dev/null +++ b/binutils/testsuite/binutils-all/version.def @@ -0,0 +1,17 @@ +LIBRARY VERSION.dll +EXPORTS +GetFileVersionInfoA1 +GetFileVersionInfoSizeA2 +GetFileVersionInfoSizeW3 +GetFileVersionInfoW4 +VerFindFileA5 +VerFindFileW6 +VerInstallFileA7 +VerInstallFileW8 +VerLanguageNameA9 +VerLanguageNameW10 +VerQueryValueA11 +VerQueryValueIndexA12 +VerQueryValueIndexW13 +VerQueryValueW14 + diff --git a/ld/ChangeLog b/ld/ChangeLog index 6c79882496b..56e07775102 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2012-02-11 Kai Tietz + + * deffilep.y (%union): New type id_const. + (opt_name2): New rule. + (keyword_as_name): New rule. + (dot_name): Replaced by opt_name2 rule. + (opt_name): Adjust rule. + (opt_equal_name): Likewise. + 2012-02-11 Pascal Obry * pe-dll.c (auto_export): Use bsearch to speed up scan of exports diff --git a/ld/deffilep.y b/ld/deffilep.y index 58f3dd27b78..b192100f78c 100644 --- a/ld/deffilep.y +++ b/ld/deffilep.y @@ -113,6 +113,7 @@ static const char *lex_parse_string_end = 0; %union { char *id; + const char *id_const; int number; char *digits; }; @@ -127,8 +128,9 @@ static const char *lex_parse_string_end = 0; %type opt_digits %type opt_base opt_ordinal %type attr attr_list opt_number exp_opt_list exp_opt -%type opt_name opt_equal_name dot_name anylang_id opt_id +%type opt_name opt_name2 opt_equal_name anylang_id opt_id %type opt_equalequal_name +%type keyword_as_name %% @@ -164,7 +166,7 @@ expline: /* The opt_comma is necessary to support both the usual DEF file syntax as well as .drectve syntax which mandates ,. */ - dot_name opt_equal_name opt_ordinal opt_comma exp_opt_list opt_comma opt_equalequal_name + opt_name2 opt_equal_name opt_ordinal opt_comma exp_opt_list opt_comma opt_equalequal_name { def_exports ($1, $2, $3, $5, $7); } ; exp_opt_list: @@ -234,19 +236,60 @@ attr: | SHARED { $$=8;} ; -opt_name: ID { $$ = $1; } - | '.' ID + +keyword_as_name: BASE { $$ = "BASE"; } + | CODE { $$ = "CODE"; } + | CONSTANTU { $$ = "CONSTANT"; } + | CONSTANTL { $$ = "constant"; } + | DATAU { $$ = "DATA"; } + | DATAL { $$ = "data"; } + | DESCRIPTION { $$ = "DESCRIPTION"; } + | DIRECTIVE { $$ = "DIRECTIVE"; } + | EXECUTE { $$ = "EXECUTE"; } + | EXPORTS { $$ = "EXPORTS"; } + | HEAPSIZE { $$ = "HEAPSIZE"; } + | IMPORTS { $$ = "IMPORTS"; } + | LIBRARY { $$ = "LIBRARY"; } + | NAME { $$ = "NAME"; } + | NONAMEU { $$ = "NONAME"; } + | NONAMEL { $$ = "noname"; } + | PRIVATEU { $$ = "PRIVATE"; } + | PRIVATEL { $$ = "private"; } + | READ { $$ = "READ"; } + | SHARED { $$ = "SHARED"; } + | STACKSIZE_K { $$ = "STACKSIZE"; } + | VERSIONK { $$ = "VERSION"; } + | WRITE { $$ = "WRITE"; } + ; + +opt_name2: ID { $$ = $1; } + | '.' keyword_as_name { + char *name = xmalloc (strlen ($2) + 2); + sprintf (name, ".%s", $2); + $$ = name; + } + | '.' opt_name2 + { char *name = def_pool_alloc (strlen ($2) + 2); sprintf (name, ".%s", $2); $$ = name; } - | ID '.' ID + | keyword_as_name '.' opt_name2 { char *name = def_pool_alloc (strlen ($1) + 1 + strlen ($3) + 1); sprintf (name, "%s.%s", $1, $3); $$ = name; } + | ID '.' opt_name2 + { + char *name = def_pool_alloc (strlen ($1) + 1 + strlen ($3) + 1); + sprintf (name, "%s.%s", $1, $3); + $$ = name; + } + ; + +opt_name: opt_name2 { $$ = $1; } | { $$ = ""; } ; @@ -260,7 +303,7 @@ opt_ordinal: ; opt_equal_name: - '=' dot_name { $$ = $2; } + '=' opt_name2 { $$ = $2; } | { $$ = 0; } ; @@ -268,21 +311,6 @@ opt_base: BASE '=' NUMBER { $$ = $3;} | { $$ = -1;} ; -dot_name: ID { $$ = $1; } - | '.' ID - { - char *name = def_pool_alloc (strlen ($2) + 2); - sprintf (name, ".%s", $2); - $$ = name; - } - | dot_name '.' ID - { - char *name = def_pool_alloc (strlen ($1) + 1 + strlen ($3) + 1); - sprintf (name, "%s.%s", $1, $3); - $$ = name; - } - ; - anylang_id: ID { $$ = $1; } | '.' ID { -- 2.30.2