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

elfcandy 2007-08-30 04:40:43
我将自己的源代码用makefile文件编译连接时

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

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


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

.pdr

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


多谢各位大虾指点!
...全文
320 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddddawzy 2011-05-16
  • 打赏
  • 举报
回复
刚上网去搜了一下 .pdr 之存在于mips体系结构的elf文件里面。以前mips使用ecoff的时候,有一个section叫做.mdebug用来存放debug信息的。后来,mips使用elf文件格式的时候,.pdr就用来代替.mdebug的功能了。假如说你的这个可重定位文件中包含三个子程序,那么.pdr包含三个相应的数据项,每个数据项占32个字节。
ddddawzy 2011-05-16
  • 打赏
  • 举报
回复
.pdr 是procedure的缩写,.pdr存在于可重定位文件中,一般好像又来存放你当前这个可重定位文件包含的函数的相关数据。现在gcc编译出来的i386体系结构的可重定位文件里面好像没有.pdr这个section。我只知道在gcc-mips的编译出来的mips体系结构可重定位文件里面有这个section,这个sectione好象是从mips的ecoff文件格式中保留下来的,貌似是debug用的。elf标准里面这个.pdr不是系统保留的sectoin。
elfcandy 2007-09-04
  • 打赏
  • 举报
回复
请问configure.in是一个文件吗?

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

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

谢谢
elfcandy 2007-09-03
  • 打赏
  • 举报
回复
to:dai_weitao

我两个帖子是一个问题。
多谢指点了,呵呵。
elfcandy 2007-09-03
  • 打赏
  • 举报
回复
就是使用长跳转选项编译后,将代码放在两块地址距离较远的空间上。
进行连接。

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

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

谢谢。

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

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


hifrog 2007-09-03
  • 打赏
  • 举报
回复
我用readelf没有在x86的elf文件中找到pdr段,但是在linux kernel for mips上有这个段,
configure.in中把MIPS_STABS_ELF去掉就可以解决。
dai_weitao 2007-08-30
  • 打赏
  • 举报
回复
贴makefile.

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧