<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.16"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>UbixOS: kernel/elf.c Source File</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"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(initResizable); /* @license-end */</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">UbixOS  <span id="projectnumber">2.0</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.16 --> <script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('../../',false,false,'search.php','Search'); }); /* @license-end */</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"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(function(){initNavTree('d5/d8b/kernel_2elf_8c_source.html','../../');}); /* @license-end */ </script> <div id="doc-content"> <div class="header"> <div class="headertitle"> <div class="title">elf.c</div> </div> </div><!--header--> <div class="contents"> <a href="../../d5/d8b/kernel_2elf_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*-</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002-2018 The UbixOS Project.</span></div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * All rights reserved.</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This was developed by Christopher W. Olsen for the UbixOS Project.</span></div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without modification, are permitted</span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * provided that the following conditions are met:</span></div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * 1) Redistributions of source code must retain the above copyright notice, this list of</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * conditions, the following disclaimer and the list of authors.</span></div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2) Redistributions in binary form must reproduce the above copyright notice, this list of</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * conditions, the following disclaimer and the list of authors in the documentation and/or</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * other materials provided with the distribution.</span></div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to</span></div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * endorse or promote products derived from this software without specific prior written</span></div> <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * permission.</span></div> <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> *</span></div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED</span></div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS</span></div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS</span></div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span></div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,</span></div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT</span></div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <<a class="code" href="../../d4/de4/sys_2elf_8h.html">sys/elf.h</a>></span></div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <<a class="code" href="../../d7/d00/sched_8h.html">ubixos/sched.h</a>></span></div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="../../d3/d24/kpanic_8h.html">ubixos/kpanic.h</a>></span></div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <<a class="code" href="../../d4/d03/kmalloc_8h.html">lib/kmalloc.h</a>></span></div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <<a class="code" href="../../d1/d21/vmm_8h.html">vmm/vmm.h</a>></span></div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <<a class="code" href="../../da/d28/kprintf_8h.html">lib/kprintf.h</a>></span></div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <<a class="code" href="../../da/d66/string_8h.html">string.h</a>></span></div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> <div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#aaf5f82fbbff76c71fcefe513c40730b4"> 37</a></span> <span class="keywordtype">int</span> <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#aaf5f82fbbff76c71fcefe513c40730b4">elf_load_file</a>(<a class="code" href="../../d1/dff/structtaskStruct.html">kTask_t</a> *p, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="../../d7/d3a/structfile.html">file</a>, <a class="code" href="../../d0/d27/include_2sys_2types_8h.html#a0238af00180b6d9278fa1c6aa790fdf4">uint32_t</a> *addr, <a class="code" href="../../d0/d27/include_2sys_2types_8h.html#a0238af00180b6d9278fa1c6aa790fdf4">uint32_t</a> *entry) {</div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordtype">int</span> ret = 0;</div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">int</span> i = 0x0;</div> <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">int</span> x = 0x0;</div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">int</span> numsegs = 0x0;</div> <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="../../d0/d27/include_2sys_2types_8h.html#a0238af00180b6d9278fa1c6aa790fdf4">uint32_t</a> base_addr = 0x0;</div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="../../d0/d27/include_2sys_2types_8h.html#a0238af00180b6d9278fa1c6aa790fdf4">uint32_t</a> real_base_addr = 0x0;</div> <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div> <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="../../db/d71/structElf32__Ehdr.html">Elf32_Ehdr</a> *binaryHeader = 0x0;</div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="../../d9/db8/structElf32__Phdr.html">Elf32_Phdr</a> *programHeader = 0x0;</div> <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>  <a class="code" href="../../d0/d22/structfileDescriptor.html">fileDescriptor_t</a> *exec_fd = 0x0;</div> <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div> <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  exec_fd = <a class="code" href="../../d6/d13/file_8c.html#a249f3bc0af043dc5ac3c9aa8646986af">fopen</a>(<a class="code" href="../../d7/d3a/structfile.html">file</a>, <span class="stringliteral">"r"</span>);</div> <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div> <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (exec_fd == 0x0)</div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> (-1);</div> <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div> <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">/* Load the ELF header */</span></div> <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span> ((binaryHeader = (<a class="code" href="../../db/d71/structElf32__Ehdr.html">Elf32_Ehdr</a> *) <a class="code" href="../../d4/d03/kmalloc_8h.html#a150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="../../db/d71/structElf32__Ehdr.html">Elf32_Ehdr</a>))) == 0x0)</div> <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="../../d3/d24/kpanic_8h.html#aa5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"malloc failed!"</span>);</div> <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div> <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="../../d6/d13/file_8c.html#ac539f57edd90fcd088fd3baa10319166">fread</a>(binaryHeader, <span class="keyword">sizeof</span>(<a class="code" href="../../db/d71/structElf32__Ehdr.html">Elf32_Ehdr</a>), 1, exec_fd);</div> <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div> <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">/* Check If App Is A Real Application */</span></div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> ((binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#aba47ac5e0af02d5668782f1fd5a7466c">e_ident</a>[1] != <span class="charliteral">'E'</span>) && (binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#aba47ac5e0af02d5668782f1fd5a7466c">e_ident</a>[2] != <span class="charliteral">'L'</span>) && (binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#aba47ac5e0af02d5668782f1fd5a7466c">e_ident</a>[3] != <span class="charliteral">'F'</span>)) {</div> <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  ret = -1;</div> <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">goto</span> failed;</div> <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div> <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a49e40a791813c06e3b6ebcb53aef1bb8">e_type</a> == <a class="code" href="../../dd/d58/elf__common_8h.html#a4373ea3b3d512434ebe2213829b6751b">ET_DYN</a>)</div> <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  real_base_addr = *addr;</div> <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a49e40a791813c06e3b6ebcb53aef1bb8">e_type</a> == <a class="code" href="../../dd/d58/elf__common_8h.html#a942478985eb016311380dee473cc8c3e">ET_EXEC</a>)</div> <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  real_base_addr = 0x0;</div> <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">else</span> {</div> <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  ret = -1;</div> <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">goto</span> failed;</div> <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div> <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div> <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">/* Load The Program Header(s) */</span></div> <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> ((programHeader = (<a class="code" href="../../d9/db8/structElf32__Phdr.html">Elf32_Phdr</a> *) <a class="code" href="../../d4/d03/kmalloc_8h.html#a150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="../../d9/db8/structElf32__Phdr.html">Elf32_Phdr</a>) * binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a360898812db1655f8cb8258780d9df5b">e_phnum</a>)) == 0x0)</div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="../../d3/d24/kpanic_8h.html#aa5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"malloc failed!"</span>);</div> <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div> <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="../../d6/d13/file_8c.html#aac4e345a7fcee61422a6b35b54f22def">fseek</a>(exec_fd, binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a25c36fc010284a928604aae005b67ad1">e_phoff</a>, 0);</div> <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div> <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="../../d6/d13/file_8c.html#ac539f57edd90fcd088fd3baa10319166">fread</a>(programHeader, (<span class="keyword">sizeof</span>(<a class="code" href="../../d9/db8/structElf32__Phdr.html">Elf32_Phdr</a>) * binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a360898812db1655f8cb8258780d9df5b">e_phnum</a>), 1, exec_fd);</div> <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div> <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">for</span> (numsegs = 0x0, i = 0x0; i < binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#a360898812db1655f8cb8258780d9df5b">e_phnum</a>; i++) {</div> <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">switch</span> (programHeader[i].p_type) {</div> <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">case</span> <a class="code" href="../../dd/d58/elf__common_8h.html#a84d7768fd6c6ece599d297090900cf92">PT_LOAD</a>:</div> <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">/*</span></div> <div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> Allocate Memory Im Going To Have To Make This Load Memory With Correct</span></div> <div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> Settings so it helps us in the future</span></div> <div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span></div> <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">for</span> (x = 0x0; x < (programHeader[i].<a class="code" href="../../d9/db8/structElf32__Phdr.html#ada1cdd3d6ccb79a17bed0e3c21379c84">p_memsz</a> + 0xFFF); x += 0x1000) {</div> <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div> <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">/* Make readonly and read/write */</span></div> <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d4/df4/paging_8h.html#adea68f248df43bddee62a09d945304b0">vmm_remapPage</a>(<a class="code" href="../../d1/d21/vmm_8h.html#ab8e4e189a7b1df2a03072ce5b75c89fe">vmm_findFreePage</a>(<a class="code" href="../../d3/d02/armv6_2sched_8c.html#a54397bfe18d5da4d50ff03b15f540858">_current</a>-><a class="code" href="../../d1/dff/structtaskStruct.html#a30966587a60db6b40c8be6c387e11d81">id</a>), ((programHeader[i].<a class="code" href="../../d9/db8/structElf32__Phdr.html#a01a298ebc899bcf9c23211a7bf1155a6">p_vaddr</a> & 0xFFFFF000) + x + real_base_addr), <a class="code" href="../../d4/df4/paging_8h.html#af0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a>, <a class="code" href="../../d3/d02/armv6_2sched_8c.html#a54397bfe18d5da4d50ff03b15f540858">_current</a>-><a class="code" href="../../d1/dff/structtaskStruct.html#a30966587a60db6b40c8be6c387e11d81">id</a>, 0x0) == 0x0)</div> <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="../../d3/d24/kpanic_8h.html#aa5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"Error: Remap Page Failed"</span>);</div> <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div> <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="../../da/d66/string_8h.html#ace4b911463887af5e748326323e99a23">memset</a>((<span class="keywordtype">void</span> *) ((programHeader[i].p_vaddr & 0xFFFFF000) + x + real_base_addr), 0x0, 0x1000);</div> <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div> <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div> <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">/* Now Load Section To Memory */</span></div> <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="../../d6/d13/file_8c.html#aac4e345a7fcee61422a6b35b54f22def">fseek</a>(exec_fd, programHeader[i].p_offset, 0);</div> <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="../../d6/d13/file_8c.html#ac539f57edd90fcd088fd3baa10319166">fread</a>((<span class="keywordtype">void</span> *) programHeader[i].p_vaddr + real_base_addr, programHeader[i].p_filesz, 1, exec_fd);</div> <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div> <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">if</span> ((programHeader[i].p_flags & 0x2) != 0x2) {</div> <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">for</span> (x = 0x0; x < (programHeader[i].<a class="code" href="../../d9/db8/structElf32__Phdr.html#ada1cdd3d6ccb79a17bed0e3c21379c84">p_memsz</a>); x += 0x1000) {</div> <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> ((<a class="code" href="../../d4/df4/paging_8h.html#ab060cb62a6dd6d22f63757d72c27c335">vmm_setPageAttributes</a>((programHeader[i].p_vaddr & 0xFFFFF000) + x + real_base_addr, <a class="code" href="../../d4/df4/paging_8h.html#a122dfc414a40e260fd35dbe9743db26f">PAGE_PRESENT</a> | <a class="code" href="../../d4/df4/paging_8h.html#a2d0253527ea5080d6befe0ee3bde473f">PAGE_USER</a>)) != 0x0)</div> <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="../../d3/d24/kpanic_8h.html#aa5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"vmm_setPageAttributes failed"</span>);</div> <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div> <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div> <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (numsegs == 0x0)</div> <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  base_addr = programHeader[i].<a class="code" href="../../d9/db8/structElf32__Phdr.html#a01a298ebc899bcf9c23211a7bf1155a6">p_vaddr</a> + real_base_addr; <span class="comment">//(programHeader[i].p_vaddr & 0xFFFFF000) + real_base_addr;</span></div> <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  numsegs++;</div> <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">break</span>;</div> <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div> <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  </div> <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  *addr = base_addr;</div> <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div> <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  *entry = binaryHeader-><a class="code" href="../../db/d71/structElf32__Ehdr.html#ab8a982696048d807017919b7d0145482">e_entry</a> + real_base_addr;</div> <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div> <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  failed:</div> <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div> <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">/* Close The Open File */</span></div> <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="../../d6/d13/file_8c.html#a62ac32695420234cb7ccbcfc6cabd4a4">fclose</a>(exec_fd);</div> <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div> <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">/* Free Binary Header Memory */</span></div> <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (binaryHeader != 0x0)</div> <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="../../d4/d03/kmalloc_8h.html#aaa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);</div> <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div> <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">/* Free Program Header Memory */</span></div> <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (programHeader != 0x0)</div> <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="../../d4/d03/kmalloc_8h.html#aaa9ed6886459604cf73ccdbf6410e487">kfree</a>(programHeader);</div> <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div> <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> (ret);</div> <div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div> <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div> <div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> <span class="keyword">struct </span>{</div> <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a93d6f656ee02f4fedc15bbb8d536a6f0"> 140</a></span>  <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a93d6f656ee02f4fedc15bbb8d536a6f0">elfTypeName</a>;</div> <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd"> 141</a></span>  <a class="code" href="../../dd/d1e/objgfx30_8h.html#ada085051a6d9a8e00a2cb256d1af14ba">uInt32</a> <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd">id</a>;</div> <div class="line"><a name="l00142"></a><span class="lineno"> 142</span> } <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a589b211bad1159f7ae6a996832ff9cfb">elfType</a>[] = { { <span class="stringliteral">"ET_NONE"</span>, 0 }, { <span class="stringliteral">"ET_REL"</span>, 1 }, { <span class="stringliteral">"ET_EXEC"</span>, 2 }, { <span class="stringliteral">"ET_DYN"</span>, 3 }, { <span class="stringliteral">"ET_CORE"</span>, 4 }, { <span class="stringliteral">"ET_LOPROC"</span>, 0xff00 }, { <span class="stringliteral">"ET_HIPROC"</span>, 0xffff }, };</div> <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div> <div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">const</span> <span class="keyword">struct </span>{</div> <div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a2a4a91f3577e2ffd38d4f91011072569"> 145</a></span>  <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a2a4a91f3577e2ffd38d4f91011072569">phTypeName</a>;</div> <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="../../dd/d1e/objgfx30_8h.html#ada085051a6d9a8e00a2cb256d1af14ba">uInt32</a> <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd">id</a>;</div> <div class="line"><a name="l00147"></a><span class="lineno"> 147</span> } <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a7e66a9f524b0862ade424f19d5733cd2">elfPhType</a>[] = { { <span class="stringliteral">"PT_NULL"</span>, 0 }, { <span class="stringliteral">"PT_LOAD"</span>, 1 }, { <span class="stringliteral">"PT_DYNAMIC"</span>, 2 }, { <span class="stringliteral">"PT_INTERP"</span>, 3 }, { <span class="stringliteral">"PT_NOTE"</span>, 4 }, { <span class="stringliteral">"PT_SHLIB"</span>, 5 }, { <span class="stringliteral">"PT_PHDR"</span>, 6 }, { <span class="stringliteral">"PT_LOPROC"</span>, 0x70000000 }, { <span class="stringliteral">"PT_HIPROC"</span>, 0x7fffffff }, };</div> <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div> <div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">const</span> <span class="keyword">struct </span>{</div> <div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a42bdf04c654064843d45e989798039fa"> 150</a></span>  <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a42bdf04c654064843d45e989798039fa">shTypeName</a>;</div> <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="../../dd/d1e/objgfx30_8h.html#ada085051a6d9a8e00a2cb256d1af14ba">uInt32</a> <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd">id</a>;</div> <div class="line"><a name="l00152"></a><span class="lineno"> 152</span> } <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#ac8669e586639f5d2a98dc2f095a20d2f">elfShType</a>[] = { { <span class="stringliteral">"SHT_NULL"</span>, 0 }, { <span class="stringliteral">"SHT_PROGBITS"</span>, 1 }, { <span class="stringliteral">"SHT_SYMTAB"</span>, 2 }, { <span class="stringliteral">"SHT_STRTAB"</span>, 3 }, { <span class="stringliteral">"SHT_RELA"</span>, 4 }, { <span class="stringliteral">"SHT_HASH"</span>, 5 }, { <span class="stringliteral">"SHT_DYNAMIC"</span>, 6 }, { <span class="stringliteral">"SHT_NOTE"</span>, 7 }, { <span class="stringliteral">"SHT_NOBITS"</span>, 8 }, { <span class="stringliteral">"SHT_REL"</span>, 9 }, { <span class="stringliteral">"SHT_SHLIB"</span>, 10 }, { <span class="stringliteral">"SHT_DYNSYM"</span>, 11 }, };</div> <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div> <div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">const</span> <span class="keyword">struct </span>{</div> <div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a3cfab9172cb06ddb64edd058e38f14ec"> 155</a></span>  <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a3cfab9172cb06ddb64edd058e38f14ec">relTypeName</a>;</div> <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="../../dd/d1e/objgfx30_8h.html#ada085051a6d9a8e00a2cb256d1af14ba">uInt32</a> <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd">id</a>;</div> <div class="line"><a name="l00157"></a><span class="lineno"> 157</span> } <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a367978286be6a1ad0a4df5a6f38f7553">elfRelType</a>[] = { { <span class="stringliteral">"R_386_NONE"</span>, 0 }, { <span class="stringliteral">"R_386_32"</span>, 1 }, { <span class="stringliteral">"R_386_PC32"</span>, 2 }, { <span class="stringliteral">"R_386_GOT32"</span>, 3 }, { <span class="stringliteral">"R_386_PLT32"</span>, 4 }, { <span class="stringliteral">"R_386_COPY"</span>, 5 }, { <span class="stringliteral">"R_386_GLOB_DAT"</span>, 6 }, { <span class="stringliteral">"R_386_JMP_SLOT"</span>, 7 }, { <span class="stringliteral">"R_386_RELATIVE"</span>, 8 }, { <span class="stringliteral">"R_386_GOTOFF"</span>, 9 }, { <span class="stringliteral">"R_386_GOTPC"</span>, 10 }, };</div> <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  </div> <div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a21666b534b5f23248f809a220ec3e0ff"> 159</a></span> <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a21666b534b5f23248f809a220ec3e0ff">elfGetShType</a>(<span class="keywordtype">int</span> shType) {</div> <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">return</span> ((<span class="keywordtype">char</span> *) <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#ac8669e586639f5d2a98dc2f095a20d2f">elfShType</a>[shType].<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a42bdf04c654064843d45e989798039fa">shTypeName</a>);</div> <div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div> <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  </div> <div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a10bbb060fe8d138d450bf6c04913fba7"> 163</a></span> <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a10bbb060fe8d138d450bf6c04913fba7">elfGetPhType</a>(<span class="keywordtype">int</span> phType) {</div> <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> ((<span class="keywordtype">char</span> *) <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a7e66a9f524b0862ade424f19d5733cd2">elfPhType</a>[phType].<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a2a4a91f3577e2ffd38d4f91011072569">phTypeName</a>);</div> <div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div> <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  </div> <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="../../d5/d8b/kernel_2elf_8c.html#a5e661c9a431fe068feb9ff1660a570b7"> 167</a></span> <span class="keywordtype">char</span> *<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a5e661c9a431fe068feb9ff1660a570b7">elfGetRelType</a>(<span class="keywordtype">int</span> relType) {</div> <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> ((<span class="keywordtype">char</span> *) <a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a367978286be6a1ad0a4df5a6f38f7553">elfRelType</a>[relType].<a class="code" href="../../d5/d8b/kernel_2elf_8c.html#a3cfab9172cb06ddb64edd058e38f14ec">relTypeName</a>);</div> <div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div> <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div> <div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">/***</span></div> <div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"> END</span></div> <div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment"> ***/</span></div> <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <div class="ttc" id="astructtaskStruct_html"><div class="ttname"><a href="../../d1/dff/structtaskStruct.html">taskStruct</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d00/sched_8h_source.html#l00062">sched.h:62</a></div></div> <div class="ttc" id="aobjgfx30_8h_html_ada085051a6d9a8e00a2cb256d1af14ba"><div class="ttname"><a href="../../dd/d1e/objgfx30_8h.html#ada085051a6d9a8e00a2cb256d1af14ba">uInt32</a></div><div class="ttdeci">unsigned long int uInt32</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d1e/objgfx30_8h_source.html#l00049">objgfx30.h:49</a></div></div> <div class="ttc" id="afile_8c_html_a249f3bc0af043dc5ac3c9aa8646986af"><div class="ttname"><a href="../../d6/d13/file_8c.html#a249f3bc0af043dc5ac3c9aa8646986af">fopen</a></div><div class="ttdeci">fileDescriptor_t * fopen(const char *file, const char *flags)</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/d13/file_8c_source.html#l00395">file.c:395</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html_a25c36fc010284a928604aae005b67ad1"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html#a25c36fc010284a928604aae005b67ad1">Elf32_Ehdr::e_phoff</a></div><div class="ttdeci">Elf32_Off e_phoff</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00061">elf32.h:61</a></div></div> <div class="ttc" id="akpanic_8h_html_aa5193288597f00c4f8e3b2939aa6c0ce"><div class="ttname"><a href="../../d3/d24/kpanic_8h.html#aa5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a></div><div class="ttdeci">#define K_PANIC(msg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d24/kpanic_8h_source.html#l00032">kpanic.h:32</a></div></div> <div class="ttc" id="astructElf32__Phdr_html_ada1cdd3d6ccb79a17bed0e3c21379c84"><div class="ttname"><a href="../../d9/db8/structElf32__Phdr.html#ada1cdd3d6ccb79a17bed0e3c21379c84">Elf32_Phdr::p_memsz</a></div><div class="ttdeci">Elf32_Word p_memsz</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00112">elf32.h:112</a></div></div> <div class="ttc" id="astring_8h_html"><div class="ttname"><a href="../../da/d66/string_8h.html">string.h</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html_aba47ac5e0af02d5668782f1fd5a7466c"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html#aba47ac5e0af02d5668782f1fd5a7466c">Elf32_Ehdr::e_ident</a></div><div class="ttdeci">unsigned char e_ident[EI_NIDENT]</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00056">elf32.h:56</a></div></div> <div class="ttc" id="astructfileDescriptor_html"><div class="ttname"><a href="../../d0/d22/structfileDescriptor.html">fileDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d6/db4/include_2vfs_2file_8h_source.html#l00062">file.h:62</a></div></div> <div class="ttc" id="aelf__common_8h_html_a4373ea3b3d512434ebe2213829b6751b"><div class="ttname"><a href="../../dd/d58/elf__common_8h.html#a4373ea3b3d512434ebe2213829b6751b">ET_DYN</a></div><div class="ttdeci">#define ET_DYN</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d58/elf__common_8h_source.html#l00192">elf_common.h:192</a></div></div> <div class="ttc" id="afile_8c_html_ac539f57edd90fcd088fd3baa10319166"><div class="ttname"><a href="../../d6/d13/file_8c.html#ac539f57edd90fcd088fd3baa10319166">fread</a></div><div class="ttdeci">size_t fread(void *ptr, size_t size, size_t nmemb, fileDescriptor_t *fd)</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/d13/file_8c_source.html#l00297">file.c:297</a></div></div> <div class="ttc" id="astructfile_html"><div class="ttname"><a href="../../d7/d3a/structfile.html">file</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d3/df4/descrip_8h_source.html#l00067">descrip.h:67</a></div></div> <div class="ttc" id="akmalloc_8h_html_aaa9ed6886459604cf73ccdbf6410e487"><div class="ttname"><a href="../../d4/d03/kmalloc_8h.html#aaa9ed6886459604cf73ccdbf6410e487">kfree</a></div><div class="ttdeci">void kfree(void *baseAddr)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d1a/kmalloc_8c_source.html#l00342">kmalloc.c:342</a></div></div> <div class="ttc" id="avmm_8h_html"><div class="ttname"><a href="../../d1/d21/vmm_8h.html">vmm.h</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a93d6f656ee02f4fedc15bbb8d536a6f0"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a93d6f656ee02f4fedc15bbb8d536a6f0">elfTypeName</a></div><div class="ttdeci">char * elfTypeName</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00140">elf.c:140</a></div></div> <div class="ttc" id="aelf__common_8h_html_a942478985eb016311380dee473cc8c3e"><div class="ttname"><a href="../../dd/d58/elf__common_8h.html#a942478985eb016311380dee473cc8c3e">ET_EXEC</a></div><div class="ttdeci">#define ET_EXEC</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d58/elf__common_8h_source.html#l00191">elf_common.h:191</a></div></div> <div class="ttc" id="aelf__common_8h_html_a84d7768fd6c6ece599d297090900cf92"><div class="ttname"><a href="../../dd/d58/elf__common_8h.html#a84d7768fd6c6ece599d297090900cf92">PT_LOAD</a></div><div class="ttdeci">#define PT_LOAD</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d58/elf__common_8h_source.html#l00492">elf_common.h:492</a></div></div> <div class="ttc" id="asched_8h_html"><div class="ttname"><a href="../../d7/d00/sched_8h.html">sched.h</a></div></div> <div class="ttc" id="astructElf32__Phdr_html_a01a298ebc899bcf9c23211a7bf1155a6"><div class="ttname"><a href="../../d9/db8/structElf32__Phdr.html#a01a298ebc899bcf9c23211a7bf1155a6">Elf32_Phdr::p_vaddr</a></div><div class="ttdeci">Elf32_Addr p_vaddr</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00109">elf32.h:109</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a42bdf04c654064843d45e989798039fa"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a42bdf04c654064843d45e989798039fa">shTypeName</a></div><div class="ttdeci">char * shTypeName</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00150">elf.c:150</a></div></div> <div class="ttc" id="akpanic_8h_html"><div class="ttname"><a href="../../d3/d24/kpanic_8h.html">kpanic.h</a></div></div> <div class="ttc" id="astructtaskStruct_html_a30966587a60db6b40c8be6c387e11d81"><div class="ttname"><a href="../../d1/dff/structtaskStruct.html#a30966587a60db6b40c8be6c387e11d81">taskStruct::id</a></div><div class="ttdeci">pidType id</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d00/sched_8h_source.html#l00063">sched.h:63</a></div></div> <div class="ttc" id="avmm_8h_html_ab8e4e189a7b1df2a03072ce5b75c89fe"><div class="ttname"><a href="../../d1/d21/vmm_8h.html#ab8e4e189a7b1df2a03072ce5b75c89fe">vmm_findFreePage</a></div><div class="ttdeci">uint32_t vmm_findFreePage(pidType pid)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/db5/vmm__memory_8c_source.html#l00221">vmm_memory.c:221</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_aaf5f82fbbff76c71fcefe513c40730b4"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#aaf5f82fbbff76c71fcefe513c40730b4">elf_load_file</a></div><div class="ttdeci">int elf_load_file(kTask_t *p, const char *file, uint32_t *addr, uint32_t *entry)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00037">elf.c:37</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a2a4a91f3577e2ffd38d4f91011072569"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a2a4a91f3577e2ffd38d4f91011072569">phTypeName</a></div><div class="ttdeci">char * phTypeName</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00145">elf.c:145</a></div></div> <div class="ttc" id="apaging_8h_html_ab060cb62a6dd6d22f63757d72c27c335"><div class="ttname"><a href="../../d4/df4/paging_8h.html#ab060cb62a6dd6d22f63757d72c27c335">vmm_setPageAttributes</a></div><div class="ttdeci">int vmm_setPageAttributes(uint32_t, uint16_t)</div><div class="ttdef"><b>Definition:</b> <a href="../../db/df4/setpageattributes_8c_source.html#l00039">setpageattributes.c:39</a></div></div> <div class="ttc" id="afile_8c_html_a62ac32695420234cb7ccbcfc6cabd4a4"><div class="ttname"><a href="../../d6/d13/file_8c.html#a62ac32695420234cb7ccbcfc6cabd4a4">fclose</a></div><div class="ttdeci">int fclose(fileDescriptor_t *fd)</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/d13/file_8c_source.html#l00533">file.c:533</a></div></div> <div class="ttc" id="akprintf_8h_html"><div class="ttname"><a href="../../da/d28/kprintf_8h.html">kprintf.h</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html_ab8a982696048d807017919b7d0145482"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html#ab8a982696048d807017919b7d0145482">Elf32_Ehdr::e_entry</a></div><div class="ttdeci">Elf32_Addr e_entry</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00060">elf32.h:60</a></div></div> <div class="ttc" id="apaging_8h_html_af0fff7a38cd2c7a32d580787423b94ea"><div class="ttname"><a href="../../d4/df4/paging_8h.html#af0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a></div><div class="ttdeci">#define PAGE_DEFAULT</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df4/paging_8h_source.html#l00068">paging.h:68</a></div></div> <div class="ttc" id="astructElf32__Phdr_html"><div class="ttname"><a href="../../d9/db8/structElf32__Phdr.html">Elf32_Phdr</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00106">elf32.h:106</a></div></div> <div class="ttc" id="apaging_8h_html_adea68f248df43bddee62a09d945304b0"><div class="ttname"><a href="../../d4/df4/paging_8h.html#adea68f248df43bddee62a09d945304b0">vmm_remapPage</a></div><div class="ttdeci">int vmm_remapPage(uint32_t, uint32_t, uint16_t, pidType, int haveLock)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/d38/paging_8c_source.html#l00199">paging.c:199</a></div></div> <div class="ttc" id="ainclude_2sys_2types_8h_html_a0238af00180b6d9278fa1c6aa790fdf4"><div class="ttname"><a href="../../d0/d27/include_2sys_2types_8h.html#a0238af00180b6d9278fa1c6aa790fdf4">uint32_t</a></div><div class="ttdeci">__uint32_t uint32_t</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/d27/include_2sys_2types_8h_source.html#l00046">types.h:46</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a367978286be6a1ad0a4df5a6f38f7553"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a367978286be6a1ad0a4df5a6f38f7553">elfRelType</a></div><div class="ttdeci">const struct @28 elfRelType[]</div></div> <div class="ttc" id="akernel_2elf_8c_html_a7e66a9f524b0862ade424f19d5733cd2"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a7e66a9f524b0862ade424f19d5733cd2">elfPhType</a></div><div class="ttdeci">const struct @26 elfPhType[]</div></div> <div class="ttc" id="akernel_2elf_8c_html_a589b211bad1159f7ae6a996832ff9cfb"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a589b211bad1159f7ae6a996832ff9cfb">elfType</a></div><div class="ttdeci">const struct @25 elfType[]</div></div> <div class="ttc" id="aarmv6_2sched_8c_html_a54397bfe18d5da4d50ff03b15f540858"><div class="ttname"><a href="../../d3/d02/armv6_2sched_8c.html#a54397bfe18d5da4d50ff03b15f540858">_current</a></div><div class="ttdeci">kTask_t * _current</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d02/armv6_2sched_8c_source.html#l00050">sched.c:50</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html">Elf32_Ehdr</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00055">elf32.h:55</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_ac8669e586639f5d2a98dc2f095a20d2f"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#ac8669e586639f5d2a98dc2f095a20d2f">elfShType</a></div><div class="ttdeci">const struct @27 elfShType[]</div></div> <div class="ttc" id="akmalloc_8h_html_a150eab2ac4ce4553e21ca10e7f441762"><div class="ttname"><a href="../../d4/d03/kmalloc_8h.html#a150eab2ac4ce4553e21ca10e7f441762">kmalloc</a></div><div class="ttdeci">void * kmalloc(uInt32 len)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d1a/kmalloc_8c_source.html#l00241">kmalloc.c:241</a></div></div> <div class="ttc" id="astring_8h_html_ace4b911463887af5e748326323e99a23"><div class="ttname"><a href="../../da/d66/string_8h.html#ace4b911463887af5e748326323e99a23">memset</a></div><div class="ttdeci">void * memset(void *dst, int c, size_t length)</div></div> <div class="ttc" id="apaging_8h_html_a2d0253527ea5080d6befe0ee3bde473f"><div class="ttname"><a href="../../d4/df4/paging_8h.html#a2d0253527ea5080d6befe0ee3bde473f">PAGE_USER</a></div><div class="ttdeci">#define PAGE_USER</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df4/paging_8h_source.html#l00057">paging.h:57</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html_a49e40a791813c06e3b6ebcb53aef1bb8"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html#a49e40a791813c06e3b6ebcb53aef1bb8">Elf32_Ehdr::e_type</a></div><div class="ttdeci">Elf32_Half e_type</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00057">elf32.h:57</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_affd99ec09f321a630ec19d0333e291cd"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#affd99ec09f321a630ec19d0333e291cd">id</a></div><div class="ttdeci">uInt32 id</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00141">elf.c:141</a></div></div> <div class="ttc" id="asys_2elf_8h_html"><div class="ttname"><a href="../../d4/de4/sys_2elf_8h.html">elf.h</a></div></div> <div class="ttc" id="apaging_8h_html_a122dfc414a40e260fd35dbe9743db26f"><div class="ttname"><a href="../../d4/df4/paging_8h.html#a122dfc414a40e260fd35dbe9743db26f">PAGE_PRESENT</a></div><div class="ttdeci">#define PAGE_PRESENT</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df4/paging_8h_source.html#l00055">paging.h:55</a></div></div> <div class="ttc" id="akmalloc_8h_html"><div class="ttname"><a href="../../d4/d03/kmalloc_8h.html">kmalloc.h</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a5e661c9a431fe068feb9ff1660a570b7"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a5e661c9a431fe068feb9ff1660a570b7">elfGetRelType</a></div><div class="ttdeci">char * elfGetRelType(int relType)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00167">elf.c:167</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a10bbb060fe8d138d450bf6c04913fba7"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a10bbb060fe8d138d450bf6c04913fba7">elfGetPhType</a></div><div class="ttdeci">char * elfGetPhType(int phType)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00163">elf.c:163</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a21666b534b5f23248f809a220ec3e0ff"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a21666b534b5f23248f809a220ec3e0ff">elfGetShType</a></div><div class="ttdeci">char * elfGetShType(int shType)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00159">elf.c:159</a></div></div> <div class="ttc" id="astructElf32__Ehdr_html_a360898812db1655f8cb8258780d9df5b"><div class="ttname"><a href="../../db/d71/structElf32__Ehdr.html#a360898812db1655f8cb8258780d9df5b">Elf32_Ehdr::e_phnum</a></div><div class="ttdeci">Elf32_Half e_phnum</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d5c/elf32_8h_source.html#l00066">elf32.h:66</a></div></div> <div class="ttc" id="akernel_2elf_8c_html_a3cfab9172cb06ddb64edd058e38f14ec"><div class="ttname"><a href="../../d5/d8b/kernel_2elf_8c.html#a3cfab9172cb06ddb64edd058e38f14ec">relTypeName</a></div><div class="ttdeci">char * relTypeName</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d8b/kernel_2elf_8c_source.html#l00155">elf.c:155</a></div></div> <div class="ttc" id="afile_8c_html_aac4e345a7fcee61422a6b35b54f22def"><div class="ttname"><a href="../../d6/d13/file_8c.html#aac4e345a7fcee61422a6b35b54f22def">fseek</a></div><div class="ttdeci">int fseek(fileDescriptor_t *tmpFd, long offset, int whence)</div><div class="ttdef"><b>Definition:</b> <a href="../../d6/d13/file_8c_source.html#l00332">file.c:332</a></div></div> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="../../dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="../../d5/d8b/kernel_2elf_8c.html">elf.c</a></li> <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.16 </li> </ul> </div> </body> </html>