[vala/staging] vapi: Add libunwind-generic binding



commit db4144024cada740e444d31a43daec3f9c8f1c15
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Mon Feb 1 17:22:48 2021 +0100

    vapi: Add libunwind-generic binding

 vapi/Makefile.am            |   1 +
 vapi/libunwind-generic.vapi | 203 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)
---
diff --git a/vapi/Makefile.am b/vapi/Makefile.am
index 173146ef4..31265a317 100644
--- a/vapi/Makefile.am
+++ b/vapi/Makefile.am
@@ -218,6 +218,7 @@ dist_vapi_DATA = \
        libsexy.vapi \
        libsoup-2.4.deps \
        libsoup-2.4.vapi \
+       libunwind-generic.vapi \
        libusb.vapi \
        libusb-1.0.deps \
        libusb-1.0.vapi \
diff --git a/vapi/libunwind-generic.vapi b/vapi/libunwind-generic.vapi
new file mode 100644
index 000000000..74bf3dde9
--- /dev/null
+++ b/vapi/libunwind-generic.vapi
@@ -0,0 +1,203 @@
+/* libunwind-generic.vapi
+ *
+ * Copyright (C) 2021  Rico Tzschichholz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ *     Rico Tzschichholz <ricotz ubuntu com>
+ */
+
+[CCode (cprefix = "UNW", cheader_filename = "libunwind.h", lower_case_cprefix = "unw_")]
+namespace Unwind {
+       public const int VERSION_MAJOR;
+       public const int VERSION_MINOR;
+       public const int VERSION_EXTRA;
+       [CCode (cname = "UNW_VERSION_CODE")]
+       public int version_code (int maj, int min);
+       public const int VERSION;
+
+       [CCode (cname = "unw_error_t", cprefix = "UNW_", has_type_id = false)]
+       public enum Error {
+               ESUCCESS,
+               EUNSPEC,
+               ENOMEM,
+               EBADREG,
+               EREADONLYREG,
+               ESTOPUNWIND,
+               EINVALIDIP,
+               EBADFRAME,
+               EINVAL,
+               EBADVERSION,
+               ENOINFO;
+               [CCode (cname = "unw_strerror")]
+               public unowned string to_string ();
+       }
+
+       [CCode (cname = "unw_frame_regnum_t", cprefix = "UNW_REG_", has_type_id = false)]
+       public enum FrameRegnum {
+               IP,
+               SP,
+               EH,
+               LAST
+       }
+
+       [CCode (cname = "unw_caching_policy_t", cprefix = "UNW_CACHE_", has_type_id = false)]
+       public enum CachingPolicy {
+               NONE,
+               GLOBAL,
+               PER_THREAD
+       }
+
+       [CCode (cname = "unw_init_local2_flags_t", cprefix = "UNW_INIT_", has_type_id = false)]
+       public enum InitLocal2Flags {
+               SIGNAL_FRAME
+       }
+
+       [IntegerType (rank = 8)]
+       [CCode (cname = "unw_regnum_t", lower_case_cprefix = "unw_")]
+       public struct Regnum : int {
+               [CCode (cname = "unw_regname")]
+               public unowned string get_name ();
+               public int is_fpreg ();
+       }
+
+       [FloatingType (rank = 9)]
+       [CCode (cname = "unw_fpreg_t")]
+       public struct Fpreg {
+       }
+
+       [IntegerType (rank = 9)]
+       [CCode (cname = "unw_word_t")]
+       public struct Word {
+       }
+
+       [CCode (cname = "struct unw_addr_space", lower_case_cprefix = "unw_", free_function = 
"unw_destroy_addr_space")]
+       public struct AddrSpace {
+               [CCode (array_length = false)]
+               public Accessors[] get_accessors ();
+               [CCode (array_length = false)]
+               public Accessors[] get_accessors_int ();
+               public void flush_cache (Word w1, Word w2);
+               public int get_proc_info_by_ip (Word w, out ProcInfo pi, void* d);
+               public int set_caching_policy (CachingPolicy cp);
+               public int set_cache_size (size_t size, int i);
+       }
+
+       [CCode (cname = "UNW_TDEP_CURSOR_LEN")]
+       public const int TDEP_CURSOR_LEN;
+
+       [CCode (cname = "unw_cursor_t", lower_case_cprefix = "unw_")]
+       public struct Cursor {
+               public Word opaque[TDEP_CURSOR_LEN];
+               public static int init_local (out Cursor cur, Context? ctx);
+               public static int init_local2 (out Cursor cur, Context? ctx, int i);
+               public static int init_remote (out Cursor cur, AddrSpace? addr, void* d);
+               public int step ();
+               public int resume ();
+               public int get_proc_info (out ProcInfo pi);
+               public int reg_states_iterate (RegStatesCallback cb, void* d);
+               public int apply_reg_state (void* d);
+               public int get_reg (Regnum rn, out Word w);
+               public int set_reg (Regnum rn, Word w);
+               public int get_fpreg (Regnum rn, out Fpreg off);
+               public int set_fpreg (Regnum rn, Fpreg off);
+               public int get_save_loc (int i, out SaveLoc loc);
+               public int is_signal_frame ();
+               public int handle_signal_frame ();
+               public int get_proc_name ([CCode (array_length_type = "size_t")] char[] name, out Word off);
+       }
+
+       [CCode (cname = "unw_context_t")]
+       public struct Context {
+               [CCode (cname = "unw_getcontext")]
+               public Context ();
+       }
+
+       [CCode (cname = "unw_proc_info_t")]
+       public struct ProcInfo {
+               public Word start_ip;
+               public Word end_ip;
+               //public Word last_ip;
+               public Word lsda;
+               public Word handler;
+               public Word gp;
+               public Word flags;
+
+               public int format;
+               public int unwind_info_size;
+               public void* unwind_info;
+               //unw_tdep_proc_info_t extra;
+       }
+
+       [CCode (cname = "unw_reg_states_callback", has_target = false)]
+       public delegate int RegStatesCallback (void* token, [CCode (array_length_type = "size_t")] void[] 
reg_states_data, Word start_ip, Word end_ip);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsFindProcInfoCallback (AddrSpace addr, Word w, ProcInfo pi, int i);
+       [CCode (has_typedef = false)]
+       public delegate void AccessorsPutUnwindInfoCallback (AddrSpace addr, ProcInfo pi);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsGetDynInfoListAddrCallback (AddrSpace addr, out Word ow);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsAccessMemCallback (AddrSpace addr, Word w, out Word ow, int i);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsAccessRegCallback (AddrSpace addr, Regnum rn, out Word ow, int i);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsAccessFpregCallback (AddrSpace addr, Regnum rn, out Fpreg fr, int i);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsResumeCallback (AddrSpace addr, Cursor cur);
+       [CCode (has_typedef = false)]
+       public delegate int AccessorsGetProcNameCallback (AddrSpace addr, Word w, [CCode (array_length_type = 
"size_t")] char[] name, out Word ow);
+
+       [CCode (cname = "unw_accessors_t", lower_case_cprefix = "unw_")]
+       public struct Accessors {
+               [CCode (delegate_target = false)]
+               public AccessorsFindProcInfoCallback find_proc_info;
+               [CCode (delegate_target = false)]
+               public AccessorsPutUnwindInfoCallback put_unwind_info;
+               [CCode (delegate_target = false)]
+               public AccessorsGetDynInfoListAddrCallback get_dyn_info_list_addr;
+               [CCode (delegate_target = false)]
+               public AccessorsAccessMemCallback access_mem;
+               [CCode (delegate_target = false)]
+               public AccessorsAccessRegCallback access_reg;
+               [CCode (delegate_target = false)]
+               public AccessorsAccessFpregCallback access_fpreg;
+               [CCode (delegate_target = false)]
+               public AccessorsResumeCallback resume;
+               [CCode (delegate_target = false)]
+               public AccessorsGetProcNameCallback? get_proc_name;
+
+               public AddrSpace? create_addr_space (int i);
+       }
+
+       [CCode (cname = "unw_save_loc_type_t", cprefix = "UNW_SLT_", has_type_id = false)]
+       public enum SaveLocType {
+               NONE,
+               MEMORY,
+               REG
+       }
+
+
+       [CCode (cname = "unw_save_loc_t")]
+       public struct SaveLoc {
+               public SaveLocType type;
+               [CCode (cname = "u.addr")]
+               public Word addr;
+               [CCode (cname = "u.regnum")]
+               public Regnum regnum;
+               //public unw_tdep_save_loc_t extra;
+       }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]