wtnb75 / alpine-pkg

0 stars 0 forks source link

Illegal instruction #12

Open wtnb75 opened 3 years ago

wtnb75 commented 3 years ago

まともに動かない。

/ # apk add calc
  ...
/ # calc
C-style arbitrary precision calculator (version 2.13.0.1)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 1+20/11
Illegal instruction (core dumped)

他多数。コンパイルオプションとかで制御できるかな?

wtnb75 commented 3 years ago

試しに全体をリビルドしてみたが、現象は変わらず。ダメだった。

オプションを見ていると、例えばcalcはgccのコンパイルオプションで-march-nativeがついているので、ビルドした時よりも古いCPUのマシンで実行するとダメな命令を使ってしまう可能性はあるんだろうと思う。

wtnb75 commented 3 years ago
┌──────────────────────────────────────────────────────────────────────────────┐
│   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の命令だった。

wtnb75 commented 3 years ago

ビルド済みバイナリから使っている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本体のバイナリはどうなんだろう。