mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/ocaml: Factor out compatiblity handling
... rather than having each library implement its own subset. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Christian Lindig <christian.lindig@cloud.com>
This commit is contained in:
1 parent
5e99a40ea5
commit
8d336fcb6e
3 files changed
+27
-11
No files matched your search
@@ -2,7 +2,7 @@ OCAML_TOPLEVEL=$(CURDIR)/../..
|
||||
XEN_ROOT=$(OCAML_TOPLEVEL)/../..
|
||||
include $(OCAML_TOPLEVEL)/common.make
|
||||
|
||||
CFLAGS += -I../mmap $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
|
||||
CFLAGS += -I../ -I../mmap $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
|
||||
CFLAGS += $(APPEND_CFLAGS)
|
||||
OCAMLINCLUDE += -I ../mmap -I ../eventchn
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <caml/fail.h>
|
||||
#include <caml/callback.h>
|
||||
|
||||
#include "xen-caml-compat.h"
|
||||
|
||||
#include <sys/mman.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
@@ -37,14 +39,6 @@
|
||||
|
||||
#include "mmap_stubs.h"
|
||||
|
||||
#ifndef Val_none
|
||||
#define Val_none (Val_int(0))
|
||||
#endif
|
||||
|
||||
#ifndef Tag_some
|
||||
#define Tag_some 0
|
||||
#endif
|
||||
|
||||
static inline xc_interface *xch_of_val(value v)
|
||||
{
|
||||
xc_interface *xch = *(xc_interface **)Data_custom_val(v);
|
||||
@@ -744,8 +738,7 @@ CAMLprim value stub_xc_evtchn_status(value xch_val, value domid, value port)
|
||||
Store_field(result_status, 0, Val_int(status.vcpu));
|
||||
Store_field(result_status, 1, stat);
|
||||
|
||||
result = caml_alloc_small(1, Tag_some);
|
||||
Store_field(result, 0, result_status);
|
||||
result = caml_alloc_some(result_status);
|
||||
|
||||
CAMLreturn(result);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-only WITH OCaml-LGPL-linking-exception */
|
||||
#ifndef XEN_CAML_COMPAT_H
|
||||
#define XEN_CAML_COMPAT_H
|
||||
|
||||
#ifndef Val_none /* Option handling. Compat for Ocaml < 4.12 */
|
||||
|
||||
#define Val_none Val_int(0)
|
||||
#define Tag_some 0
|
||||
#define Some_val(v) Field(v, 0)
|
||||
|
||||
static inline value caml_alloc_some(value v)
|
||||
{
|
||||
CAMLparam1(v);
|
||||
|
||||
value some = caml_alloc_small(1, Tag_some);
|
||||
Field(some, 0) = v;
|
||||
|
||||
CAMLreturn(some);
|
||||
}
|
||||
|
||||
#endif /* !Val_none */
|
||||
|
||||
#endif /* XEN_CAML_COMPAT_H */
|
||||