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 <[email protected]> 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
>