From cf41d3d77da265d633dc5344d90ce7e1dc4fef7d Mon Sep 17 00:00:00 2001 From: Richard W.M. Jones Date: Aug 04 2020 13:25:18 +0000 Subject: Enable LTO again. NOTE: I did not build this in Rawhide, because building it appears to change some of the ocamlx() dependencies, which would require everything in Rawhide to be rebuilt. I will build all OCaml packages in Rawhide once OCaml 4.11.0 has been released which should be in a week or two. --- diff --git a/0001-Don-t-add-rpaths-to-libraries.patch b/0001-Don-t-add-rpaths-to-libraries.patch index 281cb7c..2149b6d 100644 --- a/0001-Don-t-add-rpaths-to-libraries.patch +++ b/0001-Don-t-add-rpaths-to-libraries.patch @@ -1,7 +1,7 @@ From 1b1a2ad3294327e5bbbc753f306d1199b0a2a583 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 24 Jun 2014 10:00:15 +0100 -Subject: [PATCH 1/7] Don't add rpaths to libraries. +Subject: [PATCH 1/8] Don't add rpaths to libraries. --- tools/Makefile | 4 ++-- @@ -23,5 +23,5 @@ index 96a4244cc..076411a91 100644 > ocamlmklibconfig.ml -- -2.24.1 +2.28.0.rc2 diff --git a/0002-configure-Allow-user-defined-C-compiler-flags.patch b/0002-configure-Allow-user-defined-C-compiler-flags.patch index 3ffd213..1ce4168 100644 --- a/0002-configure-Allow-user-defined-C-compiler-flags.patch +++ b/0002-configure-Allow-user-defined-C-compiler-flags.patch @@ -1,7 +1,7 @@ From 8ea0bc7713a89cd6340e35b4dae048be63c50aec Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 29 May 2012 20:44:18 +0100 -Subject: [PATCH 2/7] configure: Allow user defined C compiler flags. +Subject: [PATCH 2/8] configure: Allow user defined C compiler flags. --- configure.ac | 4 ++++ @@ -23,5 +23,5 @@ index fbd49c1ee..a35da2040 100644 # Enable SSE2 on x86 mingw to avoid using 80-bit registers. -- -2.24.1 +2.28.0.rc2 diff --git a/0003-configure-Remove-incorrect-assumption-about-cross-co.patch b/0003-configure-Remove-incorrect-assumption-about-cross-co.patch index 2b6d384..d41e1b2 100644 --- a/0003-configure-Remove-incorrect-assumption-about-cross-co.patch +++ b/0003-configure-Remove-incorrect-assumption-about-cross-co.patch @@ -1,7 +1,7 @@ From 39df379f1aa139a073d7b436bb9bd33ef2f70caf Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 26 Apr 2019 16:16:29 +0100 -Subject: [PATCH 3/7] configure: Remove incorrect assumption about +Subject: [PATCH 3/8] configure: Remove incorrect assumption about cross-compiling. See https://github.com/ocaml/ocaml/issues/8647#issuecomment-487094390 @@ -39,5 +39,5 @@ index a35da2040..4c9358897 100644 # We first compute default values for as and aspp # If values have been given by the user then they take precedence over -- -2.24.1 +2.28.0.rc2 diff --git a/0004-Remove-configure-from-.gitattributes.patch b/0004-Remove-configure-from-.gitattributes.patch index eb562e5..881c81d 100644 --- a/0004-Remove-configure-from-.gitattributes.patch +++ b/0004-Remove-configure-from-.gitattributes.patch @@ -1,7 +1,7 @@ From e829051c3b35920db3c5e0dd913026f556448675 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sat, 18 Jan 2020 11:31:27 +0000 -Subject: [PATCH 4/7] Remove configure from .gitattributes. +Subject: [PATCH 4/8] Remove configure from .gitattributes. It's not a binary file. --- @@ -24,5 +24,5 @@ index 200eb49c6..d871764de 100644 # http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/ /.mailmap merge=union -- -2.24.1 +2.28.0.rc2 diff --git a/0005-Add-RISC-V-native-code-backend-9441.patch b/0005-Add-RISC-V-native-code-backend-9441.patch index f466fdd..1e2904f 100644 --- a/0005-Add-RISC-V-native-code-backend-9441.patch +++ b/0005-Add-RISC-V-native-code-backend-9441.patch @@ -1,7 +1,7 @@ From 1a0ca036e40cbd701cbe3f0e5cf5e2a6b6d4c804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ojeda=20B=C3=A4r?= Date: Fri, 24 Apr 2020 16:04:50 +0200 -Subject: [PATCH 5/7] Add RISC-V native-code backend (#9441) +Subject: [PATCH 5/8] Add RISC-V native-code backend (#9441) This is a port of ocamlopt for the RISC-V processor in 64-bit mode. @@ -2008,5 +2008,5 @@ index 000000000..efb30a80f +caml_c_call: + jr t2 -- -2.24.1 +2.28.0.rc2 diff --git a/0006-Support-FP-reg-int-reg-moves.patch b/0006-Support-FP-reg-int-reg-moves.patch index 1a0f343..1138515 100644 --- a/0006-Support-FP-reg-int-reg-moves.patch +++ b/0006-Support-FP-reg-int-reg-moves.patch @@ -1,7 +1,7 @@ From d26a313ae92bb515b04865b6a71a63701dd1fe41 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Thu, 30 Apr 2020 16:18:06 +0200 -Subject: [PATCH 6/7] Support FP reg -> int reg moves +Subject: [PATCH 6/8] Support FP reg -> int reg moves Using instruction fmv.x.d. @@ -30,5 +30,5 @@ index dc652de42..dbfdc2d40 100644 let ofs = slot_offset s (register_class dst) in emit_store src ofs -- -2.24.1 +2.28.0.rc2 diff --git a/0007-Update-C-calling-conventions-to-the-RISC-V-ELF-psABI.patch b/0007-Update-C-calling-conventions-to-the-RISC-V-ELF-psABI.patch index 8160e82..e60f1ef 100644 --- a/0007-Update-C-calling-conventions-to-the-RISC-V-ELF-psABI.patch +++ b/0007-Update-C-calling-conventions-to-the-RISC-V-ELF-psABI.patch @@ -1,7 +1,7 @@ From 5bc92d0cdb5cb26b8d8d517f30914c2b18e85f2b Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Thu, 30 Apr 2020 16:19:16 +0200 -Subject: [PATCH 7/7] Update C calling conventions to the RISC-V ELF psABI +Subject: [PATCH 7/8] Update C calling conventions to the RISC-V ELF psABI The original implementation of loc_external_arguments and loc_external_results was following an older ABI, @@ -55,5 +55,5 @@ index 70909cd83..4c7b58612 100644 loc.(i) <- [| stack_slot (make_stack !ofs) Float |]; ofs := !ofs + size_float -- -2.24.1 +2.28.0.rc2 diff --git a/0008-runtime-major_gc.c-Declare-caml_fl_merge-with-proper.patch b/0008-runtime-major_gc.c-Declare-caml_fl_merge-with-proper.patch new file mode 100644 index 0000000..aafe0c0 --- /dev/null +++ b/0008-runtime-major_gc.c-Declare-caml_fl_merge-with-proper.patch @@ -0,0 +1,49 @@ +From 7364f5081851fe306802883d9a8069da559d4973 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 4 Aug 2020 12:26:12 +0100 +Subject: [PATCH 8/8] runtime/major_gc.c: Declare caml_fl_merge with proper + type. + +When compiling OCaml with LTO enabled (as is now done routinely in +Fedora and OpenSUSE) we got a failure because the caml_fl_merge symbol +is not declared identically across compilation units. The simple fix +is to make sure the declarations are identical, although probably +moving the definition to a common header file would be a better +long-term fix. + +major_gc.c:66:14: warning: type of 'caml_fl_merge' does not match original declaration [-Wlto-type-mismatch] + 66 | extern char *caml_fl_merge; /* Defined in freelist.c. */ + | ^ +freelist.c:47:7: note: 'caml_fl_merge' was previously declared here + 47 | value caml_fl_merge = Val_NULL; /* Current insertion pointer. Managed + | ^ +freelist.c:47:7: note: code may be misoptimized unless '-fno-strict-aliasing' is used +--- + runtime/major_gc.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/runtime/major_gc.c b/runtime/major_gc.c +index 5e4f06bce..c8f5a3281 100644 +--- a/runtime/major_gc.c ++++ b/runtime/major_gc.c +@@ -63,7 +63,7 @@ uintnat caml_dependent_size, caml_dependent_allocated; + double caml_extra_heap_resources; + uintnat caml_fl_wsz_at_phase_change = 0; + +-extern char *caml_fl_merge; /* Defined in freelist.c. */ ++extern value caml_fl_merge; /* Defined in freelist.c. */ + + static char *markhp, *chunk, *limit; + static double p_backlog = 0.0; /* backlog for the gc speedup parameter */ +@@ -570,7 +570,7 @@ static void sweep_slice (intnat work) + break; + case Caml_blue: + /* Only the blocks of the free-list are blue. See [freelist.c]. */ +- caml_fl_merge = Bp_hp (hp); ++ caml_fl_merge = (value) Bp_hp (hp); + break; + default: /* gray or black */ + CAMLassert (Color_hd (hd) == Caml_black); +-- +2.28.0.rc2 + diff --git a/ocaml.spec b/ocaml.spec index 9d62c2c..928b035 100644 --- a/ocaml.spec +++ b/ocaml.spec @@ -31,7 +31,7 @@ Name: ocaml Version: 4.11.0 -Release: 0.8.dev2%{?dist} +Release: 0.9.dev2%{?dist} Summary: OCaml compiler and programming environment @@ -69,6 +69,9 @@ Patch0005: 0005-Add-RISC-V-native-code-backend-9441.patch Patch0006: 0006-Support-FP-reg-int-reg-moves.patch Patch0007: 0007-Update-C-calling-conventions-to-the-RISC-V-ELF-psABI.patch +# Fix compilation with LTO (sent upstream 2020-08-04). +Patch0008: 0008-runtime-major_gc.c-Declare-caml_fl_merge-with-proper.patch + BuildRequires: git BuildRequires: gcc BuildRequires: autoconf @@ -174,12 +177,6 @@ autoconf --force %build -# This package fails to build with LTO due to undefined symbols. LTO -# was disabled in OpenSuSE as well, but with no real explanation why -# beyond the undefined symbols. It really shold be investigated further. -# Disable LTO -%define _lto_cflags %{nil} - %ifnarch %{no_parallel_build_arches} make="%make_build" %else @@ -381,8 +378,9 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/ocaml/eventlog_metadata %changelog -* Tue Aug 04 2020 Richard W.M. Jones - 4.11.0-0.8.dev2 +* Tue Aug 04 2020 Richard W.M. Jones - 4.11.0-0.9.dev2 - Bump and rebuild to fix DWARF versioning issues. +- Enable LTO again. * Tue Jul 28 2020 Fedora Release Engineering - 4.11.0-0.7.dev2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild