From 5b3d386eed68db38fda170cb48b54ce1baa86baa Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Fri, 24 Feb 2012 14:20:19 +0000 Subject: [PATCH] PR binutils/13710 * defparse.y (keyword_as_name): Disable LIBRARY keyword. * doc/binutils.texi: Document LIBRARY exception. PR binutils/13710 * deffilep.y (keyword_as_name): Disable LIBRARY keyword. --- binutils/ChangeLog | 7 +++++++ binutils/defparse.y | 5 ++++- binutils/doc/binutils.texi | 9 +++++++++ ld/ChangeLog | 6 ++++++ ld/deffilep.y | 7 ++++++- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 3fc0abe5097..3f6ef5d0337 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2012-02-24 Kai Tietz + + PR binutils/13710 + * defparse.y (keyword_as_name): Disable LIBRARY + keyword. + * doc/binutils.texi: Document LIBRARY exception. + 2012-02-21 Kai Tietz PR binutils/13682 diff --git a/binutils/defparse.y b/binutils/defparse.y index b21ce932150..a4e73eb3148 100644 --- a/binutils/defparse.y +++ b/binutils/defparse.y @@ -153,7 +153,10 @@ opt_PRIVATE: ; keyword_as_name: NAME { $$ = "NAME"; } - | LIBRARY { $$ = "LIBRARY"; } +/* Disabled LIBRARY keyword for a quirk in libtool. It places LIBRARY + command after EXPORTS list, which is illegal by specification. + See PR binutils/13710 + | LIBRARY { $$ = "LIBRARY"; } */ | DESCRIPTION { $$ = "DESCRIPTION"; } | STACKSIZE { $$ = "STACKSIZE"; } | HEAPSIZE { $$ = "HEAPSIZE"; } diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index a9d9516365f..698702b3aa7 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -3987,6 +3987,9 @@ The result is going to be named @var{name}@code{.exe}. @item @code{LIBRARY} @var{name} @code{[ ,} @var{base} @code{]} The result is going to be named @var{name}@code{.dll}. +Note: If you want to use LIBRARY as name then you need to quote. Otherwise +this will fail due a necessary hack for libtool (see PR binutils/13710 for more +details). @item @code{EXPORTS ( ( (} @var{name1} @code{[ = } @var{name2} @code{] ) | ( } @var{name1} @code{=} @var{module-name} @code{.} @var{external-name} @code{) ) [ == } @var{its_name} @code{]} @item @code{[} @var{integer} @code{] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *} @@ -3995,6 +3998,9 @@ ordinal number @var{integer}, or declares @var{name1} as an alias (forward) of the function @var{external-name} in the DLL. If @var{its_name} is specified, this name is used as string in export table. @var{module-name}. +Note: The @code{EXPORTS} has to be the last command in .def file, as keywords +are treated - beside @code{LIBRARY} - as simple name-identifiers. +If you want to use LIBRARY as name then you need to quote it. @item @code{IMPORTS ( (} @var{internal-name} @code{=} @var{module-name} @code{.} @var{integer} @code{) | [} @var{internal-name} @code{= ]} @var{module-name} @code{.} @var{external-name} @code{) [ == ) @var{its_name} @code{]} *} Declares that @var{external-name} or the exported function whose @@ -4003,6 +4009,9 @@ ordinal number is @var{integer} is to be imported from the file the name that the imported function will be referred to in the body of the DLL. If @var{its_name} is specified, this name is used as string in import table. +Note: The @code{IMPORTS} has to be the last command in .def file, as keywords +are treated - beside @code{LIBRARY} - as simple name-identifiers. +If you want to use LIBRARY as name then you need to quote it. @item @code{DESCRIPTION} @var{string} Puts @var{string} into the output @file{.exp} file in the diff --git a/ld/ChangeLog b/ld/ChangeLog index 47eeb2a8b33..4f9a9b72a1b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2012-02-24 Kai Tietz + + PR binutils/13710 + * deffilep.y (keyword_as_name): Disable LIBRARY + keyword. + 2012-02-22 Alan Modra PR ld/13683 diff --git a/ld/deffilep.y b/ld/deffilep.y index efeff19678e..3afb3ce3ce8 100644 --- a/ld/deffilep.y +++ b/ld/deffilep.y @@ -249,7 +249,12 @@ keyword_as_name: BASE { $$ = "BASE"; } | EXPORTS { $$ = "EXPORTS"; } | HEAPSIZE { $$ = "HEAPSIZE"; } | IMPORTS { $$ = "IMPORTS"; } - | LIBRARY { $$ = "LIBRARY"; } +/* Disable LIBRARY keyword as valid symbol-name. This is necessary + for libtool, which places this command after EXPORTS command. + This behavior is illegal by specification, but sadly required by + by compatibility reasons. + See PR binutils/13710 + | LIBRARY { $$ = "LIBRARY"; } */ | NAME { $$ = "NAME"; } | NONAMEU { $$ = "NONAME"; } | NONAMEL { $$ = "noname"; } -- 2.30.2