diff options
Diffstat (limited to 'ref/Hosted_GCC_Cross-Compiler.html')
| -rw-r--r-- | ref/Hosted_GCC_Cross-Compiler.html | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/ref/Hosted_GCC_Cross-Compiler.html b/ref/Hosted_GCC_Cross-Compiler.html new file mode 100644 index 0000000..c3a0555 --- /dev/null +++ b/ref/Hosted_GCC_Cross-Compiler.html @@ -0,0 +1,408 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr" class="client-nojs"> +<head> +<title>Hosted GCC Cross-Compiler - OSDev Wiki</title> +<meta charset="UTF-8" /> +<meta name="generator" content="MediaWiki 1.18.0" /> +<link rel="shortcut icon" href="/favicon.ico" /> +<link rel="search" type="application/opensearchdescription+xml" href="/opensearch_desc.php" title="OSDev Wiki (en)" /> +<link rel="EditURI" type="application/rsd+xml" href="https://wiki.osdev.org/api.php?action=rsd" /> +<link rel="alternate" type="application/atom+xml" title="OSDev Wiki Atom feed" href="/index.php?title=Special:RecentChanges&feed=atom" /> +<link rel="stylesheet" href="/load.php?debug=false&lang=en&modules=mediawiki.legacy.commonPrint%2Cshared%7Cskins.vector&only=styles&skin=vector&*" /> +<meta name="ResourceLoaderDynamicStyles" content="" /> +<link rel="stylesheet" href="/load.php?debug=false&lang=en&modules=site&only=styles&skin=vector&*" /> +<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}a.new,#quickbar a.new{color:#ba0000} + +/* cache key: wikidb:resourceloader:filter:minify-css:4:c88e2bcd56513749bec09a7e29cb3ffa */ +</style> +<script src="/load.php?debug=false&lang=en&modules=startup&only=scripts&skin=vector&*"></script> +<script>if(window.mw){ + mw.config.set({"wgCanonicalNamespace": "", "wgCanonicalSpecialPageName": false, "wgNamespaceNumber": 0, "wgPageName": "Hosted_GCC_Cross-Compiler", "wgTitle": "Hosted GCC Cross-Compiler", "wgCurRevisionId": 22405, "wgArticleId": 3637, "wgIsArticle": true, "wgAction": "view", "wgUserName": null, "wgUserGroups": ["*"], "wgCategories": ["Level 3 Tutorials", "Compilers", "Tutorials"], "wgBreakFrames": false, "wgRestrictionEdit": [], "wgRestrictionMove": []}); +} +</script><script>if(window.mw){ + mw.loader.load(["mediawiki.page.startup"]); +} +</script> +<style type="text/css">/*<![CDATA[*/ +.source-bash {line-height: normal;} +.source-bash li, .source-bash pre { + line-height: normal; border: 0px none white; +} +/** + * GeSHi Dynamically Generated Stylesheet + * -------------------------------------- + * Dynamically generated stylesheet for bash + * CSS class: source-bash, CSS id: + * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann + * (http://qbnz.com/highlighter/ and http://geshi.org/) + * -------------------------------------- + */ +.bash.source-bash .de1, .bash.source-bash .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} +.bash.source-bash {font-family:monospace;} +.bash.source-bash .imp {font-weight: bold; color: red;} +.bash.source-bash li, .bash.source-bash .li1 {font-weight: normal; vertical-align:top;} +.bash.source-bash .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} +.bash.source-bash .li2 {font-weight: bold; vertical-align:top;} +.bash.source-bash .kw1 {color: #000000; font-weight: bold;} +.bash.source-bash .kw2 {color: #c20cb9; font-weight: bold;} +.bash.source-bash .kw3 {color: #7a0874; font-weight: bold;} +.bash.source-bash .co0 {color: #666666; font-style: italic;} +.bash.source-bash .co1 {color: #800000;} +.bash.source-bash .co2 {color: #cc0000; font-style: italic;} +.bash.source-bash .co3 {color: #000000; font-weight: bold;} +.bash.source-bash .co4 {color: #666666;} +.bash.source-bash .es1 {color: #000099; font-weight: bold;} +.bash.source-bash .es2 {color: #007800;} +.bash.source-bash .es3 {color: #007800;} +.bash.source-bash .es4 {color: #007800;} +.bash.source-bash .es5 {color: #780078;} +.bash.source-bash .es_h {color: #000099; font-weight: bold;} +.bash.source-bash .br0 {color: #7a0874; font-weight: bold;} +.bash.source-bash .sy0 {color: #000000; font-weight: bold;} +.bash.source-bash .st0 {color: #ff0000;} +.bash.source-bash .st_h {color: #ff0000;} +.bash.source-bash .nu0 {color: #000000;} +.bash.source-bash .re0 {color: #007800;} +.bash.source-bash .re1 {color: #007800;} +.bash.source-bash .re2 {color: #007800;} +.bash.source-bash .re4 {color: #007800;} +.bash.source-bash .re5 {color: #660033;} +.bash.source-bash .ln-xtra, .bash.source-bash li.ln-xtra, .bash.source-bash div.ln-xtra {background-color: #ffc;} +.bash.source-bash span.xtra { display:block; } + +/*]]>*/ +</style> +<style type="text/css">/*<![CDATA[*/ +@import "/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000"; +/*]]>*/ +</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/skins/vector/csshover.min.htc")}</style><![endif]--></head> +<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-Hosted_GCC_Cross-Compiler action-view skin-vector"> + <div id="mw-page-base" class="noprint"></div> + <div id="mw-head-base" class="noprint"></div> + <!-- content --> + <div id="content"> + <a id="top"></a> + <div id="mw-js-message" style="display:none;"></div> + <!-- firstHeading --> + <h1 id="firstHeading" class="firstHeading">Hosted GCC Cross-Compiler</h1> + <!-- /firstHeading --> + <!-- bodyContent --> + <div id="bodyContent"> + <!-- tagline --> + <div id="siteSub">From OSDev Wiki</div> + <!-- /tagline --> + <!-- subtitle --> + <div id="contentSub"></div> + <!-- /subtitle --> + <!-- jumpto --> + <div id="jump-to-nav"> + Jump to: <a href="#mw-head">navigation</a>, + <a href="#p-search">search</a> + </div> + <!-- /jumpto --> + <!-- bodycontent --> + <div lang="en" dir="ltr" class="mw-content-ltr"><table style="font-size:95%; line-height:1.5em; padding:0.25em; float:right; margin: 0 0 8px 15px; clear:right; border:1px solid #aaaaaa; background:#eee; text-align:center;;"><tr><th>Difficulty level</th></tr><tr><td><a href="/File:Difficulty_3.png" class="image"><img alt="Difficulty 3.png" src="/images/c/c1/Difficulty_3.png" width="46" height="14" /></a><br />Advanced</td></tr></table> +<p>In this tutorial we create a cross-compiler that provides a hosted environment (user-space, libc, all that good stuff) as opposed to the initial <a href="/GCC_Cross-Compiler" title="GCC Cross-Compiler">GCC Cross-Compiler</a> that only provides a freestanding environment. This is an advanced topic meant for established developers, newcomers should start with a <a href="/GCC_Cross-Compiler" title="GCC Cross-Compiler">freestanding cross-compiler</a>. The <tt>-elf</tt> targets are incapable of having a user-space, so you need to make a <a href="/OS_Specific_Toolchain" title="OS Specific Toolchain">OS Specific Toolchain</a> before following this tutorial. You also need a <a href="/C_Library" title="C Library">C Library</a>, perhaps a <a href="/Creating_a_C_Library" title="Creating a C Library">homemade one</a>. +</p> +<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div> +<ul> +<li class="toclevel-1 tocsection-1"><a href="#Introduction"><span class="tocnumber">1</span> <span class="toctext">Introduction</span></a></li> +<li class="toclevel-1 tocsection-2"><a href="#Prerequisites"><span class="tocnumber">2</span> <span class="toctext">Prerequisites</span></a></li> +<li class="toclevel-1 tocsection-3"><a href="#Sysroot_Headers"><span class="tocnumber">3</span> <span class="toctext">Sysroot Headers</span></a></li> +<li class="toclevel-1 tocsection-4"><a href="#Binutils"><span class="tocnumber">4</span> <span class="toctext">Binutils</span></a></li> +<li class="toclevel-1 tocsection-5"><a href="#GCC"><span class="tocnumber">5</span> <span class="toctext">GCC</span></a></li> +<li class="toclevel-1 tocsection-6"><a href="#libc"><span class="tocnumber">6</span> <span class="toctext">libc</span></a></li> +<li class="toclevel-1 tocsection-7"><a href="#libstdc.2B.2B"><span class="tocnumber">7</span> <span class="toctext">libstdc++</span></a> +<ul> +<li class="toclevel-2 tocsection-8"><a href="#Troubleshooting"><span class="tocnumber">7.1</span> <span class="toctext">Troubleshooting</span></a></li> +</ul> +</li> +<li class="toclevel-1 tocsection-9"><a href="#Conclusion"><span class="tocnumber">8</span> <span class="toctext">Conclusion</span></a></li> +<li class="toclevel-1 tocsection-10"><a href="#See_Also"><span class="tocnumber">9</span> <span class="toctext">See Also</span></a> +<ul> +<li class="toclevel-2 tocsection-11"><a href="#Articles"><span class="tocnumber">9.1</span> <span class="toctext">Articles</span></a></li> +</ul> +</li> +</ul> +</td></tr></table> +<h2> <span class="mw-headline" id="Introduction"> Introduction </span></h2> +<p>This tutorial acts as a patch to the original <a href="/GCC_Cross-Compiler" title="GCC Cross-Compiler">GCC Cross-Compiler</a> article by subtly changing the instructions. The caveats and instructions from it generally apply here, too. You are assumed to be an experienced reader that automatically remembers trivial matters such as adding the cross-compiler prefix bindir to the <tt>PATH</tt> before building the cross-compiler, or installing the dependencies of Binutils and GCC. +</p><p>This article completes the work begun in <a href="/OS_Specific_Toolchain" title="OS Specific Toolchain">OS Specific Toolchain</a> by compiling it, thus implementing the next step in <a href="/Porting_GCC_to_your_OS" title="Porting GCC to your OS">Porting GCC to your OS</a>: Teaching GCC what your operating system is and making a cross-compiler for it. +</p><p>You will be using a new <a href="/Target_Triplet" title="Target Triplet">target triplet</a>, rather than <tt>i686-elf</tt>, we'll be using your custom <tt>i686-myos</tt> target. You will be supplying the Binutils and GCC source code yourself rather than using pure upstream releases. +</p> +<h2> <span class="mw-headline" id="Prerequisites"> Prerequisites </span></h2> +<p>To correctly complete this tutorial, your libc must need particular minimum requirements. The libgcc will be built with libc support, meaning that your libc needs a few standard headers that define particular types, constants and functions. In particular, you need to supply: +</p> +<ul><li> <tt>sys/types.h</tt>: This header is just required to exist and can be empty. +</li><li> <tt>errno.h</tt>: This header is just required to exist and can be empty. +</li><li> <tt>stdlib.h</tt>: <tt>abort()</tt>, <tt>free()</tt>, <tt>malloc()</tt>. +</li><li> <tt>stdio.h</tt>: <tt>FILE</tt>, <tt>stderr</tt>, <tt>fflush()</tt>, <tt>fprintf()</tt>. +</li><li> <tt>string.h</tt>: <tt>size_t</tt>, <tt>memcpy</tt>, <tt>memset()</tt>, <tt>strlen()</tt>. +</li><li> <tt>time.h</tt>: This header is just required to exist and can be empty. +</li><li> <tt>unistd.h</tt>: This header is just required to exist and can be empty. +</li></ul> +<p>Additionally, the <tt>all-target-libgcc</tt> target also unconditionally builds the libgcov support library, which has these additional requirements: +</p> +<ul><li> <tt>sys/types.h</tt>: <tt>pid_t</tt>. +</li><li> <tt>stdlib.h</tt>: <tt>atexit()</tt>, <tt>atoi()</tt>, <tt>getenv()</tt>. +</li><li> <tt>stdio.h</tt>: <tt>size_t</tt>, <tt>SEEK_SET</tt>, <tt>fclose()</tt>, <tt>fopen()</tt>, <tt>fread()</tt>, <tt>fseek()</tt>, <tt>ftell()</tt>, <tt>fwrite()</tt>, <tt>setbuf()</tt>, <tt>vfprintf()</tt>. +</li><li> <tt>string.h</tt>: <tt>strcpy()</tt>. +</li><li> <tt>unistd.h</tt>: <tt>pid_t</tt>, <tt>fork()</tt>, <tt>execv()</tt>, <tt>execve()</tt>, <tt>execvp()</tt>. +</li></ul> +<p>Note how these are statically linked libraries and are not linked. It will do to simply add function prototypes with no implementation (or better yet, a stub implementation, or a real one) and no linker errors will happen unless the relevant parts of libgcc or libgcov are needed. Note how these are just the minimum requirements to get by without any implicit-function-declaration issues; the code is able to use more standard library features if available. +</p><p>For the record and convenience, <a rel="nofollow" class="external text" href="https://gist.github.com/sortie/9a64aa532052e2137f05f5324a75b474">here are minimal headers</a> that satisfies the requirements. +</p> +<h2> <span class="mw-headline" id="Sysroot_Headers"> Sysroot Headers </span></h2> +<p>Your previous <tt>i686-elf</tt> toolchain was built using the <tt>--without-headers</tt> configure option. This tells the compiler that there is no standard library and no headers. The libgcc is built with libc support as described above. This requires the standard library headers to be installed into your <a href="/Meaty_Skeleton#System_Root" title="Meaty Skeleton">system root</a> prior to the cross-compiler build. +</p> +<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="bash source-bash"><pre class="de1"><span class="kw3">cd</span> <span class="re1">$HOME</span><span class="sy0">/</span>myos +<span class="kw2">mkdir</span> <span class="re5">-p</span> sysroot +<span class="kw2">mkdir</span> <span class="re5">-p</span> sysroot<span class="sy0">/</span>usr<span class="sy0">/</span>include +<span class="kw2">cp</span> <span class="re5">-RT</span> libc<span class="sy0">/</span>include sysroot<span class="sy0">/</span>usr<span class="sy0">/</span>include +<span class="kw2">cp</span> <span class="re5">-RT</span> kernel<span class="sy0">/</span>include sysroot<span class="sy0">/</span>usr<span class="sy0">/</span>include</pre></div></div> +<p><b>Note</b>: Not all <tt>cp(1)</tt> implementations support the <tt>-RT</tt> combination that conveniently merges the contents of one directory into another. +</p> +<h2> <span class="mw-headline" id="Binutils"> Binutils </span></h2> +<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="bash source-bash"><pre class="de1"><span class="kw3">cd</span> <span class="re1">$HOME</span><span class="sy0">/</span>src +<span class="kw2">mkdir</span> build-binutils +<span class="kw3">cd</span> build-binutils +..<span class="sy0">/</span>myos-binutils<span class="sy0">/</span>configure <span class="re5">--target</span>=i686-myos <span class="re5">--prefix</span>=<span class="st0">"<span class="es2">$PREFIX</span>"</span> <span class="re5">--with-sysroot</span>=<span class="re1">$HOME</span><span class="sy0">/</span>myos<span class="sy0">/</span>sysroot <span class="re5">--disable-werror</span> +<span class="kw2">make</span> +<span class="kw2">make</span> <span class="kw2">install</span></pre></div></div> +<p><b>--with-sysroot=</b> This option tells the compiler where your sysroot is. It is not used during the compilation process, but it is remembered and used when the linker searches for libraries. +</p> +<h2> <span class="mw-headline" id="GCC"> GCC </span></h2> +<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="bash source-bash"><pre class="de1"><span class="kw3">cd</span> <span class="re1">$HOME</span><span class="sy0">/</span>src +<span class="kw2">mkdir</span> build-gcc +<span class="kw3">cd</span> build-gcc +..<span class="sy0">/</span>myos-gcc<span class="sy0">/</span>configure <span class="re5">--target</span>=i686-myos <span class="re5">--prefix</span>=<span class="st0">"<span class="es2">$PREFIX</span>"</span> <span class="re5">--with-sysroot</span>=<span class="re1">$HOME</span><span class="sy0">/</span>myos<span class="sy0">/</span>sysroot <span class="re5">--enable-languages</span>=c,<span class="kw2">c++</span> +<span class="kw2">make</span> all-gcc all-target-libgcc +<span class="kw2">make</span> install-gcc install-target-libgcc</pre></div></div> +<p><b>--with-sysroot=</b> This option tells the compiler where your sysroot is. It is used during the libgcc build and is remembered and used when the compiler searches for headers and libraries. +</p> +<h2> <span class="mw-headline" id="libc"> libc </span></h2> +<p>You can now compile your <a href="/C_Library" title="C Library">C Library</a> normally using your fresh, custom cross-compiler. +</p> +<h2> <span class="mw-headline" id="libstdc.2B.2B"> libstdc++ </span></h2> +<p>The libstdc++ library was still not built above as it depends on libc as it needs to perform link tests to know about it. The GCC developers have poorly designed the libstdc++ package and it is tied to GCC and must be built as part of GCC, it can't be built on its own without tricks. If you saved your build-gcc directory from earlier, you can continue the process now (otherwise, it will build a full new cross-compiler for no good reason): +</p> +<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="bash source-bash"><pre class="de1"><span class="kw3">cd</span> <span class="re1">$HOME</span><span class="sy0">/</span>src<span class="sy0">/</span>build-gcc +<span class="kw2">make</span> all-target-libstdc++-v3 +<span class="kw2">make</span> install-target-libstdc++-v3</pre></div></div> +<h3> <span class="mw-headline" id="Troubleshooting"> Troubleshooting </span></h3> +<p>In case you get an this error (occurs when using newlib): +</p> +<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="bash source-bash"><pre class="de1">.<span class="sy0">/</span>..<span class="sy0">/</span>..<span class="sy0">/</span>..<span class="sy0">/</span>gcc-7.2.0<span class="sy0">/</span>libstdc++-v3<span class="sy0">/</span>libsupc++<span class="sy0">/</span>new_opa.cc:<span class="nu0">62</span>:<span class="nu0">1</span>: error: ‘void<span class="sy0">*</span> aligned_alloc<span class="br0">(</span>std::size_t, std::size_t<span class="br0">)</span>’ was declared ‘extern’ and later ‘static’ <span class="br0">[</span>-fpermissive<span class="br0">]</span> + aligned_alloc <span class="br0">(</span>std::size_t al, std::size_t sz<span class="br0">)</span></pre></div></div> +<p>Open the file <b>libstdc++-v3/libsupc++/new_opa.cc</b> with an editor and remove the "static inline" before in the function prototype. +</p> +<h2> <span class="mw-headline" id="Conclusion"> Conclusion </span></h2> +<p>You now have a full <tt>i686-myos</tt> toolchain that provides a hosted environment producing executables for your user-space. Your program loader will load programs into the current process, set up an initial thread at the program entry point, and the process will perform system calls to cooperate with the kernel. +</p><p>You can continue to polish your custom toolchain by teaching it more about your operating system and customizing its behavior to your needs. As your standard library and kernel support improves, you will become able to easily <a href="/Cross-Porting_Software" title="Cross-Porting Software">port third party software</a> to your operating system by making third party software use your cross-compiler. +</p> +<h2> <span class="mw-headline" id="See_Also"> See Also </span></h2> +<h3> <span class="mw-headline" id="Articles"> Articles </span></h3> +<ul><li> <a href="/GCC" title="GCC">GCC</a> +</li><li> <a href="/GCC_Cross-Compiler" title="GCC Cross-Compiler">GCC Cross-Compiler</a> +</li><li> <a href="/OS_Specific_Toolchain" title="OS Specific Toolchain">OS Specific Toolchain</a> +</li><li> <a href="/ELF" title="ELF">ELF</a> +</li><li> <a href="/System_Call" title="System Call" class="mw-redirect">System Call</a> +</li><li> <a href="/Porting_GCC_to_your_OS" title="Porting GCC to your OS">Porting GCC to your OS</a> +</li><li> <a href="/Cross-Porting_Software" title="Cross-Porting Software">Cross-Porting Software</a> +</li></ul> + +<!-- +NewPP limit report +Preprocessor node count: 239/1000000 +Post-expand include size: 372/2097152 bytes +Template argument size: 84/2097152 bytes +Expensive parser function count: 0/100 +--> + +<!-- Saved in parser cache with key wikidb:pcache:idhash:3637-0!*!0!!en!2!* and timestamp 20181010183647 --> +</div> <!-- /bodycontent --> + <!-- printfooter --> + <div class="printfooter"> + Retrieved from "<a href="https://wiki.osdev.org/index.php?title=Hosted_GCC_Cross-Compiler&oldid=22405">https://wiki.osdev.org/index.php?title=Hosted_GCC_Cross-Compiler&oldid=22405</a>" </div> + <!-- /printfooter --> + <!-- catlinks --> + <div id='catlinks' class='catlinks'><div id="mw-normal-catlinks"><a href="/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/Category:Level_3_Tutorials" title="Category:Level 3 Tutorials">Level 3 Tutorials</a></li><li><a href="/Category:Compilers" title="Category:Compilers">Compilers</a></li><li><a href="/Category:Tutorials" title="Category:Tutorials">Tutorials</a></li></ul></div></div> <!-- /catlinks --> + <div class="visualClear"></div> + <!-- debughtml --> + <!-- /debughtml --> + </div> + <!-- /bodyContent --> + </div> + <!-- /content --> + <!-- header --> + <div id="mw-head" class="noprint"> + +<!-- 0 --> +<div id="p-personal" class=""> + <h5>Personal tools</h5> + <ul> + <li id="pt-login"><a href="/index.php?title=Special:UserLogin&returnto=Hosted_GCC_Cross-Compiler" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li> + </ul> +</div> + +<!-- /0 --> + <div id="left-navigation"> + +<!-- 0 --> +<div id="p-namespaces" class="vectorTabs"> + <h5>Namespaces</h5> + <ul> + <li id="ca-nstab-main" class="selected"><span><a href="/Hosted_GCC_Cross-Compiler" title="View the content page [c]" accesskey="c">Page</a></span></li> + <li id="ca-talk" class="new"><span><a href="/index.php?title=Talk:Hosted_GCC_Cross-Compiler&action=edit&redlink=1" title="Discussion about the content page [t]" accesskey="t">Discussion</a></span></li> + </ul> +</div> + +<!-- /0 --> + +<!-- 1 --> +<div id="p-variants" class="vectorMenu emptyPortlet"> + <h5><span>Variants</span><a href="#"></a></h5> + <div class="menu"> + <ul> + </ul> + </div> +</div> + +<!-- /1 --> + </div> + <div id="right-navigation"> + +<!-- 0 --> +<div id="p-views" class="vectorTabs"> + <h5>Views</h5> + <ul> + <li id="ca-view" class="selected"><span><a href="/Hosted_GCC_Cross-Compiler" >Read</a></span></li> + <li id="ca-viewsource"><span><a href="/index.php?title=Hosted_GCC_Cross-Compiler&action=edit" title="This page is protected. You can view its source [e]" accesskey="e">View source</a></span></li> + <li id="ca-history" class="collapsible"><span><a href="/index.php?title=Hosted_GCC_Cross-Compiler&action=history" title="Past revisions of this page [h]" accesskey="h">View history</a></span></li> + </ul> +</div> + +<!-- /0 --> + +<!-- 1 --> +<div id="p-cactions" class="vectorMenu emptyPortlet"> + <h5><span>Actions</span><a href="#"></a></h5> + <div class="menu"> + <ul> + </ul> + </div> +</div> + +<!-- /1 --> + +<!-- 2 --> +<div id="p-search"> + <h5><label for="searchInput">Search</label></h5> + <form action="/index.php" id="searchform"> + <input type='hidden' name="title" value="Special:Search"/> + <input type="search" name="search" title="Search OSDev Wiki [f]" accesskey="f" id="searchInput" /> <input type="submit" name="go" value="Go" title="Go to a page with this exact name if exists" id="searchGoButton" class="searchButton" /> <input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton" /> </form> +</div> + +<!-- /2 --> + </div> + </div> + <!-- /header --> + <!-- panel --> + <div id="mw-panel" class="noprint"> + <!-- logo --> + <div id="p-logo"><a style="background-image: url(/skins/common/images/osdev.png);" href="/Main_Page" title="Visit the main page"></a></div> + <!-- /logo --> + +<!-- navigation --> +<div class="portal" id='p-navigation'> + <h5>Navigation</h5> + <div class="body"> + <ul> + <li id="n-mainpage"><a href="/Main_Page" title="Visit the main page [z]" accesskey="z">Main Page</a></li> + <li id="n-portal"><a href="http://forum.osdev.org/" rel="nofollow" title="About the project, what you can do, where to find things">Forums</a></li> + <li id="n-FAQ"><a href="/Category:FAQ">FAQ</a></li> + <li id="n-OS-Projects"><a href="/Projects">OS Projects</a></li> + <li id="n-randompage"><a href="/Special:Random" title="Load a random page [x]" accesskey="x">Random page</a></li> + </ul> + </div> +</div> + +<!-- /navigation --> + +<!-- about --> +<div class="portal" id='p-about'> + <h5>About</h5> + <div class="body"> + <ul> + <li id="n-This-site"><a href="/OSDevWiki:About">This site</a></li> + <li id="n-Joining"><a href="/OSDevWiki:Joining">Joining</a></li> + <li id="n-Editing-help"><a href="/OSDevWiki:Editing">Editing help</a></li> + <li id="n-recentchanges"><a href="/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li> + </ul> + </div> +</div> + +<!-- /about --> + +<!-- SEARCH --> + +<!-- /SEARCH --> + +<!-- TOOLBOX --> +<div class="portal" id='p-tb'> + <h5>Toolbox</h5> + <div class="body"> + <ul> + <li id="t-whatlinkshere"><a href="/Special:WhatLinksHere/Hosted_GCC_Cross-Compiler" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li> + <li id="t-recentchangeslinked"><a href="/Special:RecentChangesLinked/Hosted_GCC_Cross-Compiler" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li> + <li id="t-specialpages"><a href="/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li> + <li><a href="/index.php?title=Hosted_GCC_Cross-Compiler&printable=yes" rel="alternate">Printable version</a></li> + <li id="t-permalink"><a href="/index.php?title=Hosted_GCC_Cross-Compiler&oldid=22405" title="Permanent link to this revision of the page">Permanent link</a></li> + </ul> + </div> +</div> + +<!-- /TOOLBOX --> + +<!-- LANGUAGES --> + +<!-- /LANGUAGES --> + </div> + <!-- /panel --> + <!-- footer --> + <div id="footer"> + <ul id="footer-info"> + <li id="footer-info-lastmod"> This page was last modified on 21 May 2018, at 12:07.</li> + <li id="footer-info-viewcount">This page has been accessed 14,088 times.</li> + </ul> + <ul id="footer-places"> + <li id="footer-places-privacy"><a href="/OSDev_Wiki:Privacy_policy" title="OSDev Wiki:Privacy policy">Privacy policy</a></li> + <li id="footer-places-about"><a href="/OSDev_Wiki:About" title="OSDev Wiki:About">About OSDev Wiki</a></li> + <li id="footer-places-disclaimer"><a href="/OSDev_Wiki:General_disclaimer" title="OSDev Wiki:General disclaimer">Disclaimers</a></li> + </ul> + <ul id="footer-icons" class="noprint"> + <li id="footer-poweredbyico"> + <a href="http://www.mediawiki.org/"><img src="/skins/common/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" /></a> + </li> + </ul> + <div style="clear:both"></div> + </div> + <!-- /footer --> + <!-- fixalpha --> + <script type="text/javascript"> if ( window.isMSIE55 ) fixalpha(); </script> + <!-- /fixalpha --> + <script src="/load.php?debug=false&lang=en&modules=skins.vector&only=scripts&skin=vector&*"></script> +<script>if(window.mw){ + mw.loader.load(["mediawiki.user", "mediawiki.util", "mediawiki.page.ready", "mediawiki.legacy.wikibits", "mediawiki.legacy.ajax"]); +} +</script> +<script src="/load.php?debug=false&lang=en&modules=site&only=scripts&skin=vector&*"></script> +<script>if(window.mw){ + mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":1,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"highlightbroken":1,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":1,"showtoolbar":1,"skin":"vector","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0, + "watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false});;mw.user.tokens.set({"editToken":"+\\","watchToken":false});;mw.loader.state({"user.options":"ready","user.tokens":"ready"}); + + /* cache key: wikidb:resourceloader:filter:minify-js:4:19a4b18a9ac79a6b8c60b24af4668814 */ +} +</script><!-- Served in 0.195 secs. --> + </body> +</html> |
