Avr-g++ — неопределенная ссылка на регистр Y при связыванииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Avr-g++ — неопределенная ссылка на регистр Y при связывании

Сообщение Anonymous »

У меня возникла странная проблема при выполнении встроенного ассемблера и компиляции/компоновки с помощью avr-g++ (версия 16, только что из Git). Я думаю, что это может быть ошибка в цепочке инструментов, но мне хотелось бы получить второе мнение на случай, если я просто чего-то не вижу.
Вот минимальный фрагмент кода, который мне удалось придумать, который не работает:

Код: Выделить всё

int main() {
unsigned char value = 10;
asm volatile(
"lds r12, %0"
:: "m" (value)
: "r12");
return 0;
}
При компиляции ничего особенного не происходит; но при связывании я получаю это странное сообщение об ошибке (это именно та команда, которую я использую для создания своего эльфа):

Код: Выделить всё

> avr-g++ -std=gnu++20 -DF_CPU=20000000L -g -Wall -Wextra -fdata-sections -mmcu=avr128da28 -Os -c mwe.cpp -o mwe.o
> avr-g++ -mrelax -Wl,--gc-sections -mmcu=avr128da28 -Os mwe.o -o mwe.elf
/usr/lib/gcc/avr/16.0.0/../../../../avr/bin/ld: mwe.o: in function `.Loc.3':
.../tests/mwe.cpp:26:(.text.startup+0xc): undefined reference to `Y'
collect2: error: ld returned 1 exit status
Эльфы не создаются; Я попытался выполнить objdump mwe.o:

Код: Выделить всё

> avr-objdump -s -d mwe.o
...
Disassembly of section .text.startup:

00000000 :
0:   0f 92           push    r0
2:   cd b7           in  r28, 0x3d   ; 61
4:   de b7           in  r29, 0x3e   ; 62

00000006 :
6:   8a e0           ldi r24, 0x0A   ; 10
8:   89 83           std Y+1, r24    ; 0x01

0000000a :
a:   c0 90 00 00     lds r12, 0x0000 ; 0x800000 

0000000e :
e:   80 e0           ldi r24, 0x00   ; 0
10:   90 e0           ldi r25, 0x00   ; 0
12:   0f 90           pop r0
14:   08 95           ret
Ничего особенно странного не вижу... Компоновщик говорит, что проблема в .text.startup+0xc, но это будет в середине инструкции lds, я не понимаю почему...
Кто-нибудь видел такую ​​ошибку раньше? Может быть, вы думаете, что моя конфигурация не очень хороша? Или вы думаете, что это действительно может быть ошибка avr-gcc, ld/binutils или avr-libc?
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... on-linking
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»