Igor Sysoev Wrote:
-------------------------------------------------------
> On Wed, Sep 09, 2009 at 06:25:15AM -0400, dev-zero
> wrote:
>
> > Igor Sysoev Wrote:
> >
> --------------------------------------------------
> -----
> > > On Wed, Sep 09, 2009 at 05:27:47AM -0400,
> dev-zero
> > > wrote:
> > >
> > > > Igor Sysoev Wrote:
> > > >
> > >
> --------------------------------------------------
> > > -----
> > > > > On Tue, Sep 08, 2009 at 10:34:58AM -0400,
> > > dev-zero
> > > > > wrote:
> > > > >
> > > > > > Hi everyone
> > > > > >
> > > > > > When I try to start nginx-0.8.14 on a
> > > > > Sparc-Linux I get a "Bus Error":
> > > > > > # nginx -c /etc/nginx/nginx.conf
> > > > > > Bus error
> > > > > >
> > > > > > With 'strace' I was able to track it
> down a
> > > > > little:
> > > > > > [...]
> > > > > > open("/etc/nginx/nginx.conf",
> > > > > O_RDONLY|O_LARGEFILE) = 4
> > > > > > fstat64(4, {st_mode=S_IFREG|0644,
> > > st_size=1610,
> > > > > ...}) = 0
> > > > > > pread(4, Bus error
> > > > > >
> > > > > > Now, according to that I think the error
> > > might
> > > > > be in ngx_read_file where a u_char* is
> passed
> > > as a
> > > > > void* as second argument for pread, which
> in
> > > turn
> > > > > is probably a long and should therefore be
> > > aligned
> > > > > on sparc.
> > > > > > Even if that is the actual problem I
> have no
> > > > > idea how to fix it. Any ideas?
> > > > >
> > > > > Could you create coredump and run
> > > > >
> > > > > gdb /path/to/nginx /path/to/core
> > > > > bt
> > > > >
> > > >
> > > > Sure, here we go...
> > > >
> > > > The first bug is a segfault I've been
> > > experiencing a lot when doing a config check
> while
> > > the server is already running:
> > > >
> > > > Core was generated by `/usr/sbin/nginx -c
> > > /etc/nginx/nginx.conf -t'.
> > > > Program terminated with signal 11,
> Segmentation
> > > fault.
> > > >
> > > > #0 ngx_hash_add_key (ha=0xff82b270,
> > > key=0xf7ba5a4c, value=0xc960, flags=75334) at
> > > src/core/ngx_hash.c:814
> > > > 814 *name = *key;
> > > > #1 0x00000008 in ?? ()
> > > > (gdb)
> > > >
> > > > And the coredump+gdb-bt from the bus error
> > > mentioned before:
> > > >
> > > > Core was generated by `nginx -c
> > > /etc/nginx/nginx.conf -t'.
> > > > Program terminated with signal 10, Bus
> error.
> > > >
> > > > #0 ngx_palloc (pool=0xa1230, size=784) at
> > > src/core/ngx_palloc.c:126
> > > > 126 m = ngx_align_ptr(p->d.last,
> > > NGX_ALIGNMENT);
> > > > (gdb) bt
> > > > #0 ngx_palloc (pool=0xa1230, size=784) at
> > > src/core/ngx_palloc.c:126
> > > > #1 0x0003c608 in
> ngx_http_core_create_srv_conf
> > > (cf=0xffa87280) at src/core/ngx_array.h:43
> > > > Backtrace stopped: previous frame inner to
> this
> > > frame (corrupt stack?)
> > > > (gdb)
> > > >
> > > > And the original C/LDFLAGS I've been using
> to
> > > compile nginx:
> > > > CFLAGS="-O2 -mcpu=ultrasparc -pipe -ggdb"
> > > >
> > >
> LDFLAGS="-Wl,-O2,--hash-style=gnu,--sort-common,--
> > > as-needed"
> > > > Dropping the LDFLAGS didn't help, also
> didn't
> > > reducing -O2 to -O1 in CFLAGS.
> > > > GCC version is: 4.3.2, glibc: 2.9_p20081201,
> > > kernel: 2.6.31-rc9
> > >
> > > Could you rebuild nginx with
> > > CFLAGS="-DNGX_ALIGNMENT=16 ..."
> >
> > Done. Did not help, same result:
> > # nginx -c /etc/nginx/nginx.conf -t
> > Bus error (core dumped)
>
> If the bus error is at src/core/ngx_palloc.c:126
> again, then:
>
> bt
> p *p
>
And with running gdb directly on nginx I was finally able to get a useful backtrace:
rogue nginx-0.8.14 # gdb ./objs/nginx
GNU gdb 6.8
Copyright (C) 2008 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 "sparc-unknown-linux-gnu"...
(gdb) set follow-fork-mode child
(gdb) run -c /tmp/nginx.conf -t
Starting program: /root/nginx-0.8.14/objs/nginx -c /tmp/nginx.conf -t
Program received signal SIGBUS, Bus error.
0x00017a88 in ngx_palloc (pool=0xf9240, size=784) at src/core/ngx_palloc.c:126
126 m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
(gdb) bt
#0 0x00017a88 in ngx_palloc (pool=0xf9240, size=784) at src/core/ngx_palloc.c:126
#1 0x000679dc in ngx_array_init (array=0xfab30, pool=0xf9240, n=4, size=196) at src/core/ngx_array.h:43
#2 0x00067ba4 in ngx_http_core_create_srv_conf (cf=0xff8991f8) at src/http/ngx_http_core_module.c:2799
#3 0x00066880 in ngx_http_core_server (cf=0xff8991f8, cmd=0xda138, dummy=0xf5db0) at src/http/ngx_http_core_module.c:2344
#4 0x000332a4 in ngx_conf_handler (cf=0xff8991f8, last=1) at src/core/ngx_conf_file.c:393
#5 0x00032d14 in ngx_conf_parse (cf=0xff8991f8, filename=0x0) at src/core/ngx_conf_file.c:243
#6 0x0005e008 in ngx_http_block (cf=0xff8991f8, cmd=0xd9e80, conf=0xf59b8) at src/http/ngx_http.c:241
#7 0x000332a4 in ngx_conf_handler (cf=0xff8991f8, last=1) at src/core/ngx_conf_file.c:393
#8 0x00032d14 in ngx_conf_parse (cf=0xff8991f8, filename=0xf5308) at src/core/ngx_conf_file.c:243
#9 0x0002ee4c in ngx_init_cycle (old_cycle=0xff8992f0) at src/core/ngx_cycle.c:262
#10 0x00013edc in main (argc=4, argv=0xff8994d4) at src/core/nginx.c:317
(gdb) p *p
Cannot access memory at address 0x782d6a61
(gdb)