mirror of
https://github.com/status-im/evmc.git
synced 2025-02-22 07:58:19 +00:00
208 lines
18 KiB
HTML
208 lines
18 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>EVMC: examples/example_vm/example_vm.c File Reference</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript">
|
|
$(document).ready(initResizable);
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">EVMC
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.13 -->
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
initMenu('',false,false,'search.php','Search');
|
|
});
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
$(document).ready(function(){initNavTree('example__vm_8c.html','');});
|
|
</script>
|
|
<div id="doc-content">
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#nested-classes">Classes</a> |
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">example_vm.c File Reference</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Example implementation of the EVMC VM interface.
|
|
<a href="#details">More...</a></p>
|
|
<div class="textblock"><code>#include "example_vm.h"</code><br />
|
|
<code>#include <limits.h></code><br />
|
|
<code>#include <stdio.h></code><br />
|
|
<code>#include <stdlib.h></code><br />
|
|
<code>#include <string.h></code><br />
|
|
</div>
|
|
<p><a href="example__vm_8c_source.html">Go to the source code of this file.</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
|
Classes</h2></td></tr>
|
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structexample__vm.html">example_vm</a></td></tr>
|
|
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The example VM instance struct extending the <a class="el" href="structevmc__vm.html" title="The VM instance. ">evmc_vm</a>. <a href="structexample__vm.html#details">More...</a><br /></td></tr>
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:a07cb493fd4082e7b5024987eb09b2c2d"><td class="memItemLeft" align="right" valign="top"><a id="a07cb493fd4082e7b5024987eb09b2c2d"></a>
|
|
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="example__vm_8c.html#a07cb493fd4082e7b5024987eb09b2c2d">destroy</a> (struct <a class="el" href="structevmc__vm.html">evmc_vm</a> *vm)</td></tr>
|
|
<tr class="memdesc:a07cb493fd4082e7b5024987eb09b2c2d"><td class="mdescLeft"> </td><td class="mdescRight">The implementation of the <a class="el" href="structevmc__vm.html#ac78933134b4e14ca3dd4139ee061cc6b" title="Pointer to function destroying the VM instance. ">evmc_vm::destroy()</a> method. <br /></td></tr>
|
|
<tr class="separator:a07cb493fd4082e7b5024987eb09b2c2d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a50f89a54757a1c5a5639b1a25dc36b24"><td class="memItemLeft" align="right" valign="top"><a id="a50f89a54757a1c5a5639b1a25dc36b24"></a>
|
|
static <a class="el" href="group__EVMC.html#ga714bc8ca946adc759403fe072bdd2aa0">evmc_capabilities_flagset</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="example__vm_8c.html#a50f89a54757a1c5a5639b1a25dc36b24">get_capabilities</a> (struct <a class="el" href="structevmc__vm.html">evmc_vm</a> *vm)</td></tr>
|
|
<tr class="memdesc:a50f89a54757a1c5a5639b1a25dc36b24"><td class="mdescLeft"> </td><td class="mdescRight">The example implementation of the <a class="el" href="structevmc__vm.html#a505d4e584a858c2eea7a026f3a94188b" title="A method returning capabilities supported by the VM instance. ">evmc_vm::get_capabilities()</a> method. <br /></td></tr>
|
|
<tr class="separator:a50f89a54757a1c5a5639b1a25dc36b24"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:af797672c8f7215833fb7958adae8bc87"><td class="memItemLeft" align="right" valign="top">static enum <a class="el" href="group__EVMC.html#ga28d9f527bda67277bccccc100e32260a">evmc_set_option_result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="example__vm_8c.html#af797672c8f7215833fb7958adae8bc87">set_option</a> (struct <a class="el" href="structevmc__vm.html">evmc_vm</a> *instance, const char *name, const char *value)</td></tr>
|
|
<tr class="memdesc:af797672c8f7215833fb7958adae8bc87"><td class="mdescLeft"> </td><td class="mdescRight">Example VM options. <a href="#af797672c8f7215833fb7958adae8bc87">More...</a><br /></td></tr>
|
|
<tr class="separator:af797672c8f7215833fb7958adae8bc87"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a556f3e9da8ef4b48511b293736455325"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="example__vm_8c.html#a556f3e9da8ef4b48511b293736455325">free_result_output_data</a> (const struct <a class="el" href="structevmc__result.html">evmc_result</a> *result)</td></tr>
|
|
<tr class="memdesc:a556f3e9da8ef4b48511b293736455325"><td class="mdescLeft"> </td><td class="mdescRight">The implementation of the <a class="el" href="structevmc__result.html#a8727ff83d372ab0067bcf6656d30b0ed" title="The method releasing all resources associated with the result object. ">evmc_result::release()</a> method that frees the output buffer attached to the result object. <a href="#a556f3e9da8ef4b48511b293736455325">More...</a><br /></td></tr>
|
|
<tr class="separator:a556f3e9da8ef4b48511b293736455325"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a0cbe68a4a210c8227ceeb03789786b9c"><td class="memItemLeft" align="right" valign="top"><a id="a0cbe68a4a210c8227ceeb03789786b9c"></a>
|
|
static struct <a class="el" href="structevmc__result.html">evmc_result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="example__vm_8c.html#a0cbe68a4a210c8227ceeb03789786b9c">execute</a> (struct <a class="el" href="structevmc__vm.html">evmc_vm</a> *instance, const struct <a class="el" href="structevmc__host__interface.html">evmc_host_interface</a> *host, struct <a class="el" href="structevmc__host__context.html">evmc_host_context</a> *context, enum <a class="el" href="group__EVMC.html#gae5759b1590071966ccf6a505b52a0ef7">evmc_revision</a> rev, const struct <a class="el" href="structevmc__message.html">evmc_message</a> *msg, const uint8_t *code, size_t code_size)</td></tr>
|
|
<tr class="memdesc:a0cbe68a4a210c8227ceeb03789786b9c"><td class="mdescLeft"> </td><td class="mdescRight">The example implementation of the <a class="el" href="structevmc__vm.html#a8384d28338f2287a9f9e1508699c53f0" title="Pointer to function executing a code by the VM instance. ">evmc_vm::execute()</a> method. <br /></td></tr>
|
|
<tr class="separator:a0cbe68a4a210c8227ceeb03789786b9c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gad7290bda71455f4a7175589b05945adf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structevmc__vm.html">evmc_vm</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__EVMC.html#gad7290bda71455f4a7175589b05945adf">evmc_create_example_vm</a> ()</td></tr>
|
|
<tr class="memdesc:gad7290bda71455f4a7175589b05945adf"><td class="mdescLeft"> </td><td class="mdescRight">Example of a function creating an instance of an example EVM implementation. <a href="group__EVMC.html#gad7290bda71455f4a7175589b05945adf">More...</a><br /></td></tr>
|
|
<tr class="separator:gad7290bda71455f4a7175589b05945adf"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>Example implementation of the EVMC VM interface. </p>
|
|
<p>This VM does not do anything useful except for showing how EVMC VM API should be implemented. The implementation is done in C only, but could be done in C++ in very similar way. </p>
|
|
|
|
<p class="definition">Definition in file <a class="el" href="example__vm_8c_source.html">example_vm.c</a>.</p>
|
|
</div><h2 class="groupheader">Function Documentation</h2>
|
|
<a id="a556f3e9da8ef4b48511b293736455325"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a556f3e9da8ef4b48511b293736455325">◆ </a></span>free_result_output_data()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">static void free_result_output_data </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const struct <a class="el" href="structevmc__result.html">evmc_result</a> * </td>
|
|
<td class="paramname"><em>result</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>The implementation of the <a class="el" href="structevmc__result.html#a8727ff83d372ab0067bcf6656d30b0ed" title="The method releasing all resources associated with the result object. ">evmc_result::release()</a> method that frees the output buffer attached to the result object. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="example__vm_8c_source.html#l00071">71</a> of file <a class="el" href="example__vm_8c_source.html">example_vm.c</a>.</p>
|
|
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  free((uint8_t*)result-><a class="code" href="structevmc__result.html#a61978e85f9d795a7b9695b9cbf1748d6">output_data</a>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div><div class="ttc" id="structevmc__result_html_a61978e85f9d795a7b9695b9cbf1748d6"><div class="ttname"><a href="structevmc__result.html#a61978e85f9d795a7b9695b9cbf1748d6">evmc_result::output_data</a></div><div class="ttdeci">const uint8_t * output_data</div><div class="ttdoc">The reference to output data. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00364">evmc.h:364</a></div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="af797672c8f7215833fb7958adae8bc87"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#af797672c8f7215833fb7958adae8bc87">◆ </a></span>set_option()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">static enum <a class="el" href="group__EVMC.html#ga28d9f527bda67277bccccc100e32260a">evmc_set_option_result</a> set_option </td>
|
|
<td>(</td>
|
|
<td class="paramtype">struct <a class="el" href="structevmc__vm.html">evmc_vm</a> * </td>
|
|
<td class="paramname"><em>instance</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const char * </td>
|
|
<td class="paramname"><em>name</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const char * </td>
|
|
<td class="paramname"><em>value</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Example VM options. </p>
|
|
<p>The implementation of the <a class="el" href="structevmc__vm.html#a20fd85c822ba5f3296206fc8fe3e90b2" title="Optional pointer to function modifying VM's options. ">evmc_vm::set_option()</a> method. VMs are allowed to omit this method implementation. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="example__vm_8c_source.html#l00046">46</a> of file <a class="el" href="example__vm_8c_source.html">example_vm.c</a>.</p>
|
|
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">struct </span><a class="code" href="structexample__vm.html">example_vm</a>* vm = (<span class="keyword">struct </span><a class="code" href="structexample__vm.html">example_vm</a>*)instance;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (strcmp(name, <span class="stringliteral">"verbose"</span>) == 0)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (!value)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> EVMC_SET_OPTION_INVALID_VALUE;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordtype">char</span>* end = NULL;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordtype">long</span> <span class="keywordtype">int</span> v = strtol(value, &end, 0);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span> (end == value) <span class="comment">// Parsing the value failed.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> EVMC_SET_OPTION_INVALID_VALUE;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">if</span> (v > 9 || v < -1) <span class="comment">// Not in the valid range.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> EVMC_SET_OPTION_INVALID_VALUE;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  vm-><a class="code" href="structexample__vm.html#a6c3e1b440e68f4cc81ca0b50040dbf74">verbose</a> = (int)v;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> EVMC_SET_OPTION_SUCCESS;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> EVMC_SET_OPTION_INVALID_NAME;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }</div><div class="ttc" id="structexample__vm_html"><div class="ttname"><a href="structexample__vm.html">example_vm</a></div><div class="ttdoc">The example VM instance struct extending the evmc_vm. </div><div class="ttdef"><b>Definition:</b> <a href="example__vm_8c_source.html#l00023">example_vm.c:23</a></div></div>
|
|
<div class="ttc" id="structexample__vm_html_a6c3e1b440e68f4cc81ca0b50040dbf74"><div class="ttname"><a href="structexample__vm.html#a6c3e1b440e68f4cc81ca0b50040dbf74">example_vm::verbose</a></div><div class="ttdeci">int verbose</div><div class="ttdoc">The verbosity level. </div><div class="ttdef"><b>Definition:</b> <a href="example__vm_8c_source.html#l00026">example_vm.c:26</a></div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_a4c70ffacb2f8014d25282b0828660d1.html">example_vm</a></li><li class="navelem"><a class="el" href="example__vm_8c.html">example_vm.c</a></li>
|
|
<li class="footer">Generated on Tue Jan 7 2020 15:35:10 for EVMC by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|