Re: [squid-users] Bus Error and Seg. violation

From: David Flynn <Dave@dont-contact.us>
Date: Mon, 4 Jun 2001 21:44:48 +0100

----- Original Message -----
From: "Hany" <Hany@saudi.net.sa>
To: <squid-users@squid-cache.org>
Sent: Sunday, June 03, 2001 7:46 AM
Subject: [squid-users] Bus Error and Seg. violation

>
> hi,,
>
> when I run squid-2.4.STABLE1 without any parameter (using diskd). on High
> load I got this message
>
> FATAL: Received Segment Violation...dying.
>
> but when I run it with -CNd1 I got this message (with the same
> configuration)
> FATAL: Received Bus Error...dying.
>
> OS: FreeBSD4.2
> DiskController: Adaptec SCSI 29160N#

Read below to find out what a bus error is, but surficed to say, its
possible for the same event to trigger different signals at different times,
the normal stack traces should be conducted with gdb or your favorite
debugger and that will hopefully reveal the problem

>
> does any body know what might cause Bus Error?

A fatal failure in the execution of a machine language instruction resulting
from the processor detecting an anomalous condition on its bus. Such
conditions include invalid address alignment (accessing a multi-byte number
at an odd address), accessing a physical address that does not correspond to
any device, or some other device-specific hardware error. A bus error
triggers a processor-level exception which Unix translates into a "SIGBUS"
signal which, if not caught, will terminate the current process.

in additiono ther sources for SIGBUS are problems during swapout, errors
signaled
by the bus / cache hardware (not on Intel). For example a non-
recoverable cache error (-> ECC correction failed), bad memory or
a parity/ECC failure on MIPS' bus system could bring you this nasty
signal.

on intel arch:
$ grep SIGBUS /usr/src/linux/arch/i386/kernel/traps.c
DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN,
get_cr2())

so SIGBUS corresponds to proccessor exceptions 11 (segment not present,
which you can normally get only when allocating an ldt for wine) or
12 (stack fault), which is the interesting one. This last one may
happen either when you try to load the SS register, which is not frequent
or when you try to access the memory beyond the stack segment limit.
This last one is easily generated when accessing an array on the stack
with a wild pointer, but only when the machine instruction uses either
%ebp or %esp as the base register to access this memory, otherwise you get
exception 13 which translates to a SIGSEGV (oddities of the Intel
architecture).

also, from the mmap() man page :

the SIGBUS signal is sent when an Attempt to access a portion of the buffer
that does not correspond to the file (for example, beyond the end of the
file, including the case where another process has truncated the file).

> Hany
>

Dave

---------------------------------------
The information in this e-mail and any files sent with it is confidential to
the ordinary user of the e-mail address to which it was addressed and may
also be legally privileged. It is not to be relied upon by any person other
than the addressee except with the sender's prior written approval. If no
such approval is given, the sender will not accept liability (in negligence
or otherwise) arising from any third party acting, or refraining from
acting, on such information. If you are not the intended recipient of this
e-mail you may not copy, forward, disclose or otherwise use it or any part
of it in any form whatsoever. If you have received this e-mail in error
please notify the sender immediately, destroy any copies and delete it from
your computer system. Have a nice Day !
---------------------------------------------
Received on Mon Jun 04 2001 - 14:45:14 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 17:00:28 MST