Open wtnb75 opened 3 years ago
試しに全体をリビルドしてみたが、現象は変わらず。ダメだった。
オプションを見ていると、例えばcalcはgccのコンパイルオプションで-march-native
がついているので、ビルドした時よりも古いCPUのマシンで実行するとダメな命令を使ってしまう可能性はあるんだろうと思う。
┌──────────────────────────────────────────────────────────────────────────────┐
│ 0x7f73f9285a91 sub %rdx,%rax │
│ 0x7f73f9285a94 inc %eax │
│ 0x7f73f9285a96 mov 0x77a94(%rip),%ecx # 0x7f73f92fd530 │
│ 0x7f73f9285a9c cmp $0x1,%eax │
│ 0x7f73f9285a9f jle 0x7f73f9285ac0 │
│ >0x7f73f9285aa1 vpbroadcastq %rdx,%xmm0 │
│ 0x7f73f9285aa7 mov %eax,0x77a7f(%rip) # 0x7f73f92fd52c │
│ 0x7f73f9285aad mov %ecx,0x77a81(%rip) # 0x7f73f92fd534 │
│ 0x7f73f9285ab3 vmovdqa %xmm0,0x77a55(%rip) # 0x7f73f92fd510 │
│ 0x7f73f9285abb pop %rbp │
│ 0x7f73f9285abc ret │
│ 0x7f73f9285abd nopl (%rax) │
│ 0x7f73f9285ac0 mov $0x1,%eax │
│ 0x7f73f9285ac5 mov %eax,0x77a61(%rip) # 0x7f73f92fd52c │
└──────────────────────────────────────────────────────────────────────────────┘
core LWP 32 In: L?? PC: 0x7f73f9285aa1
┌──────────────────────────────────────────────────────────────────────────────┐
│ 0x5630cf218ba3 vmovsd %xmm6,(%rsp) │
│ 0x5630cf218ba8 mov %rbx,%rdi │
│ 0x5630cf218bab vmovsd %xmm1,0x18(%rsp) │
│ 0x5630cf218bb1 vmovsd %xmm2,0x10(%rsp) │
│ 0x5630cf218bb7 vmovsd %xmm0,0x8(%rsp) │
│ 0x5630cf218bbd call 0x5630cf218af8 │
│ >0x5630cf218bc2 vcvtusi2sd %eax,%xmm3,%xmm3 │
│ 0x5630cf218bc8 vmovsd 0x10(%rsp),%xmm2 │
│ 0x5630cf218bce vmovsd 0x18(%rsp),%xmm1 │
│ 0x5630cf218bd4 vmovsd 0x8(%rsp),%xmm0 │
│ 0x5630cf218bda vfmadd132sd (%rsp),%xmm2,%xmm3 │
│ 0x5630cf218be0 vcomisd %xmm3,%xmm1 │
│ 0x5630cf218be4 jbe 0x5630cf218ba8 │
│ 0x5630cf218be6 add $0x20,%rsp │
└──────────────────────────────────────────────────────────────────────────────┘
core LWP 37 In: L?? PC: 0x5630cf218bc2
AVXの命令だった。
ビルド済みバイナリから使っているopcodeを調べ、opcodeの属するアーキテクチャを調べていくスクリプトを作って、今上がっている.apkのバイナリを調べてみた。 https://gist.github.com/wtnb75/9d8cb5d16f1fbc2697f54384416d6560
# python -m guess-arch download-table
# python -m guess-arch create-table i386-opc.tbl > opcode.tbl
# for i in $(ls x86_64/*.apk | grep -v -- -doc- | grep -v -- -dev-) ; do python -m guess-arch parse-tar-arch $i opcode.tbl; done
usr/bin/3proxy ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/ftppr ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/mycrypt ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/pop3p ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/proxy ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/socks ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/tcppm ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/udppm ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/aamath ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/bazel ['186', '386', '586', '64', '687', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/bazel ['186', '386', '586', '64', '687', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/calc ['186', '386', '64', 'AVX', 'AVX512F', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libcalc.so.2.13.0.1 ['186', '386', '64', 'AVX', 'AVX2', 'AVX512BW', 'AVX512DQ', 'AVX512F', 'AVX512VL', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libcustcalc.so.2.13.0.1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/cscope ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/direnv ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/duckdb ['186', '287', '386', '387', '3dnowA', '64', '687', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'SSE41', 'x86']
usr/lib/libduckdb.so ['186', '287', '386', '387', '3dnowA', '64', '687', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'SSE41', 'x86']
usr/bin/evans ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/git-bug ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/delta ['186', '386', '3dnowA', '486', '64', 'AVX', 'AVX2', 'AVX512BW', 'AVX512DQ', 'AVX512F', 'AVX512VL', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'SSE41', 'SSSE3', 'Xsave', 'x86']
usr/bin/global ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/gozilla ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/gtags ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/gtags-cscope ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/htags ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/fusermount-glusterfs ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libgfapi.so.0.0.0 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libgfchangelog.so.0.0.1 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libgfrpc.so.0.0.1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libgfxdr.so.0.0.1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libglusterd.so.0.0.1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libglusterfs.so.0.0.1 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/gf_attach ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/gluster ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/gluster-setgfid2path ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/glusterfsd ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/grpcui ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/grpcurl ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/kubebuilder ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/doxygen2man ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libqb.so.100.2.0 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/qb-blackbox ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/mkcert ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/Mdiff ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/mclient ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/monetdb ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/monetdbd ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/mserver5 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/msqldump ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/sample0 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/sample1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/sample4 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/shutdowntest ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/smack00 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/smack01 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/stethoscope ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/streamcat ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libbat.so.21.1.4 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libmapi.so.12.0.6 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libmonetdb5.so.30.0.7 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libmonetdbe.so.1.0.3 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libmonetdbsql.so.11.39.17 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libstream.so.14.0.4 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/nim/bin/nim ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/ninja ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/normalize ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/ttyplay ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/ttyrec ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/ttytime ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/bin/povray ['186', '287', '386', '387', '64', 'AVX', 'AVX2', 'AVX512DQ', 'AVX512F', 'AVX512VL', 'FMA', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/rqbench ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/rqlite ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/rqlited ['186', '386', '3dnowA', '486', '586', '64', '687', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'FP', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/sccache ['186', '386', '3dnowA', '486', '64', 'AVX', 'AVX2', 'AVX512BW', 'AVX512DQ', 'AVX512F', 'AVX512VL', 'FP', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SHA', 'SSE', 'SSE2', 'SSE3', 'SSE41', 'SSE4_1', 'SSSE3', 'Xsave', 'x86']
usr/bin/sslscan ['186', '286', '287', '386', '387', '3dnow', '3dnowA', '486', '586', '64', '686', '687', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512DQ', 'AVX512F', 'AVX512IFMA', 'AVX512VL', 'Clflush', 'FISTTP', 'FP', 'HLE', 'MMX', 'MPX', 'No64', 'Nop', 'PCLMUL', 'RTM', 'SHA', 'SSE', 'SSE2', 'SSE41', 'SSSE3', 'SYSCALL', 'VAES', 'VPCLMULQDQ', 'Xsave', 'x86']
usr/bin/sysbench ['186', '386', '486', '64', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/tgtadm ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/tgtd ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/sbin/tgtimg ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/timidity ['186', '386', '3dnowA', '64', 'AVX', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_cache_tool ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_crashlog ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_ctl ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_layout ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_logcat ['186', '386', '64', 'AVX', 'CX16', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_logstats ['186', '386', '64', '687', 'AVX', 'CX16', 'FP', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_manager ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_server ['186', '386', '64', 'AVX', 'CX16', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_top ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/traffic_via ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libtscore.so.9.0.1 ['186', '386', '64', 'AVX', 'CX16', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libtscppapi.so.9.0.1 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/lib/libtscpputil.so.9.0.1 ['186', '386', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE2', 'x86']
usr/lib/libtsmgmt.so.9.0.1 ['186', '64', 'AVX', 'MMX', 'No64', 'Nop', 'SSE', 'SSE2', 'x86']
usr/bin/wasmtime ['186', '386', '3dnowA', '486', '64', '687', 'AVX', 'AVX2', 'AVX512BW', 'AVX512DQ', 'AVX512F', 'AVX512VL', 'FP', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SHA', 'SSE', 'SSE2', 'SSE41', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
usr/bin/webhook ['186', '3dnowA', '486', '586', '64', 'AES', 'AVX', 'AVX2', 'AVX512BW', 'AVX512F', 'AVX512VL', 'FMA', 'MMX', 'No64', 'Nop', 'PCLMUL', 'SSE', 'SSE2', 'SSE41', 'SSE42', 'SSE4_1', 'SSE4_2', 'SSSE3', 'SYSCALL', 'Xsave', 'x86']
GolangやRustで書かれたものたちが派手な出力になっているが、ライブラリ側でCPUを検出して呼び分けたりしているのかもしれない。
自宅のMBPがHaswell、よく使うサーバはSandy Bridgeなので、無印AVXならいい、程度か。
Alpine本体のバイナリはどうなんだろう。
まともに動かない。
他多数。コンパイルオプションとかで制御できるかな?