<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi,
<div><br class="webkit-block-placeholder"></div><div>I wonder how the KernelInterface syscall actually works for ia32.</div><div><br class="webkit-block-placeholder"></div><div>In arch/ia32/libs/l4/include/syscall.h the KernelInterface syscall stub is implemented as:</div><div><br class="webkit-block-placeholder"></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco">INLINE </font><font face="Monaco" size="2" color="#1315e8" style="font: 10.0px Monaco; color: #1315e8">void</font><font face="Monaco" size="2" style="font: 10.0px Monaco"> *</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco">L4_KernelInterface(L4_Word_t *ApiVersion,</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> L4_Word_t *ApiFlags, L4_Word_t *KernelId)</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco">{</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#1315e8" style="font: 10.0px Monaco; color: #1315e8">void</font><font face="Monaco" size="2" style="font: 10.0px Monaco"> *base_address;</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#1315e8" style="font: 10.0px Monaco; color: #1315e8">__asm__</font><font face="Monaco" size="2" style="font: 10.0px Monaco"> __volatile__(</font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">"/* L4_KernelInterface() */ \n"</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">" lock; nop \n"</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> : </font><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800">/* outputs */</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">"=a"</font><font face="Monaco" size="2" style="font: 10.0px Monaco">(base_address),</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">"=c"</font><font face="Monaco" size="2" style="font: 10.0px Monaco">(*ApiVersion), </font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">"=d"</font><font face="Monaco" size="2" style="font: 10.0px Monaco">(*ApiFlags), </font><font face="Monaco" size="2" color="#891315" style="font: 10.0px Monaco; color: #891315">"=S"</font><font face="Monaco" size="2" style="font: 10.0px Monaco">(*KernelId)</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800">/*</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800"> * no inputs</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800"> */</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800">/*</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800"> * no clobbers</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" color="#93a800" style="font: 10.0px Monaco; color: #93a800"> */</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> );</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco"> </font><font face="Monaco" size="2" color="#1315e8" style="font: 10.0px Monaco; color: #1315e8">return</font><font face="Monaco" size="2" style="font: 10.0px Monaco"> base_address;</font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Monaco" size="2" style="font: 10.0px Monaco">}</font></div></div><div><br class="webkit-block-placeholder"></div><div>This looks like a 'nop' instruction is doing the work, which can't be true because a 'nop' does nothing...</div><div>So how do those output registers get their values?</div><div><br class="webkit-block-placeholder"></div><div>Btw: is there an ABI doc anywhere for OKL4 on ia32? The progmanual only includes the ABI for ARM...</div><div><br></div><div>Regards,</div><div><br class="webkit-block-placeholder"></div><div>Harry</div></body></html>