реклама на сайте
подробности

 
 
> gcc asm, как взять адрес переменной в другой секции
vova7890
сообщение Feb 27 2012, 11:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Код
          .section    section1, "ax", %progbits
          .arm
          ldr     pc, var

           .section    section2, "ax", %progbits
var:     .int    myfunction


Error: internal_relocation (type: OFFSET_IMM) not fixed up

Собственно чяднт, и как это умудряется делать иар?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vova7890
сообщение Feb 27 2012, 13:12
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Пробовал - не работает. Если это чтото меняет, на всякий случай скажу, что myfunction - свихендлер
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 27 2012, 15:58
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(vova7890 @ Feb 27 2012, 16:12) *
Пробовал - не работает. Если это чтото меняет, на всякий случай скажу, что myfunction - свихендлер

Что не работает? Не компилируется? или myfunction не работает?
Go to the top of the page
 
+Quote Post
vova7890
сообщение Feb 27 2012, 18:46
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Цитата(DmitryM @ Feb 27 2012, 18:58) *
Что не работает? Не компилируется? или myfunction не работает?


Компилируется но не работает. Там у меня патчится свихендлер, и места под первую секцию ровно на одну комманду. b main вроде как раз и занимает 4 байта, но почему-то не работает свихендлер, из за чего аппарат уходит в аут, точнее даже возможно в вечный цикд или гдето повис, хз.

ReAl, ldr r0, =var не катит, она какого-то фига разворачивается на 8 байт. А именно гцц делает примерно так:

ldr r0, =var
offset: dcd var

чет типа такого.
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 28 2012, 04:22
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(vova7890 @ Feb 27 2012, 23:46) *
места под первую секцию ровно на одну комманду.

Невозможно уместить в 4 байта загрузку произвольно расположенной переменной, так как сам адрес переменной уже занимает 4 байта.
Если я правильно понял задачу...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
vova7890
сообщение Feb 28 2012, 06:49
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Цитата(alx2 @ Feb 28 2012, 07:22) *
Невозможно уместить в 4 байта загрузку произвольно расположенной переменной, так как сам адрес переменной уже занимает 4 байта.
Если я правильно понял задачу...


> ldr pc, var
иар создаёт 4х байтовый опкод

> b myfunc
гцц создаёт 4х байтовый опкод
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 29 2012, 04:46
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(vova7890 @ Feb 28 2012, 11:49) *
> ldr pc, var
иар создаёт 4х байтовый опкод

> b myfunc
гцц создаёт 4х байтовый опкод

Ни та, ни другая инструкция не позволяет обратиться к произвольному адресу. Обе упомянутые Вами инструкции используют относительную адресацию. Команда ldr использует 12-битное смещение относительно содержимого базового регистра. Команда b использует 24-битное смещение относительно содержимого регистра pc.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
vova7890
сообщение Feb 29 2012, 14:16
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Цитата(alx2 @ Feb 29 2012, 07:46) *
Ни та, ни другая инструкция не позволяет обратиться к произвольному адресу. Обе упомянутые Вами инструкции используют относительную адресацию. Команда ldr использует 12-битное смещение относительно содержимого базового регистра. Команда b использует 24-битное смещение относительно содержимого регистра pc.


ну правильно, а шоб оно создало верный относительный адрес нужна статическая релокация, которую gas не указывает, а матерится.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016