On 1/19/2018 10:27 PM, Ken Brown wrote:
On 1/18/2018 6:28 PM, Ken Brown wrote:
On 1/18/2018 4:30 PM, Yaakov Selkowitz wrote:
On 2018-01-18 08:35, Ken Brown wrote:
On 1/17/2018 5:29 PM, Ken Brown wrote:
Do we need a new gcc release to go along with the recent ssp changes?
The following commit message seems to answer my question:
Note that this does require building gcc with --disable-libssp
and
gcc_cv_libc_provides_ssp=yes.
Correct.
Are there plans to coordinate the release of Cygwin 2.10.0 with a new
gcc release? In the meantime, I guess package maintainers have to
build
with -U_FORTIFY_SOURCE in order to test building with Cygwin
2.10.0. Or
am I missing something?
-D_FORTIFY_SOURCE is not the default, so simply omitting it is
sufficient.
I was talking about building projects in which _FORTIFY_SOURCE is
defined by default. That happens, for instance, in the gnulib
subdirectory of the emacs tree, so it may affect other projects that
use gnulib also.
You could also just delete
/usr/lib/gcc/*-pc-cygwin/6.4.0/include/ssp, since we won't need it
anymore and it wasn't even being used properly in the first place.
That's a simpler workaround than what I was doing. Thanks.
Here's another issue that's come up with _FORTIFY_SOURCE. One of the
emacs source files, fileio.c, makes use of a pointer to readlinkat.
[More precisely, the file uses an external function foo() with a
parameter 'bar' that's a pointer to a function; foo is called in
fileio.c with bar = readlinkat.]
When _FORTIFY_SOURCE > 0, this leads to an "undefined reference to
`__ssp_protected_readlinkat'" linking error. Does this sound like
something that will be fixed with the new gcc release?
I realize I haven't given you full details, but it might be a few days
until I have a chance to extract an STC for this issue, so I thought
I'd give it a shot.
If you can't answer the question based on the information above, I'll
make an STC as soon as I can.
I got to this sooner than expected:
$ cat ssp_test.c
#define _FORTIFY_SOURCE 1
#include <unistd.h>
void foo (ssize_t (*preadlinkat) (int, char const *, char *, size_t));
void baz ()
{
foo (readlinkat);
}
$ gcc -c -O1 ssp_test.c
$ objdump -x ssp_test.o | grep readlinkat
6 .rdata$.refptr.__ssp_protected_readlinkat 00000010
0000000000000000 0000000000000000 00000180 2**4
[...]