Доцентлинкер тупой. Добавляет данные в продолжение секции, игнорируя
наличие пустот. Правильный способ - использовать именованную секцию
и располагать ее по нужному адресу. У АРМовского линкера есть для
этого дела секции со спец. названием типа - ".ARM.__at_0x08004000"
- обзываешь так секцию, линкер сам ее располагает по нужному
адресу. См. доки на линкер, там есть. Есть еще способ - включить опцию "Use Cross-module optimization" - см. опцию линкера --feedback. Она помогает оптимизировать пустоты. Но при этом выключается мультипроцессорная сборка проекта, и х.з. оптимизирует ли она пустоты внутри модуля.