linux ppc64 是什么,docker - 在(模拟)PPC64 Linux上的backtrace()segfaults - 堆栈内存溢出...
我在文件backtrace.c創(chuàng)建了以下測(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容器中測(cè)試程序:
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上任何幀所必需的。在其他體系結(jié)構(gòu)上,它不是必需的,但不會(huì)造成任何傷害。)
主機(jī)CPU體系結(jié)構(gòu)是amd64(實(shí)際上是Mac 2.1.0.1的Docker Desktop),因此arm *和s390x容器由QEMU用戶仿真通過binfmt_misc執(zhí)行。
無論如何,我在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上不起作用? 關(guān)于gcc標(biāo)志嗎? (我嘗試使用-funwind-tables和不使用-funwind-tables進(jìn)行段-funwind-tables 。添加-fasynchronous-unwind-tables也沒有什么區(qū)別。)
總結(jié)
以上是生活随笔為你收集整理的linux ppc64 是什么,docker - 在(模拟)PPC64 Linux上的backtrace()segfaults - 堆栈内存溢出...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7安装OpenFire
- 下一篇: Linux 网页挂马实验,网页挂马详细教