Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15
ocaml
ocaml-fix_aarch64_build.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ocaml-fix_aarch64_build.patch of Package ocaml
diff -purN ocaml-4.05.0.orig/asmcomp/arm64/emit.mlp ocaml-4.05.0/asmcomp/arm64/emit.mlp --- ocaml-4.05.0.orig/asmcomp/arm64/emit.mlp 2018-07-02 14:14:33.662238577 +0200 +++ ocaml-4.05.0/asmcomp/arm64/emit.mlp 2018-07-02 14:14:43.762280689 +0200 @@ -114,6 +114,7 @@ let emit_addressing addr r = | Iindexed ofs -> `[{emit_reg r}, #{emit_int ofs}]` | Ibased(s, ofs) -> + assert (not !Clflags.dlcode); (* see selection.ml *) `[{emit_reg r}, #:lo12:{emit_symbol_offset s ofs}]` (* Record live pointers at call points *) @@ -323,7 +324,7 @@ let emit_literals() = (* Emit code to load the address of a symbol *) let emit_load_symbol_addr dst s = - if (not !Clflags.dlcode) || Compilenv.symbol_in_current_unit s then begin + if not !Clflags.dlcode then begin ` adrp {emit_reg dst}, {emit_symbol s}\n`; ` add {emit_reg dst}, {emit_reg dst}, #:lo12:{emit_symbol s}\n` end else begin @@ -609,6 +610,7 @@ let emit_instr i = match addr with | Iindexed _ -> i.arg.(0) | Ibased(s, ofs) -> + assert (not !Clflags.dlcode); (* see selection.ml *) ` adrp {emit_reg reg_tmp1}, {emit_symbol_offset s ofs}\n`; reg_tmp1 in begin match size with @@ -636,6 +638,7 @@ let emit_instr i = match addr with | Iindexed _ -> i.arg.(1) | Ibased(s, ofs) -> + assert (not !Clflags.dlcode); ` adrp {emit_reg reg_tmp1}, {emit_symbol_offset s ofs}\n`; reg_tmp1 in begin match size with @@ -924,7 +927,15 @@ let fundecl fundecl = let emit_item = function | Cglobal_symbol s -> ` .globl {emit_symbol s}\n`; - | Cdefine_symbol s -> `{emit_symbol s}:\n` + | Cdefine_symbol s -> + if !Clflags.dlcode then begin + (* GOT relocations against non-global symbols don't seem to work + properly: GOT entries are not created for the symbols and the + relocations evaluate to random other GOT entries. For the moment + force all symbols to be global. *) + ` .globl {emit_symbol s}\n`; + end; + `{emit_symbol s}:\n` | Cint8 n -> ` .byte {emit_int n}\n` | Cint16 n -> ` .short {emit_int n}\n` | Cint32 n -> ` .long {emit_nativeint n}\n` diff -purN ocaml-4.05.0.orig/asmcomp/arm64/selection.ml ocaml-4.05.0/asmcomp/arm64/selection.ml --- ocaml-4.05.0.orig/asmcomp/arm64/selection.ml 2018-07-02 14:14:33.662238577 +0200 +++ ocaml-4.05.0/asmcomp/arm64/selection.ml 2018-07-02 14:14:43.762280689 +0200 @@ -82,8 +82,8 @@ let inline_ops = [ "sqrt"; "caml_bswap16_direct"; "caml_int32_direct_bswap"; "caml_int64_direct_bswap"; "caml_nativeint_direct_bswap" ] -let use_direct_addressing symb = - (not !Clflags.dlcode) || Compilenv.symbol_in_current_unit symb +let use_direct_addressing _symb = + not !Clflags.dlcode (* Instruction selection *) diff -purN ocaml-4.05.0.orig/Changes ocaml-4.05.0/Changes --- ocaml-4.05.0.orig/Changes 2018-07-02 14:14:33.612238369 +0200 +++ ocaml-4.05.0/Changes 2018-07-02 14:14:43.762280689 +0200 @@ -135,6 +135,10 @@ OCaml 4.05.0 (13 Jul 2017): (Hannes Mehnert, Guillaume Bury, review by Daniel Bünzli, Gabriel Scherer, Damien Doligez) +- GPR#1330: when generating dynamically-linkable code on AArch64, always + reference symbols (even locally-defined ones) through the GOT. + (Mark Shinwell, review by Xavier Leroy) + ### Standard library: - MPR#6975, GPR#902: Truncate function added to stdlib Buffer module
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor