Я создаю что-то вроде вопроса Как собирать данные из разных файлов .a в один массив? Как сохранить разделы в файлах .a с помощью ld script?, т.е. Массивы, созданные во время компоновки ссылок из элементов из разных объектных файлов.
В моем случае имеется несколько массивов, каждый из которых входит в свой раздел,.ld_comp_array_ *, где * соответствует имени массива. Затем я беру компоновщик по умолчанию script с помощью ld -verbose и изменяю его, помещая все эти разделы (отсортированные, чтобы элементы разных массивов не смешивались) в выходной раздел:
KEEP (*(SORT_BY_NAME(.ld_comp_array*)))
и все работает нормально.
Тогда все становится немного сложнее, потому что приложения (приложения), использующие эту функцию, могут быть созданы для разных платформ - до сих пор я успешно тестировал AVR Xmega как целевую платформу, а также 32-разрядную и Linux-версию Windows 32- и 64-бит для модульного тестирования, и список открыт (новые платформы, вероятно, будут добавлены в ближайшем будущем).
Однако для каждой конкретной платформы сценарии компоновщика по умолчанию отличаются от других платформ, и в настоящее время я вставляю разделы .ld_comp_array * вручную - можно ли это сделать как-то автоматически? Единственное решение, о котором я думал, - это разбор по умолчанию script и вставка вышеприведенного описания раздела ввода, но это кажется слишком тяжелым.
Я мог бы сделать это вручную, если не было относительно простого решения, но я не уверен, что скрипты по умолчанию, полученные из локальной версии ld, могут быть разбиты на разные версии binutils. Может ли кто-нибудь уточнить, безопасно это или нет?
Если это можно сделать автоматически, нормально ли "вводить" спецификацию раздела ввода непосредственно в раздел .text, предполагая, что массивы должны быть "неизменными"?