Я работаю над некоторым старым исходным кодом для встроенной системы на цели m68k, и иногда я вижу большие запросы выделения памяти при вызове gcvtf
для форматирования числа с плавающей запятой для отображения. Я, вероятно, могу обойти это, написав свою собственную подпрограмму замены, но природа ошибки делает меня очень любопытным, потому что это происходит только тогда, когда куча начинается с определенного адреса или выше, и исчезает, если я взломаю компоновщик .ld Сценарий или удалить любой набор глобальных переменных (которые помещаются перед кучей в моей карте памяти), которые складываются до достаточного размера в байтах, так что куча начинается ниже таинственного критического адреса.
Итак, я подумал, что посмотрю в исходном коде gcc версию используемого компилятора (m68k-elf-gcc 3.3.2). Я загрузил то, что кажется источником для этой версии в http://gcc.petsads.us/releases/gcc-3.3.2/,, но я нигде не могу найти определения для gcvt или gcvtf. Когда я ищу его, grep находит только некоторую документацию и ссылки .h, но не определение:
$ find | xargs grep gcvt
./gcc/doc/gcc.info: C library functions `ecvt', `fcvt' and `gcvt'. Given va
lid
./gcc/doc/trouble.texi:library functions @code{ecvt}, @code{fcvt} and @code{gcvt
}. Given valid
./gcc/sys-protos.h:extern char * gcvt(double, int, char *);
Итак, где эта функция определена в исходном коде? Или я скачал совершенно не то?
Я не хочу изменять этот проект для использования самого последнего gcc из-за стабильности проекта и соображений тестирования, и, как я уже сказал, я могу обойти это, написав собственную процедуру форматирования, но это поведение очень запутанное для меня, и это осквернит мой мозг, если я не пойму, почему он так странно себя ведет.