"bus error" on Linux Sparc

dev-zero nginx-forum at nginx.us
Wed Sep 9 15:42:18 MSD 2009


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

To make sure it isn't my CFLAGS or LDFLAGS I built it from the a freshly unpacked tarball with the following options (btw, not all options seem to trigger the bug equally often):

# CFLAGS="-DNGX_ALIGNMENT=16 -mcpu=v9 -O -pipe -ggdb" ./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access_log --error-log-path=/var/log/nginx/error_log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --with-md5-asm --with-sha1-asm --with-rtsig_module --with-select_module --with-poll_module --with-file-aio --with-ipv6 --with-http_ssl_module --without-pcre --with-http_addition_module --with-http_dav_module --with-http_gzip_static_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_map_module --without-http_referer_module --without-http_rewrite_module --without-http_proxy_module --without-http_memcached_module --without-http_limit_zone_module --without-http_limit_req_module --without-http_upstream_ip_hash_module
[...]
# make
[...]
# ./objs/nginx -c /etc/nginx/nginx.conf -t
Bus error (core dumped)
# gdb ./objs/nginx core 
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
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"...
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /usr/lib/libssl.so.0.9.8...done.
Loaded symbols for /usr/lib/libssl.so.0.9.8
Reading symbols from /usr/lib/libcrypto.so.0.9.8...done.
Loaded symbols for /usr/lib/libcrypto.so.0.9.8
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libz.so.1...done.
Loaded symbols for /lib/libz.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libnss_compat.so.2...done.
Loaded symbols for /lib/libnss_compat.so.2
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/libnss_nis.so.2...done.
Loaded symbols for /lib/libnss_nis.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Core was generated by `./objs/nginx -c /etc/nginx/nginx.conf -t'.
Program terminated with signal 10, Bus error.

#0  ngx_palloc (pool=0xa7ff8, size=0) at src/core/ngx_palloc.c:126
126	            m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
(gdb) p *p
Cannot access memory at address 0x61746f6d
(gdb) 

Maybe this gives another hint:
# ./objs/nginx -c /etc/nginx/nginx.conf -t
Bus error (core dumped)
# ./objs/nginx -c /tmp/nginx.conf -t
the configuration file /tmp/nginx.conf syntax is ok
: 8192 worker_connections are more than open file resource limit: 1024
configuration file /tmp/nginx.conf test is successful
# ./objs/nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
: 8192 worker_connections are more than open file resource limit: 1024
configuration file /etc/nginx/nginx.conf test is successful

For the same configuration file.

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,5969,6088#msg-6088






More information about the nginx mailing list