Математические символы отсутствуют в AVR libgcc

У меня есть сборка AVR, созданная для неизвестной версии GCC. Я могу собрать этот исходный код в объектный код, но если я попытаюсь связать его, мне сообщат, что он содержит неопределенные символы.

В частности, мне не хватает следующих символов:

__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 сможет разгадать мою тайну.

Для ясности, вот тривиальный пример файла сборки, который собирается без проблем, но не связывается:

    .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

Попытка связать это не удается со следующей ошибкой:

/tmp/ccxYMfat.o:udiv.s:9: undefined reference to `__udivqi3'
collect2: error: ld returned 1 exit status

Вот libgcc, который я использую:

$ avr-gcc -print-libgcc-file-name
/usr/lib/gcc/avr/4.8.3/libgcc.a

Который не содержит символа __udivqi3

$ avr-nm /usr/lib/gcc/avr/4.8.3/avr6/libgcc.a |grep udivq
$ 

В качестве альтернативы, если нет версии GCC, которая когда-либо содержала эти символы, есть ли для них вставные замены, которые следовали бы тому же соглашению о вызовах и выполняли бы те же задачи?


person seanmk    schedule 24.03.2015    source источник
comment
Вы пытались явно связать математическую библиотеку с -lm?   -  person user268396    schedule 24.03.2015
comment
@user268396 user268396 Я пытался просто добавить -lm к вызову avr-gcc, если вы это имеете в виду. Это не разрешило символы.   -  person seanmk    schedule 24.03.2015


Ответы (1)