Anonymous user
Calling Global Constructors: Difference between revisions
Undo revision 17566 by Exetwezz (talk)
[unchecked revision] | [unchecked revision] |
(Grammar fix) |
|||
Line 39:
== Using crti.o, crtbegin.o, crtend.o, and crtn.o in a Kernel ==
In a kernel, you are not using a user-space C library. You may be using a special kernel "C library", or none at all. The compiler always supplies <tt>crtbegin.o</tt> and <tt>crtend.o</tt>, but normally the C library supplies <tt>crti.o</tt> and <tt>crtn.o</tt>, but not in this case. The kernel should supply its own <tt>crti.o</tt> and <tt>crtn.o</tt> implementation (even if it would be otherwise identical to the user-space libc version). A kernel is linked with <tt>-nostdlib</tt> (which is the same as passing <tt>-nodefaultlibs</tt> and <tt>-nostartfiles</tt>) which disables the "start files" <tt>crt*.o</tt> that
<source lang="bash">i686-elf-gcc $CFLAGS -print-file-name=crtbegin.o</source>
|