This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/AM3358:如何使用TI编译器将_c_int00设置为0x800万地址

Guru**** 2582405 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/600546/compiler-am3358-how-to-set-_c_int00-to-address-0x80000000-using-ti-compiler

部件号:AM3358
“Thread:SysBIOS”中讨论的其它部件

工具/软件:TI C/C++编译器

您好,

我已将程序从GCC移植到TI编译器,但无法将_c_int00设置为地址0x8000万。 如何做到这一点?

我已查阅了编译器的所有手册,XDC的,搜索了论坛和常见问题解答,如下所示:

processors.wiki.ti.com/.../Accessing_c_int00

在GCC上,地址在*。CFG中使用以下代码设置:

Program.sectMap[".c_int00"]=新Program.SectionSpec();
Program.sectMap[".c_int00"].loadAddress = 0x8000万;
Program.sectMap[".c_int00"].runAddress = 0x8000万;

在TI编译器下,它会向链接器脚本添加一行:

.c_int00:加载> 0x8000万,运行> 0x8000万

但最终结果是相同的-链接程序分配了错误的地址,如下所示,位于地图文件的此片段中:

入口点符号:"_c_int00" 地址:8518c020

我非常感谢就如何解决这一问题提出任何建议。

我使用的工具包括:

CCS 6.1 .1.0.0022万

TI编译器v 5.2 .................................................................5.

XDC工具3.31 .0.24_core

SYS/BIOS 6.42 .3.35

CPU为AM335x

我附上了链接程序脚本和映射文件的副本。

e2e.ti.com/.../Mapfile.txt

e2e.ti.com/.../8662.linker.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    符号"_c_int00"和节".c_int00"不一定相关。 您需要确保_c_int00是".c_int00"部分中的第一个地址。 否则,您需要更改链接程序命令文件,使其引用实际所在的_c_int00部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。

    似乎_c_int00在.text中-链接器将其列为:

    8518C020 boot.aea8f:boot.oea8f (.text)

    在链接程序脚本或*.cfg中需要什么才能将此函数移动到0x8000万?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试以下操作:

    .c_int00 { boot.oea8f(.text)}:加载> 0x8000万,运行> 0x8000万 

    这假定_c_int00位于boot.oea8f中.text的第一个地址。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。 我添加了您建议的行,并出现以下错误:

    "configPkg/linker.cmd",第135行:错误#1.0008万-D:找不到文件"boot.oea8f"

    "configPkg/linker.cmd",第135行:错误#1.0026万-D:需要输出部分,组或联合,而不是":"

    "configPkg/linker.cmd",第135行:警告#1.0068万-D:无匹配部分

    章节

    .c_int00 { boot.oea8f(.text)}:加载> 0x8000万,运行> 0x8000万 <--第135行

      .text:加载>> DDR3

      .stack:加载> DDR3

      组:加载> DDR3

      {

        .BSS:

        近端数据:

        .rodata:

      }

      binit:加载> DDR3

      .cinit:加载> DDR3

      init_array:load > dr3

      .const:加载>> DDR3

      数据:加载>> DDR3

      .fardata:加载>> DDR3

      交换机:加载>> DDR3

      sysmem:加载> DDR3

      far:加载>> DDR3

      .args:load > DDR3 align=0x4,fill = 0 {_argsize = 0x0;}

      CIO:加载>> DDR3

      arm.exidx:加载> DDR3

      arm.extab:加载>> dr3

      vectra:加载> DDR3

      TI.SysBIOS.family.arm.A8.muTableSection:Load > DDR3,type = NOINIT

      xdc.meta:加载> DDR3,类型= copy

    }

    我在地图文件中注意到'_c_int00'列在全局符号下。 即使地址在分配图的".text"部分中属于.text的范围内,它也不会列在".text"下。 这是否会对这个问题产生影响?

    我已附加MAP文件,命令文件和boot.asm文件:

    e2e.ti.com/.../boot.txte2e.ti.com/.../5165.linker.txte2e.ti.com/.../xDEV.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    结果是boot.oea8f位于归档文件中,因此您需要按如下方式指定它:

    .c_int00 { boot.aea8f<boot.oea8f>(.text)}:加载> 0x8000万,运行> 0x8000万 

    请仔细注意档案名称与档案中目标文件名称之间的差异('a'与'o')