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?

ktoś
źródło
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:

4

Wygląda dokładnie tak samo jak ten problem: https://github.com/raspberrypi/linux/issues/766

Naprawiono cztery dni temu.

Doug Edey
źródło
Brzmi obiecująco. Przetestuję później. Dziękuję za informację.
somerr
@someonr sprawdziłeś?
tshepang
sudo apt-get update; sudo apt-get upgrade; sudo rpi-updatenaprawiono dla mnie problem, pozwalając mi używać continueihandle SIGILL nostop
morloch