mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Add a faq entry
llvm-svn: 12529
This commit is contained in:
parent
7f5d56b43a
commit
8b1b8ab325
@ -71,6 +71,9 @@
|
|||||||
<li>What is this <tt>__main()</tt> call that gets inserted into
|
<li>What is this <tt>__main()</tt> call that gets inserted into
|
||||||
<tt>main()</tt>?</li>
|
<tt>main()</tt>?</li>
|
||||||
<li>Where did all of my code go??</li>
|
<li>Where did all of my code go??</li>
|
||||||
|
<li>What is this <tt>llvm.global_ctors</tt> and
|
||||||
|
<tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I
|
||||||
|
#include <iostream>?</li>
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
@ -449,6 +452,42 @@ you can read from and assign to <tt>volatile</tt> global variables.
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!--=========================================================================-->
|
||||||
|
|
||||||
|
<div class="question"><p>
|
||||||
|
What is this <tt>llvm.global_ctors</tt> and <tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I #include <iostream>?
|
||||||
|
</p></div>
|
||||||
|
|
||||||
|
<div class="answer">
|
||||||
|
<p>
|
||||||
|
If you #include the <iostream> header into a C++ translation unit, the
|
||||||
|
file will probably use the <tt>std::cin</tt>/<tt>std::cout</tt>/... global
|
||||||
|
objects. However, C++ does not guarantee an order of initialization between
|
||||||
|
static objects in different translation units, so if a static ctor/dtor in your
|
||||||
|
.cpp file used <tt>std::cout</tt>, for example, the object would not necessarily
|
||||||
|
be automatically initialized before your use.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To make <tt>std::cout</tt> and friends work correctly in these scenarios, the
|
||||||
|
STL that we use declares a static object that gets created in every translation
|
||||||
|
unit that includes <iostream>. This object has a static constructor and
|
||||||
|
destructor that initializes and destroys the global iostream objects before they
|
||||||
|
could possibly be used in the file. The code that you see in the .ll file
|
||||||
|
corresponds to the constructor and destructor registration code.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you would like to make it easier to <b>understand</b> the LLVM code generated
|
||||||
|
by the compiler in the demo page, consider using printf instead of iostreams to
|
||||||
|
print values.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
|
||||||
|
|
||||||
<!-- *********************************************************************** -->
|
<!-- *********************************************************************** -->
|
||||||
<!-- *********************************************************************** -->
|
<!-- *********************************************************************** -->
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user