PR binutils/13710
authorKai Tietz <kai.tietz@onevision.com>
Fri, 24 Feb 2012 14:20:19 +0000 (14:20 +0000)
committerKai Tietz <kai.tietz@onevision.com>
Fri, 24 Feb 2012 14:20:19 +0000 (14:20 +0000)
* 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
binutils/defparse.y
binutils/doc/binutils.texi
ld/ChangeLog
ld/deffilep.y

index 3fc0abe..3f6ef5d 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-24  Kai Tietz  <ktietz@redhat.com>
+
+       PR binutils/13710
+       * defparse.y (keyword_as_name): Disable LIBRARY
+       keyword.
+       * doc/binutils.texi: Document LIBRARY exception.
+
 2012-02-21  Kai Tietz<ktietz@redhat.com>
 
        PR binutils/13682
index b21ce93..a4e73eb 100644 (file)
@@ -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"; }
index a9d9516..698702b 100644 (file)
@@ -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
index 47eeb2a..4f9a9b7 100644 (file)
@@ -1,3 +1,9 @@
+2012-02-24  Kai Tietz  <ktietz@redhat.com>
+
+       PR binutils/13710
+       * deffilep.y (keyword_as_name): Disable LIBRARY
+       keyword.
+
 2012-02-22  Alan Modra  <amodra@gmail.com>
 
        PR ld/13683
index efeff19..3afb3ce 100644 (file)
@@ -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"; }