public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Re: PATCH: Add --size-check=[error|warning]
@ 2011-03-14 11:02 Sedat Dilek
  2011-03-14 11:25 ` Jan Beulich
  2011-03-14 12:57 ` Ingo Molnar
  0 siblings, 2 replies; 36+ messages in thread
From: Sedat Dilek @ 2011-03-14 11:02 UTC (permalink / raw)
  To: Ingo Molnar, Jan Beulich
  Cc: H.J. Lu, Alan Modra, binutils, LKML, H. Peter Anvin,
	Andrew Morton, Linus Torvalds, Thomas Gleixner

[QUOTE]
(H.J. Lu, did you drop me from the Cc: line?)

* Jan Beulich <JBeulich@novell.com> wrote:

> >> Please make it so that it'll be a warning by default, and an error
> >> upon programmer request. Otherwise, for the very purpose of
> >
> > I disagree. It should be error by default since the input is bogus,
> > Otherwise, those assembly bugs, benign or not, may not get
> > fixed.
> >
> >> bisection, it won't help much as you would have to override
> >> compiler/assembler flags during that process.
> >>
> >
> > They can use a wrapper to pass --size-check=warning to
> > assembler.  I think it is a small price to pay for those mistakes.
>
> "Small" being relative here - it could be dozens if not hundreds of
> people having to learn that this is necessary, many of them
> possibly rather unfamiliar with gas and its command line options.
>
> Also, using a wrapper gets further complicated by the fact that
> you may have to pass an extra -B to the compiler (not everyone
> has full control over the file system of all the machines used to
> do development), making sure this doesn't have any other
> unwanted side effects.

Correct. In reality if the kernel does not build or boot then most
people just wont
continue with the bisection. So this change actively degrades
debuggability, for no
good reason.

The thing is, it is absolutely, breath-takingy incompetent for the new binutils
version to break the Linux kernel build for 4 years of Linux kernel history
retroactively (130,000 commits), just to 'warn' about a size bug in a few debug
symbols that has no functional effects whatsoever and which few people
care about.

The correct solution is to turn it into a warning as me and others
have suggested.

No argument was offered *why* the build must be aborted. A warning serves the
purpose of informing the developer just as much - and does not
inconvenience the
tester.

Thanks,

	Ingo
[/QUOTE]

Nice to see there is an offer for a fix from binutils-side.

The followers of this "issue" like me have read the arguments from
kernel-developers.
Unfortunately, the Open Source world is not the linux-kernel alone.
I have built in the meantime a lot of Xorg stuff from GIT, etc. with a
binutils 2.21-snapshot (plus additional backported patches from
upstream).

If the goal is to catch real BUGs in the kernel, the current behaviour
of binutils/as is IMHO correct.
That's why I am on linux-next to squash bugs, not to ignore "warnings"

BTW "warnings", did someone tried gcc-4.6?
I used a snapshot from mid February (from Debian/experimental):
My linux-next build-log and the amount of warnings doubled or even
more (unfortunately, I have thrown away that logs and binaries).
Are all of these warnings ignoreable?
Which of them are really severe?

So, H.J. was pro-active in the meantime by offering this patch.
From kernel-side it's getting IMHO more and more some sort of "burning
of witches".

Thus some questions to the kernel folks:

[1] Jan, what do you mean by "side-effects". Can you explain that a
bit more precisely?

[2] Where can someone set a "global behaviour" (hardcoded options) for
his/her assembler in the kernel's build-system (speaking of
"--size-check=[error|warning]")?

[3] Can the kernel-buildsystem check for system's binutils/as version
and/or its features/options? If yes, where would that be and can you
offer a snippet for a solution?

Answering and/or offering solutions for my askings can help to handle
things from kernel-side.

My 0,02EUR.

- Sedat -

^ permalink raw reply	[flat|nested] 36+ messages in thread
* PATCH: Add --size-check=[error|warning]
@ 2011-03-11 16:58 H.J. Lu
  2011-03-11 17:04 ` Jan Beulich
  2011-03-16 23:56 ` Alan Modra
  0 siblings, 2 replies; 36+ messages in thread
From: H.J. Lu @ 2011-03-11 16:58 UTC (permalink / raw)
  To: binutils; +Cc: amodra

Hi,

Issue an error for bad ELF .size directive on Linux kernel bisect where
the bad assembly codes aren't fixed.  This patch adds
--size-check=[error|warning] so that we can issue a warning instead of
an error.  OK to install?

Thanks.


H.J.
---
diff --git a/gas/ChangeLog.x86 b/gas/ChangeLog.x86
index 33bf5bb..2787c65 100644
--- a/gas/ChangeLog.x86
+++ b/gas/ChangeLog.x86
@@ -1,3 +1,15 @@
+2011-03-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* as.c (show_usage): Add --size-check=.
+	(parse_args): Add and handle OPTION_SIZE_CHECK.
+
+	* as.h (flag_size_check): New.
+
+	* config/obj-elf.c (elf_frob_symbol): Use as_bad to report
+	bad .size directive only for --size-check=error.
+
+	* doc/as.texinfo: Document --size-check=.
+
 2011-01-15  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* config/tc-i386.c (disallow_64bit_disp): New.
diff --git a/gas/as.c b/gas/as.c
index 2c55047..380259c 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -284,6 +284,9 @@ Options:\n\
   --execstack             require executable stack for this object\n"));
   fprintf (stream, _("\
   --noexecstack           don't require executable stack for this object\n"));
+  fprintf (stream, _("\
+  --size-check=[error|warning]\n\
+			  ELF .size directive check (default --size-check=error)\n"));
 #endif
   fprintf (stream, _("\
   -f                      skip whitespace and comment preprocessing\n"));
@@ -443,6 +446,7 @@ parse_args (int * pargc, char *** pargv)
       OPTION_TARGET_HELP,
       OPTION_EXECSTACK,
       OPTION_NOEXECSTACK,
+      OPTION_SIZE_CHECK,
       OPTION_ALTERNATE,
       OPTION_AL,
       OPTION_HASH_TABLE_SIZE,
@@ -476,6 +480,7 @@ parse_args (int * pargc, char *** pargv)
 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
     ,{"execstack", no_argument, NULL, OPTION_EXECSTACK}
     ,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
+    ,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
 #endif
     ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
     ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF2}
@@ -813,6 +818,15 @@ This program has absolutely no warranty.\n"));
 	  flag_noexecstack = 1;
 	  flag_execstack = 0;
 	  break;
+
+	case OPTION_SIZE_CHECK:
+	  if (strcasecmp (optarg, "error") == 0)
+	    flag_size_check = size_check_error;
+	  else if (strcasecmp (optarg, "warning") == 0)
+	    flag_size_check = size_check_warning;
+	  else
+	    as_fatal (_("Invalid --size-check= option: `%s'"), optarg);
+	  break;
 #endif
 	case 'Z':
 	  flag_always_generate_output = 1;
diff --git a/gas/as.h b/gas/as.h
index 7c16382..5408e1a 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -575,6 +575,16 @@ COMMON unsigned int  found_comment;
 COMMON char *        found_comment_file;
 #endif
 
+#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
+/* If .size directive failure should be error or warning.  */
+COMMON enum
+  {
+    size_check_error = 0,
+    size_check_warning
+  }
+flag_size_check;
+#endif
+
 #ifndef DOLLAR_AMBIGU
 #define DOLLAR_AMBIGU 0
 #endif
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index d43409a..37a8020 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1898,6 +1898,12 @@ elf_frob_symbol (symbolS *symp, int *puntp)
 	{
 	  const char *op_name = NULL;
 	  const char *add_name = NULL;
+	  PRINTF_LIKE ((*as_error));
+
+	  if (flag_size_check == size_check_error)
+	    as_error = as_bad;
+	  else
+	    as_error = as_warn;
 
 	  if (size->X_op == O_subtract)
 	    {
@@ -1909,9 +1915,9 @@ elf_frob_symbol (symbolS *symp, int *puntp)
 		add_name = NULL;
 
 	      if (op_name && add_name)
-		as_bad (_(".size expression with symbols `%s' and `%s' "
-			  "does not evaluate to a constant"),
-			op_name, add_name);
+		as_error (_(".size expression with symbols `%s' and "
+			    "`%s' does not evaluate to a constant"),
+			  op_name, add_name);
 	      else
 		{
 		  const char *name;
@@ -1924,13 +1930,15 @@ elf_frob_symbol (symbolS *symp, int *puntp)
 		    name = NULL;
 
 		  if (name)
-		    as_bad (_(".size expression with symbol `%s' "
-			      "does not evaluate to a constant"), name);
+		    as_error (_(".size expression with symbol `%s' "
+				"does not evaluate to a constant"),
+			      name);
 		}
 	    }
 	  
 	  if (!op_name && !add_name)
-	    as_bad (_(".size expression does not evaluate to a constant"));
+	    as_error (_(".size expression does not evaluate to a "
+			"constant"));
 	}
       free (sy_obj->size);
       sy_obj->size = NULL;
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index 748c96c..bb7f063 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -243,6 +243,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
  @var{objfile}] [@b{-R}] [@b{--reduce-memory-overheads}] [@b{--statistics}]
  [@b{-v}] [@b{-version}] [@b{--version}] [@b{-W}] [@b{--warn}]
  [@b{--fatal-warnings}] [@b{-w}] [@b{-x}] [@b{-Z}] [@b{@@@var{FILE}}]
+ [@b{--size-check=[error|warning]}]
  [@b{--target-help}] [@var{target-options}]
  [@b{--}|@var{files} @dots{}]
 @c
@@ -611,6 +612,10 @@ Generate DWARF2 debugging information for each assembler line.  This
 may help debugging assembler code, if the debugger can handle it.  Note---this
 option is only supported by some targets, not all of them.
 
+@item --size-check=error
+@itemx --size-check=warning
+Issue an error or warning for invalid ELF .size directive.
+
 @item --help
 Print a summary of the command line options and exit.
 
diff --git a/gas/testsuite/ChangeLog.x86 b/gas/testsuite/ChangeLog.x86
index 01e62bc..bf76320 100644
--- a/gas/testsuite/ChangeLog.x86
+++ b/gas/testsuite/ChangeLog.x86
@@ -1,3 +1,11 @@
+2011-03-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gas/i386/bad-size.d: New.
+	* gas/i386/bad-size.s: Likewise.
+	* gas/i386/bad-size.warn: Likewise.
+
+	* gas/i386/i386.exp: Run bad-size for ELF targets.
+
 2011-01-15  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* gas/i386/ilp32/ilp32.exp: Run inval.
diff --git a/gas/testsuite/gas/i386/bad-size.d b/gas/testsuite/gas/i386/bad-size.d
index be9655e..0bcf381 100644
--- a/gas/testsuite/gas/i386/bad-size.d
+++ b/gas/testsuite/gas/i386/bad-size.d
@@ -1,7 +1,7 @@
 #as: --size-check=warning
 #objdump: -dw
 #name: Check bad size directive
-#error-output: bad-size.err
+#error-output: bad-size.warn
 
 .*: +file format .*
 
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 306da65..ea5cdac 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -228,6 +228,8 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
 	run_dump_test "debug1"
 
 	run_dump_test "dw2-compress-2"
+
+	run_dump_test "bad-size"
     }
 
     # This is a PE specific test.

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2011-03-18 11:59 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-14 11:02 PATCH: Add --size-check=[error|warning] Sedat Dilek
2011-03-14 11:25 ` Jan Beulich
2011-03-14 11:35   ` Ingo Molnar
2011-03-14 11:39   ` Sedat Dilek
2011-03-14 11:53     ` Sedat Dilek
2011-03-14 12:22       ` Jan Beulich
2011-03-14 12:38         ` Sedat Dilek
2011-03-14 15:56         ` Ian Lance Taylor
2011-03-14 18:02           ` H. Peter Anvin
2011-03-14 16:33   ` H. Peter Anvin
2011-03-14 19:24     ` Steven Rostedt
2011-03-14 20:06       ` Linus Torvalds
2011-03-14 12:57 ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2011-03-11 16:58 H.J. Lu
2011-03-11 17:04 ` Jan Beulich
2011-03-11 17:20   ` H.J. Lu
2011-03-14  8:44     ` Jan Beulich
2011-03-14  9:55       ` Ingo Molnar
2011-03-14 10:41         ` Alan Modra
2011-03-14 10:50           ` Pekka Enberg
2011-03-14 18:04             ` Alan Cox
2011-03-14 10:52           ` Jan Beulich
     [not found]           ` <AANLkTi=3AiLaw5Gnis8Ha4eRXirk0s-Cnk2zzN12YDpH__45869.1711457961$1300099861$gmane$org@mail.gmail.com>
2011-03-14 11:03             ` Andreas Schwab
2011-03-14 11:12               ` Pekka Enberg
2011-03-14 12:02                 ` Andreas Schwab
2011-03-14 12:13                   ` Ingo Molnar
2011-03-14 12:55                     ` Andreas Schwab
2011-03-14 13:17                       ` Ingo Molnar
2011-03-14 14:11                         ` Andreas Schwab
2011-03-14 12:11                 ` Ingo Molnar
2011-03-14 12:23           ` Ingo Molnar
2011-03-14 12:26             ` Ingo Molnar
2011-03-14 13:55       ` H.J. Lu
2011-03-16 23:56 ` Alan Modra
2011-03-18 11:20   ` Alan Modra
2011-03-18 11:59     ` Alan Modra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).