[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

Re: Apache 1.3.9 + mod_perl 1.21 + Solaris 2.7 dumps core



Alan Burlison wrote:

> $ httpd -X
> Segmentation Fault(coredump)
> 
> I thought this was the old 'apache & modperl use a different malloc'
> problem, so I recompiled Perl with -Uusemymalloc, along with all the
> other installed modules.

My config:
Perl 5.005_03
Apache 1.3.9
mod_perl 1.21
Solaris 2.7

I've tracked this down a bit further.  It only happens if you
dynamically link libperl.so to Apache - statically linked it works
fine.  I've built Perl, Apache, modperl and Data::Dumper with debugging,
and the core dump is happening in the first line of boot_Data::Dumper. 
I've run Dumper.c through cc -E so I can see exactly where the problem
is.  Here's the stack trace

main(argc = 2, argv = 0xffbef77c)
standalone_main(argc = 2, argv = 0xffbef77c)
ap_read_config(p = 0x2c8f18, ptemp = 0x443e88, confname = 0xfa0e8
"conf/httpd.conf")
ap_process_resource_config(s = 0x2c8f40, fname = 0x2ca3e8
                           "/home2/web/apache_1.3.9/conf/httpd.conf",
                            p = 0x2c8f18, ptemp = 0x443e88)
ap_srm_command_loop(parms = 0xffbef568, config = 0x2c9ad8)
ap_handle_command(parms = 0xffbef568, config = 0x2c9ad8, l = 0xffbed47c
"PerlModule Apache::Status")
invoke_cmd(cmd = 0xee55a23c, parms = 0xffbef568, mconfig = 0x2ca690,
args = 0xffbed495 "")
perl_cmd_module(parms = ???, dummy = ???, arg = ???) (optimized)
perl_require_module(Perl_mod = ???, s = ???) (optimized)
perl_eval_sv(sv = 0x440da0, flags = 2)
Perl_runops_debug()
Perl_pp_entersub()
boot_Data__Dumper(cv = 0x5c02e0)

The value of the ax variable in the XSUB is being set to -316718320,
which looks wrong to me, and causes subsequent code like the expression
"PL_stack_base [ ax + ( 0 ) ]" to give illegal addresses.

ax is calculated as "mark - PL_stack_base + 1", where mark=0x6,
PL_stack_base=0x4fcd78.  mark is in turn calculated from "PL_stack_base
+ ( * PL_markstack_ptr -- )", where PL_stack_base=0x4fcd78 and
*PL_markstack_ptr=7

Obviously PL_markstack_ptr is bogus, but my knowledge of the arcane
mysteries of the perl stack is limited to say the least.

Could somebody with the requisite pointy hat make some suggestions as to
how I can track this down further?

Many thanks,

Alan Burlison


Follow-Ups from:
Ilya Zakharevich <ilya@math.ohio-state.edu>

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]