mips gdb未自动加载共享库信息

mips gdb未自动加载共享库信息,gdb,mips,backtrace,Gdb,Mips,Backtrace,我看到了gdb自动读取和加载符号。(如下面从ld-linux-x86-64.so.2读取的代码) 但是在我的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

我看到了
gdb
自动读取和加载符号。(如下面从
ld-linux-x86-64.so.2
读取的代码)

但是在我的
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
是否具有特定信息

我怀疑mips gdb不能很好地支持PIE。正如我所知,在PIC中,mips使用
rld_映射
而不是
DE_DEBUG
获取动态信息,但在饼图模式下,mips与其他架构类似,使用
DT_DEBUG

在dynamic linker中,有如下语句:

#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
,您将得到一个段错误,因为mips中的
.dynamic
部分是只读的.dynamic部分是可写的

如果您将mips的
.dynamic
部分更改为可写,并在动态链接器中打开
dtu DEBUG
处理,它可以工作,但仍然存在一些问题。例如,只读VMA是可写的,并且在派生子进程时需要更多的页面拷贝


我几周前就遇到了这个问题,我不知道mips gdb在安卓4.2中是否能正常工作。在Android 4.2中,所有c/c++文件都是用PIE构建的。

您的MIPS库是用调试信息构建的吗?您是使用gdbserver进行远程调试,还是在MIPS机器上运行gdb?
#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