You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 5404 Reporter: meurer Assigned to:@lefessan Status: closed (set by @lefessan on 2012-01-17T10:05:03Z) Resolution: fixed Priority: normal Severity: feature Version: 3.12.1 Category: ~DO NOT USE (was: OCaml general) Duplicate of:#5433 Monitored by: tgazagna @glondu@hcarty
Bug description
Hello,
I spent some time fixing the ARM compiler part to emit position-independent code in order to get proper support for natdynlink on ARM. The critical part is fixing the generated branches to use the PLT (cf. issue 5049), the other relocations seem to be handled properly, hence there's no need to use the GOT to access global variables. That does however require changes to the runtime interface as r12 is used as scratch register for the PLT slots. I fixed these by introducing two additional functions caml_invoke_gc and caml_c_invoke, which are similar to their caml_call_gc and caml_c_call counterparts, but do not use r12 for parameter passing. The old functions are provided for compatibility with existing code/libraries (and are used by the code generator when appropriate).
The attached patch contains the required changes to the runtime and the compiler toolchain. So far the stuff was tested with Debian squeeze armel running on QEMU and a NanosG20 SBC (ARM926EJ-S rev 5 (v5l)).
I did some tests on the ARM926EJ-S, and there seems to be no noticable performance hit (OLD is OCaml 3.12.1 without the patch, NEW is the patched OCaml generating PIC code):
Original bug ID: 5404
Reporter: meurer
Assigned to: @lefessan
Status: closed (set by @lefessan on 2012-01-17T10:05:03Z)
Resolution: fixed
Priority: normal
Severity: feature
Version: 3.12.1
Category: ~DO NOT USE (was: OCaml general)
Duplicate of: #5433
Monitored by: tgazagna @glondu @hcarty
Bug description
Hello,
I spent some time fixing the ARM compiler part to emit position-independent code in order to get proper support for natdynlink on ARM. The critical part is fixing the generated branches to use the PLT (cf. issue 5049), the other relocations seem to be handled properly, hence there's no need to use the GOT to access global variables. That does however require changes to the runtime interface as r12 is used as scratch register for the PLT slots. I fixed these by introducing two additional functions caml_invoke_gc and caml_c_invoke, which are similar to their caml_call_gc and caml_c_call counterparts, but do not use r12 for parameter passing. The old functions are provided for compatibility with existing code/libraries (and are used by the code generator when appropriate).
The attached patch contains the required changes to the runtime and the compiler toolchain. So far the stuff was tested with Debian squeeze armel running on QEMU and a NanosG20 SBC (ARM926EJ-S rev 5 (v5l)).
I did some tests on the ARM926EJ-S, and there seems to be no noticable performance hit (OLD is OCaml 3.12.1 without the patch, NEW is the patched OCaml generating PIC code):
File OLD NEW
bdd.ml 16.880 16.660
boyer.ml 16.980 16.760
fft.ml 55.270 54.820
nucleic.ml 187.280 187.200
quicksort.ml 3.990 4.000
sieve.ml 0.330 0.340
soli.ml 0.150 0.160
sorts.ml 75.230 73.350
File attachments
The text was updated successfully, but these errors were encountered: