Re: [PATCH] Re: libtool-2.4.2 is fine but libtool-2.4.6 very slow.

2015-09-24 Thread Pavel Raiskup
On Wednesday 23 of September 2015 16:09:49 Eric Blake wrote:
> On 09/23/2015 03:37 PM, Pavel Raiskup wrote:
> 
> > 
> >>From 5e8a4c5173f1aa0786e8eba15fb07bfe04b83862 Mon Sep 17 00:00:00 2001
> > From: Pavel Raiskup 
> > Date: Fri, 18 Sep 2015 23:17:07 +0200
> > Subject: [PATCH] libtoolize: fix infinite recursion in m4
> > 
> > Some projects use this construct in configure.ac:
> > 
> >   m4_define([version], m4_include([version])
> 
> Missing a )
> 
> The faulty package used:
> 
> m4_define([version], m4_include(version))

Thanks for catching the ')' typo!

> and the infinite recursion occurred _because_ the usage was underquoted.
> But as you wrote things here, you have sufficient quoting that you
> won't trigger infinite recursion.
> You need to drop the second [] for
> this to be an accurate representation of the failure.

I intentionally added the '[ ]' quotes there as that is something which
would look like correct usage, but it still goes to infinite recursion.

The problem is that while defining 'version':

  m4_define([version], m4_include([version]))

The expansion is like 'version => m4_include(version)'.  Then, usage of
'version' goes to infinite recursion.

> >   pkg_version=version
> > 
> > When the m4_include builtin is undefined (as was done in
> > libtoolize and extract-trace scripts), the call to this 'version'
> > macro gone to infinite recursion (until ENOMEM).  So rather
> 
> s/gone to infinite/enters an infinite/
> 
> > re-define all potentially dangerous macros by empty strings,
> > suggested by Eric Blake.
> > 
> > While we are on it, merge the macro-"blacklist" with similar list
> > implemented in gettext, except the 'm4_esyscmd'.  It's kept
> 
> s/except the/except for/
> 
> > defined because we already trace AC_INIT macro for package
> > version, while it is often specified by
> > m4_esyscmd(git-version-gen).  Similarly to m4_include, m4_esyscmd
> > might be opt-in-blacklisted in future.
> > 
> > References:
> > http://lists.gnu.org/archive/html/libtool/2015-09/msg0.html
> > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=764580
> > 
> 
> With the commit message touched up, it looks okay to me.

I'll fix the typos, thanks!

Pavel




Re: Bug: linking shared libraries on Cygwin results in undefined references to __stack_chck_guard for code compiled with -fstack-protector

2015-09-24 Thread Richard PALO
Le 02/11/13 23:45, Richard PALO a écrit :
> Le 02/06/10 05:24, Yaakov (Cygwin/X) a écrit :
>> On Sat, 15 May 2010 09:07:49 +0200
>> Bart Van Assche  wrote:
>>> This behavior has been observed with libtool version 2.2.6.
>>
>> Bug confirmed.  When code is compiled with -fstack-protector{,-all},
>> GCC "emits extra code to check for buffer overflows, such as stack
>> smashing attacks".  This extra code uses symbols from libssp, and
>> therefore (at least) Cygwin's GCC specs contain:
>>
>> *link_ssp:
>> %{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}
>>
>> Therefore, when libtool fails to pass -fstack-protector{,-all} at link
>> stage, the link fails.
>>
>> Patch attached.  (Yes, I have a copyright assignment on file.)
>>
>>
>> Yaakov
>> Cygwin/X
>>
> 
> I've done some limited testing of this patch on a SunOS distro with 
> pkgsrc, and it certainly helps a number of cases since it is gcc that 
> generates the necessary '-lssp_nonshared -lssp' libs for linking (at 
> least in absence of '-nostdlib').
> 
> Please include in the upcoming version.
> 
> 
> 
> 

I'd like to propose a slight modification this which, in addition, seems to get 
over the
issue (at least on solaris) of c++ shared libraries linking '-nostdlib'.  

This could easily be adapted for other hosts using g++. Note, it is harmless if 
'-dumpspecs'
or no spec with fstack-protector* is available.

It appears there was no warm welcome in tossing the '-nostdlib' setup for g++ 
shared libraries 
for solaris, so this seems to be a reasonable workaround.

-- 
Richard PALO

>From 5dfcf84c8243441f30a3c852791b8d46bc4d2c53 Mon Sep 17 00:00:00 2001
From: Richard PALO 
Date: Thu, 24 Sep 2015 13:23:56 +0200
Subject: [PATCH] workaround for -nostdlib with -fstack-protector on solaris

---
 build-aux/ltmain.in | 22 --
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
index 0c40da0..7a6356b 100644
--- a/build-aux/ltmain.in
+++ b/build-aux/ltmain.in
@@ -5364,8 +5364,7 @@ func_mode_link ()
   # -stdlib=*select c++ std lib with clang
   -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
   -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-  -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
-  -specs=*)
+  -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*|-specs=*)
 func_quote_for_eval "$arg"
 	arg=$func_quote_for_eval_result
 func_append compile_command " $arg"
@@ -5374,6 +5373,25 @@ func_mode_link ()
 continue
 ;;
 
+  -fstack-protector*)
+func_quote_for_eval "$arg"
+arg=$func_quote_for_eval_result
+func_append compile_command " $arg"
+func_append finalize_command " $arg"
+func_append compiler_flags " $arg"
+
+# Explicitly add solaris ssp libs to postdeps to counter
+# linking with g++ -nostdlib when supplied -fstack-protector*
+test CXX = "$tagname" && {
+  case $host_os in
+  solaris*)
+func_append postdeps " `$compile_command -dumpspecs 2>/dev/null | $SED -n '/fstack-protector/{s/^.*://;s/}$//;p;}'`"
+;;
+  esac
+}
+continue
+;;
+
   -Z*)
 if test os2 = "`expr $host : '.*\(os2\)'`"; then
   # OS/2 uses -Zxxx to specify OS/2-specific options
-- 
2.5.2



Re: [PATCH] Re: libtool-2.4.2 is fine but libtool-2.4.6 very slow.

2015-09-24 Thread Hiroyuki Sato
Hello Pavel.

Thank you for your advice.
Workaround worked perfectly!!.
https://github.com/groonga/groonga/commit/7d7a62a2fba74334b23d0021a9a9e78da046b21c

Thanks.


2015年9月19日(土) 17:09 Pavel Raiskup :

> Hi Hiroyuki Sato,
>
> On Wednesday 02 of September 2015 16:00:34 Hiroyuki Sato wrote:
> > This configure.ac is extreme slow on libtool-2.4.6.
> > But It run smoothly on libtool-2.4.2.
> > https://github.com/groonga/groonga/blob/master/configure.ac
>
> thanks for reproducer!
>
> This _really_ looks like issue mentioned [1], though the thread is
> believed to be resolved (with existing small slowdown between
> libtool-2.4.5 and 2.4.2).  Let me CC Robert whether this patch does not
> actually fix the "1 sec" slowdown of libtoolize.
>
> > Could you tell me how to fix this problem?.
>
> You can workaround/fix this by:
> -m4_define([nginx_version], m4_include(nginx_version))
> -NGINX_VERSION=nginx_version
> +NGINX_VERSION=m4_include([nginx_version])
>
> See the "recursion" in 'nginx_version' definition.  Its not recursion
> usually (because nginx_version is not defined in the time of m4_define)
> -- but libtoolize script does 'm4_undefine(m4_include)' before
> evaluating configure.ac.
>
> > Is this libtool's Bug?
>
> I would say so, see the attached patch I'll push very soon (if there are
> no objections).
>
> > * OS OSX 10.10.5. and CentOS7
>
> Should be IMO reproducible everywhere.
>
> [1] http://lists.gnu.org/archive/html/libtool/2015-02/msg0.html
>
> Thanks, Pavel
> --
>
> > Thanks.
> >
> > libtool-2.4.6
> >
> >   time /tmp/libtool246/bin/libtoolize --verbose --copy --force
> >   libtoolize: found 'configure.ac'
> >   libtoolize: export M4='/usr/bin/gm4'
> >
> >   It takes around 10 minutes.
> >
> > libtool-2.4.2
> >
> >   time /tmp/libtool242/bin/libtoolize --verbose --copy --force
> >   libtoolize: rm -f './ltmain.sh'
> >   libtoolize: putting auxiliary files in `.'.
> >   libtoolize: copying file from
> `/tmp/libtool242/share/libtool/config/ltmain.sh'
> >   libtoolize: rm -f './libtool.m4'
> >   libtoolize: rm -f './ltoptions.m4'
> >   libtoolize: rm -f './ltsugar.m4'
> >   libtoolize: rm -f './ltversion.m4'
> >   libtoolize: rm -f './lt~obsolete.m4'
> >   libtoolize: Not copying `./argz.m4', libltdl not used.
> >   libtoolize: putting macros in `.'.
> >   libtoolize: copying file from
> `/tmp/libtool242/share/aclocal/libtool.m4'
> >   libtoolize: Not copying `./ltdl.m4', libltdl not used.
> >   libtoolize: copying file from
> `/tmp/libtool242/share/aclocal/ltoptions.m4'
> >   libtoolize: copying file from
> `/tmp/libtool242/share/aclocal/ltsugar.m4'
> >   libtoolize: copying file from
> `/tmp/libtool242/share/aclocal/ltversion.m4'
> >   libtoolize: copying file from
> `/tmp/libtool242/share/aclocal/lt~obsolete.m4'
> >   libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to
> configure.ac and
> >   libtoolize: rerunning libtoolize, to keep the correct libtool macros
> in-tree.
> >
> >   real 0m1.003s
> >   user 0m0.364s
> >   sys 0m0.540s
> >
> >
> >
>