[PPL-devel] FW: seg fault on override of a weak symbol in g++
Keith Clifford
kclifford at tranaptic.ca
Wed Oct 1 03:05:34 CEST 2014
Hi Roberto,
The ppl-1.2pre4 snapshot still has a seg fault but I made a couple of tweaks
and fixed the problem. See the attached patch. Basically the weak attributes
aren't needed with the other changes you made. With the patch I successfully
built ppl-1.2pre4 on Cygwin64. The next step is to use it when building gcc
but it may be a while before I complete that.
Thanks for your help and regards,
Keith
-----Original Message-----
From: Roberto Bagnara [mailto:bagnara at cs.unipr.it]
Sent: September 27, 2014 11:34 AM
To: Keith Clifford
Cc: 'The Parma Polyhedra Library developers' list'
Subject: Re: FW: seg fault on override of a weak symbol in g++
On 08/15/14 20:28, Keith Clifford wrote:
> One way of avoiding the whole issue and not having to worry about weak
> at all would be to move ppl_set_GMP_memory_allocation_functions() out
> of Init.cc into its own source file and include that file's object in
> the library. If the application defines
> ppl_set_GMP_memory_allocation_functions
> then the applications version will be used. If the application doesn't
> define it then the version from the library will be used.
>
> The problem that I'm seeing only occurs if istream is included in the
> same file where a weak symbol is both defined and referenced. As long
> as the weak definition is in a different file from where its
> referenced the problem doesn't occur.
Hello Keith. Sorry for the long delay. We have followed your advice.
You can test the Git head version or, if you prefer, use a just-uploaded PPL
1.2 snapshot available at
http://bugseng.com/products/ppl/download/ftp/snapshots/
Kind regards,
Roberto
> -----Original Message-----
> From: Roberto Bagnara [mailto:bagnara at cs.unipr.it]
> Sent: August 14, 2014 7:54 AM
> To: Keith Clifford
> Cc: The Parma Polyhedra Library developers' list
> Subject: Re: FW: seg fault on override of a weak symbol in g++
>
>
> On 08/05/14 01:07, Keith Clifford wrote:
>> This is just an update about the Seg Fault that I had building PPL
>> last week. The issue is in the mingw compiler under certain
>> circumstances which are described below if you're interested and in
>> the attached files. The compiler and your test in the configure
>> script indicate that the compiler supports weak symbols but it really
>> doesn't under specific circumstances which the PPL build found.
>> Anyway its in
> Cygwin's hands now.
>
> Hello Keith.
>
> thanks for the update. Please keep me posted. I am thinking that,
> even if Cygwin people fixes the issue, this will not happen until some
time.
> Perhaps we should change the configure script so as to perform a more
> precise detection. What do you think?
> Thanks again,
>
> Roberto
>
>> -----Original Message-----
>> From: Keith Clifford [mailto:kclifford at tranaptic.ca]
>> Sent: August 4, 2014 2:10 PM
>> To: 'cygwin at cygwin.com'
>> Subject: seg fault on override of a weak symbol in g++
>>
>> Hi,
>> I was trying to build the ppl 1.1 library and got a seg fault when
>> running one of the tests. I've narrowed it down to the attached test
case.
>>
>> System: CYGWIN_NT-6.1 Keith-PC 1.7.31(0.272/5/3) 2014-07-25 11:26
>> x86_64 Cygwin
>>
>> Both the following GCC's exhibit the problem Cygwin:
>> Using built-in specs.
>> COLLECT_GCC=i686-pc-mingw32-g++
>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-mingw32/4.7.3/lto-wrapper.ex
>> e
>> Target: i686-pc-mingw32
>> Configured with:
>> /usr/src/packages/mingw-gcc/64/mingw-gcc-4.7.3-1/src/gcc-4.7.3/config
>> u
>> re
>> --srcdir=/usr/src/packages/mingw-gcc/64/mingw-gcc-4.7.3-1/src/gcc-4.7.
>> 3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin
>> --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share
>> --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share
>> --docdir=/usr/share/doc/mingw-gcc -C --build=x86_64-pc-cygwin
>> --host=x86_64-pc-cygwin --target=i686-pc-mingw32
>> --without-libiconv-prefix --without-libintl-prefix
>> --with-sysroot=/usr/i686-pc-mingw32/sys-root
>> --with-build-sysroot=/usr/i686-pc-mingw32/sys-root
>> --enable-languages=c,c++,fortran,objc,obj-c++
>> --disable-sjlj-exceptions
>> --with-dwarf2 --enable-shared --enable-libgomp
>> --disable-win32-registry --enable-libstdcxx-debug
>> --disable-build-poststage1-with-cxx
>> --enable-version-specific-runtime-libs --disable-multilib
>> --enable-decimal-float=bid --disable-werror --enable-lto Thread model:
>> win32 gcc version 4.7.3 (GCC)
>>
>> Using built-in specs.
>> COLLECT_GCC=i686-w64-mingw32-g++
>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-w64-mingw32/4.8.3/lto-wrapper.e
>> x
>> e
>> Target: i686-w64-mingw32
>> Configured with:
>> /cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc-4.8.3-1/
>> s
>> rc/gcc
>> -4.8.3/configure
>> --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc
>> -
>> 4.8.3-
>> 1/src/gcc-4.8.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin
>> --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share
>> --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib
>> --datarootdir=/usr/share --docdir=/usr/share/doc/mingw64-i686-gcc
>> --htmldir=/usr/share/doc/mingw64-i686-gcc/html -C
>> --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin
>> --target=i686-w64-mingw32 --without-libiconv-prefix
>> --without-libintl-prefix
>> --with-sysroot=/usr/i686-w64-mingw32/sys-root
>> --with-build-sysroot=/usr/i686-w64-mingw32/sys-root
>> --disable-multilib --disable-win32-registry
>> --enable-languages=c,ada,c++,fortran,lto,objc,obj-c++
>> --enable-fully-dynamic-strings --enable-graphite --enable-libgomp
>> --enable-libquadmath --enable-libquadmath-support --enable-libssp
>> --enable-version-specific-runtime-libs --with-dwarf2 --with-gnu-ld
>> --with-gnu-as --with-tune=generic
>> --with-cloog-include=/usr/include/cloog-isl --with-system-zlib
>> --libexecdir=/usr/lib Thread model: win32 gcc version 4.8.3 (GCC)
>>
>>
>> When built with the default Cygwin compiler the problem doesn't occur.
>> Using built-in specs.
>> COLLECT_GCC=g++
>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/lto-wrapper.e
>> x
>> e
>> Target: x86_64-pc-cygwin
>> Configured with:
>> /cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.3-2/src/gcc-4.8.3/configur
>> e
>> --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.3-2/src/gcc-4.8.3
>> --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin
>> --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share
>> --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib
>> --datarootdir=/usr/share --docdir=/usr/share/doc/gcc
>> --htmldir=/usr/share/doc/gcc/html -C --build=x86_64-pc-cygwin
>> --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin
>> --without-libiconv-prefix --without-libintl-prefix --enable-shared
>> --enable-shared-libgcc --enable-static
>> --enable-version-specific-runtime-libs
>> --enable-bootstrap --disable-__cxa_atexit --with-dwarf2
>> --with-tune=generic
>> --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++
>> --enable-graphite --enable-threads=posix --enable-libatomic
>> --enable-libgomp --disable-libitm --enable-libquadmath
>> --enable-libquadmath-support --enable-libssp --enable-libada
>> --enable-libgcj-sublibs --disable-java-awt --disable-symvers
>> --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as
>> --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix
>> --without-libintl-prefix --with-system-zlib --libexecdir=/usr/lib
>> Thread
>> model: posix gcc version 4.8.3 (GCC)
>>
>> In the attached files in weak.cpp if the line
>> static ios_base::Init __ioinit;
>> is commented out the seg fault doesn't occur. Doing a disassembly of
>> weak.o (objdump -d weak.o) shows that the call includes a nonzero
>> offset that gets applied when the weak symbol is overridden by the
>> function in strong.o. The offset is zero if the above mentioned line
>> is
> commented out.
>>
>> Regards,
>> Keith
>>
>>
>
>
--
Prof. Roberto Bagnara
Applied Formal Methods Laboratory - University of Parma, Italy
mailto:bagnara at cs.unipr.it
BUGSENG srl - http://bugseng.com
mailto:roberto.bagnara at bugseng.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ppl-1.2pre4.patch
Type: application/octet-stream
Size: 1012 bytes
Desc: not available
URL: <http://www.cs.unipr.it/pipermail/ppl-devel/attachments/20140930/5abdae1a/attachment.obj>
More information about the PPL-devel
mailing list