/usr/lib/ocaml/caml/backtrace_prim.h is in ocaml-nox 4.05.0-10ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | /**************************************************************************/
/* */
/* OCaml */
/* */
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
/* */
/* Copyright 2001 Institut National de Recherche en Informatique et */
/* en Automatique. */
/* */
/* All rights reserved. This file is distributed under the terms of */
/* the GNU Lesser General Public License version 2.1, with the */
/* special exception on linking described in the file LICENSE. */
/* */
/**************************************************************************/
#ifndef CAML_BACKTRACE_PRIM_H
#define CAML_BACKTRACE_PRIM_H
#ifdef CAML_INTERNALS
#include "backtrace.h"
/* Backtrace generation is split in [backtrace.c] and [backtrace_prim.c].
*
* [backtrace_prim.c] contains all backend-specific code, and has two different
* implementations in [byterun/backtrace_prim.c] and [asmrun/backtrace_prim.c].
*
* [backtrace.c] has a unique implementation, and expose a uniform
* higher level API above [backtrace_prim.c].
*/
/* Extract location information for the given raw_backtrace_slot */
struct caml_loc_info {
int loc_valid;
int loc_is_raise;
char * loc_filename;
int loc_lnum;
int loc_startchr;
int loc_endchr;
int loc_is_inlined;
};
/* When compiling with -g, backtrace slots have debug info associated.
* When a call is inlined in native mode, debuginfos form a linked list.
*/
typedef void * debuginfo;
/* Check availability of debug information before extracting a trace.
* Relevant for bytecode, always true for native code. */
int caml_debug_info_available(void);
/* Return debuginfo associated to a slot or NULL. */
debuginfo caml_debuginfo_extract(backtrace_slot slot);
/* In case of an inlined call return next debuginfo or NULL otherwise. */
debuginfo caml_debuginfo_next(debuginfo dbg);
/* Extract locations from backtrace_slot */
void caml_debuginfo_location(debuginfo dbg, /*out*/ struct caml_loc_info * li);
/* In order to prevent the GC from walking through the debug
information (which have no headers), we transform slots to 31/63 bits
ocaml integers by shifting them by 1 to the right. We do not lose
information as slots are aligned.
In particular, we do not need to use [caml_modify] when setting
an array element with such a value.
*/
#define Val_backtrace_slot(bslot) (Val_long(((uintnat)(bslot))>>1))
#define Backtrace_slot_val(vslot) ((backtrace_slot)(Long_val(vslot) << 1))
/* Allocate the caml_backtrace_buffer. Returns 0 on success, -1 otherwise */
int caml_alloc_backtrace_buffer(void);
#define BACKTRACE_BUFFER_SIZE 1024
/* Besides decoding backtrace info, [backtrace_prim] has two other
* responsibilities:
*
* It defines the [caml_stash_backtrace] function, which is called to quickly
* fill the backtrace buffer by walking the stack when an exception is raised.
*
* It also defines the [caml_get_current_callstack] OCaml primitive, which also
* walks the stack but directly turns it into a [raw_backtrace] and is called
* explicitly.
*/
#endif /* CAML_INTERNALS */
#endif /* CAML_BACKTRACE_PRIM_H */
|