Il controllo runtime (RTC) non riesce nella versione Developer 9/07. RTC esegue la strumentazione delle istruzioni di accesso alla memoria per il controllo degli accessi. Queste istruzioni sono gestite da un gestore SIGSEGV nella fase di esecuzione. Poiché RTC richiede il proprio gestore SIGSEGV e uno stack di segnali alternativo, ogni tentativo di installare un gestore SIGSEGV o uno stack sigaltstack viene ignorato o produce un errore EINVAL. Le chiamate al gestore SIGSEGV non possono essere annidate. Viene visualizzato il seguente messaggio di errore:
terminating signal 11 SIGSEGV |
Soluzione. Usare il comando rtc skippatch per ignorare la strumentazione della funzione interessata.
Ad esempio, i seguenti comandi dbx risolvono il problema di annidamento di segv:
rtc skippatch libc.so -f lrw_rdlock lrw_unlock lrw_wrlock _lock_try rtc skippatch libc.so -f read_lock_try read_unlock_try write_lock_try write_unlock_try rtc skippatch libc.so -f queue_unlink mqueue_spawner thread_queue_dump rtc skippatch libc.so -f thread_queue_fifo thread_queue_spin thread_queue_verify rtc skippatch libc.so -f __rw_unlock __rw_trywrlock __rw_workerscnt rtc skippatch libc.so -f __rwlock_destroy __rwlock_init |