Jak debugować bez „Program odebrał sygnał SIGILL” za pomocą jądra 3.18 (działa 3.12)?


10

Próbowałem debugować program z gdb w Raspbian, ale dostaję tylko:

Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3

Nie pomaga ustawić SIGILLuchwyt na nostop( handle SIGILL nostop):

Program received signal SIGILL, Illegal instruction.

Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.

Wszystko, co otrzymuję, to:

#0  0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1  0x00000000 in ?? ()

Jeśli uruchomię program poza gdb, otrzymam normalny wyjątek C ++ (który chciałbym debugować).

Wszystkie oprogramowanie zostało zaktualizowane do najnowszej wersji z repozytoriów raspbian. Następnie wypróbowałem jądro fundacji raspberry pi „3.18.9+”, a także jądro raspbain „3.18.0-trunk-rpi” (potrzebuję niestandardowych modułów jądra). Mogę bez problemu debugować ten sam program na głównym komputerze.

Aktualizacja: Debugowanie działa zgodnie z oczekiwaniami z jądrem „3.12-1-rpi”.

Co powoduje ten błąd?


Próbowałeś handle SIGILL pass nostop?
mpromonet,

@mpromonet Ponieważ passjest domyślnie ustawiony, nie powinno to robić żadnej różnicy i nic nie zmieniło. Taki sam wynik jak w przypadkuhandle SIGILL nostop
ktoś

I nie ma znaczącego backtrace ( bt)? Myślę, że musisz pomyśleć o zapewnieniu większego kontekstu, jeśli poważnie oczekujesz, że ktoś wyjaśni „Co powoduje ten błąd?” oparty tylko na niedozwolonej instrukcji w linkerze / module ładującym ( ld-linux-armhf).
złotowłosa

Nie mogłem uzyskać żadnego znaczącego śladu wstecznego (patrz edytowane pytanie). Spróbuję stworzyć mały przykład. Ponadto jestem zdezorientowany, że nie otrzymuję nielegalnego kodu operacyjnego bez gdb.
Someonr

1
stos wydaje się rozbity, valgrind może pomóc?
mpromonet,

Odpowiedzi:


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.