Как обойти «попытку использовать отравленные malloc / calloc» ошибки с GCC? - PullRequest
6 голосов
/ 09 марта 2019

Я создаю собственный компилятор musl (GCC 8.3.0) с кросс-компилятором musl (та же версия), и я получаю эту ошибку:

In file included from /usr/local/x86_64-cros-linux-musl/include/pthread.h:30,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr-default.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr.h:148,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/ext/atomicity.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/bits/basic_string.h:39,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/string:52,
                 from ../../gcc-8.3.0/gcc/brig/brigfrontend/brig-to-generic.h:25,
                 from ../../gcc-8.3.0/gcc/brig/brig-lang.c:46:
/usr/local/x86_64-cros-linux-musl/include/sched.h:76:7: error: attempt to use poisoned "calloc"
 void *calloc(size_t, size_t);
       ^
/usr/local/x86_64-cros-linux-musl/include/sched.h:116:36: error: attempt to use poisoned "calloc"
 #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n)))
                                    ^

Любые идеи о том, как обойти это?

Подробности:

Тройка цели / хоста: x86_64-linux-musl

версия musl: 1.1.21

Я применил патчи musl здесь:http://port70.net/~nsz/musl/gcc-8.2.0/

И я выполнил эту команду в исходном каталоге:

sed -e '/m64=/s/lib64/lib/' -i gcc/config/i386/t-linux64

Ответы [ 2 ]

3 голосов
/ 09 марта 2019

Итак, я собираюсь просто предположить, что #pragma poison calloc находится в ваших заголовочных файлах, а не в системных заголовочных файлах.

Рекомендуемое общее решение: включите все системные заголовки перед использованием #pragma poison;это может быть сложно, когда несколько программных заголовков, но это действительно необходимо сделать.

Альтернатива - просто удалить и удалить #pragma poison из исходного кода и обеспечить защиту с ним.

0 голосов
/ 09 марта 2019

У меня были подобные проблемы с malloc при сборке gcc, я исправил это, изменив вызовы malloc на 'xmalloc', я сделал grep и есть доступный 'xcalloc'.

...