首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVR libgcc中缺少的数学符号

AVR libgcc中缺少的数学符号
EN

Stack Overflow用户
提问于 2015-03-24 00:01:27
回答 1查看 406关注 0票数 1

我有一些AVR组件,是为一个未知版本的GCC而产生的。我可以将这个源代码组装成目标代码,但是如果我试图链接它,我会被告知它包含未定义的符号。

具体来说,我遗漏了以下符号:

代码语言:javascript
复制
__lshrsi3, __ashlsi3, 
__divsi3, __divhi3, __divqi3, __modsi3, __modhi3, __modqi3, 
__udivsi3, __udivhi3, __udivqi3, __umodsi3, __umodhi3, __umodqi3

这些似乎是libgcc符号,但在libgcc.a中我的版本AVR-GCC (4.8.3)中没有它们。我在这些文件上验证了正在运行的nm,没有定义这些名称的符号。

我一直无法确定这些符号是在哪个版本的AVR-GCC中,如果有的话,或者它们是否是由另一个图书馆提供的。其他的搜索已经证明是徒劳无功的,所以现在我希望so的智慧能够解开我的谜团。

为了清晰起见,下面是一个简单的程序集文件示例,它将在没有问题的情况下进行组装,但链接失败:

代码语言:javascript
复制
    .text
    .globl  main
    .align  2
    .type   main,@function
main:                                   ; @main
; BB#0:
    ldi r24, 31
    ldi r22, 31
    call    __udivqi3
    ret
.Ltmp1:
    .size   main, .Ltmp1-main

试图将此链接失败,会出现以下错误:

代码语言:javascript
复制
/tmp/ccxYMfat.o:udiv.s:9: undefined reference to `__udivqi3'
collect2: error: ld returned 1 exit status

下面是我使用的libgcc:

代码语言:javascript
复制
$ avr-gcc -print-libgcc-file-name
/usr/lib/gcc/avr/4.8.3/libgcc.a

,它不包含符号__udivqi3

代码语言:javascript
复制
$ avr-nm /usr/lib/gcc/avr/4.8.3/avr6/libgcc.a |grep udivq
$ 

或者,如果没有一个版本的GCC曾经包含这些符号,是否会有替代他们将遵循相同的召唤惯例,并执行同样的任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 05:18:46

库函数__udivqi3在2001-01-20年间从libgcc中删除.你需要在那个日期之前找到GCC的版本,比如GCC 2.95.2。您所使用的大多数函数都被一个将除法和模数组合成相同操作的函数所取代,因此另一种方法是重写函数来调用这些例程。例如,不要调用__udivqi3调用__udivmodqi4。请注意,这些新函数并没有减少替换。

我不确定,如果有的话,__lshrsi3__ashlsi3何时是libgcc的一部分。如果需要的话,使用自己的替换函数应该不会太难。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29222673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档