Собираю код на bare metal, свою платку с cortex-m4f. После обновления на 6.x.x, перестал собираться. Решилось добавлением -static, но после тестов оказалось, что не работает.
Оказалось новые версии GCC создают секции .got и .got.plt которые я не забрал в финальный бинарь, не указал их в ld скрипте. Прочитав про них я понял, что это таблицы адресов для динамического связывания. Но я не включал -fPIC.
Вопрос зачем и как отключить?
CFLAGS = -static -std=gnu99 -pipe
CFLAGS += -mcpu=cortex-m4 -mthumb
CFLAGS += -mhard-float -mfpu=fpv4-sp-d16
CFLAGS += -Wall -Wdouble-promotion
CFLAGS += -O3 -g3
CFLAGS += -fno-math-errno
CFLAGS += -ffinite-math-only
CFLAGS += -fno-signed-zeros
CFLAGS += -fno-trapping-math
CFLAGS += -fno-hosted
CFLAGS += -fno-stack-protector
CFLAGS += -I.
LDFLAGS = -nostdlib
LDFLAGS += -Wl,-T,hal/$(SCRIPT).ld
Все исходники доступны компилятору, бинарных либ нет.