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.

[参考译文] F29H859TU-Q1:帮助调试工程代码中的链接器错误#10483-D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1613878/f29h859tu-q1-help-debugging-linker-error-10483-d-in-project-code

器件型号: F29H859TU-Q1

我在代码中的链接步骤期间看到以下错误。  

[9]错误#10483-D:不允许从输出段“safetyModuleD_codeAPR_Flash"对“对未受保护符号“_DebugP_logZone"进行“进行未受保护调用:SECURE_GROUP 不匹配;调用位于 SECURE_GROUP “CPU1_STACK2_STACK"中“中、被调用者位于 SECURE_GROUP “SBCommonCode_STACK_COMMAND_SECURE"中“中、因为链接器值不匹配;链接器使用链接器变量; 重定位在文件“.text.cmpss_test_cmpss_ctrip"中“中/sdl/sdl_cmpss_ctrip.o 偏移量为 0x000084 的“R_C29_PCREL32"中“中、ID (6) 映射到输出段“safetyModuleD_codeAPR_Flash"表示“表示对文件“./DebugP_output"中“中未受保护的符号“_DebugP_LogZonZon"的“的未受保护调用。

相关的两个安全组都在链接器命令文件中指定为“public"。“。 我的理解是链接器会添加必要的 trampoline/landing pad 以使该调用安全。 为什么这是一个未受保护的呼叫错误?

linker.cmd 代码片段:

  SAFETYMODULED_CODEAPR_FLASH     :origin = 0x10029000、length = 0x00003000
                     SECURE_GROUP (CPU1_STACK2_STACK、PUBLIC、
                     读取=(SAFETYMODULED_DATAAPR_RO、
                     SHAREDMEM_PROTECTELATEVARS_APR)、
                     写入=(SAFETYMODULED_DATAAPR_RW、
                     SHAREDMEM_CONTROLLVARS_APR、
                     PERIPHAUTOREGION2、
                     PERIPHAUTOREGION5、
                     PERIPHAUTOREGION6、
                     PERIPHAUTOREGION8、
                     PERIPHAUTOREGION9、
                     PERIPHAUTOREGION14、
                     PERIPHAUTOREGION16、
                     PERIPHAUTOREGION17、
                     PERIPHAUTOREGION19、
                     PERIPHAUTOREGION21、
                     PERIPHAUTOREGION22、
                     PERIPHAUTOREGION24、
                     PERIPHAUTOREGION25、
                     PERIPHAUTOREGION26、
                     PERIPHAUTOREGION28))
 
  CPU1_COMMONCODEMODULE_CODEAPR_FLASH:origin = 0x10015000、length = 0x00012000
                     SECURE_GROUP (SBOX_CommonCode_stack_COMMONCODE、public、
                     读取=(CPU1_COMMONCODEMODULE_DATAAPR_RO)、
                     写入=(CPU1_COMMONCODEMODULE_DATAAPR_RW)

 

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

    我通过一个单独的信道收到了我的答案。 在此处记录以供参考。

    只要牢记用户指南中的以下限制、就支持参数传递。 https://software-dl.ti.com/codegen/docs/c29clang/rel2_0_0_STS/compiler_manual/security/indexC29.html

     “具有可变实参的函数或传递或返回结构体和/或非基本类型的函数根据 C29x ABI 的规则使用栈进行存储。 此类函数不能成为栈间调用的被调用方、因为栈指针会发生变化。“

    链接器无法解析 SECURE_GROUP 不匹配、因为“_DebugP_logZone"将“将堆栈用于参数和/或返回值;要解决此问题、请确保“_DebugP_logZone"仅“仅使用寄存器来表示参数、或将其移至兼容的 SECURE_GROUP。