解决,gcc 的 rpm 在 configure 时增加了 --with-madd4=no 。
在重新编译 glibc ,之后重编译 python2 就好了。
==========
请注意,有些内容被吞了,比如
print ".16f"%memoryBits
其实应该是
print "%16.16f"%memoryBits
第一个百分号,替换成了汉字全角才现实。
-------------------------------------------
--- webkitgtk-2.18.6-orig/Source/JavaScriptCore/wasm/generateWasm.py 2018-03-03 19:01:28.441007606 +0800 +++ webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasm.py 2018-03-03 19:03:56.015243319 +0800 @@ -101,5 +101,5 @@ assert op["opcode"]["category"] == "memory" match = re.match(r'^[if]([36][24])\.[^0-9]+([0-9]+)?_?[us]?$', op["name"]) memoryBits = int(match.group(2) if match.group(2) else match.group(1)) - assert 2 ** math.log(memoryBits, 2) == memoryBits + assert 2 ** int(math.log(memoryBits, 2)) == memoryBits return str(int(math.log(memoryBits / 8, 2)))
这个 patch 这么打就可以编译过,不然 assert 这里 == 的前面不是一个整数,导致前后不相等而报错退出。
把这里修改一下,输出这些数据:
def memoryLog2Alignment(op): assert op["opcode"]["category"] == "memory" match = re.match(r'^[if]([36][24])\.[^0-9]+([0-9]+)?_?[us]?$', op["name"]) memoryBits = int(match.group(2) if match.group(2) else match.group(1)) print "data:" print memoryBits print math.log(memoryBits, 2) print 2 ** math.log(memoryBits, 2) print "-----" assert 2 ** math.log(memoryBits, 2) == memoryBits return str(int(math.log(memoryBits / 8, 2)))
输出如下。也就是说,其实两个数一样,顶多一个是整数,一个是浮点。但是就是不相等?
cd /builddir/build/BUILD/webkitgtk-2.18.6/mips64el-redhat-linux-gnu/Source/JavaScriptCore && /usr/bin/python2.7 /builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py /builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/wasm.json /builddir/build/BUILD/webkitgtk-2.18.6/mips64el-redhat-linux-gnu/DerivedSources/JavaScriptCore/WasmOps.h data: 32 5.0 32.0 ----- data: 32 5.0 32.0 ----- data: 16 4.0 16.0 ----- data: 16 4.0 16.0 ----- data: 64 6.0 64.0 ----- Traceback (most recent call last): File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py", line 115, in <module> memoryLog2AlignmentLoads = memoryLog2AlignmentGenerator(lambda op: (op["category"] == "memory" and len(op["return"]) == 1)) File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py", line 112, in memoryLog2AlignmentGenerator result.append(" case " + wasm.toCpp(op["name"]) + ": return " + memoryLog2Alignment(op) + ";") File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasm.py", line 109, in memoryLog2Alignment assert 2 ** math.log(memoryBits, 2) == memoryBits AssertionError
设定输出为浮点数:
def memoryLog2Alignment(op): assert op["opcode"]["category"] == "memory" match = re.match(r'^[if]([36][24])\.[^0-9]+([0-9]+)?_?[us]?$', op["name"]) memoryBits = int(match.group(2) if match.group(2) else match.group(1)) print "data:" print ".16f"%memoryBits print ".16f"%math.log(memoryBits, 2) print ".16f"%(2 ** math.log(memoryBits, 2)) print "-----" assert 2 ** math.log(memoryBits, 2) == memoryBits return str(int(math.log(memoryBits / 8, 2)))
终于暴露目标了
cd /builddir/build/BUILD/webkitgtk-2.18.6/mips64el-redhat-linux-gnu/Source/JavaScriptCore && /usr/bin/python2.7 /builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py /builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/wasm.json /builddir/build/BUILD/webkitgtk-2.18.6/mips64el-redhat-linux-gnu/DerivedSources/JavaScriptCore/WasmOps.h data: 32.0000000000000000 5.0000000000000000 32.0000000000000000 ----- data: 32.0000000000000000 5.0000000000000000 32.0000000000000000 ----- data: 16.0000000000000000 4.0000000000000000 16.0000000000000000 ----- data: 16.0000000000000000 4.0000000000000000 16.0000000000000000 ----- data: 64.0000000000000000 6.0000000000000000 63.9999999999999858 ----- Traceback (most recent call last): File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py", line 115, in <module> memoryLog2AlignmentLoads = memoryLog2AlignmentGenerator(lambda op: (op["category"] == "memory" and len(op["return"]) == 1)) File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py", line 112, in memoryLog2AlignmentGenerator result.append(" case " + wasm.toCpp(op["name"]) + ": return " + memoryLog2Alignment(op) + ";") File "/builddir/build/BUILD/webkitgtk-2.18.6/Source/JavaScriptCore/wasm/generateWasm.py", line 109, in memoryLog2Alignment assert 2 ** math.log(memoryBits, 2) == memoryBits AssertionError
浮点计算错!
附:龙芯Intellij IDEA开发Spring web应用视频
http://tieba.baidu.com/p/5975179608