[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