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

 
 
> Не понимаю окончательно работу GNU линкера, Секция линкуется, но мне не понятно, почему,
haker_fox
сообщение Jan 9 2012, 09:05
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Здравствуйте, уважаемые коллеги!
Решил углубить знания по линкеру. Нужно rolleyes.gif Имеется следующий код
CODE
.section     .text
.code 32


    LDR        PC,        =0x40004000


.section    .data
data1:        .word    0x89ABCDEF

.section    .bss
bss1:        .word    0

.section    .fox, "ax"
    NOP
    NOP
    NOP
    NOP
    BX        LR

и скрипт линкера
CODE
MEMORY
{
    RAM(RW)        :    org = 0x40000000, len = 32K
    RAMOV(RW)    :    org = 0x40004000, len = 4K
}

SECTIONS
{
    .text : { *.(text) } > RAM
    .data : { *.( data ) } > RAM
    .bss  : { *.( bss ) } > RAM
    
    .fox  : { *(.fox .fox*) } > RAMOV
    
}

Трансляция кода идет следующим образом
CODE
arm-kgp-elf-as -mcpu=arm7tdmi-s test.s -o test.o
arm-kgp-elf-ld test.o -o test.elf -Ttest.ld

В этом случае все собирается отлично. В эльфе все необходимые секции.
Стоит секцию .fox пометить только флагом "x" в исходнике на языке ассемблера, как она перестает линковаться. Я не понимаю почему это происходит? Документация говорить, что флаг "a" - это перемещаемая (allocatable) секция.
Но нигде не могу найти описания, для чего секции дается такой статус? Почему секцию просто нельзя пометить "xw", например? Да, стандартные секции .text, .data и .bss линкуются всегда...
Буду благодарен за любую информацию!

З.Ы. МК LPC2468.
Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Jan 10 2012, 15:37
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Похоже, линкер так строг, поскольку для него "темный лес" за стандарнтыми секциями .text, .data и .bss. Поскольку моя секция .fox не лежит в .text, он (линкер) не знает, что с ней делать, т.к. не понятно, каким образом она попадет в указанное адресное пространство. Следовательно, ему необходимо "намекнуть", что мы сами решим проблему, и скопируем секцию туда , куда надо. На это и указывает флаг "а".

Господа, большое спасибо за помощь!!!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
am1808
сообщение Jan 10 2012, 16:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



Цитата(haker_fox @ Jan 10 2012, 19:37) *
Похоже, линкер так строг, поскольку для него "темный лес" за стандарнтыми секциями .text, .data и .bss. Поскольку моя секция .fox не лежит в .text, он (линкер) не знает, что с ней делать, т.к. не понятно, каким образом она попадет в указанное адресное пространство. Следовательно, ему необходимо "намекнуть", что мы сами решим проблему, и скопируем секцию туда , куда надо. На это и указывает флаг "а".

Господа, большое спасибо за помощь!!!

о чем и речь, и дело даже не в том, знает линкер про секции .text, .data, .bss, а в том, по каким адресам аллокировать секции в runtime

можете еще почитать ресурс вот тут http://bravegnu.org/gnu-eprog/lds.html

Сообщение отредактировал am1808 - Jan 10 2012, 16:25
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:20
Рейтинг@Mail.ru


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