MIPS GDB не загружает общую информацию о библиотеке автоматически
Я видел gdb
чтение и загрузка символов автоматически. (например, чтение кода ниже ld-linux-x86-64.so.2
)
----------
gdb 86exec 86core
...
Reading symbols from 86exec...done.
Illegal process-id: 86core.
[New Thread 14983]
[New Thread 14978]
[New Thread 14980]
[New Thread 14981]
[New Thread 14982]
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Core was generated by `./86exec'.
Program terminated with signal 11, Segmentation fault.
----------
Но по моему mips
Платформа Я не получаю это автоматическое чтение сделано.
---------
Reading symbols from /mipsexec...done.
[New LWP 1333]
[New LWP 1328]
[New LWP 1330]
[New LWP 1331]
[New LWP 1332]
Core was generated by `./mipsexec'.
Program terminated with signal 11, Segmentation fault.
----------
Я хотел знать, откуда эта информация.
Если это из основного файла, как я могу проанализировать, является ли мой mipscore
имеет конкретную информацию.
1 ответ
Я сомневаюсь, что MIPS GDB не поддерживает PIE хорошо. Как я знаю, в PIC, MIPS использовать rld_map
но нет DE_DEBUG
для динамической информации, но в режиме PIE, MIPS любит другие архитектуры, используя DT_DEBUG
,
В динамическом компоновщике есть такие выражения:
#if !defined __mips__
/* we disable for mips because normally this page is readonly
* and modifying the value here needlessly dirties a page.
* see this post for more info:
* http://uclibc.org/lists/uclibc/2006-April/015224.html */
if (dpnt->d_tag == DT_DEBUG)
dpnt->d_un.d_val = (unsigned long)debug_addr;
#endif
это утверждение в PIC в порядке, но не работает в PIE. Если вы удалите это #ifdef
, вы получите ошибку сегмента, потому что .dynamic
раздел в мипс только для чтения. .dynamic
раздел в arm и x86 и т.д. доступен для записи.
если вы измените .dynamic
раздел MIPS для записи и открытия DT_DEBUG
обработка в динамическом компоновщике, он работает, но все еще имеет некоторые проблемы. Например, только для чтения VMA доступен для записи, и ему нужно больше копий страниц, когда выполняется подпроцесс.
Я столкнулся с проблемой несколько недель назад, и я не знаю, хорошо ли работает mips gdb в Android 4.2 или нет. В Android 4.2 все файлы c/ C++ создаются с помощью PIE.