Compare commits

...
Sign in to create a new pull request.

15 commits

Author SHA1 Message Date
Fedora Release Engineering
cba5f7abbe Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-16 09:52:03 +00:00
Jerry James
b015f12145 New upstream version 5.5.0 (RHBZ#2442622)
- Drop upstreamed fix for arm64 frame pointers
- Reenable LTO
- Move ld.conf, libasmrun, and libcamlrun to ocaml-runtime
- Drop hardlink dependency; rpm now does this by default
- Drop unused utilx-linux dependency
2026-07-09 08:36:23 -06:00
Richard W.M. Jones
5a8dd543c6 Backport fix for arm64 frame pointers 2026-02-26 12:59:34 +00:00
Richard W.M. Jones
2e0cb1fe44 Fix version in changelog - current version is 5.4.1, not 5.4.0
Fixes: commit e3af15bd11
2026-02-26 12:57:23 +00:00
Richard W.M. Jones
e3af15bd11 New upstream version 5.4.0 (RHBZ#2440356) 2026-02-20 11:20:03 +00:00
Richard W.M. Jones
360b98ce78 Enable frame pointers on aarch64
Suggested-by: Jerry James
2026-02-18 17:53:18 +00:00
Richard W.M. Jones
ee9df08052 Replace x86_64 with %{x86_64}
On Rawhide this macro expands to:

  x86_64 x86_64_v2 x86_64_v3 x86_64_v4 amd64 em64t

Suggested-by: Jerry James
2026-02-18 17:52:32 +00:00
Richard W.M. Jones
c129230259 Move bundle to the -runtime subpackage
Suggested-by: Jerry James
2026-02-18 17:51:10 +00:00
Fedora Release Engineering
aa50731ee3 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-16 22:24:41 +00:00
Richard W.M. Jones
ebbc5125da Fix branch name in comment 2025-10-13 11:17:54 +01:00
Richard W.M. Jones
bc284a4d37 New upstream version 5.4.0 (RHBZ#2368289) 2025-10-13 11:02:33 +01:00
Fedora Release Engineering
b9c837a453 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 23:06:40 +00:00
Yaakov Selkowitz
5b0d3a3f5d Fix RPM macros for Python 3.14
A change to argparse in 3.14 is leading it to misinterpret the '%' in
'%files' as an operator.  Escaping it makes it compatible with both 3.14
and earlier versions.
2025-06-22 15:52:34 -04:00
Fedora Release Engineering
9d17af02a5 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 20:40:47 +00:00
Jerry James
5018fa7019 New upstream version 5.3.0
- Drop upstreamed patches
- BR git-core instead of git
2025-01-09 08:24:42 -07:00
11 changed files with 92 additions and 1164 deletions

View file

@ -1,90 +0,0 @@
From 5538fa66e94fad3d2b4f110d23bef3b4d2d6342c Mon Sep 17 00:00:00 2001
From: Florian Angeletti <florian.angeletti@inria.fr>
Date: Mon, 13 May 2024 11:39:37 +0200
Subject: [PATCH 1/7] Changes: synchronisation and consistency with trunk
---
Changes | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/Changes b/Changes
index 208d5e8697..1af198ba77 100644
--- a/Changes
+++ b/Changes
@@ -140,9 +140,6 @@ OCaml 5.2.0
(Guillaume Munch-Maccagnoni, bug reports and suggestion by Mark
Shinwell, review by Nick Barnes and Stephen Dolan)
-- #12876: Port ThreadSanitizer support to Linux on POWER
- (Miod Vallat, review by Tim McGilchrist)
-
- #12408: `Domain.spawn` no longer leaks its functional argument for
the whole duration of the children domain lifetime.
(Guillaume Munch-Maccagnoni, review by Gabriel Scherer)
@@ -156,8 +153,10 @@ OCaml 5.2.0
review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc
Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer)
-- #11911, #12381: Restore statmemprof functionality in part
- (API changes in Gc.Memprof). (Nick Barnes)
+- #11911, #12381: Restore statmemprof functionality in part, with
+ some API changes in Gc.Memprof.
+ (Nick Barnes, review by Jacques-Henri Jourdan
+ and Guillaume Munch-Maccagnoni).
- #12430: Simplify dynamic bytecode loading in Meta.reify_bytecode
(Stephen Dolan, review by Sébastien Hinderer, Vincent Laviron and Xavier
@@ -216,9 +215,10 @@ OCaml 5.2.0
Ojeda Bar)
- #11911, #12382, #12383: Restore statmemprof functionality in part
- (backtrace buffers, per-thread and per-domain data structures).
- (Nick Barnes, review by Gabriel Scherer, Fabrice Buoro, Sadiq
- Jaffer, and Guillaume Munch-Maccagnoni).
+ (backtrace buffers, per-thread and per-domain data structures,
+ GC/allocation interface). (Nick Barnes, review by Gabriel Scherer,
+ Fabrice Buoro, Sadiq Jaffer, Guillaume Munch-Maccagnoni, and
+ Jacques-Henri Jourdan).
- #12735: Store both ends of the stack chain in continuations
(Leo White, review by Miod Vallat and KC Sivaramakrishnan)
@@ -248,6 +248,9 @@ OCaml 5.2.0
Hari Hara Naveen S, reviewed by Fabrice Buoro, Gabriel Scherer and
Miod Vallat)
+- #12876: Port ThreadSanitizer support to Linux on POWER
+ (Miod Vallat, review by Tim McGilchrist)
+
- #12886: Reinitialize IO mutexes after fork
(Max Slater, review by Guillaume Munch-Maccagnoni and Xavier Leroy)
@@ -990,7 +993,7 @@ OCaml 5.1.0 (14 September 2023)
`Seq.find_mapi`, `Seq.find_index`, `Array.find_mapi`, `Array.find_index`,
`Float.Array.find_opt`, `Float.Array.find_index`, `Float.Array.find_map`,
`Float.Array.find_mapi`.
- (Sima Kinsart, review by Daniel Bünzli and Nicolás Ojeda Bär)
+ (Tima Kinsart, review by Daniel Bünzli and Nicolás Ojeda Bär)
- #11410: Add Set.to_list, Map.to_list, Map.of_list,
`Map.add_to_list: key -> 'a -> 'a list t -> 'a list t`.
@@ -1771,7 +1774,7 @@ Some of those changes will benefit all OCaml packages.
- #11846: Mark rbx as destroyed at C call for Win64 (mingw-w64 and Cygwin64).
Reserve the shadow store for the ABI in the c_stack_link struct instead of
- explictly when calling C functions. This simultaneously reduces the number of
+ explicitly when calling C functions. This simultaneously reduces the number of
stack pointer manipulations and also fixes a bug when calling noalloc
functions where the shadow store was not being reserved.
(David Allsopp, report by Vesa Karvonen, review by Xavier Leroy and
@@ -2791,7 +2794,7 @@ OCaml 4.14.0 (28 March 2022)
- #8516: Change representation of class signatures
(Leo White, review by Thomas Refis)
-- #9444: -dtypedtree, print more explictly extra nodes in pattern ast.
+- #9444: -dtypedtree, print more explicitly extra nodes in pattern ast.
(Frédéric Bour, review by Gabriel Scherer)
- #10337: Normalize type_expr nodes on access
--
2.44.0

View file

@ -1,17 +1,17 @@
From 507a1382cb82160c2a6cfc0ea5bcb3e33ece7307 Mon Sep 17 00:00:00 2001
From 04e523e937625bf30d775681c11e00f6dc6fc00a Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 24 Jun 2014 10:00:15 +0100
Subject: [PATCH 3/7] Don't add rpaths to libraries.
Subject: [PATCH 1/2] Don't add rpaths to libraries.
---
configure.ac | 2 --
1 file changed, 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 0c9d63859a..48aa9f0a29 100644
index 3754ad8a39..fb60c7c14c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1221,8 +1221,6 @@ AS_IF([test x"$enable_shared" != "xno"],
@@ -1422,8 +1422,6 @@ AS_IF([test x"$enable_shared" != "xno"],
[[*-*-openbsd7.[3-9]|*-*-openbsd[89].*]],
[mkdll_flags="${mkdll_flags} -Wl,--no-execute-only"])
oc_ldflags="$oc_ldflags -Wl,-E"
@ -21,5 +21,5 @@ index 0c9d63859a..48aa9f0a29 100644
supports_shared_libraries=true],
[mkdll='shared-libs-not-available'])
--
2.44.0
2.52.0

View file

@ -1,515 +0,0 @@
From 7a20c9322f827923baa6a9907998f670463ce447 Mon Sep 17 00:00:00 2001
From: Florian Angeletti <florian.angeletti@inria.fr>
Date: Mon, 13 May 2024 14:28:08 +0200
Subject: [PATCH 2/7] Changes copy-editing
---
Changes | 398 ++++++++++++++++++++++++++++----------------------------
1 file changed, 201 insertions(+), 197 deletions(-)
diff --git a/Changes b/Changes
index 1af198ba77..75842fc216 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,5 @@
-OCaml 5.2.0
-------------
+OCaml 5.2.0 (13 May 2024)
+-------------------------
(Changes that can break existing programs are marked with a "*")
@@ -12,60 +12,6 @@ OCaml 5.2.0
- #12667: extend the latter to POWER 64 bits, big-endian, ELFv2 ABI
(A. Wilcox, review by Xavier Leroy)
-### Language features:
-
-- #12295, #12568: Give `while true' a polymorphic type, similarly to
- `assert false'
- (Jeremy Yallop, review by Nicolás Ojeda Bär and Gabriel Scherer,
- suggestion by Rodolphe Lepigre and John Whitington)
-
-- #12315: Use type annotations from arguments in let rec
- (Stephen Dolan, review by Gabriel Scherer)
-
-- #11252, RFC 27: Support raw identifier syntax \#foo
- (Stephen Dolan, review by David Allsopp, Gabriel Scherer and Olivier Nicole)
-
-- #12044: Add local module open syntax for types.
- ```
- module A = struct
- type t = int
- type r = unit
- type s = string
- end
-
- type example = A.(t * r * s)
- ```
- (Alistair O'Brien, review by Gabriel Scherer, Nicolás Ojeda Bär
- and Florian Angeletti)
-
-- #12456: Document the incompatibility between effects on the one
- hand, and `caml_callback` and asynchronous callbacks (signal
- handlers, finalisers, memprof callbacks...) on the other hand.
- (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan)
-
-- #12375: allow use of [@untagged] for all immediate types like char, bool,
- and variant with only constant constructors.
- (Christophe Raffalli, review by Gabriel Scherer)
-
-* #12502: the compiler now normalizes the newline sequence \r\n to
- a single \n character during lexing, to guarantee that the semantics
- of newlines in string literals is not modified by Windows tools
- transforming \n into \r\n in source files.
- Warning 29 [eol-in-string] is not emitted anymore, as the normalization
- gives a more robust semantics to newlines in string literals.
- (Gabriel Scherer and Damien Doligez, review by Daniel Bünzli, David
- Allsopp, Andreas Rossberg, Xavier Leroy, report by Andreas Rossberg)
-
-- #13130: minor fixes to pprintast for raw identifiers and local module open
- syntax for types.
- (Chet Murthy, review by Gabriel Scherer)
-
-### Type system:
-
-- #12313, #11799: Do not re-build as-pattern type when a ground type annotation
- is given. This allows to work around problems with GADTs in as-patterns.
- (Jacques Garrigue, report by Leo White, review by Gabriel Scherer)
-
### Runtime system:
- #12193: Re-introduce GC compaction for shared pools
@@ -76,6 +22,12 @@ OCaml 5.2.0
David Allsopp, Miod Vallat, Artem Pianykh, Stephen Dolan, Mark Shinwell
and KC Sivaramakrishnan)
+- #12114: Add ThreadSanitizer support
+ (Fabrice Buoro and Olivier Nicole, based on an initial work by Anmol Sahoo,
+ review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc
+ Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer)
+
+
- #12850: Update Gc.quick_stat data at the end of major cycles and compaction
This PR adds an additional caml_collect_gc_stats_sample_stw to the major heap
cycling stw. This means that Gc.quick_stat now actually reflects the state of
@@ -148,11 +100,6 @@ OCaml 5.2.0
arise at specific locations during domain creation and shutdown.
(Guillaume Munch-Maccagnoni, review by Gabriel Scherer)
-- #12114: Add ThreadSanitizer support
- (Fabrice Buoro and Olivier Nicole, based on an initial work by Anmol Sahoo,
- review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc
- Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer)
-
- #11911, #12381: Restore statmemprof functionality in part, with
some API changes in Gc.Memprof.
(Nick Barnes, review by Jacques-Henri Jourdan
@@ -264,34 +211,48 @@ OCaml 5.2.0
(Olivier Nicole, suggested by Stephen Dolan, review by Gabriel Scherer,
Miod Vallat and Damien Doligez)
-### Code generation and optimizations:
+### Language features:
-- #11239: on x86-64 and RISC-V, reduce alignment of OCaml stacks from 16 to 8.
- This reduces stack usage. It's only C stacks that require 16-alignment.
- (Xavier Leroy, review by Gabriel Scherer and Stephen Dolan)
+- #12295, #12568: Give `while true' a polymorphic type, similarly to
+ `assert false'
+ (Jeremy Yallop, review by Nicolás Ojeda Bär and Gabriel Scherer,
+ suggestion by Rodolphe Lepigre and John Whitington)
-- #12311: on POWER, 32-bit FP numbers stored in memory (e.g. in bigarrays)
- were not correctly rounded sometimes.
- (Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist)
+- #12044: Add local module open syntax for types.
+ ```
+ module A = struct
+ type t = int
+ type r = unit
+ type s = string
+ end
-- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation.
- Non-function recursive bindings are now forbidden from Lambda onwards,
- and compiled using a new Value_rec_compiler module.
- (Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer,
- Stefan Muenzel and Nathanaëlle Courant)
+ type example = A.(t * r * s)
+ ```
+ (Alistair O'Brien, review by Gabriel Scherer, Nicolás Ojeda Bär
+ and Florian Angeletti)
-- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers
- (Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron)
+- #11252, RFC 27: Support raw identifier syntax \#foo
+ (Stephen Dolan, review by David Allsopp, Gabriel Scherer and Olivier Nicole)
-- #12825: disable common subexpression elimination for atomic loads... again.
- (Gabriel Scherer, review by KC Sivaramakrishnan, Xavier Leroy
- and Vincent Laviron, report by Vesa Karvonen)
+
+- #12315: Use type annotations from arguments in let rec
+ (Stephen Dolan, review by Gabriel Scherer)
+
+- #12375: allow use of [@untagged] for all immediate types like char, bool,
+ and variant with only constant constructors.
+ (Christophe Raffalli, review by Gabriel Scherer)
+
+* #12502: the compiler now normalizes the newline sequence \r\n to
+ a single \n character during lexing, to guarantee that the semantics
+ of newlines in string literals is not modified by Windows tools
+ transforming \n into \r\n in source files.
+ Warning 29 [eol-in-string] is not emitted anymore, as the normalization
+ gives a more robust semantics to newlines in string literals.
+ (Gabriel Scherer and Damien Doligez, review by Daniel Bünzli, David
+ Allsopp, Andreas Rossberg, Xavier Leroy, report by Andreas Rossberg)
### Standard library:
-- #12716: Add `Format.pp_print_nothing` function.
- (Léo Andrès, review by Gabriel Scherer and Nicolás Ojeda Bär)
-
- #11563: Add the Dynarray module to the stdlib. Dynamic arrays are
arrays whose length can be changed by adding or removing elements at
the end, similar to 'vectors' in C++ or Rust.
@@ -299,6 +260,10 @@ OCaml 5.2.0
Daniel Bünzli, Guillaume Munch-Maccagnoni, Clément Allain,
Damien Doligez, Wiktor Kuchta and Pieter Goetschalckx)
+
+- #12716: Add `Format.pp_print_nothing` function.
+ (Léo Andrès, review by Gabriel Scherer and Nicolás Ojeda Bär)
+
* #6732, #12423: Make Buffer.add_substitute surjective and fix its
documentation.
(Damien Doligez, review by Antonin Décimo)
@@ -380,6 +345,35 @@ OCaml 5.2.0
C API.
(David Allsopp, review by Nicolás Ojeda Bär and Xavier Leroy)
+### Type system:
+
+- #12313, #11799: Do not re-build as-pattern type when a ground type annotation
+ is given. This allows to work around problems with GADTs in as-patterns.
+ (Jacques Garrigue, report by Leo White, review by Gabriel Scherer)
+
+### Code generation and optimizations:
+
+- #11239: on x86-64 and RISC-V, reduce alignment of OCaml stacks from 16 to 8.
+ This reduces stack usage. It's only C stacks that require 16-alignment.
+ (Xavier Leroy, review by Gabriel Scherer and Stephen Dolan)
+
+- #12311: on POWER, 32-bit FP numbers stored in memory (e.g. in bigarrays)
+ were not correctly rounded sometimes.
+ (Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist)
+
+- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation.
+ Non-function recursive bindings are now forbidden from Lambda onwards,
+ and compiled using a new Value_rec_compiler module.
+ (Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer,
+ Stefan Muenzel and Nathanaëlle Courant)
+
+- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers
+ (Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron)
+
+- #12825: disable common subexpression elimination for atomic loads... again.
+ (Gabriel Scherer, review by KC Sivaramakrishnan, Xavier Leroy
+ and Vincent Laviron, report by Vesa Karvonen)
+
### Other libraries:
- #12213: Dynlink library, improve legibility of error messages
@@ -390,98 +384,14 @@ OCaml 5.2.0
instead of `value`.
(Xavier Leroy, review by David Allsopp)
-### Tools:
-
-- #12340: testsuite: collect known issues with current -short-paths
- implementation for existential types
- (Florian Angeletti, Samuel Hym, review by Florian Angeletti and Thomas Refis)
-
-- #12147: ocamllex: Allow carriage returns at the end of line directives.
- (SeungCheol Jung, review by Nicolás Ojeda Bär)
-
-- #12260: Fix invalid_argument on some external or module aliases in ocamlnat
- (Fabian Hemmer, review by Vincent Laviron)
-
-- #12185: New script language for ocamltest.
- (Damien Doligez with Florian Angeletti, Sébastien Hinderer, Gabriel Scherer,
- review by Sébastien Hinderer and Gabriel Scherer)
-
-- #12371: ocamltest: fix recursive expansion of variables.
- (Antonin Décimo, Damien Doligez, review by Sébastien Hinderer,
- Damien Doligez, Gabriel Scherer, and Xavier Leroy)
-
-* #12497, #12613: Make ocamlc/ocamlopt fail with an error when no
- input files are specified to build an executable.
- (Antonin Décimo, review by Sébastien Hinderer)
-
-- #12576: ocamldep: various refactors.
- (Antonin Décimo, review by Florian Angeletti, Gabriel Scherer, and Léo Andrès)
-
-- #12615: ocamldoc: get rid of the odoc_literate and odoc_todo generators.
- (Sébaistien Hinderer, review by Gabriel Scherer and Florian Angeletti)
-
-- #12624: Use $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_HOME when searching
- for init.ml and use this to extend init.ml support to the toplevel when
- running on Windows.
- (David Allsopp, report by Jonah Beckford, review by Nicolás Ojeda Bär and
- Antonin Décimo)
-
-- #12688: Setting the env variable `NO_COLOR` with an empty value no longer
- has effects. Previously, setting `NO_COLOR` with any value, including
- the empty value, would disable colors (unless `OCAML_COLOR` is also set).
- After this change, the user must set `NO_COLOR` with an non-empty value
- to disable colors. This reflects a specification clarification/change
- from the upstream website at https://no-color.org.
- (Favonia, review by Gabriel Scherer)
-
-- #12744: ocamltest: run tests in recursive subdirs more eagerly
- (Nick Roberts, review by Nicolás Ojeda Bär)
-
-- #12901, 12908: ocamllex: add overflow checks to prevent generating incorrect
- lexers; use unsigned numbers in the table encoding when possible.
- (Vincent Laviron, report by Edwin Török, review by Xavier Leroy)
-
-### Manual and documentation:
-
-- #12338: clarification of the documentation of process related function in
- the unix module regarding the first element of args and shell's pid.
- (Christophe Raffalli, review by Florian Angeletti)
-
-- #12473: Document in runtime/memory.c our current understanding of
- accesses to the OCaml heap from the C runtime code -- the problem
- of hybrid programs mixing two memory models.
- (Gabriel Scherer and Guillaume Munch-Maccagnoni, review by Olivier
- Nicole and Xavier Leroy)
-
-- #12694: Document in runtime/tsan.c the TSan instrumentation choices and the
- consequences with regard to the memory model.
- (Olivier Nicole, review by Miod Vallat, Gabriel Scherer, Guillaume
- Munch-Maccagnoni and Fabrice Buoro)
-
-- #12802: Add manual chapter about ThreadSanitizer support
- (Olivier Nicole, review by Miod Vallat, Sebastien Hinderer, Fabrice Buoro,
- Gabriel Scherer and KC Sivaramakrishnan)
-
-- #12819: Clarify which runtime interactions are allowed in custom ops
- (Basile Clément, review by Guillaume Munch-Maccagnoni and Xavier Leroy)
-
-- #12840: manual: update runtime tracing chapter for custom events (ex #12335)
- (Lucas Pluvinage, Sadiq Jaffer and Olivier Nicole, review by Gabriel Scherer,
- David Allsopp, Tim McGilchrist and Thomas Leonard)
-
-- #13066, update OCAMLRUNPARAM documentation for the stack size parameter l
- (Florian Angeletti, review by Nicolás Ojeda Bär, Tim McGilchrist, and
- Miod Vallat)
-
-- #13078: update Format tutorial on structural boxes to mention alignment
- questions.
- (Edwin Török, review by Florian Angeletti)
-
-- #13092: document the existence of the `[@@poll error]` built-in attribute
- (Florian Angeletti, review by Gabriel Scherer)
-
### Compiler user-interface and warnings:
+- #11989, #12246, RFC 31: New flag, -H, to allow for transitive dependencies
+ without including them in the initial environment.
+ (Chris Casinghino, François Bobot, and Gabriel Scherer, review by Leo White
+ and Stefan Muenzel, RFC by François Bobot)
+
+
* #10613, #12405: Simplify the values used for the system variable (`system:` in
`ocamlopt -config` or the `Config.system` constant). In particular, s390x and
ppc64 now report "linux" instead of "elf"; all variants of 32-bit ARM on Linux
@@ -493,11 +403,6 @@ OCaml 5.2.0
(David Allsopp, request by Kate Deplaix, review by Sébastien Hinderer and
Xavier Leroy)
-- #11989, #12246, RFC 31: New flag, -H, to allow for transitive dependencies
- without including them in the initial environment.
- (Chris Casinghino, François Bobot, and Gabriel Scherer, review by Leo White
- and Stefan Muenzel, RFC by François Bobot)
-
- #12247: configure: --disable-ocamldebug can now be used instead
of --disable-debugger (which remains available for compatibility)
(Gabriel Scherer, review by Damien Doligez and Sébastien Hinderer)
@@ -546,9 +451,125 @@ OCaml 5.2.0
* #12942: Fix an line ordering in some module inclusion error messages
(Nick Roberts, review by Florian Angeletti, report by Carl Eastlund)
+### Manual and documentation:
+
+- #12338: clarification of the documentation of process related function in
+ the unix module regarding the first element of args and shell's pid.
+ (Christophe Raffalli, review by Florian Angeletti)
+
+- #12473: Document in runtime/memory.c our current understanding of
+ accesses to the OCaml heap from the C runtime code -- the problem
+ of hybrid programs mixing two memory models.
+ (Gabriel Scherer and Guillaume Munch-Maccagnoni, review by Olivier
+ Nicole and Xavier Leroy)
+
+- #12456: Document the incompatibility between effects on the one
+ hand, and `caml_callback` and asynchronous callbacks (signal
+ handlers, finalisers, memprof callbacks...) on the other hand.
+ (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan)
+
+- #12694: Document in runtime/tsan.c the TSan instrumentation choices and the
+ consequences with regard to the memory model.
+ (Olivier Nicole, review by Miod Vallat, Gabriel Scherer, Guillaume
+ Munch-Maccagnoni and Fabrice Buoro)
+
+- #12802: Add manual chapter about ThreadSanitizer support
+ (Olivier Nicole, review by Miod Vallat, Sebastien Hinderer, Fabrice Buoro,
+ Gabriel Scherer and KC Sivaramakrishnan)
+
+- #12819: Clarify which runtime interactions are allowed in custom ops
+ (Basile Clément, review by Guillaume Munch-Maccagnoni and Xavier Leroy)
+
+- #12840: manual: update runtime tracing chapter for custom events (ex #12335)
+ (Lucas Pluvinage, Sadiq Jaffer and Olivier Nicole, review by Gabriel Scherer,
+ David Allsopp, Tim McGilchrist and Thomas Leonard)
+
+- #13066, update OCAMLRUNPARAM documentation for the stack size parameter l
+ (Florian Angeletti, review by Nicolás Ojeda Bär, Tim McGilchrist, and
+ Miod Vallat)
+
+- #13078: update Format tutorial on structural boxes to mention alignment
+ questions.
+ (Edwin Török, review by Florian Angeletti)
+
+- #13092: document the existence of the `[@@poll error]` built-in attribute
+ (Florian Angeletti, review by Gabriel Scherer)
+
+### Tools:
+
+- #12340: testsuite: collect known issues with current -short-paths
+ implementation for existential types
+ (Florian Angeletti, Samuel Hym, review by Florian Angeletti and Thomas Refis)
+
+- #12147: ocamllex: Allow carriage returns at the end of line directives.
+ (SeungCheol Jung, review by Nicolás Ojeda Bär)
+
+- #12260: Fix invalid_argument on some external or module aliases in ocamlnat
+ (Fabian Hemmer, review by Vincent Laviron)
+
+- #12185: New script language for ocamltest.
+ (Damien Doligez with Florian Angeletti, Sébastien Hinderer, Gabriel Scherer,
+ review by Sébastien Hinderer and Gabriel Scherer)
+
+- #12371: ocamltest: fix recursive expansion of variables.
+ (Antonin Décimo, Damien Doligez, review by Sébastien Hinderer,
+ Damien Doligez, Gabriel Scherer, and Xavier Leroy)
+
+* #12497, #12613: Make ocamlc/ocamlopt fail with an error when no
+ input files are specified to build an executable.
+ (Antonin Décimo, review by Sébastien Hinderer)
+
+- #12576: ocamldep: various refactors.
+ (Antonin Décimo, review by Florian Angeletti, Gabriel Scherer, and Léo Andrès)
+
+- #12615: ocamldoc: get rid of the odoc_literate and odoc_todo generators.
+ (Sébaistien Hinderer, review by Gabriel Scherer and Florian Angeletti)
+
+- #12624: Use $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_HOME when searching
+ for init.ml and use this to extend init.ml support to the toplevel when
+ running on Windows.
+ (David Allsopp, report by Jonah Beckford, review by Nicolás Ojeda Bär and
+ Antonin Décimo)
+
+- #12688: Setting the env variable `NO_COLOR` with an empty value no longer
+ has effects. Previously, setting `NO_COLOR` with any value, including
+ the empty value, would disable colors (unless `OCAML_COLOR` is also set).
+ After this change, the user must set `NO_COLOR` with an non-empty value
+ to disable colors. This reflects a specification clarification/change
+ from the upstream website at https://no-color.org.
+ (Favonia, review by Gabriel Scherer)
+
+- #12744: ocamltest: run tests in recursive subdirs more eagerly
+ (Nick Roberts, review by Nicolás Ojeda Bär)
+
+- #12901, 12908: ocamllex: add overflow checks to prevent generating incorrect
+ lexers; use unsigned numbers in the table encoding when possible.
+ (Vincent Laviron, report by Edwin Török, review by Xavier Leroy)
### Internal/compiler-libs changes:
+- #12508 : Add compiler-side support for project-wide occurrences in Merlin, by
+ generating index tables of all identifier occurrences. This extra data in .cmt
+ files is only added when the new flag -bin-annot-occurrences is passed.
+ (Ulysse Gérard, Nathanaëlle Courant, suggestions by Gabriel Scherer and Thomas
+ Refis, review by Florian Angeletti, Gabriel Scherer and Thomas Refis)
+
+- #12236, #12386, #12391, #12496, #12673: Use syntax as sole determiner of arity
+ This changes function arity to be based solely on the source program's
+ parsetree. Previously, the heuristic for arity had more subtle heuristics
+ that involved type information about patterns. Function arity is important
+ because it determines when a pattern match's effects run and is an input
+ into the fast path for function application.
+
+ This change affects tooling: it changes the function constructs in parsetree
+ and typedtree.
+
+ See https://github.com/ocaml/RFCs/pull/32 for the original RFC.
+
+ (Nick Roberts; review by Richard Eisenberg, Leo White, and Gabriel Scherer;
+ RFC by Stephen Dolan)
+
+
- #12639: parsing: Attach a location to the RHS of Ptyp_alias
and improve the 'alias type mismatch' error message.
(Jules Aguillon, review by Florian Angeletti)
@@ -583,21 +604,6 @@ OCaml 5.2.0
in Typecore in favor of local mutable state.
(Nick Roberts, review by Takafumi Saikawa)
-- #12236, #12386, #12391, #12496, #12673: Use syntax as sole determiner of arity
- This changes function arity to be based solely on the source program's
- parsetree. Previously, the heuristic for arity had more subtle heuristics
- that involved type information about patterns. Function arity is important
- because it determines when a pattern match's effects run and is an input
- into the fast path for function application.
-
- This change affects tooling: it changes the function constructs in parsetree
- and typedtree.
-
- See https://github.com/ocaml/RFCs/pull/32 for the original RFC.
-
- (Nick Roberts; review by Richard Eisenberg, Leo White, and Gabriel Scherer;
- RFC by Stephen Dolan)
-
- #12542: Minor bugfix to #12236: restore dropped call to `instance`
(Nick Roberts, review by Jacques Garrigue)
@@ -650,12 +656,6 @@ OCaml 5.2.0
- #12764: Move all installable headers in `caml/` sub-directories.
(Antonin Décimo, review by Gabriel Scherer and David Allsopp)
-- #12508 : Add compiler-side support for project-wide occurrences in Merlin, by
- generating index tables of all identifier occurrences. This extra data in .cmt
- files is only added when the new flag -bin-annot-occurrences is passed.
- (Ulysse Gérard, Nathanaëlle Courant, suggestions by Gabriel Scherer and Thomas
- Refis, review by Florian Angeletti, Gabriel Scherer and Thomas Refis)
-
- #12914: Slightly change the s390x assembly dialect in order to build with
Clang's integrated assembler.
(Miod Vallat, review by Gabriel Scherer)
@@ -888,6 +888,10 @@ OCaml 5.2.0
- #13094: Fix undefined behavior of left-shifting a negative number.
(Antonin Décimo, review by Miod Vallat and Nicolás Ojeda Bär)
+- #13130: minor fixes to pprintast for raw identifiers and local module open
+ syntax for types.
+ (Chet Murthy, review by Gabriel Scherer)
+
OCaml 5.1.1 (8 December 2023)
----------------------------
--
2.44.0

View file

@ -0,0 +1,25 @@
From ef549c9a97838331877b139f407269db2a0fc691 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 29 May 2012 20:44:18 +0100
Subject: [PATCH 2/2] configure: Allow user defined C compiler flags.
---
configure.ac | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index fb60c7c14c..f6a493ccf5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3243,7 +3243,7 @@ AC_CONFIG_COMMANDS_PRE([
[mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}"])
mkdll_ldflags=""
AS_IF([test -n "${LDFLAGS}"],
- [for flag in ${LDFLAGS}; do
+ [for flag in "${LDFLAGS}"; do
mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}"
done
mkdll_ldflags_exp="$mkdll_ldflags"])
--
2.52.0

View file

@ -1,45 +0,0 @@
From edd903fc73b98eb784b307a47110985967cb1d09 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 29 May 2012 20:44:18 +0100
Subject: [PATCH 4/7] configure: Allow user defined C compiler flags.
---
configure.ac | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 48aa9f0a29..fc29c88f50 100644
--- a/configure.ac
+++ b/configure.ac
@@ -869,6 +869,10 @@ AS_CASE([$ocaml_cc_vendor],
internal_cflags="$cc_warnings"],
[common_cflags="-O"])
+# Allow CFLAGS and LDFLAGS to be added.
+common_cflags="$common_cflags $CFLAGS"
+cclibs="$cclibs $LDFLAGS"
+
# Enable SSE2 on x86 mingw to avoid using 80-bit registers.
AS_CASE([$host],
[i686-*-mingw32*],
@@ -2648,7 +2652,7 @@ AC_CONFIG_COMMANDS_PRE([
[mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}"])
mkdll_ldflags=""
AS_IF([test -n "${LDFLAGS}"],
- [for flag in ${LDFLAGS}; do
+ [for flag in "${LDFLAGS}"; do
mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}"
done
mkdll_ldflags_exp="$mkdll_ldflags"])
@@ -2674,7 +2678,7 @@ ${mkdll_ldflags}"
],[
mkdll_ldflags='$(OC_DLL_LDFLAGS) $(LDFLAGS)'
mkdll_ldflags_exp="${oc_dll_ldflags}"
- AS_IF([test -n ${LDFLAGS}],
+ AS_IF([test -n "${LDFLAGS}"],
[mkdll_ldflags_exp="$mkdll_ldflags_exp $LDFLAGS"])
mkexe_ldflags="\$(OC_LDFLAGS) \$(LDFLAGS)"
mkexe_ldflags_exp="${oc_ldflags} ${LDFLAGS}"
--
2.44.0

View file

@ -1,114 +0,0 @@
From acdc441ff1acb5390467e649bc9a9bfddd7df774 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Thu, 9 May 2024 10:03:23 +0200
Subject: [PATCH 5/7] flambda: Improve transitive closure in
invariant_params_in_recursion (#13150)
The old implementation did not really exploit the sparseness of the
graph because it used newly discovered edges in later iterations.
The new implementation processes each original relation only once
per starting node, and does not re-process newly discovered relations.
(cherry picked from commit 787b4fbb5aaf3728de54ca240ba9ca0bf56ace60)
---
Changes | 5 ++
middle_end/flambda/invariant_params.ml | 66 ++++++++++----------------
2 files changed, 31 insertions(+), 40 deletions(-)
diff --git a/Changes b/Changes
index 75842fc216..d26512067d 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,11 @@
OCaml 5.2.0 (13 May 2024)
-------------------------
+- #13150: improve a transitive-closure computation algorithm in the flambda
+ middle-end to avoid a compilation time blowup on Menhir-generated code
+ (Florian Weimer, review by Gabriel Scherer and Pierre Chambart,
+ report by Richard Jones)
+
(Changes that can break existing programs are marked with a "*")
### Restored and new backends:
diff --git a/middle_end/flambda/invariant_params.ml b/middle_end/flambda/invariant_params.ml
index 414d39310a..dba63970fd 100644
--- a/middle_end/flambda/invariant_params.ml
+++ b/middle_end/flambda/invariant_params.ml
@@ -65,47 +65,33 @@ let implies relation from to_ =
relation
let transitive_closure state =
- let union s1 s2 =
- match s1, s2 with
- | Top, _ | _, Top -> Top
- | Implication s1, Implication s2 ->
- Implication (Variable.Pair.Set.union s1 s2)
+ (* Depth-first search for all implications for one argument.
+ Arguments are moved from candidate to frontier, assuming
+ they are newly added to the result. *)
+ let rec loop candidate frontier result =
+ match (candidate, frontier) with
+ | ([], []) -> Implication result
+ | ([], frontier::fs) ->
+ (* Obtain fresh candidate for the frontier argument. *)
+ (match Variable.Pair.Map.find frontier state with
+ | exception Not_found -> loop [] fs result
+ | Top -> Top
+ | Implication candidate ->
+ loop (Variable.Pair.Set.elements candidate) fs result)
+ | (candidate::cs, frontier) ->
+ let result' = Variable.Pair.Set.add candidate result in
+ if result' != result then
+ (* Result change means candidate becomes part of frontier. *)
+ loop cs (candidate :: frontier) result'
+ else
+ loop cs frontier result
in
- let equal s1 s2 =
- match s1, s2 with
- | Top, Implication _ | Implication _, Top -> false
- | Top, Top -> true
- | Implication s1, Implication s2 -> Variable.Pair.Set.equal s1 s2
- in
- let update arg state =
- let original_set =
- try Variable.Pair.Map.find arg state with
- | Not_found -> Implication Variable.Pair.Set.empty
- in
- match original_set with
- | Top -> state
- | Implication arguments ->
- let set =
- Variable.Pair.Set.fold
- (fun orig acc->
- let set =
- try Variable.Pair.Map.find orig state with
- | Not_found -> Implication Variable.Pair.Set.empty in
- union set acc)
- arguments original_set
- in
- Variable.Pair.Map.add arg set state
- in
- let once state =
- Variable.Pair.Map.fold (fun arg _ state -> update arg state) state state
- in
- let rec fp state =
- let state' = once state in
- if Variable.Pair.Map.equal equal state state'
- then state
- else fp state'
- in
- fp state
+ Variable.Pair.Map.map
+ (fun set ->
+ match set with
+ | Top -> Top
+ | Implication set -> loop [] (Variable.Pair.Set.elements set) set)
+ state
(* CR-soon pchambart: to move to Flambda_utils and document
mshinwell: I think this calculation is basically the same as
--
2.44.0

View file

@ -1,165 +0,0 @@
From 8637cac022907501c3c0d941e07e436b70c9d4ac Mon Sep 17 00:00:00 2001
From: Miod Vallat <118974489+dustanddreams@users.noreply.github.com>
Date: Thu, 30 May 2024 09:57:41 +0000
Subject: [PATCH 6/7] Reload exception pointer register in caml_c_call*
The invoked code may end up causing caml_try_realloc_stack() to be invoked,
which in turn may replace the stack TRAP_PTR points to, leading to
either crashes with the debug runtime (thanks to the old stack contents
being overwritten) or all kinds of memory or control flow corruption otherwise.
Added test for stack reallocation in callback followed by exception raising.
(cherry picked from commit 6964d3a90f84402ed6066fb1821679435e063067)
(cherry picked from commit 1e8a91d305f1fa4668444fb1cce97952dbc39810)
---
Changes | 9 +++++++++
runtime/arm64.S | 6 ++++--
runtime/power.S | 6 ++++--
runtime/riscv.S | 6 ++++--
runtime/s390x.S | 5 +++--
testsuite/tests/callback/test1.ml | 5 +++++
6 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/Changes b/Changes
index d26512067d..53bb5369b9 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,12 @@
+OCaml 5.2 maintenance version
+-----------------------------
+
+- #13207: Be sure to reload the register caching the exception handler in
+ caml_c_call and caml_c_call_stack_args, as its value may have been changed
+ if the OCaml stack is expanded during a callback.
+ (Miod Vallat, report by Vesa Karvonen, review by Gabriel Scherer and
+ Xavier Leroy)
+
OCaml 5.2.0 (13 May 2024)
-------------------------
diff --git a/runtime/arm64.S b/runtime/arm64.S
index e71f25ebba..6c6495a0a8 100644
--- a/runtime/arm64.S
+++ b/runtime/arm64.S
@@ -569,8 +569,9 @@ FUNCTION(caml_c_call)
str TRAP_PTR, Caml_state(exn_handler)
/* Call the function */
blr ADDITIONAL_ARG
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
ldr ALLOC_PTR, Caml_state(young_ptr)
+ ldr TRAP_PTR, Caml_state(exn_handler)
/* Load ocaml stack */
SWITCH_C_TO_OCAML
#if defined(WITH_THREAD_SANITIZER)
@@ -625,8 +626,9 @@ FUNCTION(caml_c_call_stack_args)
blr ADDITIONAL_ARG
/* Restore stack */
mov sp, x19
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
ldr ALLOC_PTR, Caml_state(young_ptr)
+ ldr TRAP_PTR, Caml_state(exn_handler)
/* Switch from C to OCaml */
SWITCH_C_TO_OCAML
/* Return */
diff --git a/runtime/power.S b/runtime/power.S
index bfb37fa989..257678100e 100644
--- a/runtime/power.S
+++ b/runtime/power.S
@@ -445,8 +445,9 @@ FUNCTION caml_c_call
mr 2, C_CALL_TOC /* restore current TOC */
/* Restore return address (in register C_CALL_RET_ADDR, preserved by C) */
mtlr C_CALL_RET_ADDR
- /* Reload allocation pointer*/
+ /* Reload new allocation pointer and exception pointer */
ld ALLOC_PTR, Caml_state(young_ptr)
+ ld TRAP_PTR, Caml_state(exn_handler)
#if defined(WITH_THREAD_SANITIZER)
TSAN_SETUP_C_CALL 16
/* Save return value registers. Since the called function could be anything,
@@ -497,8 +498,9 @@ FUNCTION caml_c_call_stack_args
add SP, SP, STACK_ARG_BYTES
/* Restore return address (in register C_CALL_RET_ADDR, preserved by C) */
mtlr C_CALL_RET_ADDR
- /* Reload allocation pointer*/
+ /* Reload new allocation pointer and exception pointer */
ld ALLOC_PTR, Caml_state(young_ptr)
+ ld TRAP_PTR, Caml_state(exn_handler)
/* Switch from C to OCaml */
SWITCH_C_TO_OCAML
/* Return to caller */
diff --git a/runtime/riscv.S b/runtime/riscv.S
index a2eca7a315..8934db0bb3 100644
--- a/runtime/riscv.S
+++ b/runtime/riscv.S
@@ -516,8 +516,9 @@ L(caml_c_call):
sd TRAP_PTR, Caml_state(exn_handler)
/* Call the function */
jalr ADDITIONAL_ARG
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
ld ALLOC_PTR, Caml_state(young_ptr)
+ ld TRAP_PTR, Caml_state(exn_handler)
/* Load ocaml stack */
SWITCH_C_TO_OCAML
#if defined(WITH_THREAD_SANITIZER)
@@ -575,8 +576,9 @@ FUNCTION(caml_c_call_stack_args)
jalr ADDITIONAL_ARG
/* Restore stack */
mv sp, s2
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
ld ALLOC_PTR, Caml_state(young_ptr)
+ ld TRAP_PTR, Caml_state(exn_handler)
/* Switch from C to OCaml */
SWITCH_C_TO_OCAML
/* Return */
diff --git a/runtime/s390x.S b/runtime/s390x.S
index b59822ce57..113831a376 100644
--- a/runtime/s390x.S
+++ b/runtime/s390x.S
@@ -515,7 +515,7 @@ LBL(caml_c_call):
#endif
basr %r14, ADDITIONAL_ARG
CLEANUP_AFTER_C_CALL
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
lg ALLOC_PTR, Caml_state(young_ptr)
lg TRAP_PTR, Caml_state(exn_handler)
/* Load ocaml stack and restore global variables */
@@ -584,8 +584,9 @@ LBL(106):
CLEANUP_AFTER_C_CALL
/* Restore stack */
lgr %r15, %r12
- /* Reload alloc ptr */
+ /* Reload new allocation pointer & exn handler */
lg ALLOC_PTR, Caml_state(young_ptr)
+ lg TRAP_PTR, Caml_state(exn_handler)
/* Switch from C to OCaml */
SWITCH_C_TO_OCAML
/* Return */
diff --git a/testsuite/tests/callback/test1.ml b/testsuite/tests/callback/test1.ml
index c39be0c586..f6ad4356cf 100644
--- a/testsuite/tests/callback/test1.ml
+++ b/testsuite/tests/callback/test1.ml
@@ -11,6 +11,9 @@ external mycallback3 : ('a -> 'b -> 'c -> 'd) -> 'a -> 'b -> 'c -> 'd
external mycallback4 :
('a -> 'b -> 'c -> 'd -> 'e) -> 'a -> 'b -> 'c -> 'd -> 'e = "mycallback4"
+let rec growstack n =
+ if n <= 0 then 0 else 1 + growstack (n - 1)
+
let rec tak (x, y, z as _tuple) =
if x > y then tak(tak (x-1, y, z), tak (y-1, z, x), tak (z-1, x, y))
else z
@@ -46,3 +49,5 @@ let _ =
print_int(trapexit ()); print_newline();
print_string(tripwire mypushroot); print_newline();
print_string(tripwire mycamlparam); print_newline();
+ begin try ignore (mycallback1 growstack 1_000); raise Exit
+ with Exit -> () end
--
2.44.0

View file

@ -1,178 +0,0 @@
From 4eb80b13779125fcd76a445ab0004ca064fab634 Mon Sep 17 00:00:00 2001
From: Miod Vallat <miod@tarides.com>
Date: Fri, 7 Jun 2024 06:19:45 +0000
Subject: [PATCH 7/7] Compute more accurate instruction sizes for branch
relaxation.
(cherry picked from commit 114ddae2d4c85391a4f939dc6623424ae35a07aa)
---
Changes | 4 ++
asmcomp/power/emit.mlp | 87 ++++++++++++++++++++++++------------------
2 files changed, 53 insertions(+), 38 deletions(-)
diff --git a/Changes b/Changes
index 53bb5369b9..1a81509247 100644
--- a/Changes
+++ b/Changes
@@ -7,6 +7,10 @@ OCaml 5.2 maintenance version
(Miod Vallat, report by Vesa Karvonen, review by Gabriel Scherer and
Xavier Leroy)
+- #13221: Compute more accurate instruction sizes for branch relocation on
+ POWER.
+ (Miod Vallat, review by Gabriel Scherer)
+
OCaml 5.2.0 (13 May 2024)
-------------------------
diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp
index 47f5419a92..fdf22996fa 100644
--- a/asmcomp/power/emit.mlp
+++ b/asmcomp/power/emit.mlp
@@ -177,6 +177,28 @@ let emit_tocload emit_dest dest entry =
(* Output a load or store operation *)
+let load_mnemonic = function
+ | Byte_unsigned -> "lbz"
+ | Byte_signed -> "lbz"
+ | Sixteen_unsigned -> "lhz"
+ | Sixteen_signed -> "lha"
+ | Thirtytwo_unsigned -> "lwz"
+ | Thirtytwo_signed -> "lwa"
+ | Word_int | Word_val -> "ld"
+ | Single -> "lfs"
+ | Double -> "lfd"
+
+let store_mnemonic = function
+ | Byte_unsigned | Byte_signed -> "stb"
+ | Sixteen_unsigned | Sixteen_signed -> "sth"
+ | Thirtytwo_unsigned | Thirtytwo_signed -> "stw"
+ | Word_int | Word_val -> "std"
+ | Single -> "stfs"
+ | Double -> "stfd"
+
+let store_needs_lwsync chunk assignment =
+ assignment && (chunk = Word_int || chunk = Word_val)
+
let valid_offset instr ofs =
ofs land 3 = 0 || (instr <> "ld" && instr <> "std" && instr <> "lwa")
@@ -383,11 +405,17 @@ module BR = Branch_relaxation.Make (struct
let tocload_size = 2
- let load_store_size = function
+ let load_store_size instr = function
| Ibased(_s, d) ->
- let (_lo, hi) = low_high_s d in
- tocload_size + (if hi = 0 then 1 else 2)
- | Iindexed ofs -> if is_immediate ofs then 1 else 3
+ let (lo, hi) = low_high_s d in
+ tocload_size +
+ (if hi <> 0 then 1 else 0) +
+ (if valid_offset instr lo then 1 else 2)
+ | Iindexed ofs ->
+ if is_immediate ofs && valid_offset instr ofs then 1 else begin
+ let (lo, _hi) = low_high_u ofs in
+ if lo <> 0 then 3 else 2
+ end
| Iindexed2 -> 1
let instr_size f = function
@@ -415,16 +443,16 @@ module BR = Branch_relaxation.Make (struct
else if alloc then tocload_size + 2
else 5
| Lop(Istackoffset _) -> 1
- | Lop(Iload {memory_chunk; addressing_mode; _ }) ->
- if memory_chunk = Byte_signed
- then load_store_size addressing_mode + 1
- else load_store_size addressing_mode
+ | Lop(Iload {memory_chunk; addressing_mode; is_atomic }) ->
+ let loadinstr = load_mnemonic memory_chunk in
+ (if is_atomic then 4 else 0) +
+ (if memory_chunk = Byte_signed then 1 else 0) +
+ load_store_size loadinstr addressing_mode
| Lop(Istore(chunk, addr, assignment)) ->
- (match chunk with
- | Single -> 1
- | Word_int | Word_val when assignment -> 1
- | _ -> 0)
- + load_store_size addr
+ let storeinstr = store_mnemonic chunk in
+ (if chunk = Single then 1 else 0) +
+ (if store_needs_lwsync chunk assignment then 1 else 0) +
+ load_store_size storeinstr addr
| Lop(Ialloc _) -> 5
| Lop(Ispecific(Ialloc_far _)) -> 6
| Lop(Ipoll { return_label = Some(_) }) -> 5
@@ -442,12 +470,12 @@ module BR = Branch_relaxation.Make (struct
| Lop(Ispecific(Icheckbound_imm_far _)) -> 3
| Lop(Iintop_imm _) -> 1
| Lop(Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf) -> 1
- | Lop(Ifloatofint) -> 9
- | Lop(Iintoffloat) -> 4
+ | Lop(Ifloatofint) -> 3
+ | Lop(Iintoffloat) -> 3
| Lop(Iopaque) -> 0
| Lop(Ispecific _) -> 1
- | Lop (Idls_get) -> 1
- | Lop (Ireturn_addr) -> 1
+ | Lop(Idls_get) -> 1
+ | Lop(Ireturn_addr) -> 1
| Lreloadretaddr -> 2
| Lreturn -> 2
| Llabel _ -> 0
@@ -457,7 +485,7 @@ module BR = Branch_relaxation.Make (struct
1 + (if lbl0 = None then 0 else 1)
+ (if lbl1 = None then 0 else 1)
+ (if lbl2 = None then 0 else 1)
- | Lswitch _ -> 5 + tocload_size
+ | Lswitch _ -> 7 + tocload_size
| Lentertrap -> 1
| Ladjust_trap_depth _ -> 0
| Lpushtrap _ -> 4 + tocload_size
@@ -705,17 +733,7 @@ let emit_instr env i =
` addi 1, 1, {emit_int (-n)}\n`;
adjust_stack_offset env n
| Lop(Iload { memory_chunk; addressing_mode; is_atomic }) ->
- let loadinstr =
- match memory_chunk with
- | Byte_unsigned -> "lbz"
- | Byte_signed -> "lbz"
- | Sixteen_unsigned -> "lhz"
- | Sixteen_signed -> "lha"
- | Thirtytwo_unsigned -> "lwz"
- | Thirtytwo_signed -> "lwa"
- | Word_int | Word_val -> "ld"
- | Single -> "lfs"
- | Double -> "lfd" in
+ let loadinstr = load_mnemonic memory_chunk in
if is_atomic then
` sync\n`;
emit_load_store loadinstr addressing_mode i.arg 0 i.res.(0);
@@ -731,19 +749,12 @@ let emit_instr env i =
` frsp {emit_reg tmp}, {emit_reg i.arg.(0)}\n`;
emit_load_store "stfs" addr i.arg 1 tmp
| Lop(Istore(chunk, addr, assignment)) ->
- let storeinstr =
- match chunk with
- | Byte_unsigned | Byte_signed -> "stb"
- | Sixteen_unsigned | Sixteen_signed -> "sth"
- | Thirtytwo_unsigned | Thirtytwo_signed -> "stw"
- | Word_int | Word_val -> "std"
- | Single -> assert false
- | Double -> "stfd" in
+ let storeinstr = store_mnemonic chunk in
(* Non-initializing stores need a memory barrier to follow the
Multicore OCaml memory model. Stores of size other than
Word_int and Word_val do not follow the memory model and therefore
do not need a barrier *)
- if assignment && (chunk = Word_int || chunk = Word_val) then
+ if store_needs_lwsync chunk assignment then
` lwsync\n`;
emit_load_store storeinstr addr i.arg 1 i.arg.(0)
| Lop(Ialloc { bytes; dbginfo }) ->
--
2.44.0

View file

@ -1,13 +1,6 @@
# Don't add -Wl,-dT,<build dir>
%undefine _package_note_flags
# OCaml 5.1 broke building with LTO. A file prims.c is generated with
# primitive function declarations, all with "void" for their parameter
# list. This does not match the real definitions, leading to lots of
# -Wlto-type-mismatch warnings. These change the output of the tests,
# leading to many failed tests. This is still a problem in 5.2.
%global _lto_cflags %{nil}
# OCaml has a bytecode backend that works on anything with a C
# compiler, and a native code backend available on a subset of
# architectures. A further subset of architectures support native
@ -32,7 +25,7 @@ ExcludeArch: %{ix86}
# These are all the architectures that the tests run on. The tests
# take a long time to run, so don't run them on slow machines.
%global test_arches aarch64 %{power64} riscv64 s390x x86_64
%global test_arches %{arm64} %{power64} %{riscv64} s390x %{x86_64}
# These are the architectures for which the tests must pass otherwise
# the build will fail.
#global test_arches_required aarch64 ppc64le x86_64
@ -45,8 +38,8 @@ ExcludeArch: %{ix86}
%global rcver %{nil}
Name: ocaml
Version: 5.2.0
Release: 3%{?dist}
Version: 5.5.0
Release: 2%{?dist}
Summary: OCaml compiler and programming environment
@ -68,48 +61,27 @@ Source2: ocaml_files.py
#
# https://pagure.io/fedora-ocaml
#
# Current branch: fedora-41-5.2.0
# Current branch: fedora-45-5.4.1
#
# ALTERNATIVELY add a patch to the end of the list (leaving the
# existing patches unchanged) adding a comment to note that it should
# be incorporated into the git repo at a later time.
# Upstream after 5.2.0:
Patch: 0001-Changes-synchronisation-and-consistency-with-trunk.patch
Patch: 0002-Changes-copy-editing.patch
# Fedora-specific patches
Patch: 0003-Don-t-add-rpaths-to-libraries.patch
Patch: 0004-configure-Allow-user-defined-C-compiler-flags.patch
# Improve performance of flambda optimizer in some cases. Required to
# compiler blow-up in coccinelle package. Upstream, but not included
# in 5.2 branch.
# https://github.com/ocaml/ocaml/pull/13150
Patch: 0005-flambda-Improve-transitive-closure-in-invariant_para.patch
# Upstream after 5.2.0:
Patch: 0006-Reload-exception-pointer-register-in-caml_c_call.patch
# Fix for ppc64le code generation issue found after 5.2.0 was released.
# https://github.com/ocaml/ocaml/issues/13220
# https://github.com/ocaml/ocaml/commit/114ddae2d4c85391a4f939dc6623424ae35a07aa
Patch: 0007-Compute-more-accurate-instruction-sizes-for-branch-r.patch
Patch: 0001-Don-t-add-rpaths-to-libraries.patch
Patch: 0002-configure-Allow-user-defined-C-compiler-flags.patch
BuildRequires: make
BuildRequires: git
BuildRequires: git-core
BuildRequires: gcc
BuildRequires: autoconf
BuildRequires: gawk
BuildRequires: hardlink
BuildRequires: perl-interpreter
BuildRequires: util-linux
BuildRequires: /usr/bin/annocheck
BuildRequires: annobin-annocheck
BuildRequires: pkgconfig(libzstd)
# Documentation requirements
BuildRequires: asciidoc
BuildRequires: python3-pygments
# ocamlopt runs gcc to link binaries. Because Fedora includes
# hardening flags automatically, redhat-rpm-config is also required.
@ -129,19 +101,15 @@ Requires: ocaml-runtime%{?_isa} = %{version}-%{release}
BuildRequires: ocaml-srpm-macros >= 10
Requires: ocaml-srpm-macros >= 10
# Bundles an MD5 implementation in runtime/caml/md5.h and runtime/md5.c
Provides: bundled(md5-plumb)
Provides: ocaml(compiler) = %{version}
%if %{native_compiler}
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Dynlink_cmo_format -i Dynlink_cmxs_format
%else
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Backend_intf -i Inlining_decision_intf -i Simplify_boxed_integer_ops_intf
%endif
%global __ocaml_provides_opts -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
%description
OCaml is a high-level, strongly-typed, functional and object-oriented
programming language from the ML family of languages.
@ -158,9 +126,11 @@ and a comprehensive library.
# and runtime/md5.c
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception AND LicenseRef-Fedora-Public-Domain
Summary: OCaml runtime environment
Requires: util-linux
Provides: ocaml(runtime) = %{version}
# Bundles an MD5 implementation in runtime/caml/md5.h and runtime/md5.c
Provides: bundled(md5-plumb)
%description runtime
OCaml is a high-level, strongly-typed, functional and object-oriented
programming language from the ML family of languages.
@ -278,7 +248,7 @@ sed -i '/^EXTRACAMLFLAGS=/aLINKOPTS=-cclib -lm' otherlibs/unix/Makefile
--disable-native-compiler \
--disable-native-toplevel \
%endif
%ifarch x86_64
%ifarch %{x86_64} %{arm64}
%if 0%{?_include_frame_pointers}
--enable-frame-pointers \
%endif
@ -326,7 +296,10 @@ make -j1 tests ||:
%install
%make_install
perl -pi -e "s|^$RPM_BUILD_ROOT||" $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
# OCaml 5.5.0 uses relative paths in ld.conf by default to support relocatable
# OCaml, which we don't need. Overwrite ld.conf with the absolute path.
echo %{_libdir}/ocaml/stublibs > $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
echo %{version} > $RPM_BUILD_ROOT%{_libdir}/ocaml/fedora-ocaml-release
@ -339,9 +312,6 @@ install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{rpmmacrodir}/macros.ocaml-rpm
mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
# Link, rather than copy, identical binaries
hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
%files
%license LICENSE
@ -384,7 +354,6 @@ hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
%endif
%{_libdir}/ocaml/expunge
%{_libdir}/ocaml/ld.conf
%{_libdir}/ocaml/Makefile.config
%{_libdir}/ocaml/*.a
@ -392,11 +361,9 @@ hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
%{_libdir}/ocaml/*.cmxa
%{_libdir}/ocaml/*.cmx
%{_libdir}/ocaml/*.o
%{_libdir}/ocaml/libasmrun_shared.so
%endif
%{_libdir}/ocaml/*.mli
%{_libdir}/ocaml/sys.ml.in
%{_libdir}/ocaml/libcamlrun_shared.so
%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.mli
%if %{native_compiler}
@ -417,12 +384,18 @@ hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
%doc README.html Changes
%license LICENSE
%{_bindir}/ocamlrun
%{_bindir}/*ocamlrun-a100
%{_bindir}/ocamlrund
%{_bindir}/*ocamlrund-a100
%{_bindir}/ocamlruni
%{_bindir}/*ocamlruni-a100
%dir %{_libdir}/ocaml
%{_libdir}/ocaml/libasmrun*.so
%{_libdir}/ocaml/libcamlrun*.so
%{_libdir}/ocaml/*.cmo
%{_libdir}/ocaml/*.cmi
%{_libdir}/ocaml/*.cma
%{_libdir}/ocaml/ld.conf
%{_libdir}/ocaml/stublibs
%dir %{_libdir}/ocaml/dynlink
%{_libdir}/ocaml/dynlink/META
@ -482,6 +455,43 @@ hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
%changelog
* Thu Jul 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.5.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Tue Jun 23 2026 Jerry James <loganjerry@gmail.com> - 5.5.0-1
- New upstream version 5.5.0 (RHBZ#2442622)
- Drop upstreamed fix for arm64 frame pointers
- Reenable LTO
- Move ld.conf, libasmrun, and libcamlrun to ocaml-runtime
- Drop hardlink dependency; rpm now does this by default
- Drop unused utilx-linux dependency
* Thu Feb 26 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-4
- Backport fix for arm64 frame pointers
* Fri Feb 20 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-1
- New upstream version 5.4.1 (RHBZ#2440356)
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Mon Oct 13 2025 Richard W.M. Jones <rjones@redhat.com> - 5.4.0-1
- New upstream version 5.4.0 (RHBZ#2368289)
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jun 22 2025 Yaakov Selkowitz <yselkowi@redhat.com> - 5.3.0-3
- Fix RPM macros for Python 3.14
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Thu Jan 9 2025 Jerry James <loganjerry@gmail.com> - 5.3.0-1
- New upstream version 5.3.0
- Drop upstreamed patches
- BR git-core instead of git
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild

View file

@ -429,7 +429,7 @@ if __name__ == "__main__":
parser.add_argument('-i', '--install',
action='store_true',
default=False,
help='install files instead of generating %files')
help='install files instead of generating %%files')
parser.add_argument('-n', '--no-devel',
action='store_true',
default=False,

View file

@ -1 +1 @@
SHA512 (ocaml-5.2.0.tar.gz) = 78115690186c13c1f2480e4812a9fe34cce2c28bf8a89d5c9810bca0391f930cecd9cee2b53daca8a32da1815628b33be68f3948f1ad03fa50b72b14e3ea84f2
SHA512 (ocaml-5.5.0.tar.gz) = bf13c18cd1fc7b2e5e9623024ea8623710f646ff2fbc0f59dab70e4d4318ed8623bdcc3ec59ce37af07af2b767f520dea23fb474c26297b3e858b6c8e080b4e6