Updated documentation

Signed-off-by: Github Action <ubpf@users.noreply.github.com>
diff --git a/globals.html b/globals.html
index 2c21008..c434bf9 100644
--- a/globals.html
+++ b/globals.html
@@ -118,6 +118,7 @@
 <li>ubpf_jit_fn&#160;:&#160;<a class="el" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf.h</a></li>
 <li>ubpf_load()&#160;:&#160;<a class="el" href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">ubpf.h</a></li>
 <li>UBPF_MAX_CALL_DEPTH&#160;:&#160;<a class="el" href="ubpf_8h.html#a23e70b5f29f0296e69a72ec5cfc588d8">ubpf.h</a></li>
+<li>UBPF_MAX_EXT_FUNCS&#160;:&#160;<a class="el" href="ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659">ubpf.h</a></li>
 <li>UBPF_MAX_INSTS&#160;:&#160;<a class="el" href="ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f">ubpf.h</a></li>
 <li>ubpf_register()&#160;:&#160;<a class="el" href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">ubpf.h</a></li>
 <li>ubpf_register_data_bounds_check()&#160;:&#160;<a class="el" href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">ubpf.h</a></li>
diff --git a/globals_defs.html b/globals_defs.html
index eb2d086..fa15152 100644
--- a/globals_defs.html
+++ b/globals_defs.html
@@ -74,6 +74,7 @@
 <li>UBPF_EBPF_NONVOLATILE_SIZE&#160;:&#160;<a class="el" href="ubpf_8h.html#ae89d6c1d7d2bda6006e9969e731826a3">ubpf.h</a></li>
 <li>UBPF_EBPF_STACK_SIZE&#160;:&#160;<a class="el" href="ubpf_8h.html#a91fdfd9d55e9ffcadcfe27a87340eace">ubpf.h</a></li>
 <li>UBPF_MAX_CALL_DEPTH&#160;:&#160;<a class="el" href="ubpf_8h.html#a23e70b5f29f0296e69a72ec5cfc588d8">ubpf.h</a></li>
+<li>UBPF_MAX_EXT_FUNCS&#160;:&#160;<a class="el" href="ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659">ubpf.h</a></li>
 <li>UBPF_MAX_INSTS&#160;:&#160;<a class="el" href="ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f">ubpf.h</a></li>
 </ul>
 </div><!-- contents -->
diff --git a/search/all_8.js b/search/all_8.js
index 0f127bb..bc537b6 100644
--- a/search/all_8.js
+++ b/search/all_8.js
@@ -21,24 +21,25 @@
   ['ubpf_5fjit_5ffn_18',['ubpf_jit_fn',['../ubpf_8h.html#a6334115c4408267ec35087ade6128fa0',1,'ubpf.h']]],
   ['ubpf_5fload_19',['ubpf_load',['../ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d',1,'ubpf.h']]],
   ['ubpf_5fmax_5fcall_5fdepth_20',['UBPF_MAX_CALL_DEPTH',['../ubpf_8h.html#a23e70b5f29f0296e69a72ec5cfc588d8',1,'ubpf.h']]],
-  ['ubpf_5fmax_5finsts_21',['UBPF_MAX_INSTS',['../ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f',1,'ubpf.h']]],
-  ['ubpf_5fregister_22',['ubpf_register',['../ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4',1,'ubpf.h']]],
-  ['ubpf_5fregister_5fdata_5fbounds_5fcheck_23',['ubpf_register_data_bounds_check',['../ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03',1,'ubpf.h']]],
-  ['ubpf_5fregister_5fdata_5frelocation_24',['ubpf_register_data_relocation',['../ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611',1,'ubpf.h']]],
-  ['ubpf_5fregister_5fdebug_5ffn_25',['ubpf_register_debug_fn',['../ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e',1,'ubpf.h']]],
-  ['ubpf_5fregister_5fexternal_5fdispatcher_26',['ubpf_register_external_dispatcher',['../ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653',1,'ubpf.h']]],
-  ['ubpf_5fregister_5fstack_5fusage_5fcalculator_27',['ubpf_register_stack_usage_calculator',['../ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a',1,'ubpf.h']]],
-  ['ubpf_5fset_5ferror_5fprint_28',['ubpf_set_error_print',['../ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c',1,'ubpf.h']]],
-  ['ubpf_5fset_5finstruction_5flimit_29',['ubpf_set_instruction_limit',['../ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df',1,'ubpf.h']]],
-  ['ubpf_5fset_5fjit_5fcode_5fsize_30',['ubpf_set_jit_code_size',['../ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a',1,'ubpf.h']]],
-  ['ubpf_5fset_5fpointer_5fsecret_31',['ubpf_set_pointer_secret',['../ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701',1,'ubpf.h']]],
-  ['ubpf_5fset_5fregisters_32',['ubpf_set_registers',['../ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f',1,'ubpf.h']]],
-  ['ubpf_5fset_5funwind_5ffunction_5findex_33',['ubpf_set_unwind_function_index',['../ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3',1,'ubpf.h']]],
-  ['ubpf_5ftoggle_5fbounds_5fcheck_34',['ubpf_toggle_bounds_check',['../ubpf_8h.html#a80938918080712ac0667359fd163f1a5',1,'ubpf.h']]],
-  ['ubpf_5ftoggle_5fconstant_5fblinding_35',['ubpf_toggle_constant_blinding',['../ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086',1,'ubpf.h']]],
-  ['ubpf_5ftoggle_5freadonly_5fbytecode_36',['ubpf_toggle_readonly_bytecode',['../ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc',1,'ubpf.h']]],
-  ['ubpf_5ftoggle_5fundefined_5fbehavior_5fcheck_37',['ubpf_toggle_undefined_behavior_check',['../ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768',1,'ubpf.h']]],
-  ['ubpf_5ftranslate_38',['ubpf_translate',['../ubpf_8h.html#ab34e26c0a46366345df354ce992448c4',1,'ubpf.h']]],
-  ['ubpf_5ftranslate_5fex_39',['ubpf_translate_ex',['../ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0',1,'ubpf.h']]],
-  ['ubpf_5funload_5fcode_40',['ubpf_unload_code',['../ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25',1,'ubpf.h']]]
+  ['ubpf_5fmax_5fext_5ffuncs_21',['UBPF_MAX_EXT_FUNCS',['../ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659',1,'ubpf.h']]],
+  ['ubpf_5fmax_5finsts_22',['UBPF_MAX_INSTS',['../ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f',1,'ubpf.h']]],
+  ['ubpf_5fregister_23',['ubpf_register',['../ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4',1,'ubpf.h']]],
+  ['ubpf_5fregister_5fdata_5fbounds_5fcheck_24',['ubpf_register_data_bounds_check',['../ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03',1,'ubpf.h']]],
+  ['ubpf_5fregister_5fdata_5frelocation_25',['ubpf_register_data_relocation',['../ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611',1,'ubpf.h']]],
+  ['ubpf_5fregister_5fdebug_5ffn_26',['ubpf_register_debug_fn',['../ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e',1,'ubpf.h']]],
+  ['ubpf_5fregister_5fexternal_5fdispatcher_27',['ubpf_register_external_dispatcher',['../ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653',1,'ubpf.h']]],
+  ['ubpf_5fregister_5fstack_5fusage_5fcalculator_28',['ubpf_register_stack_usage_calculator',['../ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a',1,'ubpf.h']]],
+  ['ubpf_5fset_5ferror_5fprint_29',['ubpf_set_error_print',['../ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c',1,'ubpf.h']]],
+  ['ubpf_5fset_5finstruction_5flimit_30',['ubpf_set_instruction_limit',['../ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df',1,'ubpf.h']]],
+  ['ubpf_5fset_5fjit_5fcode_5fsize_31',['ubpf_set_jit_code_size',['../ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a',1,'ubpf.h']]],
+  ['ubpf_5fset_5fpointer_5fsecret_32',['ubpf_set_pointer_secret',['../ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701',1,'ubpf.h']]],
+  ['ubpf_5fset_5fregisters_33',['ubpf_set_registers',['../ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f',1,'ubpf.h']]],
+  ['ubpf_5fset_5funwind_5ffunction_5findex_34',['ubpf_set_unwind_function_index',['../ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3',1,'ubpf.h']]],
+  ['ubpf_5ftoggle_5fbounds_5fcheck_35',['ubpf_toggle_bounds_check',['../ubpf_8h.html#a80938918080712ac0667359fd163f1a5',1,'ubpf.h']]],
+  ['ubpf_5ftoggle_5fconstant_5fblinding_36',['ubpf_toggle_constant_blinding',['../ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086',1,'ubpf.h']]],
+  ['ubpf_5ftoggle_5freadonly_5fbytecode_37',['ubpf_toggle_readonly_bytecode',['../ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc',1,'ubpf.h']]],
+  ['ubpf_5ftoggle_5fundefined_5fbehavior_5fcheck_38',['ubpf_toggle_undefined_behavior_check',['../ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768',1,'ubpf.h']]],
+  ['ubpf_5ftranslate_39',['ubpf_translate',['../ubpf_8h.html#ab34e26c0a46366345df354ce992448c4',1,'ubpf.h']]],
+  ['ubpf_5ftranslate_5fex_40',['ubpf_translate_ex',['../ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0',1,'ubpf.h']]],
+  ['ubpf_5funload_5fcode_41',['ubpf_unload_code',['../ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25',1,'ubpf.h']]]
 ];
diff --git a/search/defines_0.js b/search/defines_0.js
index 1189a7f..c52737d 100644
--- a/search/defines_0.js
+++ b/search/defines_0.js
@@ -4,5 +4,6 @@
   ['ubpf_5febpf_5fnonvolatile_5fsize_1',['UBPF_EBPF_NONVOLATILE_SIZE',['../ubpf_8h.html#ae89d6c1d7d2bda6006e9969e731826a3',1,'ubpf.h']]],
   ['ubpf_5febpf_5fstack_5fsize_2',['UBPF_EBPF_STACK_SIZE',['../ubpf_8h.html#a91fdfd9d55e9ffcadcfe27a87340eace',1,'ubpf.h']]],
   ['ubpf_5fmax_5fcall_5fdepth_3',['UBPF_MAX_CALL_DEPTH',['../ubpf_8h.html#a23e70b5f29f0296e69a72ec5cfc588d8',1,'ubpf.h']]],
-  ['ubpf_5fmax_5finsts_4',['UBPF_MAX_INSTS',['../ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f',1,'ubpf.h']]]
+  ['ubpf_5fmax_5fext_5ffuncs_4',['UBPF_MAX_EXT_FUNCS',['../ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659',1,'ubpf.h']]],
+  ['ubpf_5fmax_5finsts_5',['UBPF_MAX_INSTS',['../ubpf_8h.html#a7b029668bfe717c5d7b33fba3847a00f',1,'ubpf.h']]]
 ];
diff --git a/ubpf_8h.html b/ubpf_8h.html
index 10a1aec..ea6ffc8 100644
--- a/ubpf_8h.html
+++ b/ubpf_8h.html
@@ -103,6 +103,9 @@
 <tr class="memitem:a62c7fa1f07bf5c6d3734a1fcd4e6d6cf" id="r_a62c7fa1f07bf5c6d3734a1fcd4e6d6cf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ubpf_8h.html#a62c7fa1f07bf5c6d3734a1fcd4e6d6cf">UBPF_EBPF_LOCAL_FUNCTION_STACK_SIZE</a>&#160;&#160;&#160;256</td></tr>
 <tr class="memdesc:a62c7fa1f07bf5c6d3734a1fcd4e6d6cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default stack size for each local eBPF function.  <br /></td></tr>
 <tr class="separator:a62c7fa1f07bf5c6d3734a1fcd4e6d6cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ae3bcb73b7be9b767866eae7a99e659" id="r_a1ae3bcb73b7be9b767866eae7a99e659"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659">UBPF_MAX_EXT_FUNCS</a>&#160;&#160;&#160;64</td></tr>
+<tr class="memdesc:a1ae3bcb73b7be9b767866eae7a99e659"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default maximum number of external helper functions that can be registered.  <br /></td></tr>
+<tr class="separator:a1ae3bcb73b7be9b767866eae7a99e659"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae89d6c1d7d2bda6006e9969e731826a3" id="r_ae89d6c1d7d2bda6006e9969e731826a3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ubpf_8h.html#ae89d6c1d7d2bda6006e9969e731826a3">UBPF_EBPF_NONVOLATILE_SIZE</a>&#160;&#160;&#160;(sizeof(uint64_t) * 5)</td></tr>
 <tr class="separator:ae89d6c1d7d2bda6006e9969e731826a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
@@ -297,6 +300,22 @@
 
 </div>
 </div>
+<a id="a1ae3bcb73b7be9b767866eae7a99e659" name="a1ae3bcb73b7be9b767866eae7a99e659"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ae3bcb73b7be9b767866eae7a99e659">&#9670;&#160;</a></span>UBPF_MAX_EXT_FUNCS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define UBPF_MAX_EXT_FUNCS&#160;&#160;&#160;64</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Default maximum number of external helper functions that can be registered. </p>
+
+</div>
+</div>
 <a id="a7b029668bfe717c5d7b33fba3847a00f" name="a7b029668bfe717c5d7b33fba3847a00f"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a7b029668bfe717c5d7b33fba3847a00f">&#9670;&#160;</a></span>UBPF_MAX_INSTS</h2>
 
diff --git a/ubpf_8h_source.html b/ubpf_8h_source.html
index a26247c..b7e2a50 100644
--- a/ubpf_8h_source.html
+++ b/ubpf_8h_source.html
@@ -131,198 +131,202 @@
 <div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a62c7fa1f07bf5c6d3734a1fcd4e6d6cf">   65</a></span><span class="preprocessor">#define UBPF_EBPF_LOCAL_FUNCTION_STACK_SIZE 256</span></div>
 <div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="preprocessor">#endif</span></div>
 <div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae89d6c1d7d2bda6006e9969e731826a3">   68</a></span><span class="preprocessor">#define UBPF_EBPF_NONVOLATILE_SIZE (sizeof(uint64_t) * 5)</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    <span class="keyword">struct </span>ubpf_vm;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span> </div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">   85</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a>)(<span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len);</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">   91</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a>)(<span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len, uint8_t* stack, <span class="keywordtype">size_t</span> stack_len);</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
-<div class="foldopen" id="foldopen00110" data-start="{" data-end="};">
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">  110</a></span>    <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>    {</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">  112</a></span>        <a class="code hl_enumvalue" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">ExtendedJitMode</a>,</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>        <a class="code hl_enumvalue" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">BasicJitMode</a></div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">  114</a></span>    };</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span><span class="preprocessor">#if !defined(UBPF_MAX_EXT_FUNCS)</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a1ae3bcb73b7be9b767866eae7a99e659">   72</a></span><span class="preprocessor">#define UBPF_MAX_EXT_FUNCS 64</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae89d6c1d7d2bda6006e9969e731826a3">   75</a></span><span class="preprocessor">#define UBPF_EBPF_NONVOLATILE_SIZE (sizeof(uint64_t) * 5)</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    <span class="keyword">struct </span>ubpf_vm;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">   92</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a>)(<span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len);</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">   98</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a>)(<span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len, uint8_t* stack, <span class="keywordtype">size_t</span> stack_len);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="foldopen" id="foldopen00117" data-start="{" data-end="};">
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">  117</a></span>    <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>    {</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">  119</a></span>        <a class="code hl_enumvalue" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">ExtendedJitMode</a>,</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>        <a class="code hl_enumvalue" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">BasicJitMode</a></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">  121</a></span>    };</div>
 </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span> </div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>    <span class="keyword">struct </span>ubpf_vm*</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a626fc733422de6db211fa33fe1f19727">  122</a></span>    <a class="code hl_function" href="ubpf_8h.html#a626fc733422de6db211fa33fe1f19727">ubpf_create</a>(<span class="keywordtype">void</span>);</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span> </div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">void</span></div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae69dfc8e94c60e15a5db25fb6316274f">  130</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae69dfc8e94c60e15a5db25fb6316274f">ubpf_destroy</a>(<span class="keyword">struct</span> ubpf_vm* vm);</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span> </div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>    <span class="keywordtype">bool</span></div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a80938918080712ac0667359fd163f1a5">  140</a></span>    <a class="code hl_function" href="ubpf_8h.html#a80938918080712ac0667359fd163f1a5">ubpf_toggle_bounds_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span> </div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>    <span class="keywordtype">bool</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086">  163</a></span>    <a class="code hl_function" href="ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086">ubpf_toggle_constant_blinding</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span> </div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>    <span class="keywordtype">void</span></div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c">  172</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c">ubpf_set_error_print</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">int</span> (*error_printf)(FILE* stream, <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ...));</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span> </div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">  181</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a>)(uint64_t p0, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4);</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span> </div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>    <a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a></div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a53971fe3966198c6fec238d81d94bfe8">  195</a></span>    <a class="code hl_function" href="ubpf_8h.html#a53971fe3966198c6fec238d81d94bfe8">as_external_function_t</a>(<span class="keywordtype">void</span>* f);</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span> </div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">  211</a></span>    <a class="code hl_function" href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">ubpf_register</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a> fn);</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span> </div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">  216</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a>)(</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>        uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">void</span>* cookie);</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span> </div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">  222</a></span>    <span class="keyword">typedef</span> bool (*<a class="code hl_typedef" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keyword">const</span> <span class="keyword">struct </span>ubpf_vm* vm);</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span> </div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653">  241</a></span>    <a class="code hl_function" href="ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653">ubpf_register_external_dispatcher</a>(</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>        <span class="keyword">struct</span> ubpf_vm* vm, <a class="code hl_typedef" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a> dispatcher, <a class="code hl_typedef" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a> validater);</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span> </div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">  249</a></span>    <span class="keyword">typedef</span> int (*<a class="code hl_typedef" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a>)(<span class="keyword">const</span> <span class="keyword">struct </span>ubpf_vm* vm, uint16_t pc, <span class="keywordtype">void</span>* cookie);</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>    <span class="keyword">struct </span>ubpf_vm*</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a626fc733422de6db211fa33fe1f19727">  129</a></span>    <a class="code hl_function" href="ubpf_8h.html#a626fc733422de6db211fa33fe1f19727">ubpf_create</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>    <span class="keywordtype">void</span></div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae69dfc8e94c60e15a5db25fb6316274f">  137</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae69dfc8e94c60e15a5db25fb6316274f">ubpf_destroy</a>(<span class="keyword">struct</span> ubpf_vm* vm);</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>    <span class="keywordtype">bool</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a80938918080712ac0667359fd163f1a5">  147</a></span>    <a class="code hl_function" href="ubpf_8h.html#a80938918080712ac0667359fd163f1a5">ubpf_toggle_bounds_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>    <span class="keywordtype">bool</span></div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086">  170</a></span>    <a class="code hl_function" href="ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086">ubpf_toggle_constant_blinding</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>    <span class="keywordtype">void</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c">  179</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c">ubpf_set_error_print</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">int</span> (*error_printf)(FILE* stream, <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ...));</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">  188</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a>)(uint64_t p0, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4);</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>    <a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a></div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a53971fe3966198c6fec238d81d94bfe8">  202</a></span>    <a class="code hl_function" href="ubpf_8h.html#a53971fe3966198c6fec238d81d94bfe8">as_external_function_t</a>(<span class="keywordtype">void</span>* f);</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">  218</a></span>    <a class="code hl_function" href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">ubpf_register</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code hl_typedef" href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a> fn);</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">  223</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a>)(</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>        uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">void</span>* cookie);</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">  229</a></span>    <span class="keyword">typedef</span> bool (*<a class="code hl_typedef" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keyword">const</span> <span class="keyword">struct </span>ubpf_vm* vm);</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653">  248</a></span>    <a class="code hl_function" href="ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653">ubpf_register_external_dispatcher</a>(</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>        <span class="keyword">struct</span> ubpf_vm* vm, <a class="code hl_typedef" href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a> dispatcher, <a class="code hl_typedef" href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a> validater);</div>
 <div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span> </div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a">  275</a></span>    <a class="code hl_function" href="ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a">ubpf_register_stack_usage_calculator</a>(<span class="keyword">struct</span> ubpf_vm* vm, <a class="code hl_typedef" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a> calculator, <span class="keywordtype">void</span>* cookie);</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span> </div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">  293</a></span>    <a class="code hl_function" href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">ubpf_load</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* code, uint32_t code_len, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span> </div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>    <span class="comment">/*</span></div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span><span class="comment">     * Unload code from a VM</span></div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span><span class="comment">     *</span></div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span><span class="comment">     * This must be done before calling ubpf_load or ubpf_load_elf, except for the</span></div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span><span class="comment">     * first time those functions are called. It clears the VM instructions to</span></div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span><span class="comment">     * allow for new code to be loaded.</span></div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span><span class="comment">     *</span></div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span><span class="comment">     * It does not unregister any external functions.</span></div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span><span class="comment">     */</span></div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span> </div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>    <span class="keywordtype">void</span></div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25">  313</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25">ubpf_unload_code</a>(<span class="keyword">struct</span> ubpf_vm* vm);</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span> </div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span><span class="preprocessor">#if defined(UBPF_HAS_ELF_H)</span></div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>    ubpf_load_elf(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* elf, <span class="keywordtype">size_t</span> elf_len, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span> </div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>    ubpf_load_elf_ex(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* elf, <span class="keywordtype">size_t</span> elf_len, <span class="keyword">const</span> <span class="keywordtype">char</span>* main_section_name, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span> </div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a1ce3eb22d45ec43436758a139ffc8c95">  383</a></span>    <a class="code hl_function" href="ubpf_8h.html#a1ce3eb22d45ec43436758a139ffc8c95">ubpf_exec</a>(<span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len, uint64_t* bpf_return_value);</div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span> </div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6ded3ae17d5879d7c19f32fa52cbbe26">  386</a></span>    <a class="code hl_function" href="ubpf_8h.html#a6ded3ae17d5879d7c19f32fa52cbbe26">ubpf_exec_ex</a>(</div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span>        <span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm,</div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>        <span class="keywordtype">void</span>* mem,</div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span>        <span class="keywordtype">size_t</span> mem_len,</div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span>        uint64_t* bpf_return_value,</div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>        uint8_t* stack,</div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span>        <span class="keywordtype">size_t</span> stack_len);</div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span> </div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>    <a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a67b901bf6d169b6b28f818f15bd17cba">  408</a></span>    <a class="code hl_function" href="ubpf_8h.html#a67b901bf6d169b6b28f818f15bd17cba">ubpf_compile</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span> </div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>    <a class="code hl_typedef" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a281772f3e99c3d8505751297c51aa22e">  427</a></span>    <a class="code hl_function" href="ubpf_8h.html#a281772f3e99c3d8505751297c51aa22e">ubpf_compile_ex</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">char</span>** errmsg, <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a> jit_mode);</div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span> </div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>    <a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa2604f93223a8f076b503ba144a6b1ce">  444</a></span>    <a class="code hl_function" href="ubpf_8h.html#aa2604f93223a8f076b503ba144a6b1ce">ubpf_copy_jit</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span> </div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ab34e26c0a46366345df354ce992448c4">  462</a></span>    <a class="code hl_function" href="ubpf_8h.html#ab34e26c0a46366345df354ce992448c4">ubpf_translate</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint8_t* buffer, <span class="keywordtype">size_t</span>* size, <span class="keywordtype">char</span>** errmsg);</div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span> </div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"><a class="line" href="ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0">  481</a></span>    <a class="code hl_function" href="ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0">ubpf_translate_ex</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint8_t* buffer, <span class="keywordtype">size_t</span>* size, <span class="keywordtype">char</span>** errmsg, <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a> jit_mode);</div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span> </div>
-<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3">  495</a></span>    <a class="code hl_function" href="ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3">ubpf_set_unwind_function_index</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx);</div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span> </div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span>    <span class="keywordtype">void</span></div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f">  504</a></span>    <a class="code hl_function" href="ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f">ubpf_set_registers</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint64_t* regs);</div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span> </div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span>    uint64_t*</div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa27c1899a4e7e8d19d473111849d1a01">  513</a></span>    <a class="code hl_function" href="ubpf_8h.html#aa27c1899a4e7e8d19d473111849d1a01">ubpf_get_registers</a>(<span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm);</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span> </div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701">  524</a></span>    <a class="code hl_function" href="ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701">ubpf_set_pointer_secret</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint64_t secret);</div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span> </div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">  538</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a>)(</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span>        <span class="keywordtype">void</span>* user_context,</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>        <span class="keyword">const</span> uint8_t* data,</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>        uint64_t data_size,</div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>        <span class="keyword">const</span> <span class="keywordtype">char</span>* symbol_name,</div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span>        uint64_t symbol_offset,</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span>        uint64_t symbol_size);</div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span> </div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611">  554</a></span>    <a class="code hl_function" href="ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611">ubpf_register_data_relocation</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* user_context, <a class="code hl_typedef" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a> relocation);</div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span> </div>
-<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">  565</a></span>    <span class="keyword">typedef</span> bool (*<a class="code hl_typedef" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a>)(<span class="keywordtype">void</span>* context, uint64_t addr, uint64_t size);</div>
-<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span> </div>
-<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">  577</a></span>    <a class="code hl_function" href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">ubpf_register_data_bounds_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* user_context, <a class="code hl_typedef" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a> bounds_check);</div>
-<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span> </div>
-<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a">  592</a></span>    <a class="code hl_function" href="ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a">ubpf_set_jit_code_size</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">size_t</span> code_size);</div>
-<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span> </div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"><a class="line" href="ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df">  606</a></span>    <a class="code hl_function" href="ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df">ubpf_set_instruction_limit</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint32_t limit, uint32_t* previous_limit);</div>
-<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span> </div>
-<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span>    <span class="keywordtype">bool</span></div>
-<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768">  619</a></span>    <a class="code hl_function" href="ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768">ubpf_toggle_undefined_behavior_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
-<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span> </div>
-<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span>    <span class="keywordtype">bool</span></div>
-<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc">  637</a></span>    <a class="code hl_function" href="ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc">ubpf_toggle_readonly_bytecode</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
-<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span> </div>
-<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">  654</a></span>    <span class="keyword">typedef</span> void (*<a class="code hl_typedef" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a>)(</div>
-<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span>        <span class="keywordtype">void</span>* context,</div>
-<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>        <span class="keywordtype">int</span> program_counter,</div>
-<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span>        <span class="keyword">const</span> uint64_t registers[16],</div>
-<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>        <span class="keyword">const</span> uint8_t* stack_start,</div>
-<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>        <span class="keywordtype">size_t</span> stack_length,</div>
-<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>        uint64_t register_mask,</div>
-<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>        <span class="keyword">const</span> uint8_t* stack_mask_start);</div>
-<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span> </div>
-<div class="line"><a id="l00672" name="l00672"></a><span class="lineno">  672</span>    <span class="keywordtype">int</span></div>
-<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e">  673</a></span>    <a class="code hl_function" href="ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e">ubpf_register_debug_fn</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* context, <a class="code hl_typedef" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a> debug_function);</div>
-<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span><span class="preprocessor">#ifdef __cplusplus</span></div>
-<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span>}</div>
-<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span> </div>
-<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">  256</a></span>    <span class="keyword">typedef</span> int (*<a class="code hl_typedef" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a>)(<span class="keyword">const</span> <span class="keyword">struct </span>ubpf_vm* vm, uint16_t pc, <span class="keywordtype">void</span>* cookie);</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a">  282</a></span>    <a class="code hl_function" href="ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a">ubpf_register_stack_usage_calculator</a>(<span class="keyword">struct</span> ubpf_vm* vm, <a class="code hl_typedef" href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a> calculator, <span class="keywordtype">void</span>* cookie);</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">  300</a></span>    <a class="code hl_function" href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">ubpf_load</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* code, uint32_t code_len, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span>    <span class="comment">/*</span></div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span><span class="comment">     * Unload code from a VM</span></div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span><span class="comment">     *</span></div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span><span class="comment">     * This must be done before calling ubpf_load or ubpf_load_elf, except for the</span></div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span><span class="comment">     * first time those functions are called. It clears the VM instructions to</span></div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span><span class="comment">     * allow for new code to be loaded.</span></div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span><span class="comment">     *</span></div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span><span class="comment">     * It does not unregister any external functions.</span></div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span><span class="comment">     */</span></div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>    <span class="keywordtype">void</span></div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25">  320</a></span>    <a class="code hl_function" href="ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25">ubpf_unload_code</a>(<span class="keyword">struct</span> ubpf_vm* vm);</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span><span class="preprocessor">#if defined(UBPF_HAS_ELF_H)</span></div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>    ubpf_load_elf(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* elf, <span class="keywordtype">size_t</span> elf_len, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>    ubpf_load_elf_ex(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keyword">const</span> <span class="keywordtype">void</span>* elf, <span class="keywordtype">size_t</span> elf_len, <span class="keyword">const</span> <span class="keywordtype">char</span>* main_section_name, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a1ce3eb22d45ec43436758a139ffc8c95">  390</a></span>    <a class="code hl_function" href="ubpf_8h.html#a1ce3eb22d45ec43436758a139ffc8c95">ubpf_exec</a>(<span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* mem, <span class="keywordtype">size_t</span> mem_len, uint64_t* bpf_return_value);</div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6ded3ae17d5879d7c19f32fa52cbbe26">  393</a></span>    <a class="code hl_function" href="ubpf_8h.html#a6ded3ae17d5879d7c19f32fa52cbbe26">ubpf_exec_ex</a>(</div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span>        <span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm,</div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>        <span class="keywordtype">void</span>* mem,</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span>        <span class="keywordtype">size_t</span> mem_len,</div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>        uint64_t* bpf_return_value,</div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span>        uint8_t* stack,</div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span>        <span class="keywordtype">size_t</span> stack_len);</div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span>    <a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a67b901bf6d169b6b28f818f15bd17cba">  415</a></span>    <a class="code hl_function" href="ubpf_8h.html#a67b901bf6d169b6b28f818f15bd17cba">ubpf_compile</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span>    <a class="code hl_typedef" href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a></div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a281772f3e99c3d8505751297c51aa22e">  434</a></span>    <a class="code hl_function" href="ubpf_8h.html#a281772f3e99c3d8505751297c51aa22e">ubpf_compile_ex</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">char</span>** errmsg, <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a> jit_mode);</div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>    <a class="code hl_typedef" href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa2604f93223a8f076b503ba144a6b1ce">  451</a></span>    <a class="code hl_function" href="ubpf_8h.html#aa2604f93223a8f076b503ba144a6b1ce">ubpf_copy_jit</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"><a class="line" href="ubpf_8h.html#ab34e26c0a46366345df354ce992448c4">  469</a></span>    <a class="code hl_function" href="ubpf_8h.html#ab34e26c0a46366345df354ce992448c4">ubpf_translate</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint8_t* buffer, <span class="keywordtype">size_t</span>* size, <span class="keywordtype">char</span>** errmsg);</div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"><a class="line" href="ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0">  488</a></span>    <a class="code hl_function" href="ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0">ubpf_translate_ex</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint8_t* buffer, <span class="keywordtype">size_t</span>* size, <span class="keywordtype">char</span>** errmsg, <span class="keyword">enum</span> <a class="code hl_enumeration" href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a> jit_mode);</div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3">  502</a></span>    <a class="code hl_function" href="ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3">ubpf_set_unwind_function_index</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx);</div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span>    <span class="keywordtype">void</span></div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f">  511</a></span>    <a class="code hl_function" href="ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f">ubpf_set_registers</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint64_t* regs);</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>    uint64_t*</div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aa27c1899a4e7e8d19d473111849d1a01">  520</a></span>    <a class="code hl_function" href="ubpf_8h.html#aa27c1899a4e7e8d19d473111849d1a01">ubpf_get_registers</a>(<span class="keyword">const</span> <span class="keyword">struct</span> ubpf_vm* vm);</div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701">  531</a></span>    <a class="code hl_function" href="ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701">ubpf_set_pointer_secret</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint64_t secret);</div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">  545</a></span>    <span class="keyword">typedef</span> uint64_t (*<a class="code hl_typedef" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a>)(</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span>        <span class="keywordtype">void</span>* user_context,</div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>        <span class="keyword">const</span> uint8_t* data,</div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>        uint64_t data_size,</div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>        <span class="keyword">const</span> <span class="keywordtype">char</span>* symbol_name,</div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>        uint64_t symbol_offset,</div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span>        uint64_t symbol_size);</div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611">  561</a></span>    <a class="code hl_function" href="ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611">ubpf_register_data_relocation</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* user_context, <a class="code hl_typedef" href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a> relocation);</div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">  572</a></span>    <span class="keyword">typedef</span> bool (*<a class="code hl_typedef" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a>)(<span class="keywordtype">void</span>* context, uint64_t addr, uint64_t size);</div>
+<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">  584</a></span>    <a class="code hl_function" href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">ubpf_register_data_bounds_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* user_context, <a class="code hl_typedef" href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a> bounds_check);</div>
+<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a">  599</a></span>    <a class="code hl_function" href="ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a">ubpf_set_jit_code_size</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">size_t</span> code_size);</div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"><a class="line" href="ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df">  613</a></span>    <a class="code hl_function" href="ubpf_8h.html#adfaef65d4add64487f09c0bd1d0a08df">ubpf_set_instruction_limit</a>(<span class="keyword">struct</span> ubpf_vm* vm, uint32_t limit, uint32_t* previous_limit);</div>
+<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span>    <span class="keywordtype">bool</span></div>
+<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768">  626</a></span>    <a class="code hl_function" href="ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768">ubpf_toggle_undefined_behavior_check</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
+<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span>    <span class="keywordtype">bool</span></div>
+<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"><a class="line" href="ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc">  644</a></span>    <a class="code hl_function" href="ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc">ubpf_toggle_readonly_bytecode</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">bool</span> enable);</div>
+<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">  661</a></span>    <span class="keyword">typedef</span> void (*<a class="code hl_typedef" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a>)(</div>
+<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>        <span class="keywordtype">void</span>* context,</div>
+<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>        <span class="keywordtype">int</span> program_counter,</div>
+<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span>        <span class="keyword">const</span> uint64_t registers[16],</div>
+<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span>        <span class="keyword">const</span> uint8_t* stack_start,</div>
+<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span>        <span class="keywordtype">size_t</span> stack_length,</div>
+<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span>        uint64_t register_mask,</div>
+<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span>        <span class="keyword">const</span> uint8_t* stack_mask_start);</div>
+<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span>    <span class="keywordtype">int</span></div>
+<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"><a class="line" href="ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e">  680</a></span>    <a class="code hl_function" href="ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e">ubpf_register_debug_fn</a>(<span class="keyword">struct</span> ubpf_vm* vm, <span class="keywordtype">void</span>* context, <a class="code hl_typedef" href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a> debug_function);</div>
+<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span><span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span>}</div>
+<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span> </div>
+<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span><span class="preprocessor">#endif</span></div>
 <div class="ttc" id="aubpf_8h_html_a0046484ecdb72363d0c5ae710e7b96c3"><div class="ttname"><a href="ubpf_8h.html#a0046484ecdb72363d0c5ae710e7b96c3">ubpf_set_unwind_function_index</a></div><div class="ttdeci">int ubpf_set_unwind_function_index(struct ubpf_vm *vm, unsigned int idx)</div><div class="ttdoc">Instruct the uBPF runtime to apply unwind-on-success semantics to a helper function....</div></div>
 <div class="ttc" id="aubpf_8h_html_a02964b59e2e59ae6662c6a767efa9086"><div class="ttname"><a href="ubpf_8h.html#a02964b59e2e59ae6662c6a767efa9086">ubpf_toggle_constant_blinding</a></div><div class="ttdeci">bool ubpf_toggle_constant_blinding(struct ubpf_vm *vm, bool enable)</div><div class="ttdoc">Enable / disable constant blinding in the JIT compiler. Constant blinding is a security hardening tec...</div></div>
 <div class="ttc" id="aubpf_8h_html_a02c3ecdd5fafbb6143163c426940dacc"><div class="ttname"><a href="ubpf_8h.html#a02c3ecdd5fafbb6143163c426940dacc">ubpf_toggle_readonly_bytecode</a></div><div class="ttdeci">bool ubpf_toggle_readonly_bytecode(struct ubpf_vm *vm, bool enable)</div><div class="ttdoc">Enable or disable read-only bytecode storage.</div></div>
-<div class="ttc" id="aubpf_8h_html_a087420d1735791ffa6c5c436f52da00e"><div class="ttname"><a href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a></div><div class="ttdeci">int(* stack_usage_calculator_t)(const struct ubpf_vm *vm, uint16_t pc, void *cookie)</div><div class="ttdoc">The type of a stack usage calculator callback function.</div><div class="ttdef"><b>Definition</b> ubpf.h:249</div></div>
+<div class="ttc" id="aubpf_8h_html_a087420d1735791ffa6c5c436f52da00e"><div class="ttname"><a href="ubpf_8h.html#a087420d1735791ffa6c5c436f52da00e">stack_usage_calculator_t</a></div><div class="ttdeci">int(* stack_usage_calculator_t)(const struct ubpf_vm *vm, uint16_t pc, void *cookie)</div><div class="ttdoc">The type of a stack usage calculator callback function.</div><div class="ttdef"><b>Definition</b> ubpf.h:256</div></div>
 <div class="ttc" id="aubpf_8h_html_a1ce3eb22d45ec43436758a139ffc8c95"><div class="ttname"><a href="ubpf_8h.html#a1ce3eb22d45ec43436758a139ffc8c95">ubpf_exec</a></div><div class="ttdeci">int ubpf_exec(const struct ubpf_vm *vm, void *mem, size_t mem_len, uint64_t *bpf_return_value)</div><div class="ttdoc">Execute a BPF program in the VM using the interpreter.</div></div>
 <div class="ttc" id="aubpf_8h_html_a27fbf5d30614b9c4b618209d681c3653"><div class="ttname"><a href="ubpf_8h.html#a27fbf5d30614b9c4b618209d681c3653">ubpf_register_external_dispatcher</a></div><div class="ttdeci">int ubpf_register_external_dispatcher(struct ubpf_vm *vm, external_function_dispatcher_t dispatcher, external_function_validate_t validater)</div><div class="ttdoc">Register a function that dispatches to external helpers The immediate field of a CALL instruction is ...</div></div>
 <div class="ttc" id="aubpf_8h_html_a281772f3e99c3d8505751297c51aa22e"><div class="ttname"><a href="ubpf_8h.html#a281772f3e99c3d8505751297c51aa22e">ubpf_compile_ex</a></div><div class="ttdeci">ubpf_jit_ex_fn ubpf_compile_ex(struct ubpf_vm *vm, char **errmsg, enum JitMode jit_mode)</div><div class="ttdoc">Compile a BPF program in the VM to native code.</div></div>
 <div class="ttc" id="aubpf_8h_html_a286aa9da7688d1327756e967eafc2f03"><div class="ttname"><a href="ubpf_8h.html#a286aa9da7688d1327756e967eafc2f03">ubpf_register_data_bounds_check</a></div><div class="ttdeci">int ubpf_register_data_bounds_check(struct ubpf_vm *vm, void *user_context, ubpf_bounds_check bounds_check)</div><div class="ttdoc">Set a bounds check function for the VM.</div></div>
-<div class="ttc" id="aubpf_8h_html_a30c41270d593fc7ffc2161f03f8c0b5b"><div class="ttname"><a href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a></div><div class="ttdeci">uint64_t(* ubpf_jit_ex_fn)(void *mem, size_t mem_len, uint8_t *stack, size_t stack_len)</div><div class="ttdoc">Opaque type for a uBPF JIT compiled function with external stack.</div><div class="ttdef"><b>Definition</b> ubpf.h:91</div></div>
+<div class="ttc" id="aubpf_8h_html_a30c41270d593fc7ffc2161f03f8c0b5b"><div class="ttname"><a href="ubpf_8h.html#a30c41270d593fc7ffc2161f03f8c0b5b">ubpf_jit_ex_fn</a></div><div class="ttdeci">uint64_t(* ubpf_jit_ex_fn)(void *mem, size_t mem_len, uint8_t *stack, size_t stack_len)</div><div class="ttdoc">Opaque type for a uBPF JIT compiled function with external stack.</div><div class="ttdef"><b>Definition</b> ubpf.h:98</div></div>
 <div class="ttc" id="aubpf_8h_html_a3257e0611c177eeaba7053e2eca92701"><div class="ttname"><a href="ubpf_8h.html#a3257e0611c177eeaba7053e2eca92701">ubpf_set_pointer_secret</a></div><div class="ttdeci">int ubpf_set_pointer_secret(struct ubpf_vm *vm, uint64_t secret)</div><div class="ttdoc">Optional secret to improve ROP protection.</div></div>
 <div class="ttc" id="aubpf_8h_html_a398c1c9b6d59876005eb64bbfab7b2b4"><div class="ttname"><a href="ubpf_8h.html#a398c1c9b6d59876005eb64bbfab7b2b4">ubpf_register</a></div><div class="ttdeci">int ubpf_register(struct ubpf_vm *vm, unsigned int index, const char *name, external_function_t fn)</div><div class="ttdoc">Register an external function. The immediate field of a CALL instruction is an index into an array of...</div></div>
 <div class="ttc" id="aubpf_8h_html_a4033cc1ab40ffc0d3de6efb70bb91768"><div class="ttname"><a href="ubpf_8h.html#a4033cc1ab40ffc0d3de6efb70bb91768">ubpf_toggle_undefined_behavior_check</a></div><div class="ttdeci">bool ubpf_toggle_undefined_behavior_check(struct ubpf_vm *vm, bool enable)</div><div class="ttdoc">Enable or disable undefined behavior checks. Undefined behavior includes reading from uninitialized m...</div></div>
-<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedd"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a></div><div class="ttdeci">JitMode</div><div class="ttdoc">Enum to describe JIT mode.</div><div class="ttdef"><b>Definition</b> ubpf.h:111</div></div>
-<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">BasicJitMode</a></div><div class="ttdeci">@ BasicJitMode</div><div class="ttdef"><b>Definition</b> ubpf.h:113</div></div>
-<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">ExtendedJitMode</a></div><div class="ttdeci">@ ExtendedJitMode</div><div class="ttdef"><b>Definition</b> ubpf.h:112</div></div>
+<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedd"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedd">JitMode</a></div><div class="ttdeci">JitMode</div><div class="ttdoc">Enum to describe JIT mode.</div><div class="ttdef"><b>Definition</b> ubpf.h:118</div></div>
+<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda03f63951ae56be0eb19aae34d83706f8">BasicJitMode</a></div><div class="ttdeci">@ BasicJitMode</div><div class="ttdef"><b>Definition</b> ubpf.h:120</div></div>
+<div class="ttc" id="aubpf_8h_html_a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd"><div class="ttname"><a href="ubpf_8h.html#a4be1055c33e64a9f81abf25f8b5ddedda81527be9d9bf3b5e45d8b59a4d1f19fd">ExtendedJitMode</a></div><div class="ttdeci">@ ExtendedJitMode</div><div class="ttdef"><b>Definition</b> ubpf.h:119</div></div>
 <div class="ttc" id="aubpf_8h_html_a53971fe3966198c6fec238d81d94bfe8"><div class="ttname"><a href="ubpf_8h.html#a53971fe3966198c6fec238d81d94bfe8">as_external_function_t</a></div><div class="ttdeci">external_function_t as_external_function_t(void *f)</div><div class="ttdoc">Cast an external function to external_function_t.</div></div>
 <div class="ttc" id="aubpf_8h_html_a626fc733422de6db211fa33fe1f19727"><div class="ttname"><a href="ubpf_8h.html#a626fc733422de6db211fa33fe1f19727">ubpf_create</a></div><div class="ttdeci">struct ubpf_vm * ubpf_create(void)</div><div class="ttdoc">Create a new uBPF VM.</div></div>
-<div class="ttc" id="aubpf_8h_html_a6334115c4408267ec35087ade6128fa0"><div class="ttname"><a href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div><div class="ttdeci">uint64_t(* ubpf_jit_fn)(void *mem, size_t mem_len)</div><div class="ttdoc">Opaque type for a uBPF JIT compiled function.</div><div class="ttdef"><b>Definition</b> ubpf.h:85</div></div>
-<div class="ttc" id="aubpf_8h_html_a64bd2f640f675e3eeff48ea52583d699"><div class="ttname"><a href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a></div><div class="ttdeci">bool(* ubpf_bounds_check)(void *context, uint64_t addr, uint64_t size)</div><div class="ttdoc">Function that is called by the VM to check if a memory access is within bounds.</div><div class="ttdef"><b>Definition</b> ubpf.h:565</div></div>
+<div class="ttc" id="aubpf_8h_html_a6334115c4408267ec35087ade6128fa0"><div class="ttname"><a href="ubpf_8h.html#a6334115c4408267ec35087ade6128fa0">ubpf_jit_fn</a></div><div class="ttdeci">uint64_t(* ubpf_jit_fn)(void *mem, size_t mem_len)</div><div class="ttdoc">Opaque type for a uBPF JIT compiled function.</div><div class="ttdef"><b>Definition</b> ubpf.h:92</div></div>
+<div class="ttc" id="aubpf_8h_html_a64bd2f640f675e3eeff48ea52583d699"><div class="ttname"><a href="ubpf_8h.html#a64bd2f640f675e3eeff48ea52583d699">ubpf_bounds_check</a></div><div class="ttdeci">bool(* ubpf_bounds_check)(void *context, uint64_t addr, uint64_t size)</div><div class="ttdoc">Function that is called by the VM to check if a memory access is within bounds.</div><div class="ttdef"><b>Definition</b> ubpf.h:572</div></div>
 <div class="ttc" id="aubpf_8h_html_a67b901bf6d169b6b28f818f15bd17cba"><div class="ttname"><a href="ubpf_8h.html#a67b901bf6d169b6b28f818f15bd17cba">ubpf_compile</a></div><div class="ttdeci">ubpf_jit_fn ubpf_compile(struct ubpf_vm *vm, char **errmsg)</div><div class="ttdoc">Compile a BPF program in the VM to native code.</div></div>
 <div class="ttc" id="aubpf_8h_html_a6ce8c1133902da4629c53aa82c159611"><div class="ttname"><a href="ubpf_8h.html#a6ce8c1133902da4629c53aa82c159611">ubpf_register_data_relocation</a></div><div class="ttdeci">int ubpf_register_data_relocation(struct ubpf_vm *vm, void *user_context, ubpf_data_relocation relocation)</div><div class="ttdoc">Set a relocation function for the VM.</div></div>
 <div class="ttc" id="aubpf_8h_html_a6ded3ae17d5879d7c19f32fa52cbbe26"><div class="ttname"><a href="ubpf_8h.html#a6ded3ae17d5879d7c19f32fa52cbbe26">ubpf_exec_ex</a></div><div class="ttdeci">int ubpf_exec_ex(const struct ubpf_vm *vm, void *mem, size_t mem_len, uint64_t *bpf_return_value, uint8_t *stack, size_t stack_len)</div></div>
-<div class="ttc" id="aubpf_8h_html_a70fb644d080e8448c1db17bb99858391"><div class="ttname"><a href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a></div><div class="ttdeci">uint64_t(* ubpf_data_relocation)(void *user_context, const uint8_t *data, uint64_t data_size, const char *symbol_name, uint64_t symbol_offset, uint64_t symbol_size)</div><div class="ttdoc">Data relocation function that is called by the VM when it encounters a R_BPF_64_64 relocation in the ...</div><div class="ttdef"><b>Definition</b> ubpf.h:538</div></div>
+<div class="ttc" id="aubpf_8h_html_a70fb644d080e8448c1db17bb99858391"><div class="ttname"><a href="ubpf_8h.html#a70fb644d080e8448c1db17bb99858391">ubpf_data_relocation</a></div><div class="ttdeci">uint64_t(* ubpf_data_relocation)(void *user_context, const uint8_t *data, uint64_t data_size, const char *symbol_name, uint64_t symbol_offset, uint64_t symbol_size)</div><div class="ttdoc">Data relocation function that is called by the VM when it encounters a R_BPF_64_64 relocation in the ...</div><div class="ttdef"><b>Definition</b> ubpf.h:545</div></div>
 <div class="ttc" id="aubpf_8h_html_a80938918080712ac0667359fd163f1a5"><div class="ttname"><a href="ubpf_8h.html#a80938918080712ac0667359fd163f1a5">ubpf_toggle_bounds_check</a></div><div class="ttdeci">bool ubpf_toggle_bounds_check(struct ubpf_vm *vm, bool enable)</div><div class="ttdoc">Enable / disable bounds_check. Bounds check is enabled by default, but it may be too restrictive.</div></div>
 <div class="ttc" id="aubpf_8h_html_a8d32748c100c98d69dba8dcf0e9d4d0d"><div class="ttname"><a href="ubpf_8h.html#a8d32748c100c98d69dba8dcf0e9d4d0d">ubpf_load</a></div><div class="ttdeci">int ubpf_load(struct ubpf_vm *vm, const void *code, uint32_t code_len, char **errmsg)</div><div class="ttdoc">Load code into a VM. This must be done before calling ubpf_exec or ubpf_compile and after registering...</div></div>
-<div class="ttc" id="aubpf_8h_html_a924a4a1a3e782846945d6adbabbcbb9c"><div class="ttname"><a href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a></div><div class="ttdeci">bool(* external_function_validate_t)(unsigned int index, const struct ubpf_vm *vm)</div><div class="ttdoc">The type of an external helper validation function.</div><div class="ttdef"><b>Definition</b> ubpf.h:222</div></div>
+<div class="ttc" id="aubpf_8h_html_a924a4a1a3e782846945d6adbabbcbb9c"><div class="ttname"><a href="ubpf_8h.html#a924a4a1a3e782846945d6adbabbcbb9c">external_function_validate_t</a></div><div class="ttdeci">bool(* external_function_validate_t)(unsigned int index, const struct ubpf_vm *vm)</div><div class="ttdoc">The type of an external helper validation function.</div><div class="ttdef"><b>Definition</b> ubpf.h:229</div></div>
 <div class="ttc" id="aubpf_8h_html_a96cdff7433769540c61a1cf41a0c241a"><div class="ttname"><a href="ubpf_8h.html#a96cdff7433769540c61a1cf41a0c241a">ubpf_set_jit_code_size</a></div><div class="ttdeci">int ubpf_set_jit_code_size(struct ubpf_vm *vm, size_t code_size)</div><div class="ttdoc">Set a size for the buffer allocated to machine code generated during JIT compilation....</div></div>
-<div class="ttc" id="aubpf_8h_html_a97c06ae6f43ae6e0cbca64ac1e70bc30"><div class="ttname"><a href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a></div><div class="ttdeci">uint64_t(* external_function_t)(uint64_t p0, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4)</div><div class="ttdoc">The type of an external helper function.</div><div class="ttdef"><b>Definition</b> ubpf.h:181</div></div>
+<div class="ttc" id="aubpf_8h_html_a97c06ae6f43ae6e0cbca64ac1e70bc30"><div class="ttname"><a href="ubpf_8h.html#a97c06ae6f43ae6e0cbca64ac1e70bc30">external_function_t</a></div><div class="ttdeci">uint64_t(* external_function_t)(uint64_t p0, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4)</div><div class="ttdoc">The type of an external helper function.</div><div class="ttdef"><b>Definition</b> ubpf.h:188</div></div>
 <div class="ttc" id="aubpf_8h_html_aa2604f93223a8f076b503ba144a6b1ce"><div class="ttname"><a href="ubpf_8h.html#aa2604f93223a8f076b503ba144a6b1ce">ubpf_copy_jit</a></div><div class="ttdeci">ubpf_jit_fn ubpf_copy_jit(struct ubpf_vm *vm, void *buffer, size_t size, char **errmsg)</div><div class="ttdoc">Copy the JIT'd program code to the given buffer.</div></div>
 <div class="ttc" id="aubpf_8h_html_aa27c1899a4e7e8d19d473111849d1a01"><div class="ttname"><a href="ubpf_8h.html#aa27c1899a4e7e8d19d473111849d1a01">ubpf_get_registers</a></div><div class="ttdeci">uint64_t * ubpf_get_registers(const struct ubpf_vm *vm)</div><div class="ttdoc">Retrieve the storage location for the BPF registers in the VM.</div></div>
-<div class="ttc" id="aubpf_8h_html_aa819644ac2adf81271cf703f9eb5614b"><div class="ttname"><a href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a></div><div class="ttdeci">uint64_t(* external_function_dispatcher_t)(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, unsigned int index, void *cookie)</div><div class="ttdoc">The type of an external helper dispatcher function.</div><div class="ttdef"><b>Definition</b> ubpf.h:216</div></div>
+<div class="ttc" id="aubpf_8h_html_aa819644ac2adf81271cf703f9eb5614b"><div class="ttname"><a href="ubpf_8h.html#aa819644ac2adf81271cf703f9eb5614b">external_function_dispatcher_t</a></div><div class="ttdeci">uint64_t(* external_function_dispatcher_t)(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, unsigned int index, void *cookie)</div><div class="ttdoc">The type of an external helper dispatcher function.</div><div class="ttdef"><b>Definition</b> ubpf.h:223</div></div>
 <div class="ttc" id="aubpf_8h_html_aacb195bc0c95663214fe205613ff1c9a"><div class="ttname"><a href="ubpf_8h.html#aacb195bc0c95663214fe205613ff1c9a">ubpf_register_stack_usage_calculator</a></div><div class="ttdeci">int ubpf_register_stack_usage_calculator(struct ubpf_vm *vm, stack_usage_calculator_t calculator, void *cookie)</div><div class="ttdoc">Register a function that will be called during eBPF program validation to determine stack usage for a...</div></div>
 <div class="ttc" id="aubpf_8h_html_aae07506453000ed9fc787a27fa3b9f9e"><div class="ttname"><a href="ubpf_8h.html#aae07506453000ed9fc787a27fa3b9f9e">ubpf_register_debug_fn</a></div><div class="ttdeci">int ubpf_register_debug_fn(struct ubpf_vm *vm, void *context, ubpf_debug_fn debug_function)</div><div class="ttdoc">Add option to invoke a debug function before each instruction. Note: This only applies to the interpr...</div></div>
 <div class="ttc" id="aubpf_8h_html_ab34e26c0a46366345df354ce992448c4"><div class="ttname"><a href="ubpf_8h.html#ab34e26c0a46366345df354ce992448c4">ubpf_translate</a></div><div class="ttdeci">int ubpf_translate(struct ubpf_vm *vm, uint8_t *buffer, size_t *size, char **errmsg)</div><div class="ttdoc">Translate the eBPF byte code to machine code.</div></div>
@@ -331,7 +335,7 @@
 <div class="ttc" id="aubpf_8h_html_ae7e25aeeb15d5dc04a58f99239c4774c"><div class="ttname"><a href="ubpf_8h.html#ae7e25aeeb15d5dc04a58f99239c4774c">ubpf_set_error_print</a></div><div class="ttdeci">void ubpf_set_error_print(struct ubpf_vm *vm, int(*error_printf)(FILE *stream, const char *format,...))</div><div class="ttdoc">Set the function to be invoked if the program hits a fatal error.</div></div>
 <div class="ttc" id="aubpf_8h_html_ae95b334d7eeb18072da3b9f4eeb66c25"><div class="ttname"><a href="ubpf_8h.html#ae95b334d7eeb18072da3b9f4eeb66c25">ubpf_unload_code</a></div><div class="ttdeci">void ubpf_unload_code(struct ubpf_vm *vm)</div><div class="ttdoc">Unload code from a VM.</div></div>
 <div class="ttc" id="aubpf_8h_html_aeb0990b88e11d2a0ba89fbaf8086cc0f"><div class="ttname"><a href="ubpf_8h.html#aeb0990b88e11d2a0ba89fbaf8086cc0f">ubpf_set_registers</a></div><div class="ttdeci">void ubpf_set_registers(struct ubpf_vm *vm, uint64_t *regs)</div><div class="ttdoc">Override the storage location for the BPF registers in the VM.</div></div>
-<div class="ttc" id="aubpf_8h_html_aebce576f96f17df34a30029636515fcc"><div class="ttname"><a href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a></div><div class="ttdeci">void(* ubpf_debug_fn)(void *context, int program_counter, const uint64_t registers[16], const uint8_t *stack_start, size_t stack_length, uint64_t register_mask, const uint8_t *stack_mask_start)</div><div class="ttdoc">A function to invoke before each instruction.</div><div class="ttdef"><b>Definition</b> ubpf.h:654</div></div>
+<div class="ttc" id="aubpf_8h_html_aebce576f96f17df34a30029636515fcc"><div class="ttname"><a href="ubpf_8h.html#aebce576f96f17df34a30029636515fcc">ubpf_debug_fn</a></div><div class="ttdeci">void(* ubpf_debug_fn)(void *context, int program_counter, const uint64_t registers[16], const uint8_t *stack_start, size_t stack_length, uint64_t register_mask, const uint8_t *stack_mask_start)</div><div class="ttdoc">A function to invoke before each instruction.</div><div class="ttdef"><b>Definition</b> ubpf.h:661</div></div>
 <div class="ttc" id="aubpf_8h_html_afb2b46e62e54e7e8b81303def1014eb0"><div class="ttname"><a href="ubpf_8h.html#afb2b46e62e54e7e8b81303def1014eb0">ubpf_translate_ex</a></div><div class="ttdeci">int ubpf_translate_ex(struct ubpf_vm *vm, uint8_t *buffer, size_t *size, char **errmsg, enum JitMode jit_mode)</div><div class="ttdoc">Translate the eBPF byte code to machine code.</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->