herumi / mcl

a portable and fast pairing-based cryptography library
BSD 3-Clause "New" or "Revised" License
450 stars 152 forks source link

fix a CALL16 reloc error when cross-compiling with mips toolchain. #82

Closed jrhea closed 3 years ago

jrhea commented 3 years ago

This PR is in support of herumi/bls-eth-go-binary#22

When attempting to cross compile for MIPS I get the following error in the linking step of the sample.go program in the herumi/bls-eth-go-binary repo.

# github.com/herumi/bls-eth-go-binary/bls
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: bls/lib/linux/mips/libbls384_256.a(base32.o): CALL16 reloc at 0x253f0 not against global symbol
bls/lib/linux/mips/libbls384_256.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

The go build command looks like this:

env \
STAGING_DIR="/root/source/staging_dir" \
CGO_LDFLAGS="-L/root/work/bls-eth-go-binary-jrhea/bls/lib/linux/mips" \
CGO_LDLIBS="-lbls384_256" \
CGO_CXXFLAGS="-std=c++03 -O3 -fPIC -DNDEBUG -DMCL_DONT_USE_OPENSSL -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_USE_VINT -DMCL_SIZEOF_UNIT=4 -DMCL_VINT_FIXED_BUFFER -DMCL_MAX_BIT_SIZE=384 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -D_FORTIFY_SOURCE=0 -DBLS_ETH -DBLS_SWAP_G  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -Wformat -Werror=format-security -fstack-protector -Wl,-z,now -Wl,-z,relro " \
GOOS=linux \
GOARCH=mipsle \
GOMIPS=softfloat \
CGO_ENABLED=1 \
CXX_FOR_TARGET="/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/bin/mipsel-openwrt-linux-g++" \
CC_FOR_TARGET="/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/bin/mipsel-openwrt-linux-gcc" \
go build examples/sample.go

Based on the error I searched the symbol output and saw this:

root@0fe82bf96b16:~/work/bls-eth-go-binary# nm obj/base32.o 
00025208 t $mulPv288x32
0002f1d0 t $mulPv320x32
00039f80 t $mulPv352x32
00048bbc t $mulPv384x32
000586f4 t $mulPv416x32
0006d9a4 t $mulPv448x32
00082d80 t $mulPv480x32
000a10d4 t $mulPv512x32
000c1608 t $mulPv544x32

The t told me the symbol was local to the library. It's possible that differences in compilers could cause different behaviors, but I couldn't find anything concrete so I opted to make the symbol not private. That seemed to fix the issue.

Any alternative suggestions would be appreciated as well. Thanks.

herumi commented 3 years ago

Thank you for the pull request.

Now, I'm trying to cross-compile bls for mipsel with your patch https://github.com/herumi/mcl/pull/82/commits/854fa25b9aac990f1a4755d17f52ad3273df6ab6 with dev.

But I got the same error.

env CXX=clang++ BIT=32 ARCH=mipsel _OS=linux _ARCH=mipsle make MCL_USE_GMP=0 UNIT=4 CFLAGS_USER="-target mipsel-linux -fPIC"
env CC=mipsel-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build examples/sample.go
/usr/lib/gcc-cross/mipsel-linux-gnu/7/../../../../mipsel-linux-gnu/bin/ld: bls/lib/linux/mipsel/libbls384_256.a(base32.o): CALL16 reloc at 0x253f0 not against global symbol
collect2: error: ld returned 1 exit status

I'll search the reason.

My environment:

Ubuntu 18.04.4 LTS
% clang++ --version
clang version 10.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix

% mipsel-linux-gnu-gcc --version
mipsel-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
jrhea commented 3 years ago

But I got the same error.

Just a guess, but did you run a make clean in the mcl repo? Have you checked to make sure that the symbol in question is made global in the base32 object file? I checked it by doing something like this:

Determine the symbol that the linker is complaining about:

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# objdump -r obj/base32.o | grep 253f0
000253f0 UNKNOWN           $mulPv288x32

Then check to see if it is global (t -> private and T -> global):

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# nm obj/base32.o |grep mulPv288x32
00025208 t $mulPv288x32

Or inspect your base32.ll file ( I have both versions saved for comparison ):

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# cat ../base32-private.ll |grep -E "define.*mulPv288x32"
define private i320 @mulPv288x32(i32* noalias  %r2, i32 %r3)
root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# cat ../base32.ll |grep -E "define.*mulPv288x32"
define i320 @mulPv288x32(i32* noalias  %r2, i32 %r3)

Anyways, I know you know all this stuff ... just trying to help. The following is my attempt to recreate your environment and to see if I have the same problem.

I switched to your bls-eth-go-binary dev branch to test it:

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# git remote -v
origin  https://github.com/herumi/bls-eth-go-binary.git (fetch)
origin  https://github.com/herumi/bls-eth-go-binary.git (push)
root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# git fetch origin dev
From https://github.com/herumi/bls-eth-go-binary
 * branch            dev        -> FETCH_HEAD
root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# git checkout dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'

I cleared out all build artifacts from both repos (just in case):

cd ../mcl && make clean  && cd ../bls-eth-go-binary-dev && rm -f obj/* && rm -f bls/lib/linux/mipsle/libbls384_256.a && rm -f sample

Built the gen executable and generated base32.ll:

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# make ../mcl/src/base32.ll
make -C ../mcl src/base32.ll BIT=32
make[1]: Entering directory '/root/work/mcl'
g++ -o src/gen src/gen.cpp -g3 -Wall -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wfloat-equal -Wpointer-arith -m64 -I include -I test -fomit-frame-pointer -DNDEBUG -fno-stack-protector -Ofast  -DMCL_DONT_USE_OPENSSL -fPIC -DMCL_USE_LLVM=1
src/gen -u 32 -f src/func.list > src/base32.ll
llvmVer=0x70
make[1]: Leaving directory '/root/work/mcl'

Generated the object files and stuffed them into an archive file (using your Makefile):

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# env CXX=clang++-10 BIT=32 ARCH=mipsel _OS=linux _ARCH=mipsle make MCL_USE_GMP=0 UNIT=4 CFLAGS_USER="-target mipsel-linux -fPIC"
mkdir -p bls/lib/linux/mipsle
clang++-10 -c -o obj/fp.o ../mcl/src/fp.cpp -std=c++03 -O3 -DNDEBUG -DMCL_DONT_USE_OPENSSL -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_USE_VINT -DMCL_SIZEOF_UNIT=4 -DMCL_VINT_FIXED_BUFFER -DMCL_MAX_BIT_SIZE=384 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -D_FORTIFY_SOURCE=0 -I../bls/include -I../mcl/include -DBLS_ETH -DBLS_SWAP_G -target mipsel-linux -fPIC
In file included from ../mcl/src/fp.cpp:1:
In file included from ../mcl/include/mcl/op.hpp:9:
In file included from ../mcl/include/mcl/gmp_util.hpp:17:
In file included from ../mcl/include/mcl/randgen.hpp:33:
../mcl/include/cybozu/random_generator.hpp:131:19: warning: using directive refers to implicitly-defined namespace 'std'
                using namespace std;
                                ^
1 warning generated.
clang++-10 -c -o obj/base32.o ../mcl/src/base32.ll -std=c++03 -O3 -DNDEBUG -DMCL_DONT_USE_OPENSSL -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_USE_VINT -DMCL_SIZEOF_UNIT=4 -DMCL_VINT_FIXED_BUFFER -DMCL_MAX_BIT_SIZE=384 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -D_FORTIFY_SOURCE=0 -I../bls/include -I../mcl/include -DBLS_ETH -DBLS_SWAP_G -target mipsel-linux -fPIC
clang: warning: argument unused during compilation: '-I ../bls/include' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-I ../mcl/include' [-Wunused-command-line-argument]
warning: overriding the module target triple with mipsel-unknown-linux [-Woverride-module]
1 warning generated.
clang++-10 -c -o obj/bls_c384_256.o ../bls/src/bls_c384_256.cpp -std=c++03 -O3 -DNDEBUG -DMCL_DONT_USE_OPENSSL -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_USE_VINT -DMCL_SIZEOF_UNIT=4 -DMCL_VINT_FIXED_BUFFER -DMCL_MAX_BIT_SIZE=384 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -D_FORTIFY_SOURCE=0 -I../bls/include -I../mcl/include -DBLS_ETH -DBLS_SWAP_G -target mipsel-linux -fPIC
ar r bls/lib/linux/mipsle/libbls384_256.a obj/bls_c384_256.o obj/fp.o obj/base32.o
ar: creating bls/lib/linux/mipsle/libbls384_256.a

Then I ran your go build command with one modification (i had to set CGO_LDFLAGS & CGO_LDLIBS):

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# env CC=mipsel-openwrt-linux-gcc CGO_ENABLED=1 GOOS=linux GOARCH=mipsle GOMIPS=softfloat CGO_LDFLAGS="-L/root/work/bls-eth-go-binary-dev/bls/lib/linux/mipsle" CGO_LDLIBS="-lbls384_256" go build examples/sample.go
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# runtime/cgo
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b034/_cgo_.o uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), bls/lib/linux/mipsle/libbls384_256.a(bls_c384_256.o) uses -mhard-float
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b034/_cgo_.o uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), bls/lib/linux/mipsle/libbls384_256.a(fp.o) uses -mhard-float
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b034/_cgo_.o uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), bls/lib/linux/mipsle/libbls384_256.a(base32.o) uses -mhard-float
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# github.com/herumi/bls-eth-go-binary/bls
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
# command-line-arguments
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b001/exe/a.out uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), /root/work/bls-eth-go-binary-dev/bls/lib/linux/mipsle/libbls384_256.a(bls_c384_256.o) uses -mhard-float
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b001/exe/a.out uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), /root/work/bls-eth-go-binary-dev/bls/lib/linux/mipsle/libbls384_256.a(fp.o) uses -mhard-float
/root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: Warning: $WORK/b001/exe/a.out uses -msoft-float (set by /root/source/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o), /root/work/bls-eth-go-binary-dev/bls/lib/linux/mipsle/libbls384_256.a(base32.o) uses -mhard-float

I verified that the symbol(s) in question were made global:

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# nm obj/base32.o |grep mulPv
00002f54 T mulPv128x32
000059d0 T mulPv160x32
00009d0c T mulPv192x32
00010504 T mulPv224x32
000197a8 T mulPv256x32
0002579c T mulPv288x32
0002f764 T mulPv320x32
00000ef4 T mulPv32x32
0003a514 T mulPv352x32
00049150 T mulPv384x32
00058c88 T mulPv416x32
0006df38 T mulPv448x32
00083314 T mulPv480x32
000a1668 T mulPv512x32
000c1b9c T mulPv544x32
000011fc T mulPv64x32
00001b98 T mulPv96x32

and double checked the file format of the generated build files:

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# file obj/*.o
obj/base32.o:       ELF 32-bit LSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), not stripped
obj/bls_c384_256.o: ELF 32-bit LSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), not stripped
obj/fp.o:           ELF 32-bit LSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), not stripped

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# objdump -a bls/lib/linux/mipsle/libbls384_256.a 
In archive bls/lib/linux/mipsle/libbls384_256.a:

bls_c384_256.o:     file format elf32-little
rw-r--r-- 0/0 562516 Jan  1 00:00 1970 bls_c384_256.o

fp.o:     file format elf32-little
rw-r--r-- 0/0 411180 Jan  1 00:00 1970 fp.o

base32.o:     file format elf32-little
rw-r--r-- 0/0 1005812 Jan  1 00:00 1970 base32.o

root@0fe82bf96b16:~/work/bls-eth-go-binary-dev# file sample
sample: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, not stripped

Finally, I successfully ran the sample app on the Lattice1 hardware:

BusyBox v1.28.3 () built-in shell (ash)

    __          __  __  _          ___
   / /   ____ _/ /_/ /_(_)_______ <  /
  / /   / __ `/ __/ __/ / ___/ _ \/ /
 / /___/ /_/ / /_/ /_/ / /__/  __/ /
/_____/\__,_/\__/\__/_/\___/\___/_/   
 -----------------------------------------------------
   Ω-ware: 0.3.2 b228
   Gridplus GCE Version: 0.48.1
 -----------------------------------------------------
root@Lattice-C23C:~# ./sample 
sample1
verify=true
sample2
sec:18e1c98dcf059b7f6422b06a6f29c4af9531ce476fd0bfc9f94eb0aae353498a
1.pub:89986c846dea23816ed8d03f5018cae8c741389944d6d1ca5bef897697048d790f6702183326bedc249da3a913c63fd1
1.pub x=&{{{{[a10bb4faea06fab8 7385ef9772954399 810a27a37059bdfd a9e6eb7bc68818d9 6afd898b566713d9 1b25d53eb7c0403]} {[f3a4a70ce89893d5 7ee10e92fc947cad 8afae32ce645d3cf 479e6acb9ea5d2fd a1727110b98975e7 17c84e4ada01ec0f]} {[493c3c75c1aefb7c d3868947b5050566 b7c3923f594c966e 613a251a77bffd37 35d7f203b7f442df cadfd132d4ec050]}}}}
2.pub:89986c846dea23816ed8d03f5018cae8c741389944d6d1ca5bef897697048d790f6702183326bedc249da3a913c63fd1
2.pub x=&{{{{[10ad5b4993ce5adb 61f35c5307a40479 6fad3ba0056328a 3b4ae6755411c470 d870c3b2e8002afe 74366bb94e96e4f]} {[e9b36bf6010dfd9f ed46a69687e30bb7 41c95f34d4d2ea93 9ab7fb296e80e45 a1a0bed7e29eabda 839a48281ce9faa]} {[760900000002fffd ebf4000bc40c0002 5f48985753c758ba 77ce585370525745 5c071a97a256ec6d 15f65ec3fa80e493]}}}}
P.X=09986c846dea23816ed8d03f5018cae8c741389944d6d1ca5bef897697048d790f6702183326bedc249da3a913c63fd1
P.Y=096928d462c31167c743bbd8a874d8cddc5357ff7d199dcc72adf27c9d5643ab71b90073c6b6601dde7b9339d9a2d6f9
P.Z=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
sample3
sec=0748d9d99f59ff1105d314967254398f2b6cedcb87925c23c999e990f3f29c6c
sample4
sec:4aac41b5cb665b93e031faa751944b1f14d77cb17322403cba8df1d6e4541a4d
pub:841c5235ec7f4eed02b3f3bb60622d3ed0aba74016f4850c6d7c962656a4b78d72a15caeef62dfe656d03990590c0026
sig:af7ab839885d3189502b1092895c4676357ef7a32863bd4253eb4c7ab12fc3aa5a9d9a82e1e641c1c85965c468e1d33018e8a0bbe1d4aef5e751b3c94876c4de312d7ccca34c9fe6b80d8dd00c6a499759cea7febfc661f80831f9547c158c84
root@Lattice-C23C:~# 

Did I miss anything?

herumi commented 3 years ago

Thank you for trying.

Just a guess, but did you run a make clean in the mcl repo?

Yes. The generated base32.dll contains

define i320 @mulPv288x32(i32* noalias  %r2, i32 %r3)
In file included from ../mcl/include/mcl/randgen.hpp:33:
../mcl/include/cybozu/random_generator.hpp:131:19: warning: using directive refers to implicitly-defined namespace 'std'
                using namespace std;
                                ^
1 warning generated.

In my environment, the warning is not printed. I guess that the clang version may be different. I'll check it.

jrhea commented 3 years ago

fyi, my env details

root@0fe82bf96b16:~# clang++-10 --version
Ubuntu clang version 10.0.1-++20200708123507+ef32c611aa2-1~exp1~20200707224105.191 
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
root@0fe82bf96b16:~# mipsel-openwrt-linux-gcc --version
mipsel-openwrt-linux-gcc (OpenWrt GCC 7.3.0 r7456-ddd04310cb) 7.3.0
root@0fe82bf96b16:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic
root@0fe82bf96b16:~# uname -a
Linux 0fe82bf96b16 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
herumi commented 3 years ago

By the way, the dev branch runs well on your environment, then may I move it to the master branch instead of your pull reqeust https://github.com/herumi/bls-eth-go-binary/pull/22 ?

jrhea commented 3 years ago

Ya, ofc. I would have changed the PR (or you could have) to reflect the changes you wanted, but the support for MIPS is the important thing. I appreciate your efforts.

fyi, i rebased from master to bring in your comment about the workaround. Can this PR be merged into master?

herumi commented 3 years ago

I've already merged your PR at https://github.com/herumi/mcl/commit/5b221f05eb1ff23d0002ff27a4df81e9e431b173 .