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

 
 
> 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 28 2012, 10:41
Сообщение #3


Знающий
****

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



Вот как, например, в стартапе CW делается:

секция вектора:

ldr pc, [pc, #swi_handler_address - . - 8] /* swi handler */

далее объявление в этой же секции
swi_handler_address:
.word swi_handler

а далее в другой секции уже

swi_handler:
b swi_handler

З.Ы. Это gcc
Go to the top of the page
 
+Quote Post
vova7890
сообщение Feb 28 2012, 11:26
Сообщение #4


Участник
*

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



Цитата(DmitryM @ Feb 28 2012, 13:41) *
...


Прикол в том что я не могу в секции где ldr pc ещё что нибудь обьявить, места нету.
Иар сгенерил такой вот опкод F4F01FE5

Код
FSWI_PATCH2:A13A5328; ===========================================================================
FSWI_PATCH2:A13A5328
FSWI_PATCH2:A13A5328; Segment type: Pure code
FSWI_PATCH2:A13A5328                 AREA FSWI_PATCH2, CODE, READWRITE, ALIGN=0
FSWI_PATCH2:A13A5328            ; ORG 0xA13A5328
FSWI_PATCH2:A13A5328                 CODE32
FSWI_PATCH2:A13A5328 main_jumper     DCD swi_handler    ; DATA XREF: FSWI_PATCH1:A13A5414r
FSWI_PATCH2:A13A5328; FSWI_PATCH2   ends
FSWI_PATCH2:A13A5328
FSWI_PATCH1:A13A5414; ---------------------------------------------------------------------------
FSWI_PATCH1:A13A5414; ===========================================================================
FSWI_PATCH1:A13A5414
FSWI_PATCH1:A13A5414; Segment type: Pure code
FSWI_PATCH1:A13A5414                 AREA FSWI_PATCH1, CODE, READWRITE, ALIGN=0
FSWI_PATCH1:A13A5414            ; ORG 0xA13A5414
FSWI_PATCH1:A13A5414                 CODE32
FSWI_PATCH1:A13A5414                 LDR     PC, =swi_handler
FSWI_PATCH1:A13A5414; FSWI_PATCH1   ends
FSWI_PATCH1:A13A5414


Если сделать тупо
Код
    .section    FSWI_PATCH1, "ax", %progbits
    .int 0xE51FF0F4


То работает, но не вариант, там адреса могут быть разные sad.gif

Сообщение отредактировал vova7890 - Feb 28 2012, 12:13
Go to the top of the page
 
+Quote Post



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

 


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


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