【问题标题】:How to circumvent "attempt to use poisoned malloc/calloc" errors with GCC?如何规避 GCC 的“尝试使用中毒的 malloc/calloc”错误?
【发布时间】:2019-07-31 00:15:28
【问题描述】:

我正在使用交叉 musl 编译器(相同版本)构建本机 musl 编译器(GCC 8.3.0),但出现此错误:

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

音乐版: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

【问题讨论】:

  • 您想规避这些错误吗?还是真的修复它们?
  • 我想修复它们并上传补丁,但解决方法也可以。

标签: c gcc musl


【解决方案1】:

所以我将继续假设#pragma poison calloc 在您的头文件中,而不是在系统头文件中。

推荐的通用解决方案:在使用#pragma poison之前包含所有系统头文件;当有多个程序头时,这可能会变得很棘手,但确实需要这样做。

另一种方法是从源代码中删除 #pragma poison 并使用它进行保护。

【讨论】:

  • 是的,它在libcpp/system.h。 Musl 在多个地方定义原型时做了一些诡计,所以我想我会事先#include <pthread.h> 并完成它。谢谢。
【解决方案2】:

我在构建 gcc 时遇到了类似的 malloc 问题,我通过将 malloc 调用更改为“xmalloc”来修复它,我做了一个 grep 并且有一个“xcalloc”可用。

【讨论】:

  • 这会破坏大多数软件构建。系统头文件中使用calloc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2022-06-16
  • 2021-11-27
  • 2018-09-24
  • 2012-03-02
  • 2010-12-05
相关资源
最近更新 更多