OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2734|回复: 3

关于编译器全局符号定位的问题

[复制链接]

7

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-9-16
在线时间
80 小时
发表于 2018-5-10 08:32:08 | 显示全部楼层 |阅读模式
1金钱
本人使用gnu工具链生成elf文件,但是不知道如何像armcc一样利用__attribute__((at(adress)))一样给变量定位地址,网上看到说一个是用__attribute__((section("section_name")))配合链接脚本定义自定义段,另一个是直接在链接脚本里对符号定位地址,但是前者并不能正确定位到我想要的地址,而后者是可行的,但不知道会不会对内部可见链接符号产生影响。所以想请教一下如何用后者来分配地址。使用的链接脚本如下:
SECTIONS
{
        varName = 0x20000000;
}
以上为利用链接脚本重定位varName; 实际运行可行;

SECTIONS
{
  mySection 0x20000000 : {
   *(mySection)
   }
}
以上为利用链接脚本定义mySection段,然后在全局变量定义时使用__attribute__((section("mySection")))进行重定位
该方法不可行;


本人计算机基础比较差,还请见谅

最佳答案

查看完整内容[请看2#楼]

参考了 http://sourceware.org/binutils/docs/ld/Scripts.html#Scripts 上GNU官方关于链接脚本的说明,脚本把地址定位在了VMA上不一定是绝对地址有操作系统且支持虚拟内存的话需要用AT(),而前者直接对全局符号指派地址,类似于at。实际上两者都可以 中文文档在这里 https://blog.csdn.net/yyww322/article/details/50827418/ 另外觉得link script比scatter file能做的事情多一些,但是比较麻烦
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-9-16
在线时间
80 小时
 楼主| 发表于 2018-5-10 08:32:09 | 显示全部楼层
参考了 http://sourceware.org/binutils/docs/ld/Scripts.html#Scripts 上GNU官方关于链接脚本的说明,脚本把地址定位在了VMA上不一定是绝对地址有操作系统且支持虚拟内存的话需要用AT(),而前者直接对全局符号指派地址,类似于at。实际上两者都可以

中文文档在这里  https://blog.csdn.net/yyww322/article/details/50827418/
另外觉得link script比scatter file能做的事情多一些,但是比较麻烦
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-11 01:43:06 | 显示全部楼层
帮顶
回复

使用道具 举报

7

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-9-16
在线时间
80 小时
 楼主| 发表于 2018-5-11 10:29:23 | 显示全部楼层

谢谢,这里的大佬都不睡觉的吗。。。
另外我是不是要深入了解一下ELF格式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 02:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表