perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Manko <john.ma...@gmail.com>
Subject Re: mod_perl segfaults, can't start Apache
Date Thu, 28 Jun 2012 14:33:17 GMT
Chris, that seems to have solved my problems.  Though, I used the package
env config as described in the Gentoo Wiki (
http://wiki.gentoo.org/wiki//etc/portage/env).  For those having this
problem, simple create the following problems and rebuild perl and mod_perl

/etc/portage/env/www-apache_mod_perl.conf:
CFLAGS="${CFLAGS} -D_FILE_OFFSET_BITS=64"

/etc/portage/package.env:
www-apache/mod_perl    www-apache_mod_perl.conf
dev-lang/perl        www-apache_mod_perl.conf

Now, I wasn't sure if adding the www-apache/mod_perl was required or not,
but I included it anyway.

So, mod_perl builds fine and apache is running.  I have other problems
related to Bugzilla and perl modules, but I don't think it's related.  I
will follow up if it is.

Thank you, everyone!  I could not have figured this out without your help.
Much appreciated.

On Wed, Jun 27, 2012 at 6:00 PM, Christopher Hall <chall0@gmail.com> wrote:

> I've been seeing the same problem on Gentoo.  I think this is the same
> issue as described at
> http://www.gossamer-threads.com/lists/perl/porters/263222 .
>
> When perl is compiled, the optimisation switches in the CFLAGS in
> make.conf are used, together with some autodetected ones.  When perl
> modules, such as mod_perl, are built later, the CFLAGS from the
> currently-installed perl are extracted, and used by themselves,
> without the autodetected ones.
>
> In this case, the perl compilation was using my CFLAGS, together with
> -D_FILE_OFFSET_BITS=64 (among other things).  But mod_perl (and all
> other perl modules written in C) are only picking up the CFLAGS.  This
> causes a difference in ABI, and hence the crash.
>
> If I add -D_FILE_OFFSET_BITS=64 to the end of my CFLAGS in make.conf,
> and recompile perl, then this define still gets added to the compiler
> switches -- where it does no harm being specified twice.  If I then
> recompile mod_perl, this now includes that switch, after which
> everything works fine.
>
> I've since created /etc/portage/env/dev-lang/perl with
> CFLAGS="$(CFLAGS) -D_FILE_OFFSET_BITS=64" to save having to alter the
> make.conf globally.  This approach ought to be sufficient, but I
> haven't had chance to test it.
>
> In case it's useful to anyone, here is the stack trace I was getting
> before fixing the problem:
>
> # gdb --args apache2 -D DEFAULT_VHOST -D PERL
> GNU gdb (Gentoo 7.4.1 p1) 7.4.1
> Copyright (C) 2012 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i686-pc-linux-gnu".
> For bug reporting instructions, please see:
> <http://bugs.gentoo.org/>...
> Reading symbols from /usr/sbin/apache2...Reading symbols from
> /usr/lib/debug/usr/sbin/apache2.debug...done.
> done.
> (gdb) r
> Starting program: /usr/sbin/apache2 -D DEFAULT_VHOST -D PERL
> warning: Could not load shared library symbols for linux-gate.so.1.
> Do you need "set solib-search-path" or "set sysroot"?
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/libthread_db.so.1".
>
> Program received signal SIGSEGV, Segmentation fault.
> 0xb7f0f174 in modperl_env_clear (my_perl=0x8227330) at modperl_env.c:100
> 100         HV *hv = ENVHV;
> (gdb) where
> #0  0xb7f0f174 in modperl_env_clear (my_perl=0x8227330) at
> modperl_env.c:100
> #1  0xb7efcfea in modperl_boot (my_perl=0x8227330, data=0x0) at
> mod_perl.c:100
> #2  0xb7e01681 in Perl_leave_scope (my_perl=0x8227330, base=0) at
> scope.c:970
> #3  0xb7e024f3 in Perl_pop_scope (my_perl=0x8227330) at scope.c:110
> #4  0xb7d5714b in S_parse_body (xsinit=0xb7efcf70 <modperl_xs_init>,
> env=0x0, my_perl=0x8227330) at perl.c:2270
> #5  perl_parse (my_perl=0x8227330, xsinit=0xb7efcf70
> <modperl_xs_init>, argc=2, argv=0x81862d0, env=0x0) at perl.c:1633
> #6  0xb7efd3a6 in modperl_startup (s=0x80b9c08, p=0x80b40a8) at
> mod_perl.c:255
> #7  0xb7efd31c in modperl_startup (s=0x80b9c08, p=0x80b40a8) at
> mod_perl.c:207
> #8  0xb7efd856 in modperl_init (base_server=0x80b9c08, p=0x80b40a8) at
> mod_perl.c:458
> #9  0xb7efda0e in modperl_hook_init (s=0x80b9c08, pconf=0x80b40a8,
> plog=<optimized out>, ptemp=<optimized out>) at mod_perl.c:631
> #10 modperl_hook_init (pconf=0x80b40a8, plog=0x80e2160,
> ptemp=0x80e4168, s=0x80b9c08) at mod_perl.c:608
> #11 0x0807d589 in ap_run_open_logs (pconf=0x80b40a8, plog=0x80e2160,
> ptemp=0x80e4168, s=0x80b9c08) at config.c:151
> #12 0x080680d3 in main (argc=5, argv=0xbfffe3e4) at main.c:680
> (gdb) list
> 95          }
> 96      }
> 97
> 98      void modperl_env_clear(pTHX)
> 99      {
> 100         HV *hv = ENVHV;
> 101         U32 mg_flags;
> 102
> 103         modperl_env_untie(mg_flags);
> 104
> (gdb) disassemble
> Dump of assembler code for function modperl_env_clear:
>   0xb7f0f150 <+0>:     sub    $0x1c,%esp
>   0xb7f0f153 <+3>:     mov    %esi,0x14(%esp)
>   0xb7f0f157 <+7>:     mov    0x20(%esp),%esi
>   0xb7f0f15b <+11>:    mov    %ebx,0x10(%esp)
>   0xb7f0f15f <+15>:    call   0xb7efc977 <__i686.get_pc_thunk.bx>
>   0xb7f0f164 <+20>:    add    $0x17e90,%ebx
>   0xb7f0f16a <+26>:    mov    %edi,0x18(%esp)
>   0xb7f0f16e <+30>:    mov    0x2ec(%esi),%eax
> => 0xb7f0f174 <+36>:    mov    0xc(%eax),%eax
>   0xb7f0f177 <+39>:    mov    0x14(%eax),%eax
>   0xb7f0f17a <+42>:    mov    0x8(%eax),%edi
>   0xb7f0f17d <+45>:    mov    %edi,%edx
>   0xb7f0f17f <+47>:    and    $0xe00000,%edi
>   0xb7f0f185 <+53>:    and    $0xff1fffff,%edx
>   0xb7f0f18b <+59>:    mov    %edx,0x8(%eax)
>   0xb7f0f18e <+62>:    mov    %eax,0x4(%esp)
>   0xb7f0f192 <+66>:    mov    %esi,(%esp)
>   0xb7f0f195 <+69>:    call   0xb7efc3d0 <Perl_hv_clear@plt>
>   0xb7f0f19a <+74>:    mov    0x2ec(%esi),%eax
>   0xb7f0f1a0 <+80>:    mov    0xc(%eax),%eax
>   0xb7f0f1a3 <+83>:    mov    0x14(%eax),%eax
>   0xb7f0f1a6 <+86>:    or     %edi,0x8(%eax)
>   0xb7f0f1a9 <+89>:    mov    0x10(%esp),%ebx
>   0xb7f0f1ad <+93>:    mov    0x14(%esp),%esi
>   0xb7f0f1b1 <+97>:    mov    0x18(%esp),%edi
>   0xb7f0f1b5 <+101>:   add    $0x1c,%esp
>   0xb7f0f1b8 <+104>:   ret
> End of assembler dump.
> (gdb) info registers
> eax            0x0      0
> ecx            0x0      0
> edx            0x822ed28        136506664
> ebx            0xb7f26ff4       -1208848396
> esp            0xbfffde40       0xbfffde40
> ebp            0x80b9c08        0x80b9c08
> esi            0x8227330        136475440
> edi            0x80b40a8        134955176
> eip            0xb7f0f174       0xb7f0f174 <modperl_env_clear+36>
> eflags         0x10282  [ SF IF RF ]
> cs             0x73     115
> ss             0x7b     123
> ds             0x7b     123
> es             0x7b     123
> fs             0x0      0
> gs             0x33     51
> (gdb) c
> Continuing.
>
> Program terminated with signal SIGSEGV, Segmentation fault.
> The program no longer exists.
> (gdb) q
>

Mime
View raw message