[vala/staging] vapi: Add libunwind-generic binding
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] vapi: Add libunwind-generic binding
- Date: Sat, 6 Feb 2021 16:42:55 +0000 (UTC)
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]