Заметил странность в поведении линкера от С30, точнее странное вычисление выражений в .gld Вот фрагмент скрипта:
MEMORY
{
...
program (xr) : ORIGIN = 0xe00, LENGTH = (0x1fffe-0xe00)
...
}
SECTIONS
{
.text :
{
...
blkStart1 = .;
blkStart2 = ALIGN(0x8000);
blkStart3 = (. + 0x8000 - 1) & ~(0x8000 - 1);
...
} >program
А вот что получается в результате:
0x001a0a blkStart1
0x008000 blkStart2
0x008e00 blkStart3
Т.е. команда ALIGN работает правильно, а выражение с . вычисляется с каким-то смещением, видимо связанным с начальным адресом program. Интересно, это так и должно быть у всех gcc или это микрочиповцы что-то от сенбя добавили?