URN Logo
UNIX Resources » Linux » China Linux Forum » CPU 与 编译器 » 8 » 请问怎样连接,才能让bss段不占空间
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
请问怎样连接,才能让bss段不占空间
请问怎样连接,才能让bss段不占空间 - dswei [2005-06-16 11:58 | 450 byte(s)]
 
 
 
 
 
Re: 请问怎样连接,才能让bss段不占空间 - dswei [2005-06-17 17:55 | 1,856 byte(s)]
 
 
Subject: 请问怎样连接,才能让bss段不占空间
Author: dswei    Posted: 2005-06-16 11:58    Length: 450 byte(s)
[Original] [Print] [Top]
我的lds文件为:
SECTIONS {

. = 0x30004000;

.init : TA(0) { head.o main.o }

}

在main.c中定义了一个数组:
long test[500];

这样连接出来的binary文件比较大,我看其反汇编,发现代码是比较少的,只是文件的后面被扩展了500*4字节的空间。
请问怎样设置连接参数把这500*4去掉,代码是写到flash中去的。
谢谢

[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: BNN    Posted: 2005-06-17 01:31    Length: 140 byte(s)
[Original] [Print] [Top]
bss section should by default not occupy space at all. Your linker script must have some defects.
Please post out all your scripts.
----
天若有情天亦老,人间正道是沧桑。
[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: dswei    Posted: 2005-06-17 11:27    Length: 860 byte(s)
[Original] [Print] [Top]
1.Makefile如下:
leds : head.S main.c
arm-linux-gcc -c -o head.o head.S
arm-linux-gcc -c -o main.o main.c
arm-linux-ld -Ttest.lds head.o main.o -o leds_tmp.o
arm-linux-objcopy -O binary -S leds_tmp.o leds
arm-linux-objdump -D -b binary -m arm leds >disassemble.s
clean:
rm -f leds *.o

2、test.lds如下:
SECTIONS {
. = 0x30004000;
.init : AT(0) { head.o main.o}
}

3、head.S如下:
.text
.global _start
_start:
ldr sp, =1024*4
bl main
halt_loop:
b halt_loop

4、main.c如下:

long data[500];

int main()
{
while(1);
return 0;
}
[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: dswei    Posted: 2005-06-17 11:38    Length: 284 byte(s)
[Original] [Print] [Top]
谢谢BNN!
lds改为:
SECTIONS {
. = 0x30004000;
.text : AT(0) { *(.text) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }

}
难道前面那个lds文件不能分辨bss段吗?
[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: BNN    Posted: 2005-06-17 11:54    Length: 126 byte(s)
[Original] [Print] [Top]
很高兴问题解决了。

Please try to read something about linker scripts tutorial and so on. It is very useful.
----
天若有情天亦老,人间正道是沧桑。
[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: teawater    Posted: 2005-06-17 11:59    Length: 39 byte(s)
[Original] [Print] [Top]
你不会是要把data和text也放到flash里吧?
----
读了这么多年的书 还是觉得幼儿园好混
[Original] [Print] [Top]
Subject: Re: 请问怎样连接,才能让bss段不占空间
Author: dswei    Posted: 2005-06-17 17:55    Length: 1,856 byte(s)
[Original] [Print] [Top]
碰都一个奇怪的问题,查“Using LD, the GNU linker - Table of Contents.htm”也没发现答案:
1、我的程序有一个unsigned long const val[ ]数组(这个称为A),还有一些直接使用字符串做参数的函数,比如strcpy(pstr,"hello")("hello"这类字符串称为B)。编译后,A、B都属于rodata段吧?暂且这么认为
2、使用如下lds文件连接:
SECTIONS {
. = 0x30004000;
.text : { *(.text) }
/* .rodata ALIGN(4) : { *(.rodata) } */
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}

结果很奇怪:
lds文件中是否使用“.rodata ALIGN(4) : { *(.rodata) }” A是否为const 生成文件大小
1、 YES NO 5K
2、 YES YES 5K
3、 NO YES 11K
4、 NO NO 800多M
查看反汇编码,
(1) 3与1、2不同是因为:3的rodata段被放在bss段后面,所以多了bss段的6K数据(我定义了一个比较大的全局数组)。
(2) 1、2没分别是因为:bss都是在最后面。
(3) 我不明白的是4,怎么来的800多M?0x30004000大约等于800M,这之间有什么关系呢?
(4) 我对rodata段存放的位置很困惑,有时候发现它放在文件的开头,有时候在末尾:请原谅我不能把代码帖出来,我试图找到最小集合,但文件实在太多了。
(5) ld手册说rodata默认为text段,但从上面看来并非如此

请各位给点建议,我看的资料只有对ld命令进行介绍的,但它们都未涉及“段”的介绍。如果太麻烦,推荐点资料也行!谢谢
[Original] [Print] [Top]
« Previous thread
FYI: 十级软件技术人才
CPU 与 编译器
8
Next thread »
对于移植的gcc,有什么好的办法来进行测试?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:47:27, cost 0.046820878982544 ms.