This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: binutils 2.20 release (soon)


Tristan Gingold <gingold@adacore.com> writes:

> If you have a reason to delay this release, please speak up now!

The included ld/ldlex.c is broken.  It passes a yy_size_t* as the second
argument of yy_input, which expects an int*, with the obvious disastrous
results.  Your version of flex appears to have changed this.

Tested on powerpc64-suse-linux.

Andreas.

2009-10-13  Andreas Schwab  <schwab@linux-m68k.org>

	* ldlex.l (yy_input): Remove second argument and return the value
	instead.
	(YY_INPUT): Adjust.

--- ld/ldlex.l.~1.43.~	2009-09-04 19:54:32.000000000 +0200
+++ ld/ldlex.l	2009-10-13 22:47:14.000000000 +0200
@@ -57,7 +57,7 @@ const char *lex_string = NULL;
    Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid.  */
 
 #undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) yy_input (buf, &result, max_size)
+#define YY_INPUT(buf,result,max_size) result = yy_input (buf, max_size)
 
 #define YY_NO_UNPUT
 
@@ -68,7 +68,7 @@ static unsigned int lineno_stack[MAX_INC
 static unsigned int include_stack_ptr = 0;
 static int vers_node_nesting = 0;
 
-static void yy_input (char *, int *, int);
+static int yy_input (char *, int);
 static void comment (void);
 static void lex_warn_invalid (char *where, char *what);
 
@@ -608,22 +608,23 @@ ldlex_popstate (void)
 }
 
 
-/* Place up to MAX_SIZE characters in BUF and return in *RESULT
+/* Place up to MAX_SIZE characters in BUF and return
    either the number of characters read, or 0 to indicate EOF.  */
 
-static void
-yy_input (char *buf, int *result, int max_size)
+static int
+yy_input (char *buf, int max_size)
 {
-  *result = 0;
+  int result = 0;
   if (YY_CURRENT_BUFFER->yy_input_file)
     {
       if (yyin)
 	{
-	  *result = fread (buf, 1, max_size, yyin);
-	  if (*result < max_size && ferror (yyin))
+	  result = fread (buf, 1, max_size, yyin);
+	  if (result < max_size && ferror (yyin))
 	    einfo ("%F%P: read in flex scanner failed\n");
 	}
     }
+  return result;
 }
 
 /* Eat the rest of a C-style comment.  */

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]