This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: PATCH COMMITTED: PR 6493: Work around -D_FORTIFY_SOURCE
- From: Michael Hennebry <hennebry at web dot cs dot ndsu dot nodak dot edu>
- To: Ian Lance Taylor <iant at google dot com>
- Cc: <binutils at sourceware dot org>
- Date: Fri, 9 May 2008 09:57:32 -0500 (CDT)
- Subject: Re: PATCH COMMITTED: PR 6493: Work around -D_FORTIFY_SOURCE
On Fri, 9 May 2008, Ian Lance Taylor wrote:
> PR 6493 is about a warning in gold when compiling with
> -D_FORTIFY_SOURCE (at least, I assume they are using that -D option,
> as otherwise the bug report does not make sense). In this case gold
> is calling write in an error case, so it is correctly ignoring the
> return value. This patch adds some pointless uses of the return value
> to avoid the warning.
I thought that was what coercion to void was for.
It would also have the side-effect of being
more informative to subsequent readers.
> Index: gold.cc
> ===================================================================
> RCS file: /cvs/src/src/gold/gold.cc,v
> retrieving revision 1.55
> diff -p -u -r1.55 gold.cc
> --- gold.cc 7 May 2008 06:08:01 -0000 1.55
> +++ gold.cc 9 May 2008 14:12:14 -0000
> @@ -60,9 +60,18 @@ gold_nomem()
> // We are out of memory, so try hard to print a reasonable message.
> // Note that we don't try to translate this message, since the
> // translation process itself will require memory.
> - write(2, program_name, strlen(program_name));
> - const char* const s = ": out of memory\n";
> - write(2, s, strlen(s));
> +
> + // LEN only exists to avoid a pointless warning when write is
> + // declared with warn_use_result, as when compiling with
> + // -D_USE_FORTIFY on GNU/Linux. Casting to void does not appear to
> + // work, at least not with gcc 4.3.0.
> +
> + ssize_t len = write(2, program_name, strlen(program_name));
> + if (len >= 0)
> + {
> + const char* const s = ": out of memory\n";
> + len = write(2, s, strlen(s));
(void)write(2, s, strlen(s));
> + }
> gold_exit(false);
> }
--
Michael hennebry@web.cs.ndsu.NoDak.edu
"Those parts of the system that you can hit with a hammer (not advised)
are called Hardware; those program instructions that you can only
curse at are called Software."