你正在使用哪个版本的Go( go version
)?
go version go1.10.2 darwin/amd64
这个问题在最新版本中是否重现?
是的,在1.9.2和1.10.2中得到确认。尚未在主分支上测试。
你正在使用什么操作系统和处理器架构( go env
)?
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/michaelmcloughlin/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/michaelmcloughlin/gocode"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10.2/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10.2/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/p5/84p384bs42v7pbgfx0db9gq80000gn/T/go-build505202882=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
使用 PDEPQ
编译汇编代码。使用 go tool objdump
查看生成的汇编代码。
Gist https://gist.github.com/mmcloughlin/b5bf1bcc7f31222ff2bc510f2777cd79 是一个最小示例。
你期望看到什么?
期望 go tool objdump
能够显示 PDEPQ
指令。
你看到了什么?
objdump.sh
脚本的输出如下。objdump
工具无法识别 PDEPQ
,而是将其解析为一系列指令。请注意,Apple的LLVM objdump正确地识别了该指令。
+ go version
go version go1.10.2 darwin/amd64
+ go test -c
+ go tool objdump -s bmi.PDep bmi.test
TEXT github.com/mmcloughlin/bmi.PDep(SB) /Users/michaelmcloughlin/gocode/src/github.com/mmcloughlin/bmi/pdep.s
pdep.s:7 0x10e7860 4c8b442408 MOVQ 0x8(SP), R8
pdep.s:8 0x10e7865 4c8b4c2410 MOVQ 0x10(SP), R9
pdep.s:10 0x10e786a c442b3f5 CMC
pdep.s:10 0x10e786e d04c8954 RORB $0x1, 0x54(CX)(CX*4)
pdep.s:12 0x10e7872 2418 ANDL $0x18, AL
pdep.s:13 0x10e7874 c3 RET
:-1 0x10e7875 cc INT $0x3
:-1 0x10e7876 cc INT $0x3
:-1 0x10e7877 cc INT $0x3
:-1 0x10e7878 cc INT $0x3
:-1 0x10e7879 cc INT $0x3
:-1 0x10e787a cc INT $0x3
:-1 0x10e787b cc INT $0x3
:-1 0x10e787c cc INT $0x3
:-1 0x10e787d cc INT $0x3
:-1 0x10e787e cc INT $0x3
:-1 0x10e787f cc INT $0x3
+ objdump -disassemble-all bmi.test
+ grep -A 4 bmi.PDep:
github.com/mmcloughlin/bmi.PDep:
10e7860: 4c 8b 44 24 08 movq 8(%rsp), %r8
10e7865: 4c 8b 4c 24 10 movq 16(%rsp), %r9
10e786a: c4 42 b3 f5 d0 pdepq %r8, %r9, %r10
10e786f: 4c 89 54 24 18 movq %r10, 24(%rsp)
4条答案
按热度按时间wswtfjt71#
#23386 有可能被链接。@quasilyte在评论中建议根据最新的x86.csv更新反汇编器。从我有限的调查来看,这似乎只是一些指令表不同步的问题。
cfh9epnr2#
@mmcloughlin,我的理解是重新生成反汇编器比手动修复所有问题(可能有很多问题)更好。可以对其进行修补,但解码器无法理解,例如,所有最近添加的AVX-512指令,所以这不是几十个问题,而是数百个指令的问题。
主要问题是更新后的x86.csv generator在解决一些格式问题之前处于暂停状态。目前,编码器表(用于汇编器)直接从XED表生成。也可以从那里生成解码器表,但这也需要讨论。
ttvkxqim3#
感谢您的详细回复。我同意,对于这个问题,自动解决方案是更可取的。
我对了解更多并提供帮助很感兴趣,但似乎在这个领域做出贡献并不容易?
liwlm1x94#
注意到objdump仍然无法反汇编输入: