-
- Потому, что одной маленькой секции, может не хватить на все данные,
к которым хотелся быстрый доступ (ко всем!). Поэтому предложено
объединять данные в свои сегменты. - Nikolay_Po(Сегодня, 09:41)
- это сложный ответ, потому что в этой теме мы очень удачно обошли вопрос управления содержимым $gp по ходу выполнения кода. тут бы я декларировал бы следующий принцып "в собранном коде - каждой реальной секции маленьких данных, свое значение $gp ". и тут рождается новая тема - возможность использовать внешний подгруженный бинарно-совместистимый код, оверлеи, самомодификацию и рефлексию(!!!), но это выходит за рамки школьного образования :) - klen(Сегодня, 10:36)
- Данные случайным образом попадают в .sdata .sbss. Чтоб можно было
бы управлять порядком прижатия нужных мне кусочков данных. - klen(Сегодня, 09:38)
- А чем вам не нравится стандартный линк файл от WCH который есть во
всех примерах - там порядок сегментов .data / .sdata / .sbss / .bss
и $gp инициализируется на начало сегмента .sdata + 0x800. И так как
.sbss = .bss то при релаксации (-Wl,--relax включена по умолчанию)
всё .bss доступно сразу по $gp (естественно в пределах +-2K
смещения). А для использования .sdata надо задать как раз параметр
-msmall-data-limit. Сегменты .sdata и .sbss рядом вместе. Zikon(664 знак., Сегодня, 11:38)
- А вот в известной библиотеке ch32fun очень странный линк файл по поводу $gp. Инициализация $gp - адрес сегмента .data + 0x3fc. И как это понимать? Компилятор/линкер всё равно не будут работать с данными в .data через $gp. А если хотите всё же .data прихватить - задирайте значение -msmall-data-limit, но потом не удивляйтесь что 4К быстро закончились для $gp. Стандартный вариант от WCH - более оптимальный. - Zikon(Сегодня, 11:47)
- А чем вам не нравится стандартный линк файл от WCH который есть во
всех примерах - там порядок сегментов .data / .sdata / .sbss / .bss
и $gp инициализируется на начало сегмента .sdata + 0x800. И так как
.sbss = .bss то при релаксации (-Wl,--relax включена по умолчанию)
всё .bss доступно сразу по $gp (естественно в пределах +-2K
смещения). А для использования .sdata надо задать как раз параметр
-msmall-data-limit. Сегменты .sdata и .sbss рядом вместе. Zikon(664 знак., Сегодня, 11:38)
- Потому, что одной маленькой секции, может не хватить на все данные,
к которым хотелся быстрый доступ (ко всем!). Поэтому предложено
объединять данные в свои сегменты. - Nikolay_Po(Сегодня, 09:41)