Спасибо. Нарочно вас провоцировал, чтобы ткнули носом. Собственно,
из последнего примера: extern char start_of_ROM[], end_of_ROM[], start_of_FLASH[];
memcpy (start_of_FLASH, start_of_ROM, end_of_ROM - start_of_ROM);
Ясно, что полученные таким методом символы являются указателями. И их можно использовать лишь как адреса и нельзя пытаться получить значения.
В своё время, получал таким образом адреса данных в памяти для передачи параметров ассемблерным вставкам.
Но меня удивляет отсутствие процедуры передачи из линкера произвольных значений, типа размеров областей:
"Hence when you are using a linker script defined symbol in source code, you should always take the address of the symbol and never attempt to use its value."
Получается, так можно передать только адреса. Нули нельзя.
Если нужно передать размер, то нужно вычислять разность между указателями.