Newer
Older
UbixOS / doc / html / exec_8c-source.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>UbixOS V2: src/sys/kernel/exec.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
    <li>
      <form action="search.php" method="get">
        <table cellspacing="0" cellpadding="0" border="0">
          <tr>
            <td><label>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
            <td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
          </tr>
        </table>
      </form>
    </li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_897b6a2d7bab147dd1db58381aad3984.html">src</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_832905b1f7f5feaf61a306b40c0ac817.html">sys</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_7efffd2b1fae7bb6f2aa85845c863494.html">kernel</a></div>
<h1>exec.c</h1><a href="exec_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*****************************************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> Copyright (c) 2002-2004 The UbixOS Project</span>
<a name="l00003"></a>00003 <span class="comment"> All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment"> Redistribution and use in source and binary forms, with or without modification, are</span>
<a name="l00006"></a>00006 <span class="comment"> permitted provided that the following conditions are met:</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment"> Redistributions of source code must retain the above copyright notice, this list of</span>
<a name="l00009"></a>00009 <span class="comment"> conditions, the following disclaimer and the list of authors.  Redistributions in binary</span>
<a name="l00010"></a>00010 <span class="comment"> form must reproduce the above copyright notice, this list of conditions, the following</span>
<a name="l00011"></a>00011 <span class="comment"> disclaimer and the list of authors in the documentation and/or other materials provided</span>
<a name="l00012"></a>00012 <span class="comment"> with the distribution. Neither the name of the UbixOS Project nor the names of its</span>
<a name="l00013"></a>00013 <span class="comment"> contributors may be used to endorse or promote products derived from this software</span>
<a name="l00014"></a>00014 <span class="comment"> without specific prior written permission.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY</span>
<a name="l00017"></a>00017 <span class="comment"> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span>
<a name="l00018"></a>00018 <span class="comment"> MERCHANTABILITY AND F</span>
<a name="l00019"></a>00019 <span class="comment">ITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL</span>
<a name="l00020"></a>00020 <span class="comment"> THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span>
<a name="l00021"></a>00021 <span class="comment"> SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT</span>
<a name="l00022"></a>00022 <span class="comment"> OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
<a name="l00023"></a>00023 <span class="comment"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR</span>
<a name="l00024"></a>00024 <span class="comment"> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
<a name="l00025"></a>00025 <span class="comment"> SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00026"></a>00026 <span class="comment"></span>
<a name="l00027"></a>00027 <span class="comment"> $Id: exec_8c-source.html 88 2016-01-12 00:11:29Z reddawg $</span>
<a name="l00028"></a>00028 <span class="comment"></span>
<a name="l00029"></a>00029 <span class="comment">*****************************************************************************************/</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="exec_8h.html">ubixos/exec.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="elf_8h.html">ubixos/elf.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="ld_8h.html">ubixos/ld.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="kpanic_8h.html">ubixos/kpanic.h</a>&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;<a class="code" href="endtask_8h.html">ubixos/endtask.h</a>&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;<a class="code" href="vmm_8h.html">vmm/vmm.h</a>&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;<a class="code" href="kmalloc_8h.html">lib/kmalloc.h</a>&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;<a class="code" href="kprintf_8h.html">lib/kprintf.h</a>&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;<a class="code" href="lib_2string_8h.html">lib/string.h</a>&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;<a class="code" href="assert_8h.html">assert.h</a>&gt;</span>
<a name="l00041"></a>00041 
<a name="l00042"></a><a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">00042</a> <span class="preprocessor">#define STACK_ADDR 0xC800000</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span>
<a name="l00044"></a>00044 <span class="comment">/*****************************************************************************************</span>
<a name="l00045"></a>00045 <span class="comment"></span>
<a name="l00046"></a>00046 <span class="comment"> Function:   execThread(void (*)(void),int,char *);</span>
<a name="l00047"></a>00047 <span class="comment"> Description: This function will create a thread from code in the current memory space</span>
<a name="l00048"></a>00048 <span class="comment"></span>
<a name="l00049"></a>00049 <span class="comment"> Notes:</span>
<a name="l00050"></a>00050 <span class="comment"> </span>
<a name="l00051"></a>00051 <span class="comment"> 05/19/04 - This does not work the way I want it to it still makes a copy of kernel space</span>
<a name="l00052"></a>00052 <span class="comment">            so do not use out side of kernel space</span>
<a name="l00053"></a>00053 <span class="comment"></span>
<a name="l00054"></a>00054 <span class="comment">*****************************************************************************************/</span>
<a name="l00055"></a><a class="code" href="exec_8c.html#4b86d28d8fd56197042aef174de2fd58">00055</a> <a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> <a class="code" href="exec_8h.html#e9945e606ad208cb00dc9166d06452b4">execThread</a>(<span class="keywordtype">void</span> (* tproc)(<span class="keywordtype">void</span>),<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> stack,<span class="keywordtype">char</span> *arg) {
<a name="l00056"></a>00056   <a class="code" href="structtaskStruct.html">kTask_t</a> * newProcess = 0x0;
<a name="l00057"></a>00057   <span class="comment">/* Find A New Thread */</span>
<a name="l00058"></a>00058   newProcess = <a class="code" href="sched_8h.html#92458df2063761371869cdfe0c9b4ee3">schedNewTask</a>();
<a name="l00059"></a>00059   <a class="code" href="assert_8h.html#d6d5aaa966ca7424f7cb9bd01f2c838b">assert</a>(newProcess); 
<a name="l00060"></a>00060   <span class="keywordflow">if</span> (stack &lt; 0x100000)
<a name="l00061"></a>00061     <a class="code" href="kpanic_8h.html#db9a182aa071791a306163d50d653deb">kpanic</a>(<span class="stringliteral">"exec: stack not in valid area: [0x%X]\n"</span>,stack);
<a name="l00062"></a>00062 
<a name="l00063"></a>00063   <span class="comment">/* Set All The Correct Thread Attributes */</span>
<a name="l00064"></a>00064   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#fecbe8ea2cfebfb4d1a0aa7b6ebcac2c">back_link</a>    = 0x0;
<a name="l00065"></a>00065   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#1017372aed82d7305586c330fa222b3b">esp0</a>         = 0x0;
<a name="l00066"></a>00066   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#26d03018de8c122451661bfe9d030541">ss0</a>          = 0x0;
<a name="l00067"></a>00067   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#d5ef8867200562fd8262f70312beff4d">esp1</a>         = 0x0;
<a name="l00068"></a>00068   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#6abf05d9a8f6356860a5606ffbadc989">ss1</a>          = 0x0;
<a name="l00069"></a>00069   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#60c88f3cd3f2110cb24be62444f42cfb">esp2</a>         = 0x0;
<a name="l00070"></a>00070   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#5a79ace5652b01cc25fc5ba7ff45bfa8">ss2</a>          = 0x0;
<a name="l00071"></a>00071   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8d312ed3dd0ea7a0f801c08a8cc4afd0">cr3</a>          = (<span class="keywordtype">unsigned</span> int)<a class="code" href="paging_8h.html#4e81de2626825c90dc6bb3cd7c8b344c">kernelPageDirectory</a>;
<a name="l00072"></a>00072   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#3e758f2138799d63fc803f7e4db4f5b4">eip</a>          = (<span class="keywordtype">unsigned</span> int)tproc;
<a name="l00073"></a>00073   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#a85f1fbaf622e0c6a39963da27de0194">eflags</a>       = 0x206;
<a name="l00074"></a>00074   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#85412a87dbdb8eda612c77bce8055a2c">esp</a>          = stack;
<a name="l00075"></a>00075   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#c2d32620149e07c40ee87696ef2509c2">ebp</a>          = stack;
<a name="l00076"></a>00076   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8beab5808aad776957d4544f6b139d4e">esi</a>          = 0x0;
<a name="l00077"></a>00077   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#a52b515706cd37e166c8eba348d5e68b">edi</a>          = 0x0;
<a name="l00078"></a>00078 
<a name="l00079"></a>00079   <span class="comment">/* Set these up to be ring 3 tasks */</span>
<a name="l00080"></a>00080   <span class="comment">/*</span>
<a name="l00081"></a>00081 <span class="comment">  newProcess-&gt;tss.es           = 0x30+3;</span>
<a name="l00082"></a>00082 <span class="comment">  newProcess-&gt;tss.cs           = 0x28+3;</span>
<a name="l00083"></a>00083 <span class="comment">  newProcess-&gt;tss.ss           = 0x30+3;</span>
<a name="l00084"></a>00084 <span class="comment">  newProcess-&gt;tss.ds           = 0x30+3;</span>
<a name="l00085"></a>00085 <span class="comment">  newProcess-&gt;tss.fs           = 0x30+3;</span>
<a name="l00086"></a>00086 <span class="comment">  newProcess-&gt;tss.gs           = 0x30+3;</span>
<a name="l00087"></a>00087 <span class="comment">  */</span>
<a name="l00088"></a>00088 
<a name="l00089"></a>00089   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#cd97dd6f6eabd83c0b819b6058b7041d">es</a>           = 0x10;
<a name="l00090"></a>00090   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#6d9085ec5af0fa1fe1de7015ad99c9e3">cs</a>           = 0x08;
<a name="l00091"></a>00091   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#340a29782d3306ba84176c543725d70a">ss</a>           = 0x10;
<a name="l00092"></a>00092   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#01ee01c7f45c9b9ee2ad8338c21e6d33">ds</a>           = 0x10;
<a name="l00093"></a>00093   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8114a585123181ec835f8db3e029d390">fs</a>           = 0x10;
<a name="l00094"></a>00094   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8dfa44423504293405785371d0e7b076">gs</a>           = 0x10;
<a name="l00095"></a>00095 
<a name="l00096"></a>00096   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#d7b6a367e1c2a38e1ee6c8e5dad955f7">ldt</a>          = 0x18;
<a name="l00097"></a>00097   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#52ac0b54c6b2c71450c62d7fc911f2e2">trace_bitmap</a> = 0x0000;
<a name="l00098"></a>00098   newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#611a0a044f99f092ace469ce2381bb33">io_map</a>       = 0x8000;
<a name="l00099"></a>00099   newProcess-&gt;<a class="code" href="structtaskStruct.html#0933c70230d4ac8bc9953640c979f8d7">oInfo</a>.<a class="code" href="structosInfo.html#2833c1fa4a221941b5d1141dfa5beefd">vmStart</a>    = 0x6400000;
<a name="l00100"></a>00100   
<a name="l00101"></a>00101   newProcess-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>          = 0x0;
<a name="l00102"></a>00102 
<a name="l00103"></a>00103   <span class="comment">/* Set up default stack for thread here filled with arg list 3 times */</span>
<a name="l00104"></a>00104   <span class="keyword">asm</span> <span class="keyword">volatile</span>(
<a name="l00105"></a>00105     <span class="stringliteral">"pusha               \n"</span>
<a name="l00106"></a>00106     <span class="stringliteral">"movl   %%esp,%%ecx  \n"</span>
<a name="l00107"></a>00107     <span class="stringliteral">"movl   %1,%%eax     \n"</span>
<a name="l00108"></a>00108     <span class="stringliteral">"movl   %%eax,%%esp  \n"</span>
<a name="l00109"></a>00109     <span class="stringliteral">"pushl  %%ebx        \n"</span>
<a name="l00110"></a>00110     <span class="stringliteral">"pushl  %%ebx        \n"</span>
<a name="l00111"></a>00111     <span class="stringliteral">"pushl  %%ebx        \n"</span>
<a name="l00112"></a>00112     <span class="stringliteral">"movl   %%esp,%%eax  \n"</span>
<a name="l00113"></a>00113     <span class="stringliteral">"movl   %%eax,%1     \n"</span>
<a name="l00114"></a>00114     <span class="stringliteral">"movl   %%ecx,%%esp  \n"</span>
<a name="l00115"></a>00115     <span class="stringliteral">"popa                \n"</span>
<a name="l00116"></a>00116     :
<a name="l00117"></a>00117     : <span class="stringliteral">"b"</span> (arg),<span class="stringliteral">"m"</span> (newProcess-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#85412a87dbdb8eda612c77bce8055a2c">esp</a>)
<a name="l00118"></a>00118     );
<a name="l00119"></a>00119 
<a name="l00120"></a>00120   <span class="comment">/* Put new thread into the READY state */</span>
<a name="l00121"></a>00121   <a class="code" href="sched_8h.html#51101e12c9236ea1286477695c110482">sched_setStatus</a>(newProcess-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>,<a class="code" href="sched_8h.html#3fb333b67375561d327e9b5a8ffa03b96564f2f3e15be06b670547bbcaaf0798">READY</a>);
<a name="l00122"></a>00122 
<a name="l00123"></a>00123   <span class="comment">/* Return with the new process ID */</span>
<a name="l00124"></a>00124   <span class="keywordflow">return</span>((<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>)newProcess);
<a name="l00125"></a>00125   }
<a name="l00126"></a>00126 
<a name="l00127"></a>00127 <span class="comment">/*****************************************************************************************</span>
<a name="l00128"></a>00128 <span class="comment"></span>
<a name="l00129"></a>00129 <span class="comment"> Function: void execFile(char *file);</span>
<a name="l00130"></a>00130 <span class="comment"> Description: This Function Executes A Kile Into A New VM Space With Out</span>
<a name="l00131"></a>00131 <span class="comment">              Having To Fork</span>
<a name="l00132"></a>00132 <span class="comment"> Notes:</span>
<a name="l00133"></a>00133 <span class="comment"></span>
<a name="l00134"></a>00134 <span class="comment"> 07/30/02 - I Have Made Some Heavy Changes To This As Well As Fixed A Few</span>
<a name="l00135"></a>00135 <span class="comment">            Memory Leaks The Memory Allocated To Load The Binary Into Is</span>
<a name="l00136"></a>00136 <span class="comment">            Now Unmapped So It Can Be Used Again And Not Held Onto Until</span>
<a name="l00137"></a>00137 <span class="comment">            The Program Exits</span>
<a name="l00138"></a>00138 <span class="comment"></span>
<a name="l00139"></a>00139 <span class="comment"> 07/30/02 - Now I Have To Make A Better Memory Allocator So We Can Set Up</span>
<a name="l00140"></a>00140 <span class="comment">            The Freshly Allocated Pages With The Correct Permissions</span>
<a name="l00141"></a>00141 <span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">*****************************************************************************************/</span>
<a name="l00143"></a><a class="code" href="exec_8c.html#f80d4412d42ed1b5bf9a1b9774230f33">00143</a> <span class="keywordtype">void</span> <a class="code" href="exec_8h.html#f80d4412d42ed1b5bf9a1b9774230f33">execFile</a>(<span class="keywordtype">char</span> *<a class="code" href="structfile.html">file</a>,<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv,<span class="keywordtype">int</span> console) {
<a name="l00144"></a>00144 
<a name="l00145"></a>00145   <span class="keywordtype">int</span>        i         = 0x0;
<a name="l00146"></a>00146   <span class="keywordtype">int</span>        x         = 0x0;
<a name="l00147"></a>00147   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a> *tmp       = 0x0;
<a name="l00148"></a>00148 
<a name="l00149"></a>00149   <a class="code" href="structfileDescriptorStruct.html">fileDescriptor</a>   *tmpFd         = 0x0;
<a name="l00150"></a>00150   <a class="code" href="structelfHeader.html">elfHeader</a>        *binaryHeader  = 0x0;
<a name="l00151"></a>00151   <a class="code" href="structelfProgramHeader.html">elfProgramHeader</a> *programHeader = 0x0;
<a name="l00152"></a>00152 
<a name="l00153"></a>00153   <span class="comment">/* Get A New Task For This Proccess */</span>
<a name="l00154"></a>00154   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a> = <a class="code" href="sched_8h.html#92458df2063761371869cdfe0c9b4ee3">schedNewTask</a>();
<a name="l00155"></a>00155   <a class="code" href="assert_8h.html#d6d5aaa966ca7424f7cb9bd01f2c838b">assert</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>);
<a name="l00156"></a>00156   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#3cf9920106f9b0d96dff475faf7aa0d6">gid</a>  = 0x0;
<a name="l00157"></a>00157   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#1f9e02ebf24ff1cd76fab75e4c6b0fe1">uid</a>  = 0x0;
<a name="l00158"></a>00158   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4563a310626d4f4ea885f4532356abb3">term</a> = <a class="code" href="tty_8h.html#4f96ccac7e60296ef496008d8cbed0ff">tty_find</a>(console);
<a name="l00159"></a>00159   <span class="keywordflow">if</span> (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4563a310626d4f4ea885f4532356abb3">term</a> == 0x0)
<a name="l00160"></a>00160     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Error: invalid console\n"</span>);
<a name="l00161"></a>00161 
<a name="l00162"></a>00162   <span class="comment">/* Set tty ownership */</span>
<a name="l00163"></a>00163   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4563a310626d4f4ea885f4532356abb3">term</a>-&gt;<a class="code" href="structtty__termNode.html#f8e2ad49f523044768d8e768bfe531e4">owner</a> = <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>;
<a name="l00164"></a>00164 
<a name="l00165"></a>00165   <span class="comment">/* Now We Must Create A Virtual Space For This Proccess To Run In */</span>
<a name="l00166"></a>00166   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8d312ed3dd0ea7a0f801c08a8cc4afd0">cr3</a> = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>)<a class="code" href="paging_8h.html#39ac9b6ea58fc8b6f129775642077c99">vmmCreateVirtualSpace</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>);
<a name="l00167"></a>00167 
<a name="l00168"></a>00168   <span class="comment">/* To Better Load This Application We Will Switch Over To Its VM Space */</span>
<a name="l00169"></a>00169   <span class="keyword">asm</span> <span class="keyword">volatile</span>(
<a name="l00170"></a>00170     <span class="stringliteral">"movl %0,%%eax          \n"</span>
<a name="l00171"></a>00171     <span class="stringliteral">"movl %%eax,%%cr3       \n"</span>
<a name="l00172"></a>00172     : : <span class="stringliteral">"d"</span> ((<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> *)(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8d312ed3dd0ea7a0f801c08a8cc4afd0">cr3</a>))
<a name="l00173"></a>00173     );
<a name="l00174"></a>00174 
<a name="l00175"></a>00175   <span class="comment">/* Lets Find The File */</span>
<a name="l00176"></a>00176   tmpFd = <a class="code" href="file_8h.html#d6a41ac88a7d46d574e8a675fdde136c">fopen</a>(file,<span class="stringliteral">"r"</span>);
<a name="l00177"></a>00177 
<a name="l00178"></a>00178   <span class="comment">/* If We Dont Find the File Return */</span>
<a name="l00179"></a>00179   <span class="keywordflow">if</span> (tmpFd == 0x0) {
<a name="l00180"></a>00180     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00181"></a>00181     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00182"></a>00182     <span class="keywordflow">return</span>;
<a name="l00183"></a>00183     }
<a name="l00184"></a>00184   <span class="keywordflow">if</span> (tmpFd-&gt;<a class="code" href="structfileDescriptorStruct.html#11626b5d99a5da968f43bc37d2591c5c">perms</a> == 0x0) {
<a name="l00185"></a>00185     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00186"></a>00186     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00187"></a>00187     <span class="keywordflow">return</span>;
<a name="l00188"></a>00188     }
<a name="l00189"></a>00189 
<a name="l00190"></a>00190   <span class="comment">/* Load ELF Header */</span>
<a name="l00191"></a>00191   binaryHeader = (<a class="code" href="structelfHeader.html">elfHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfHeader.html">elfHeader</a>));
<a name="l00192"></a>00192 
<a name="l00193"></a>00193 
<a name="l00194"></a>00194   <span class="comment">//kprintf("&gt;a:%i:0x%X:0x%X&lt;",sizeof(elfHeader),binaryHeader,tmpFd);</span>
<a name="l00195"></a>00195   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(binaryHeader,<span class="keyword">sizeof</span>(elfHeader),1,tmpFd);
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 
<a name="l00198"></a>00198   <span class="comment">/* Check If App Is A Real Application */</span>
<a name="l00199"></a>00199   <span class="keywordflow">if</span> ((binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[1] != <span class="charliteral">'E'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[2] != <span class="charliteral">'L'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[3] != <span class="charliteral">'F'</span>)) {
<a name="l00200"></a>00200     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00201"></a>00201     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00202"></a>00202     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00203"></a>00203     <span class="keywordflow">return</span>;
<a name="l00204"></a>00204     }
<a name="l00205"></a>00205   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#34e52f945d79cca21dc50a8aef79f9e8">eType</a> != 2) {
<a name="l00206"></a>00206     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00207"></a>00207     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00208"></a>00208     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00209"></a>00209     <span class="keywordflow">return</span>;
<a name="l00210"></a>00210     }
<a name="l00211"></a>00211   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> == 0x300000) {
<a name="l00212"></a>00212     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00213"></a>00213     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00214"></a>00214     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00215"></a>00215     <span class="keywordflow">return</span>;
<a name="l00216"></a>00216     }
<a name="l00217"></a>00217 
<a name="l00218"></a>00218   <span class="comment">/* Load The Program Header(s) */</span>
<a name="l00219"></a>00219   programHeader = (<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a>)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>);
<a name="l00220"></a>00220   <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,binaryHeader-&gt;<a class="code" href="structelfHeader.html#aff1ff2cb64932f1e1a1f6cf3b881787">ePhoff</a>,0);
<a name="l00221"></a>00221 
<a name="l00222"></a>00222   <span class="comment">//kprintf("&gt;c:%i:0x%X:0x%X&lt;",sizeof(elfProgramHeader)*binaryHeader-&gt;ePhnum,programHeader,tmpFd);</span>
<a name="l00223"></a>00223   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(programHeader,(<span class="keyword">sizeof</span>(elfProgramHeader)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>),1,tmpFd);
<a name="l00224"></a>00224   <span class="comment">//kprintf("&gt;d&lt;");</span>
<a name="l00225"></a>00225 
<a name="l00226"></a>00226   <span class="comment">/* Loop Through The Header And Load Sections Which Need To Be Loaded */</span>
<a name="l00227"></a>00227   <span class="keywordflow">for</span> (i=0;i&lt;binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>;i++) {
<a name="l00228"></a>00228     <span class="keywordflow">if</span> (programHeader[i].phType == 1) {
<a name="l00229"></a>00229       <span class="comment">/*</span>
<a name="l00230"></a>00230 <span class="comment">      Allocate Memory Im Going To Have To Make This Load Memory With Correct</span>
<a name="l00231"></a>00231 <span class="comment">      Settings so it helps us in the future</span>
<a name="l00232"></a>00232 <span class="comment">      */</span>
<a name="l00233"></a>00233       <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00234"></a>00234         <span class="comment">/* Make readonly and read/write !!! */</span>
<a name="l00235"></a>00235         <span class="keywordflow">if</span> (<a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),((programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp; 0xFFFFF000) + x),<a class="code" href="paging_8h.html#f0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a>) == 0x0)
<a name="l00236"></a>00236           <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"Remap Page Failed"</span>);
<a name="l00237"></a>00237 
<a name="l00238"></a>00238         <a class="code" href="lib_2string_8h.html#ce4b911463887af5e748326323e99a23">memset</a>((<span class="keywordtype">void</span> *)((programHeader[i].phVaddr &amp; 0xFFFFF000) + x),0x0,0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>);
<a name="l00239"></a>00239         }
<a name="l00240"></a>00240       <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#0933c70230d4ac8bc9953640c979f8d7">oInfo</a>.<a class="code" href="structosInfo.html#2833c1fa4a221941b5d1141dfa5beefd">vmStart</a> = 0x80000000;
<a name="l00241"></a>00241       <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)(programHeader[i].phVaddr &amp; 0xFFFFF000);
<a name="l00242"></a>00242       <span class="comment">/* Now Load Section To Memory */</span>
<a name="l00243"></a>00243       <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,programHeader[i].phOffset,0);
<a name="l00244"></a>00244       <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)programHeader[i].phVaddr,programHeader[i].phFilesz,1,tmpFd);
<a name="l00245"></a>00245       <span class="keywordflow">if</span> ((programHeader[i].phFlags &amp; 0x2) != 0x2) {
<a name="l00246"></a>00246         <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"pH: [0x%X]\n"</span>,programHeader[i].phMemsz);
<a name="l00247"></a>00247         <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00248"></a>00248           <span class="keywordflow">if</span> ((<a class="code" href="paging_8h.html#1913e8607a69ecf446b18fa1cd36c9cc">vmm_setPageAttributes</a>((programHeader[i].phVaddr &amp; 0xFFFFF000) + x,<a class="code" href="paging_8h.html#122dfc414a40e260fd35dbe9743db26f">PAGE_PRESENT</a> | <a class="code" href="paging_8h.html#2d0253527ea5080d6befe0ee3bde473f">PAGE_USER</a>)) != 0x0)
<a name="l00249"></a>00249             <a class="code" href="kpanic_8h.html#db9a182aa071791a306163d50d653deb">kpanic</a>(<span class="stringliteral">"Error: vmm_setPageAttributes failed, File: %s, Line: %i\n"</span>,__FILE__,__LINE__);
<a name="l00250"></a>00250           }
<a name="l00251"></a>00251         }
<a name="l00252"></a>00252       }
<a name="l00253"></a>00253     }
<a name="l00254"></a>00254 
<a name="l00255"></a>00255   <span class="comment">/* Set Virtual Memory Start */</span>
<a name="l00256"></a>00256   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#0933c70230d4ac8bc9953640c979f8d7">oInfo</a>.<a class="code" href="structosInfo.html#2833c1fa4a221941b5d1141dfa5beefd">vmStart</a> = 0x80000000;
<a name="l00257"></a>00257   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)(programHeader[i].phVaddr &amp; 0xFFFFF000);
<a name="l00258"></a>00258 
<a name="l00259"></a>00259   <span class="comment">/* Set Up Stack Space */</span>
<a name="l00260"></a>00260   <span class="keywordflow">for</span> (x = 1;x &lt; 100;x++) {
<a name="l00261"></a>00261     <a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),<a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a> - (x * 0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>),<a class="code" href="paging_8h.html#f0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a> | <a class="code" href="paging_8h.html#1532db17068ba8d409b8ffe066414af2">PAGE_STACK</a>);
<a name="l00262"></a>00262     }
<a name="l00263"></a>00263 
<a name="l00264"></a>00264   <span class="comment">/* Kernel Stack 0x2000 bytes long */</span>
<a name="l00265"></a>00265   <a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),0x5BC000,<a class="code" href="paging_8h.html#8b838cda4f0bc79ab8d07eb19dd35420">KERNEL_PAGE_DEFAULT</a> | <a class="code" href="paging_8h.html#1532db17068ba8d409b8ffe066414af2">PAGE_STACK</a>);
<a name="l00266"></a>00266   <a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),0x5BB000,<a class="code" href="paging_8h.html#8b838cda4f0bc79ab8d07eb19dd35420">KERNEL_PAGE_DEFAULT</a> | <a class="code" href="paging_8h.html#1532db17068ba8d409b8ffe066414af2">PAGE_STACK</a>);
<a name="l00267"></a>00267 
<a name="l00268"></a>00268   <span class="comment">/* Set All The Proper Information For The Task */</span>
<a name="l00269"></a>00269   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#fecbe8ea2cfebfb4d1a0aa7b6ebcac2c">back_link</a>    = 0x0;
<a name="l00270"></a>00270   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#1017372aed82d7305586c330fa222b3b">esp0</a>         = 0x5BC000;
<a name="l00271"></a>00271   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#26d03018de8c122451661bfe9d030541">ss0</a>          = 0x10;
<a name="l00272"></a>00272   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#d5ef8867200562fd8262f70312beff4d">esp1</a>         = 0x0;
<a name="l00273"></a>00273   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#6abf05d9a8f6356860a5606ffbadc989">ss1</a>          = 0x0;
<a name="l00274"></a>00274   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#60c88f3cd3f2110cb24be62444f42cfb">esp2</a>         = 0x0;
<a name="l00275"></a>00275   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#5a79ace5652b01cc25fc5ba7ff45bfa8">ss2</a>          = 0x0;
<a name="l00276"></a>00276   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#3e758f2138799d63fc803f7e4db4f5b4">eip</a>          = (long)binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a>;
<a name="l00277"></a>00277   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#a85f1fbaf622e0c6a39963da27de0194">eflags</a>       = 0x206;
<a name="l00278"></a>00278   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#85412a87dbdb8eda612c77bce8055a2c">esp</a>          = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a> - 12;
<a name="l00279"></a>00279   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#c2d32620149e07c40ee87696ef2509c2">ebp</a>          = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a>;
<a name="l00280"></a>00280   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8beab5808aad776957d4544f6b139d4e">esi</a>          = 0x0;
<a name="l00281"></a>00281   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#a52b515706cd37e166c8eba348d5e68b">edi</a>          = 0x0;
<a name="l00282"></a>00282 
<a name="l00283"></a>00283   <span class="comment">/* Set these up to be ring 3 tasks */</span>
<a name="l00284"></a>00284   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#cd97dd6f6eabd83c0b819b6058b7041d">es</a>           = 0<a class="code" href="ap-boot_8S.html#c2a218176530ced267bbcc8042da1000">x30</a>+3;
<a name="l00285"></a>00285   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#6d9085ec5af0fa1fe1de7015ad99c9e3">cs</a>           = 0x28+3;
<a name="l00286"></a>00286   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#340a29782d3306ba84176c543725d70a">ss</a>           = 0<a class="code" href="ap-boot_8S.html#c2a218176530ced267bbcc8042da1000">x30</a>+3;
<a name="l00287"></a>00287   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#01ee01c7f45c9b9ee2ad8338c21e6d33">ds</a>           = 0<a class="code" href="ap-boot_8S.html#c2a218176530ced267bbcc8042da1000">x30</a>+3;
<a name="l00288"></a>00288   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8114a585123181ec835f8db3e029d390">fs</a>           = 0<a class="code" href="ap-boot_8S.html#c2a218176530ced267bbcc8042da1000">x30</a>+3;
<a name="l00289"></a>00289   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#8dfa44423504293405785371d0e7b076">gs</a>           = 0<a class="code" href="ap-boot_8S.html#c2a218176530ced267bbcc8042da1000">x30</a>+3;
<a name="l00290"></a>00290 
<a name="l00291"></a>00291   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#d7b6a367e1c2a38e1ee6c8e5dad955f7">ldt</a>          = 0<a class="code" href="start_8S.html#0c48af311abb843beb7bb6c5e295d1db">x18</a>;
<a name="l00292"></a>00292   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#52ac0b54c6b2c71450c62d7fc911f2e2">trace_bitmap</a> = 0x0000;
<a name="l00293"></a>00293   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#611a0a044f99f092ace469ce2381bb33">io_map</a>       = 0x8000;
<a name="l00294"></a>00294 
<a name="l00295"></a>00295   <a class="code" href="sched_8h.html#51101e12c9236ea1286477695c110482">sched_setStatus</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>,<a class="code" href="sched_8h.html#3fb333b67375561d327e9b5a8ffa03b96564f2f3e15be06b670547bbcaaf0798">READY</a>);
<a name="l00296"></a>00296 
<a name="l00297"></a>00297   <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00298"></a>00298   <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(programHeader);
<a name="l00299"></a>00299   <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00300"></a>00300 
<a name="l00301"></a>00301   tmp = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> *)<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#1017372aed82d7305586c330fa222b3b">esp0</a> - 5;
<a name="l00302"></a>00302   tmp[0] = binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a>;
<a name="l00303"></a>00303   tmp[3] = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a> - 12;
<a name="l00304"></a>00304 
<a name="l00305"></a>00305   tmp = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> *)<a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a> - 2;
<a name="l00306"></a>00306 
<a name="l00307"></a>00307   <span class="keywordflow">if</span> (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a> &gt; 4)
<a name="l00308"></a>00308   <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"argv[0]: [%s]\n"</span>,argv[0]);
<a name="l00309"></a>00309   <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"argv: [0x%X]\n"</span>,argv);
<a name="l00310"></a>00310   tmp[0] = (<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>)argv;
<a name="l00311"></a>00311   tmp[1] = (<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>)argv;
<a name="l00312"></a>00312 
<a name="l00313"></a>00313 
<a name="l00314"></a>00314   <span class="comment">/* Switch Back To The Kernels VM Space */</span>
<a name="l00315"></a>00315   <span class="keyword">asm</span> <span class="keyword">volatile</span>(
<a name="l00316"></a>00316     <span class="stringliteral">"movl %0,%%eax          \n"</span>
<a name="l00317"></a>00317     <span class="stringliteral">"movl %%eax,%%cr3       \n"</span>
<a name="l00318"></a>00318     : : <span class="stringliteral">"d"</span> ((<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> *)(<a class="code" href="paging_8h.html#4e81de2626825c90dc6bb3cd7c8b344c">kernelPageDirectory</a>))
<a name="l00319"></a>00319     );
<a name="l00320"></a>00320 
<a name="l00321"></a>00321   <span class="comment">/* Finally Return */</span>
<a name="l00322"></a>00322   <span class="keywordflow">return</span>;
<a name="l00323"></a>00323   }
<a name="l00324"></a>00324 
<a name="l00325"></a>00325 <span class="comment">/*****************************************************************************************</span>
<a name="l00326"></a>00326 <span class="comment"></span>
<a name="l00327"></a>00327 <span class="comment"> Function: void sysExec();</span>
<a name="l00328"></a>00328 <span class="comment"> Description: This Is The System Call To Execute A New Task</span>
<a name="l00329"></a>00329 <span class="comment"></span>
<a name="l00330"></a>00330 <span class="comment"> Notes:</span>
<a name="l00331"></a>00331 <span class="comment"> 04-22-03 - It Now Loads Sections Not The Full File</span>
<a name="l00332"></a>00332 <span class="comment"></span>
<a name="l00333"></a>00333 <span class="comment">*****************************************************************************************/</span>
<a name="l00334"></a><a class="code" href="exec_8c.html#219681612352232186a0f568457d851d">00334</a> <span class="keywordtype">void</span> <a class="code" href="syscalls_8h.html#067d373ad2682affb9b8b093b5e5c97a">sysExec</a>(<span class="keywordtype">char</span> *<a class="code" href="structfile.html">file</a>,<span class="keywordtype">char</span> *ap) {
<a name="l00335"></a>00335   <span class="keywordtype">int</span>      i        = 0x0;
<a name="l00336"></a>00336   <span class="keywordtype">int</span>      x        = 0x0;
<a name="l00337"></a>00337   <span class="keywordtype">int</span>      argc     = 0x0;
<a name="l00338"></a>00338   <a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>  *tmp      = 0x0;
<a name="l00339"></a>00339   <a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>   ldAddr   = 0x0;
<a name="l00340"></a>00340   <a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>   seg_size = 0x0;
<a name="l00341"></a>00341   <a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>   seg_addr = 0x0;
<a name="l00342"></a>00342   <span class="keywordtype">char</span>    *interp   = 0x0;
<a name="l00343"></a>00343   <span class="keywordtype">char</span>   **argv     = 0x0;
<a name="l00344"></a>00344   <span class="keywordtype">char</span>   **argvNew  = 0x0;
<a name="l00345"></a>00345   <span class="keywordtype">char</span>    *args     = 0x0;
<a name="l00346"></a>00346 
<a name="l00347"></a>00347   <a class="code" href="structfileDescriptorStruct.html">fileDescriptor</a>    *tmpFd         = 0x0;
<a name="l00348"></a>00348   <a class="code" href="structelfHeader.html">elfHeader</a>         *binaryHeader  = 0x0;
<a name="l00349"></a>00349   <a class="code" href="structelfProgramHeader.html">elfProgramHeader</a>  *programHeader = 0x0;
<a name="l00350"></a>00350   <a class="code" href="structelfSectionHeader.html">elfSectionHeader</a>  *sectionHeader = 0x0;
<a name="l00351"></a>00351   <a class="code" href="structelfDynamic.html">elfDynamic</a>        *elfDynamicS   = 0x0;
<a name="l00352"></a>00352   <span class="keyword">struct </span><a class="code" href="structi386__frame.html">i386_frame</a> *iFrame        = 0x0;
<a name="l00353"></a>00353 
<a name="l00354"></a>00354 
<a name="l00355"></a>00355   <span class="keywordflow">if</span> (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a> &gt; 4) {
<a name="l00356"></a>00356     <a class="code" href="exec_8h.html#094c23346b6d226a03866a54b755ed64">sys_exec</a>(file,ap);
<a name="l00357"></a>00357     <span class="keywordflow">return</span>;
<a name="l00358"></a>00358     }
<a name="l00359"></a>00359 
<a name="l00360"></a>00360   tmpFd = <a class="code" href="file_8h.html#d6a41ac88a7d46d574e8a675fdde136c">fopen</a>(file,<span class="stringliteral">"r"</span>);
<a name="l00361"></a>00361   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a> = tmpFd;
<a name="l00362"></a>00362   <span class="comment">/* If We Dont Find the File Return */</span>
<a name="l00363"></a>00363   <span class="keywordflow">if</span> (tmpFd == 0x0) {
<a name="l00364"></a>00364     <span class="keywordflow">return</span>;
<a name="l00365"></a>00365     }
<a name="l00366"></a>00366   <span class="keywordflow">if</span> (tmpFd-&gt;<a class="code" href="structfileDescriptorStruct.html#11626b5d99a5da968f43bc37d2591c5c">perms</a> == 0) {
<a name="l00367"></a>00367     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00368"></a>00368     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00369"></a>00369     <span class="keywordflow">return</span>;
<a name="l00370"></a>00370     }
<a name="l00371"></a>00371 
<a name="l00372"></a>00372   <span class="comment">/* Load ELF Header */</span>
<a name="l00373"></a>00373 
<a name="l00374"></a>00374   <span class="keywordflow">if</span> ((binaryHeader = (<a class="code" href="structelfHeader.html">elfHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfHeader.html">elfHeader</a>))) == 0x0) 
<a name="l00375"></a>00375     <a class="code" href="endtask_8h.html#152c1859ada097cc21071f471bfa2e67">endTask</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>);
<a name="l00376"></a>00376     <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(binaryHeader,<span class="keyword">sizeof</span>(elfHeader),1,tmpFd);
<a name="l00377"></a>00377     <span class="comment">/* Set sectionHeader To Point To Loaded Binary To We Can Gather Info */</span>
<a name="l00378"></a>00378 
<a name="l00379"></a>00379   <span class="comment">/* Check If App Is A Real Application */</span>
<a name="l00380"></a>00380   <span class="keywordflow">if</span> ((binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[1] != <span class="charliteral">'E'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[2] != <span class="charliteral">'L'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[3] != <span class="charliteral">'F'</span>)) {
<a name="l00381"></a>00381     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00382"></a>00382     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00383"></a>00383     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00384"></a>00384 
<a name="l00385"></a>00385     <span class="keywordflow">return</span>;
<a name="l00386"></a>00386     }
<a name="l00387"></a>00387   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#34e52f945d79cca21dc50a8aef79f9e8">eType</a> != 2) {
<a name="l00388"></a>00388     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00389"></a>00389     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00390"></a>00390     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00391"></a>00391     <span class="keywordflow">return</span>;
<a name="l00392"></a>00392     }
<a name="l00393"></a>00393   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> == 0x300000) {
<a name="l00394"></a>00394     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Exec Format Error: Binary File Not Executable.\n"</span>);
<a name="l00395"></a>00395     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00396"></a>00396     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(tmpFd);
<a name="l00397"></a>00397     <span class="keywordflow">return</span>;
<a name="l00398"></a>00398     }
<a name="l00399"></a>00399 
<a name="l00400"></a>00400   <span class="comment">/* Load The Program Header(s) */</span>
<a name="l00401"></a>00401   <span class="keywordflow">if</span> ((programHeader = (<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a>)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>)) == 0x0)
<a name="l00402"></a>00402     <a class="code" href="endtask_8h.html#152c1859ada097cc21071f471bfa2e67">endTask</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>);
<a name="l00403"></a>00403 
<a name="l00404"></a>00404   <a class="code" href="assert_8h.html#d6d5aaa966ca7424f7cb9bd01f2c838b">assert</a>(programHeader);
<a name="l00405"></a>00405   <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,binaryHeader-&gt;<a class="code" href="structelfHeader.html#aff1ff2cb64932f1e1a1f6cf3b881787">ePhoff</a>,0);
<a name="l00406"></a>00406   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(programHeader,(<span class="keyword">sizeof</span>(elfProgramHeader)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>),1,tmpFd);
<a name="l00407"></a>00407 
<a name="l00408"></a>00408   <span class="keywordflow">if</span> ((sectionHeader = (<a class="code" href="structelfSectionHeader.html">elfSectionHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfSectionHeader.html">elfSectionHeader</a>)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#a5b9594ecad96ed7448dbcf95da7895f">eShnum</a>)) == 0x0)
<a name="l00409"></a>00409     <a class="code" href="endtask_8h.html#152c1859ada097cc21071f471bfa2e67">endTask</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>);
<a name="l00410"></a>00410 
<a name="l00411"></a>00411   <a class="code" href="assert_8h.html#d6d5aaa966ca7424f7cb9bd01f2c838b">assert</a>(sectionHeader);
<a name="l00412"></a>00412   <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,binaryHeader-&gt;<a class="code" href="structelfHeader.html#3d8c518903e5e4db018a336edb6ef204">eShoff</a>,0);
<a name="l00413"></a>00413   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(sectionHeader,<span class="keyword">sizeof</span>(elfSectionHeader)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#a5b9594ecad96ed7448dbcf95da7895f">eShnum</a>,1,tmpFd);
<a name="l00414"></a>00414 
<a name="l00415"></a>00415   <span class="comment">/* Loop Through The Header And Load Sections Which Need To Be Loaded */</span>
<a name="l00416"></a>00416   <span class="keywordflow">for</span> (i=0;i&lt;binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>;i++) {
<a name="l00417"></a>00417     <span class="keywordflow">switch</span> (programHeader[i].phType) {
<a name="l00418"></a>00418       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#84d7768fd6c6ece599d297090900cf92">PT_LOAD</a>:
<a name="l00419"></a>00419         seg_addr = <a class="code" href="paging_8h.html#bd636a9b61ad98f4fc23b1f4a9210d78">trunc_page</a>(programHeader[i].phVaddr);
<a name="l00420"></a>00420         seg_size = <a class="code" href="paging_8h.html#2702263fcf2b3b026cb26c6d895cb0ee">round_page</a>(programHeader[i].phMemsz + programHeader[i].phVaddr - seg_addr);
<a name="l00421"></a>00421 
<a name="l00422"></a>00422         <span class="comment">/*</span>
<a name="l00423"></a>00423 <span class="comment">        Allocate Memory Im Going To Have To Make This Load Memory With Correct</span>
<a name="l00424"></a>00424 <span class="comment">        Settings so it helps us in the future</span>
<a name="l00425"></a>00425 <span class="comment">        */</span>
<a name="l00426"></a>00426         <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00427"></a>00427           <span class="comment">/* Make readonly and read/write !!! */</span>
<a name="l00428"></a>00428           <span class="keywordflow">if</span> (<a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),((programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp; 0xFFFFF000) + x),<a class="code" href="paging_8h.html#f0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a>) == 0x0)
<a name="l00429"></a>00429             <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"Error: Remap Page Failed"</span>);
<a name="l00430"></a>00430           <a class="code" href="lib_2string_8h.html#ce4b911463887af5e748326323e99a23">memset</a>((<span class="keywordtype">void</span> *)((programHeader[i].phVaddr &amp; 0xFFFFF000) + x),0x0,0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>);
<a name="l00431"></a>00431           }
<a name="l00432"></a>00432 
<a name="l00433"></a>00433         <span class="comment">/* Now Load Section To Memory */</span>
<a name="l00434"></a>00434         <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,programHeader[i].phOffset,0);
<a name="l00435"></a>00435         <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)programHeader[i].phVaddr,programHeader[i].phFilesz,1,tmpFd);
<a name="l00436"></a>00436         <span class="keywordflow">if</span> ((programHeader[i].phFlags &amp; 0x2) != 0x2) {
<a name="l00437"></a>00437           <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00438"></a>00438             <span class="keywordflow">if</span> ((<a class="code" href="paging_8h.html#1913e8607a69ecf446b18fa1cd36c9cc">vmm_setPageAttributes</a>((programHeader[i].phVaddr &amp; 0xFFFFF000) + x,<a class="code" href="paging_8h.html#122dfc414a40e260fd35dbe9743db26f">PAGE_PRESENT</a> | <a class="code" href="paging_8h.html#2d0253527ea5080d6befe0ee3bde473f">PAGE_USER</a>)) != 0x0)
<a name="l00439"></a>00439               <a class="code" href="kpanic_8h.html#db9a182aa071791a306163d50d653deb">kpanic</a>(<span class="stringliteral">"Error: vmm_setPageAttributes failed, File: %s,Line: %i\n"</span>,__FILE__,__LINE__);
<a name="l00440"></a>00440             }
<a name="l00441"></a>00441           }
<a name="l00442"></a>00442         <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"setting daddr\n"</span>);
<a name="l00443"></a>00443         <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> &gt;= programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp;&amp; binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> + programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>)) {
<a name="l00444"></a>00444           <span class="comment">/* We're suposed to do something here? */</span>
<a name="l00445"></a>00445           }
<a name="l00446"></a>00446         <span class="keywordflow">else</span> {
<a name="l00447"></a>00447           <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> = seg_size &gt;&gt; <a class="code" href="paging_8h.html#850d80ca2291d26b40dc6b25c419f81a">PAGE_SHIFT</a>;
<a name="l00448"></a>00448           <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)seg_addr;
<a name="l00449"></a>00449           }
<a name="l00450"></a>00450 
<a name="l00451"></a>00451         <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#0933c70230d4ac8bc9953640c979f8d7">oInfo</a>.<a class="code" href="structosInfo.html#2833c1fa4a221941b5d1141dfa5beefd">vmStart</a> = ((programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp; 0xFFFFF000) + 0xA900000);
<a name="l00452"></a>00452         <span class="keywordflow">break</span>;
<a name="l00453"></a>00453       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#2121a2f01c51e8462bfd4d47725649d8">PT_DYNAMIC</a>:
<a name="l00454"></a>00454         <span class="comment">//newLoc = (char *)programHeader[i].phVaddr;</span>
<a name="l00455"></a>00455         elfDynamicS = (<a class="code" href="structelfDynamic.html">elfDynamic</a> *)programHeader[i].phVaddr;
<a name="l00456"></a>00456         <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,programHeader[i].phOffset,0);
<a name="l00457"></a>00457         <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)programHeader[i].phVaddr,programHeader[i].phFilesz,1,tmpFd);
<a name="l00458"></a>00458         <span class="keywordflow">break</span>;
<a name="l00459"></a>00459       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#bcd3aa15bc567949c1ab6b1abc137710">PT_INTERP</a>:
<a name="l00460"></a>00460         interp = (<span class="keywordtype">char</span> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(programHeader[i].phFilesz);
<a name="l00461"></a>00461         <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(tmpFd,programHeader[i].phOffset,0);
<a name="l00462"></a>00462         <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)interp,programHeader[i].phFilesz,1,tmpFd);
<a name="l00463"></a>00463         <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Interp: [%s]\n"</span>,interp);
<a name="l00464"></a>00464         ldAddr = <a class="code" href="ld_8h.html#b0622e93915d1824df770950e425875f">ldEnable</a>();
<a name="l00465"></a>00465         <span class="keywordflow">break</span>;
<a name="l00466"></a>00466       <span class="keywordflow">default</span>:
<a name="l00467"></a>00467         <span class="keywordflow">break</span>;
<a name="l00468"></a>00468       }
<a name="l00469"></a>00469     }
<a name="l00470"></a>00470 
<a name="l00471"></a>00471   <span class="comment">/* What is this doing? 11/23/06 */</span>
<a name="l00472"></a>00472   <span class="keywordflow">if</span> (elfDynamicS != 0x0) {
<a name="l00473"></a>00473     <span class="keywordflow">for</span> (i=0;i&lt;12;i++) {
<a name="l00474"></a>00474       <span class="keywordflow">if</span> (elfDynamicS[i].dynVal == 0x3) {
<a name="l00475"></a>00475         tmp = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> *)elfDynamicS[i].dynPtr;
<a name="l00476"></a>00476         <span class="keywordflow">if</span> (tmp == 0x0)
<a name="l00477"></a>00477           <a class="code" href="kpanic_8h.html#db9a182aa071791a306163d50d653deb">kpanic</a>(<span class="stringliteral">"tmp: NULL\n"</span>);
<a name="l00478"></a>00478         tmp[2] = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>)ldAddr;
<a name="l00479"></a>00479         tmp[1] = (<a class="code" href="types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a>)tmpFd;
<a name="l00480"></a>00480         <span class="keywordflow">break</span>;
<a name="l00481"></a>00481         }
<a name="l00482"></a>00482 <span class="comment">/*</span>
<a name="l00483"></a>00483 <span class="comment">      else {</span>
<a name="l00484"></a>00484 <span class="comment">        kprintf("dyn_val: %i",elfDynamicS[i].dynVal);</span>
<a name="l00485"></a>00485 <span class="comment">        }</span>
<a name="l00486"></a>00486 <span class="comment">*/</span>
<a name="l00487"></a>00487       }
<a name="l00488"></a>00488     }
<a name="l00489"></a>00489 
<a name="l00490"></a>00490   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> = seg_size &gt;&gt; <a class="code" href="paging_8h.html#850d80ca2291d26b40dc6b25c419f81a">PAGE_SHIFT</a>;
<a name="l00491"></a>00491   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)seg_addr;
<a name="l00492"></a>00492 
<a name="l00493"></a>00493   argv = ap;
<a name="l00494"></a>00494 
<a name="l00495"></a>00495   <span class="keywordflow">if</span> (argv[1] != 0x0) {
<a name="l00496"></a>00496     argc = argv[0];
<a name="l00497"></a>00497     args = (<span class="keywordtype">char</span> *)<a class="code" href="paging_8h.html#4b324672c4b25064eb8db1e3419337b1">vmmGetFreeVirtualPage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>,1,<a class="code" href="paging_8h.html#59a518704bf2f0b56603476bcb1eebbf">VM_TASK</a>);
<a name="l00498"></a>00498 <a class="code" href="lib_2string_8h.html#ce4b911463887af5e748326323e99a23">memset</a>(args,0x0,0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>);
<a name="l00499"></a>00499     x = 0x0;
<a name="l00500"></a>00500     argvNew = (<span class="keywordtype">char</span> **)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *) * argc);
<a name="l00501"></a>00501     <span class="keywordflow">for</span> (i = 0x0;i &lt; argc;i++) {
<a name="l00502"></a>00502       <a class="code" href="strcpy_8S.html#9132520cc79236b654666f4ddc1b516c">strcpy</a>(args + x,argv[i + 1]);
<a name="l00503"></a>00503       argvNew[i] = args + x;
<a name="l00504"></a>00504       x += <a class="code" href="strlen_8S.html#0bcafbeba7f59f157715cc462036b8d3">strlen</a>(argv[i + 1]) + 1;
<a name="l00505"></a>00505       <span class="comment">//args[x] = '\0';</span>
<a name="l00506"></a>00506       <span class="comment">//x++;</span>
<a name="l00507"></a>00507       }
<a name="l00508"></a>00508     argv = argvNew;
<a name="l00509"></a>00509     }
<a name="l00510"></a>00510 
<a name="l00512"></a>00512   <a class="code" href="paging_8c.html#0444c8635648fabdbd6e702137aa1723">vmm_cleanVirtualSpace</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> + (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> &lt;&lt; <a class="code" href="paging_8h.html#7d467c1d283fdfa1f2081ba1e0d01b6e">PAGE_SIZE</a>));
<a name="l00513"></a>00513 
<a name="l00514"></a>00514 
<a name="l00516"></a>00516   iFrame = <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#1017372aed82d7305586c330fa222b3b">esp0</a> - <span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structi386__frame.html">i386_frame</a>);
<a name="l00517"></a>00517   iFrame-&gt;<a class="code" href="structi386__frame.html#dcf6812a951acee52fce378a3c935b1f">ebp</a> = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a>;
<a name="l00518"></a>00518   iFrame-&gt;<a class="code" href="structi386__frame.html#ef87f1d1d6f1ad030c95773e7eedfa16">eip</a> = binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a>;
<a name="l00519"></a>00519   iFrame-&gt;<a class="code" href="structi386__frame.html#bbfc7b0ada36bd69608adfa39f5fc133">user_esp</a> = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a> - 12;
<a name="l00520"></a>00520 
<a name="l00521"></a>00521   <span class="comment">//if (_current-&gt;id &gt; 3) {</span>
<a name="l00522"></a>00522 
<a name="l00523"></a>00523     iFrame-&gt;<a class="code" href="structi386__frame.html#bbfc7b0ada36bd69608adfa39f5fc133">user_esp</a> = ((<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>)<a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a>) - (<span class="keyword">sizeof</span>(<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>) * (argc + 3));
<a name="l00524"></a>00524     tmp = iFrame-&gt;<a class="code" href="structi386__frame.html#bbfc7b0ada36bd69608adfa39f5fc133">user_esp</a>;
<a name="l00525"></a>00525 
<a name="l00527"></a>00527     tmp[0] = argc;
<a name="l00528"></a>00528     <span class="keywordflow">for</span> (i = 0;i &lt; argc;i++) {
<a name="l00529"></a>00529       tmp[i + 1] = argv[i];
<a name="l00530"></a>00530       }
<a name="l00531"></a>00531     tmp[argc + 1] = 0x0;
<a name="l00532"></a>00532     tmp[argc + 2] = 0x1;
<a name="l00533"></a>00533     <span class="comment">//}</span>
<a name="l00534"></a>00534   <span class="comment">//else {</span>
<a name="l00535"></a>00535     <span class="comment">//tmp = (u_int32_t *)STACK_ADDR - 2;</span>
<a name="l00536"></a>00536     <span class="comment">//tmp[0] = 0x1;</span>
<a name="l00537"></a>00537     <span class="comment">//tmp[1] = 0x0;</span>
<a name="l00538"></a>00538     <span class="comment">//tmp[1] = (u_int32_t)argv;</span>
<a name="l00539"></a>00539     <span class="comment">//}</span>
<a name="l00540"></a>00540   <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(argvNew);
<a name="l00541"></a>00541  <span class="comment">/* Now That We Relocated The Binary We Can Unmap And Free Header Info */</span>
<a name="l00542"></a>00542   <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00543"></a>00543   <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(programHeader);
<a name="l00544"></a>00544 
<a name="l00545"></a>00545   <span class="keywordflow">return</span>;
<a name="l00546"></a>00546   }
<a name="l00547"></a>00547 
<a name="l00552"></a><a class="code" href="exec_8c.html#094c23346b6d226a03866a54b755ed64">00552</a> <span class="keywordtype">void</span> <a class="code" href="exec_8h.html#094c23346b6d226a03866a54b755ed64">sys_exec</a>(<span class="keywordtype">char</span> *<a class="code" href="structfile.html">file</a>,<span class="keywordtype">char</span> *ap) {
<a name="l00553"></a>00553   <span class="keywordtype">int</span>                 error         = 0x0;
<a name="l00554"></a>00554   <span class="keywordtype">int</span>                 i             = 0x0;
<a name="l00555"></a>00555   <span class="keywordtype">int</span>                 x             = 0x0;
<a name="l00556"></a>00556   <span class="keywordtype">int</span>                 argc          = 0x0;
<a name="l00557"></a>00557   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>           seg_size      = 0x0;
<a name="l00558"></a>00558   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>           seg_addr      = 0x0;
<a name="l00559"></a>00559   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>           addr          = 0x0;
<a name="l00560"></a>00560   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>           <a class="code" href="structi386__frame.html#ef87f1d1d6f1ad030c95773e7eedfa16">eip</a>           = 0x0;
<a name="l00561"></a>00561   <a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>           proghdr       = 0x0;
<a name="l00562"></a>00562   <span class="keywordtype">char</span>               *args          = 0x0;
<a name="l00563"></a>00563   <span class="keywordtype">char</span>               *interp        = 0x0;
<a name="l00564"></a>00564   <span class="keywordtype">char</span>              **argv          = 0x0;
<a name="l00565"></a>00565   <span class="keywordtype">char</span>              **argvNew       = 0x0;
<a name="l00566"></a>00566   <a class="code" href="structelfHeader.html">elfHeader</a>          *binaryHeader  = 0x0;
<a name="l00567"></a>00567   <a class="code" href="structelfProgramHeader.html">elfProgramHeader</a>   *programHeader = 0x0;
<a name="l00568"></a>00568   <span class="keyword">struct </span><a class="code" href="structi386__frame.html">i386_frame</a>  *iFrame        = 0x0;
<a name="l00569"></a>00569   <a class="code" href="structElf__Auxargs.html">Elf_Auxargs</a>        *auxargs       = 0x0;
<a name="l00570"></a>00570 
<a name="l00571"></a>00571   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a> = <a class="code" href="file_8h.html#d6a41ac88a7d46d574e8a675fdde136c">fopen</a>(file,<span class="stringliteral">"r"</span>);
<a name="l00572"></a>00572   <span class="keywordflow">if</span> (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a> == 0x0)
<a name="l00573"></a>00573     <span class="keywordflow">return</span>(-1);
<a name="l00574"></a>00574 
<a name="l00575"></a>00575   <span class="comment">/* Load the ELF header */</span>
<a name="l00576"></a>00576   <span class="keywordflow">if</span> ((binaryHeader = (<a class="code" href="structelfHeader.html">elfHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfHeader.html">elfHeader</a>))) == 0x0) 
<a name="l00577"></a>00577     <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"malloc failed!"</span>);
<a name="l00578"></a>00578   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(binaryHeader,<span class="keyword">sizeof</span>(elfHeader),1,<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>);
<a name="l00579"></a>00579 
<a name="l00580"></a>00580   <span class="comment">/* Check If App Is A Real Application */</span>
<a name="l00581"></a>00581   <span class="keywordflow">if</span> (((binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[1] != <span class="charliteral">'E'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[2] != <span class="charliteral">'L'</span>) &amp;&amp; (binaryHeader-&gt;<a class="code" href="structelfHeader.html#ec74b71d266bdbfaed95a9241343c28c">eIdent</a>[3] != <span class="charliteral">'F'</span>)) || (binaryHeader-&gt;<a class="code" href="structelfHeader.html#34e52f945d79cca21dc50a8aef79f9e8">eType</a> != <a class="code" href="elf_8h.html#942478985eb016311380dee473cc8c3e">ET_EXEC</a>)) {
<a name="l00582"></a>00582     <a class="code" href="kmalloc_8h.html#aa9ed6886459604cf73ccdbf6410e487">kfree</a>(binaryHeader);
<a name="l00583"></a>00583     <a class="code" href="file_8h.html#872c22366b4c63f4bdb10cd3b7980b11">fclose</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>);
<a name="l00584"></a>00584     <span class="keywordflow">return</span>(-1);
<a name="l00585"></a>00585     }
<a name="l00586"></a>00586 
<a name="l00587"></a>00587   <span class="comment">/* Load The Program Header(s) */</span>
<a name="l00588"></a>00588   <span class="keywordflow">if</span> ((programHeader = (<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structelfProgramHeader.html">elfProgramHeader</a>)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>)) == 0x0)
<a name="l00589"></a>00589     <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"malloc failed!"</span>);
<a name="l00590"></a>00590   <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>,binaryHeader-&gt;<a class="code" href="structelfHeader.html#aff1ff2cb64932f1e1a1f6cf3b881787">ePhoff</a>,0);
<a name="l00591"></a>00591   <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>(programHeader,(<span class="keyword">sizeof</span>(elfProgramHeader)*binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>),1,<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>);
<a name="l00592"></a>00592 
<a name="l00593"></a>00593   <span class="comment">/* Loop Through The Header And Load Sections Which Need To Be Loaded */</span>
<a name="l00594"></a>00594   <span class="keywordflow">for</span> (i = 0x0;i &lt; binaryHeader-&gt;<a class="code" href="structelfHeader.html#4635401868104caa04fcb5bb60840df6">ePhnum</a>;i++) {
<a name="l00595"></a>00595     <span class="keywordflow">switch</span> (programHeader[i].phType) {
<a name="l00596"></a>00596       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#84d7768fd6c6ece599d297090900cf92">PT_LOAD</a>:
<a name="l00597"></a>00597         seg_addr = <a class="code" href="paging_8h.html#bd636a9b61ad98f4fc23b1f4a9210d78">trunc_page</a>(programHeader[i].phVaddr);
<a name="l00598"></a>00598         seg_size = <a class="code" href="paging_8h.html#2702263fcf2b3b026cb26c6d895cb0ee">round_page</a>(programHeader[i].phMemsz + programHeader[i].phVaddr - seg_addr);
<a name="l00599"></a>00599 
<a name="l00600"></a>00600         <span class="comment">/*</span>
<a name="l00601"></a>00601 <span class="comment">        Allocate Memory Im Going To Have To Make This Load Memory With Correct</span>
<a name="l00602"></a>00602 <span class="comment">        Settings so it helps us in the future</span>
<a name="l00603"></a>00603 <span class="comment">        */</span>
<a name="l00604"></a>00604         <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00605"></a>00605           <span class="comment">/* Make readonly and read/write !!! */</span>
<a name="l00606"></a>00606           <span class="keywordflow">if</span> (<a class="code" href="paging_8h.html#a05f8d8947fb5bcec87fc6661f83243e">vmm_remapPage</a>(<a class="code" href="vmm_8h.html#976cf3919bf7c77c868021ec9374593b">vmmFindFreePage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>),((programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp; 0xFFFFF000) + x),<a class="code" href="paging_8h.html#f0fff7a38cd2c7a32d580787423b94ea">PAGE_DEFAULT</a>) == 0x0)
<a name="l00607"></a>00607             <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"Error: Remap Page Failed"</span>);
<a name="l00608"></a>00608           <a class="code" href="lib_2string_8h.html#ce4b911463887af5e748326323e99a23">memset</a>((<span class="keywordtype">void</span> *)((programHeader[i].phVaddr &amp; 0xFFFFF000) + x),0x0,0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>);
<a name="l00609"></a>00609           }
<a name="l00610"></a>00610 
<a name="l00611"></a>00611         <span class="comment">/* Now Load Section To Memory */</span>
<a name="l00612"></a>00612         <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>,programHeader[i].<a class="code" href="structelfProgramHeader.html#93a7c0296fe86a429cf58989956d28ff">phOffset</a>,0);
<a name="l00613"></a>00613         <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)programHeader[i].phVaddr,programHeader[i].phFilesz,1,<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>);
<a name="l00614"></a>00614         <span class="keywordflow">if</span> ((programHeader[i].phFlags &amp; 0x2) != 0x2) {
<a name="l00615"></a>00615           <span class="keywordflow">for</span> (x = 0x0;x &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>);x += 0x1000) {
<a name="l00616"></a>00616             <span class="keywordflow">if</span> ((<a class="code" href="paging_8h.html#1913e8607a69ecf446b18fa1cd36c9cc">vmm_setPageAttributes</a>((programHeader[i].phVaddr &amp; 0xFFFFF000) + x,<a class="code" href="paging_8h.html#122dfc414a40e260fd35dbe9743db26f">PAGE_PRESENT</a> | <a class="code" href="paging_8h.html#2d0253527ea5080d6befe0ee3bde473f">PAGE_USER</a>)) != 0x0)
<a name="l00617"></a>00617               <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"vmm_setPageAttributes failed"</span>);
<a name="l00618"></a>00618             }
<a name="l00619"></a>00619           }
<a name="l00620"></a>00620         <span class="keywordflow">if</span> (binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> &gt;= programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp;&amp; binaryHeader-&gt;<a class="code" href="structelfHeader.html#8ff3dd1b27053bc5a2f01afe5403e53b">eEntry</a> &lt; (programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> + programHeader[i].<a class="code" href="structelfProgramHeader.html#b5a140ab0f0225a8459f88d905995dd0">phMemsz</a>)) {
<a name="l00621"></a>00621           <span class="comment">/* We're suposed to do something here? */</span>
<a name="l00622"></a>00622           }
<a name="l00623"></a>00623         <span class="keywordflow">else</span> {
<a name="l00624"></a>00624           <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> = seg_size &gt;&gt; <a class="code" href="paging_8h.html#850d80ca2291d26b40dc6b25c419f81a">PAGE_SHIFT</a>;
<a name="l00625"></a>00625           <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)seg_addr;
<a name="l00626"></a>00626           }
<a name="l00627"></a>00627 
<a name="l00628"></a>00628         <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#0933c70230d4ac8bc9953640c979f8d7">oInfo</a>.<a class="code" href="structosInfo.html#2833c1fa4a221941b5d1141dfa5beefd">vmStart</a> = ((programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a> &amp; 0xFFFFF000) + 0xA900000);
<a name="l00629"></a>00629         <span class="keywordflow">break</span>;
<a name="l00630"></a>00630       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#bcd3aa15bc567949c1ab6b1abc137710">PT_INTERP</a>:
<a name="l00631"></a>00631         interp = (<span class="keywordtype">char</span> *)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(programHeader[i].phFilesz);
<a name="l00632"></a>00632         <span class="keywordflow">if</span> (interp == 0x0)
<a name="l00633"></a>00633           <a class="code" href="kpanic_8h.html#a5193288597f00c4f8e3b2939aa6c0ce">K_PANIC</a>(<span class="stringliteral">"malloc failed"</span>);
<a name="l00634"></a>00634 
<a name="l00635"></a>00635         <a class="code" href="file_8h.html#80528d8335cd52755f5d6a92e4f08391">fseek</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>,programHeader[i].<a class="code" href="structelfProgramHeader.html#93a7c0296fe86a429cf58989956d28ff">phOffset</a>,0);
<a name="l00636"></a>00636         <a class="code" href="file_8h.html#3b06878a03209e88c008c77234b89359">fread</a>((<span class="keywordtype">void</span> *)interp,programHeader[i].phFilesz,1,<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#7930577bf37a9eb337761a9374def70e">imageFd</a>);
<a name="l00637"></a>00637         <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"Interp: [%s]\n"</span>,interp);
<a name="l00638"></a>00638         <span class="comment">//ldAddr = ldEnable();</span>
<a name="l00639"></a>00639         <span class="keywordflow">break</span>;
<a name="l00640"></a>00640       <span class="keywordflow">case</span> <a class="code" href="elf_8h.html#58ff00be749ca4000074f9b9066a1056">PT_PHDR</a>:
<a name="l00641"></a>00641         proghdr = programHeader[i].<a class="code" href="structelfProgramHeader.html#14f11176e999131fb9be875aeb500447">phVaddr</a>; 
<a name="l00642"></a>00642         <span class="keywordflow">break</span>;
<a name="l00643"></a>00643       <span class="keywordflow">default</span>:
<a name="l00644"></a>00644         <span class="keywordflow">break</span>;
<a name="l00645"></a>00645       }
<a name="l00646"></a>00646     }
<a name="l00647"></a>00647 
<a name="l00648"></a>00648   addr = <a class="code" href="kmod_8h.html#f4d6f389174a00e0de80e1ea0e23e956">LD_START</a>;
<a name="l00649"></a>00649 
<a name="l00650"></a>00650 
<a name="l00651"></a>00651   <span class="keywordflow">if</span> (interp != 0x0) {
<a name="l00652"></a>00652     <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"TEST"</span>);
<a name="l00653"></a>00653     <a class="code" href="elf_8h.html#f11ec9e50bcff723428b0c911a177fd0">elf_loadfile</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>,interp,&amp;addr,&amp;<a class="code" href="structi386__frame.html#ef87f1d1d6f1ad030c95773e7eedfa16">eip</a>);
<a name="l00654"></a>00654     }
<a name="l00655"></a>00655   <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"[0x%X][0x%X]\n"</span>,<a class="code" href="structi386__frame.html#ef87f1d1d6f1ad030c95773e7eedfa16">eip</a>,addr);
<a name="l00656"></a>00656 
<a name="l00657"></a>00657   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> = seg_size &gt;&gt; <a class="code" href="paging_8h.html#850d80ca2291d26b40dc6b25c419f81a">PAGE_SHIFT</a>;
<a name="l00658"></a>00658   <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> = (<span class="keywordtype">char</span> *)seg_addr;
<a name="l00659"></a>00659 
<a name="l00660"></a>00660   argv = ap;
<a name="l00661"></a>00661 
<a name="l00662"></a>00662   <span class="keywordflow">if</span> (argv[1] != 0x0) {
<a name="l00663"></a>00663     argc = argv[0];
<a name="l00664"></a>00664     args = (<span class="keywordtype">char</span> *)<a class="code" href="paging_8h.html#4b324672c4b25064eb8db1e3419337b1">vmmGetFreeVirtualPage</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#30966587a60db6b40c8be6c387e11d81">id</a>,1,<a class="code" href="paging_8h.html#59a518704bf2f0b56603476bcb1eebbf">VM_TASK</a>);
<a name="l00665"></a>00665     <a class="code" href="lib_2string_8h.html#ce4b911463887af5e748326323e99a23">memset</a>(args,0x0,0<a class="code" href="ap-boot_8S.html#f78b91f02427adef14bb8b28aa93baa5">x1000</a>);
<a name="l00666"></a>00666     x = 0x0;
<a name="l00667"></a>00667     argvNew = (<span class="keywordtype">char</span> **)<a class="code" href="kmalloc_8h.html#150eab2ac4ce4553e21ca10e7f441762">kmalloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *) * argc);
<a name="l00668"></a>00668     <span class="keywordflow">for</span> (i = 0x0;i &lt; argc;i++) {
<a name="l00669"></a>00669       <a class="code" href="strcpy_8S.html#9132520cc79236b654666f4ddc1b516c">strcpy</a>(args + x,argv[i + 1]);
<a name="l00670"></a>00670       argvNew[i] = args + x;
<a name="l00671"></a>00671       x += <a class="code" href="strlen_8S.html#0bcafbeba7f59f157715cc462036b8d3">strlen</a>(argv[i + 1]) + 1;
<a name="l00672"></a>00672       }
<a name="l00673"></a>00673     argv = argvNew;
<a name="l00674"></a>00674     }
<a name="l00675"></a>00675 
<a name="l00677"></a>00677   <a class="code" href="paging_8c.html#0444c8635648fabdbd6e702137aa1723">vmm_cleanVirtualSpace</a>(<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#c770300b493b2ea844e634b7c98c4f6a">vm_daddr</a> + (<a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#481c2e7084fec272e616d3fb984036e2">td</a>.<a class="code" href="structthread.html#4ce0e0e5856efc85e111d2cb8748a0ee">vm_dsize</a> &lt;&lt; <a class="code" href="paging_8h.html#7d467c1d283fdfa1f2081ba1e0d01b6e">PAGE_SIZE</a>));
<a name="l00678"></a>00678 
<a name="l00679"></a>00679 
<a name="l00681"></a>00681   iFrame = <a class="code" href="sched_8h.html#54397bfe18d5da4d50ff03b15f540858">_current</a>-&gt;<a class="code" href="structtaskStruct.html#4c8accd7c0d5bb5ce426dc982bfc8519">tss</a>.<a class="code" href="structtssStruct.html#1017372aed82d7305586c330fa222b3b">esp0</a> - <span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structi386__frame.html">i386_frame</a>);
<a name="l00682"></a>00682   iFrame-&gt;ebp = <a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a>;
<a name="l00683"></a>00683   iFrame-&gt;eip = <a class="code" href="structi386__frame.html#ef87f1d1d6f1ad030c95773e7eedfa16">eip</a>;
<a name="l00684"></a>00684 
<a name="l00685"></a>00685   <span class="comment">//if (_current-&gt;id &gt; 3) {</span>
<a name="l00686"></a>00686 
<a name="l00687"></a>00687   iFrame-&gt;user_esp = ((<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>)<a class="code" href="exec_8c.html#d93dccba62fb5241c0b7cebcd097794a">STACK_ADDR</a>) - (<span class="keyword">sizeof</span>(<a class="code" href="types_8h.html#ba29fd78d95cce0ecb249c24b58d07da">u_int32_t</a>) * (argc + 3 + <span class="keyword">sizeof</span>(<a class="code" href="structElf__Auxargs.html">Elf_Auxargs</a>)));
<a name="l00688"></a>00688   args = iFrame-&gt;user_esp;
<a name="l00689"></a>00689 
<a name="l00691"></a>00691   args[0] = argc;
<a name="l00692"></a>00692   <span class="keywordflow">for</span> (i = 0;i &lt; argc;i++) {
<a name="l00693"></a>00693     args[i + 1] = argv[i];
<a name="l00694"></a>00694     }
<a name="l00696"></a>00696   args[argc + 2] = 0x0;
<a name="l00697"></a>00697   auxargs = iFrame-&gt;user_esp + argc +  2;
<a name="l00698"></a>00698   auxargs-&gt;execfd = -1;
<a name="l00699"></a>00699   auxargs-&gt;phdr   = proghdr;
<a name="l00700"></a>00700   auxargs-&gt;phent  = binaryHeader-&gt;ePhentsize;
<a name="l00701"></a>00701   auxargs-&gt;phnum  = binaryHeader-&gt;ePhnum;
<a name="l00702"></a>00702   auxargs-&gt;pagesz = <a class="code" href="paging_8h.html#7d467c1d283fdfa1f2081ba1e0d01b6e">PAGE_SIZE</a>;
<a name="l00703"></a>00703   auxargs-&gt;base   = addr;
<a name="l00704"></a>00704   auxargs-&gt;flags  = 0x0;
<a name="l00705"></a>00705   auxargs-&gt;entry  = binaryHeader-&gt;eEntry;
<a name="l00706"></a>00706   auxargs-&gt;trace  = 0x0;
<a name="l00707"></a>00707 <a class="code" href="kprint_8h.html#b2761bdf0cca73ad0fb5880895210cd8">kprintf</a>(<span class="stringliteral">"\n\nDOH\n\n"</span>);
<a name="l00708"></a>00708 
<a name="l00709"></a>00709  <span class="comment">//while (1);</span>
<a name="l00710"></a>00710 <span class="comment">/*</span>
<a name="l00711"></a>00711 <span class="comment">  error = elf_loadfile(_current,file,0x0,0x0);</span>
<a name="l00712"></a>00712 <span class="comment">  if (error)</span>
<a name="l00713"></a>00713 <span class="comment">    K_PANIC("elf_loadfile failed");</span>
<a name="l00714"></a>00714 <span class="comment">*/</span>
<a name="l00715"></a>00715   <span class="keywordflow">return</span>;
<a name="l00716"></a>00716   }
<a name="l00717"></a>00717 
<a name="l00718"></a>00718 <span class="comment">/***</span>
<a name="l00719"></a>00719 <span class="comment"> END</span>
<a name="l00720"></a>00720 <span class="comment"> ***/</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Dec 15 11:18:55 2006 for UbixOS V2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>