SIGSEGV, Solaris 10, Sparc
-
Hallo,
ich hänge bei der Fehlersuche einer unserer Libraries die von Kunden in dessen Applikationen verbaut wird. Nach Monaten Laufzeit bekommen wir SIGSEGV, ist wohl in unserem Code beim Kopieren eines Objektes ( C++ ). Ich vermute ein Ressourcenproblem.
Der Server hat zwar 8GB RAM ( 4x Sparc IIIi ), OS und Applikation ist aber jeweils 32bit, getconf LONG_BIT liefert 320xfeca5c64: ld [%o0], %g1
0xfeca5c68: ld [%g1 + 0x14], %g1
%o0 = 0x000000010e85011c
%g1 = 0x0000000000000000
0xe85011c: unimp 00xfeca5c68 ist die Stelle des Absturzes. Im Register %o0 steht eine Adresse die nicht mehr im 32bit Adressraum liegt. Das Core-File und den Code habe ich bereits mehrfach rauf und runter durch, und bin für jeden zusätzlichen Hinweis dankbar der das Problem einkreist. Also, ist %o0 verdächtig, und was könnte man daraus ableiten?
Gruß,
Ingo
-
So wohl nicht viel...
Wenn etwas zu einer Adresse nahe 0 gespeichert werden soll, ist das wahrscheinlich genau so verdaechtig wie der Versuch, etwas mit einem Pointer groesser als der Adressraum zu laden...
Ich nehme an, bei dieser Syntax ist der 1. Operand die Quelle?
Schau doch mal, wo %o0 gesetzt wird und dann arbeite dich rueckwaerts vor, wo Muell in die zur Berechnung benutzten Variablen geschrieben worden sein koennte.
-
Ich würde versuchen, die fehlerhafte Funktion im Map File anhand der Adressen 0xfeca5c64 und 0xfeca5c68 zu identifizieren. Die Frage ist dann vielleicht noch, wie erzeugt man so ein Map File...