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

Reply via email to