Heiko Schlittermann heiko@schlittermann.de schrieb:
Ich bekomme folgende Fehlermeldung beim Ausfuehren meines C-Programms:
Program received signal SIGBUS, Bus error. 0xff2c607c in t_delete ()
Ist SIGBUS die Entsprechung zu SIGSEV beim SunOS? Denn ich kenne eigentlich nur SIGSEV bei malloc- und anderen Speicherproblemen.
Meines Wissens wird SIGBUS ausgeloest, wenn irgendwelche Zugriffe auf dem Speicherbus schieflaufen, z.B. Zugriff auf Worte mit ungeraden Adressen. SIGSEGV kommt, wenn die Adresse an sich ungueltig ist, unabhaengig vom Zugriff.
Da gibt es aber z.T. Differenzen zwischen den einzelne Betriebssystemen...
Holger
Am Donnerstag, dem 16. August 2001 um 20:11:47, schrieb Holger Dietze:
Heiko Schlittermann heiko@schlittermann.de schrieb:
Ist SIGBUS die Entsprechung zu SIGSEV beim SunOS? Denn ich kenne eigentlich nur SIGSEV bei malloc- und anderen Speicherproblemen.
Meines Wissens wird SIGBUS ausgeloest, wenn irgendwelche Zugriffe auf dem Speicherbus schieflaufen, z.B. Zugriff auf Worte mit ungeraden Adressen. SIGSEGV kommt, wenn die Adresse an sich ungueltig ist, unabhaengig vom Zugriff.
Misalignment gibt es auf x86-Hardware nicht, auf Sparc ev. schon. D. h. SIGBUS sollte auf den meisten Linux-Rechnern tatsaechlich unbekannt sein.
Torsten
Torsten Werner twerner@intercomm.de schrieb:
Misalignment gibt es auf x86-Hardware nicht, auf Sparc ev. schon. D. h. SIGBUS sollte auf den meisten Linux-Rechnern tatsaechlich unbekannt sein.
Ab 486 kann der Prozessor das Alignment im User Mode (Privilege Level 3) pruefen. Man schalte das AC-Bit in den Flags ein, mache einen unpassenden Speicherzugriff und schon hat man ein SIGBUS am Hals. Ja, man kann als User wirklich dieses Bit mittels popfd setzen.
Holger
On Thu, Aug 16, 2001 at 08:11:47PM +0200, Holger Dietze wrote:
Ist SIGBUS die Entsprechung zu SIGSEV beim SunOS? Denn ich kenne eigentlich nur SIGSEV bei malloc- und anderen Speicherproblemen.
Meines Wissens wird SIGBUS ausgeloest, wenn irgendwelche Zugriffe auf dem Speicherbus schieflaufen, z.B. Zugriff auf Worte mit ungeraden Adressen. SIGSEGV kommt, wenn die Adresse an sich ungueltig ist, unabhaengig vom Zugriff.
Völlig richtig. Sowohl mit SunOS als auch mit Linux auf Sparc bekommst du einen bus error beim Dereferenzieren von z.B. (int *)1 und einen seg fault bei (int *)4.
Reinhard
lug-dd@mailman.schlittermann.de