Если линкеру задать опции --gc-sections, а компилятору -ffunction-sections, из выходного файла будут выкинуты функции, к которым нет явного обращения. Размер выходного файла заметно уменьшится, это хорошо. А плохо то, что в прошивке присутствует одна функция, не используемая явно, но сильно нужная, которую линкер радостно и выкидывает.
Вопрос: как объяснить линкеру, что выкидывать можно всё, кроме вот этой вот функции? Линкер и компилятор — из набора GCC.