Adrian Bunk: > ... testing 'quicksort2':/usr/bin/ld: quicksort2.o: relocation > R_ARM_THM_MOVW_ABS_NC against `cmp' can not be used when making a shared > object; recompile with -fPIC > quicksort2.o: error adding symbols: Bad value > collect2: error: ld returned 1 exit status > => failed > ... testing 'soli':/usr/bin/ld: soli.o: relocation R_ARM_THM_MOVW_ABS_NC > against `a local symbol' can not be used when making a shared object; > recompile with -fPIC > soli.o: error adding symbols: Bad value > collect2: error: ld returned 1 exit status > => failed > ... testing 'arith':/usr/bin/ld: arith.o: relocation R_ARM_THM_MOVW_ABS_NC > against `D' can not be used when making a shared object; recompile with -fPIC > arith.o: error adding symbols: Bad value > collect2: error: ld returned 1 exit status > => failed > ... testing 'tagged-integr':/usr/bin/ld: tagged-integr.o: relocation > R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a > shared object; recompile with -fPIC > tagged-integr.o: error adding symbols: Bad value > collect2: error: ld returned 1 exit status > => failed > > Several other testcases are building fine. > > The odd thing is that these worked on armel and arm64 but failed on armhf. > > Note that the "recompile with -fPIC" error message can be misleading. > It is also given when building binaries where only PIE is required > (which is the default in the gcc used). >
It's possible OCaml itself is to blame: asmcomp/arm/emit.mlp: if nh = 0l then begin ` movw {emit_reg dst}, #{emit_int32 nl}\n`; 1 end else if Int32.logand nl 0xffl = nl then begin ` movs {emit_reg dst}, #{emit_int32 nl}\n`; ` movt {emit_reg dst}, #{emit_int32 nh}\n`; 2 end else begin ` movw {emit_reg dst}, #{emit_int32 nl}\n`; ` movt {emit_reg dst}, #{emit_int32 nh}\n`; 2 end Judging by http://lists.denx.de/pipermail/u-boot/2013-September/163154.html this might be invalid for ARM and PIC. (sid_armhf-dchroot)infinity0@harris:~/ocaml/testsuite/tests/asmcomp$ rm quicksort2.s quicksort2.o (sid_armhf-dchroot)infinity0@harris:~/ocaml/testsuite/tests/asmcomp$ make CASES=quicksort2 MLCASES= MLCASES_FLAMBDA= make[1]: Entering directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' make[2]: Entering directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' make[2]: Nothing to be done for 'arch'. make[2]: 'codegen' is up to date. make[2]: Leaving directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' make[2]: Entering directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' ... testing 'quicksort2':make[3]: Entering directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' /usr/bin/ld: quicksort2.o: relocation R_ARM_THM_MOVW_ABS_NC against `cmp' can not be used when making a shared object; recompile with -fPIC quicksort2.o: error adding symbols: Bad value collect2: error: ld returned 1 exit status => failed make[3]: Leaving directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' make[2]: Leaving directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' make[1]: Leaving directory '/home/infinity0/ocaml/testsuite/tests/asmcomp' (sid_armhf-dchroot)infinity0@harris:~/ocaml/testsuite/tests/asmcomp$ grep -n mov[tw] quicksort2.s 138: movw r3, #:lower16:cmp 139: movt r3, #:upper16:cmp Could someone else more familiar with ARM and/or OCaml comment please? X -- GPG: ed25519/56034877E1F87C35 GPG: rsa4096/1318EFAC5FBBDBCE https://github.com/infinity0/pubkeys.git