linux ppc64 是什么,docker - 在(模拟)PPC64 Linux上的backtrace()segfaults - 堆栈内存溢出...

我在文件backtrace.c创建了以下测试程序:

#include

#include

#include

int main(int argc,char**argv){

void *stack[128];

int frameCount = backtrace(stack, sizeof stack);

char **symbols = backtrace_symbols(stack, frameCount);

printf("Backtrace: %d frames\n", frameCount);

for (int i = 0; i < frameCount; i++) {

printf("\t%s\n", symbols[i]);

}

free(symbols);

return 0;

}

然后,我使用以下脚本在i386,amd64,arm32v5,arm64v8和s390x Debian Linux Docker容器中测试程序:

for arch in i386 amd64 arm32v5 arm32v7 arm64v8 s390x; do

echo "=== $arch ==="

docker run -w /work -v $(pwd -P):/work $arch/debian /bin/bash -c "apt-get update && apt-get install -y gcc && gcc -funwind-tables -o backtrace backtrace.c && ./backtrace"

done

(注意-funwind-tables是获得arm32v5上任何帧所必需的。在其他体系结构上,它不是必需的,但不会造成任何伤害。)

主机CPU体系结构是amd64(实际上是Mac 2.1.0.1的Docker Desktop),因此arm *和s390x容器由QEMU用户仿真通过binfmt_misc执行。

无论如何,我在ppc64le上做同样的事情,它是segfaults:

arch=ppc64le

docker run -w /work -v $(pwd -P):/work $arch/debian /bin/bash -c "apt-get update && apt-get install -y gcc && gcc -funwind-tables -o backtrace backtrace.c && ./backtrace"

为什么在ppc64le上不起作用? 关于gcc标志吗? (我尝试使用-funwind-tables和不使用-funwind-tables进行段-funwind-tables 。添加-fasynchronous-unwind-tables也没有什么区别。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值