GCC Linker: как создать отчет о вкладе в файл на выходных разделах

Недавно я столкнулся с проблемой при попытке связать мою программу. Это сообщение .text не может вписаться в указанную область памяти. Очевидно, что исходный код становится слишком большим, чтобы быть связанным в ограниченной области памяти.

Теперь я хочу проанализировать, какой файл вносит наиболее значительный вклад в раздел «.text», чтобы можно было выполнить последующую оптимизацию кода. Я пробовал много способов, но не смог.

  • nm -s output.elf дает размер каждого символа, но не группируйте символ под каждым исходным файлом.
  • nm -s file.obj проходит через каждый объектный файл, не работает, потому что -fdata-section -ffunction-section -Wl указана, поэтому не весь контент в объектном файле будет связан с окончательным выводом
  • readelf -s output.elf предоставляет информацию от файла к файлу, но он просто перечисляет символы под каждым файлом и их размер. Сценарий может быть написан для суммирования всего размера в файле, но общее значение кажется неправильным, очевидная ошибка здесь - некоторые символы могут указывать на одну и ту же область памяти, поэтому одна и та же область памяти может быть вычислена много раз.

Когда ссылка gcc выполняет свою работу, она должна знать все детали того, что извлечено из объектного файла и помещено в секцию вывода, но, похоже, не предоставляет переключателя для генерации подробного отчета (или я что-то упустил?)

Есть ли инструмент, который может сделать эту работу?

Всего 1 ответ


Возможно, --gc-sections вместе с --print-gc-sections и / или --print-map-discarded ?

Если все в отдельных разделах, то у вас есть все ваши разделы в качестве входных данных и список удаленных разделов. Затем простой скрипт выдаст список используемых разделов, их размер и отображение файла.


Есть идеи?

10000