用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

急问:用gcc编译源码后,输出的.pdr段里放的是什么东西?

我将自己的源代码用makefile文件编译连接时 

当连接的时候,报 
Not enough room for program header 
的错误,不知道是什么意思 

我的代码编译时使用了长跳转编译,将代码分别方在两块分离的地址上 


如果把代码放在连续的地址上,编译可以通过
用objdump命令看了一下,发现有一个段叫:

.pdr

看了ld文档后,发现.pdr段和program header有关系,
不知道该怎么处理这个段?
不再报
Not enough room for program header 
的错误。


多谢各位大虾指点!
昵称: elfcandy  时间: 2007-08-30 16:40:43
贴makefile.
昵称: dai_weitao  时间: 2007-08-30 16:58:43
就是使用长跳转选项编译后,将代码放在两块地址距离较远的空间上。
进行连接。

现在已经确定,是代码的问题,但是不知道怎样编写代码,才会在cygwin的GNU编译器下采用上述方法编译代码时出现错误。

有没有两个不同数据类型的变量,不做强制转换,直接赋值造成?

谢谢。

另外,我查看了LD手册, program header 与phdr有关,好像有一个段叫.pdr,是用来存放program header。但是手册上也讲了,
program header可以由系统默认设置。

是不是要改段.pdr的设置???


昵称: elfcandy  时间: 2007-09-03 00:07:54
to:dai_weitao 

我两个帖子是一个问题。
多谢指点了,呵呵。
昵称: elfcandy  时间: 2007-09-03 00:11:11
我用readelf没有在x86的elf文件中找到pdr段,但是在linux kernel for mips上有这个段,
configure.in中把MIPS_STABS_ELF去掉就可以解决。
昵称: hifrog  时间: 2007-09-03 01:14:39
请问configure.in是一个文件吗?

我现在在连接选项中增加-N后,可以连接通过。能给出-N连接选项一个比较好理解的解释吗?

我看过LD的说明文档,上面说加上-N后,会取消数据段的页对齐,数据段页对齐是什么意思?

谢谢
昵称: elfcandy  时间: 2007-09-04 10:28:20
.pdr 是procedure的缩写,.pdr存在于可重定位文件中,一般好像又来存放你当前这个可重定位文件包含的函数的相关数据。现在gcc编译出来的i386体系结构的可重定位文件里面好像没有.pdr这个section。我只知道在gcc-mips的编译出来的mips体系结构可重定位文件里面有这个section,这个sectione好象是从mips的ecoff文件格式中保留下来的,貌似是debug用的。elf标准里面这个.pdr不是系统保留的sectoin。
昵称: ddddawzy  时间: 2011-05-16 01:01:18
刚上网去搜了一下 .pdr 之存在于mips体系结构的elf文件里面。以前mips使用ecoff的时候,有一个section叫做.mdebug用来存放debug信息的。后来,mips使用elf文件格式的时候,.pdr就用来代替.mdebug的功能了。假如说你的这个可重定位文件中包含三个子程序,那么.pdr包含三个相应的数据项,每个数据项占32个字节。
昵称: ddddawzy  时间: 2011-05-16 01:18:32
发表评论
昵称:
内容:
验证: