diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-03-09 22:55:28 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-03-09 22:55:28 +0100 |
commit | 264b5e137e20d0a8062497f8555759eb8bf8cc02 (patch) | |
tree | 6df0a17dcb984af4cb0c59edecd9bcacc4e1a348 /newlib/libc/stdio/putwc_u.c | |
parent | c09e96fda04989dcf0948e797deb8f096e12f2fa (diff) | |
download | cygnal-264b5e137e20d0a8062497f8555759eb8bf8cc02.tar.gz cygnal-264b5e137e20d0a8062497f8555759eb8bf8cc02.tar.bz2 cygnal-264b5e137e20d0a8062497f8555759eb8bf8cc02.zip |
Move definition of wsadata into wsock_init
The problem this patch fixes showed up after updating to gcc-5.3.0. The
cuplrit is a change in gcc when emitting section attributes. It only
shows up when building without optimization. Effect in Cygwin: ws2_32
functions failed to load.
In the original code the definition of "NO_COPY wsadata" was preceeding
an __asm__ block (the definition of the _wsock_init wrapper), while the
definition of "NO_COPY here" immediately follows the same assembler
block. When gcc-5.3.0 emits assembler code for the wsadata definition,
it emits the .data_cygwin_nocopy section attribute.
Next it emits the assembler output for the __asm_ block, entirely ignoring
its content. The __asm__ block adds a .text section definition.
Eventually gcc emits assembler code for the here definition. However,
apparently gcc still "knows" that it just emitted the .data_cygwin_nocopy
section attribute and so doesn't redefine it. Remember the __asm__? It
changed the section to .text.
So with gcc-4.9.3 we got:
.section .data_cygwin_nocopy,"w"
wsadata:
__asm__ block:
.text
.section .data_cygwin_nocopy,"w"
here:
With gcc 5.3.0 we now get:
.section .data_cygwin_nocopy,"w"
wsadata:
__asm__ block:
.text
here:
So "here" is now in the .text segment which is read-only. Hilarity ensues.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'newlib/libc/stdio/putwc_u.c')
0 files changed, 0 insertions, 0 deletions