eliminate lengths from record bodies
[oota-llvm.git] / docs / GettingStarted.html
index 41ec511e14eee23f37357bace81a3f0330c6dcd8..0e871336deb83ca2aa1345113c8439ded797076a 100644 (file)
@@ -89,7 +89,7 @@ used to test the LLVM tools and the GCC front end.</p>
 
 <p>The second piece is the GCC front end.  This component provides a version of
 GCC that compiles C and C++ code into LLVM bytecode.  Currently, the GCC front
-end is a modified version of GCC 3.4 (we track the GCC 3.4 development).  Once
+end uses the GCC parser to convert code to LLVM.  Once
 compiled into LLVM bytecode, a program can be manipulated with the LLVM tools
 from the LLVM suite.</p>
 
@@ -525,6 +525,8 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    possibly others) does not compile LLVM correctly (it appears that exception 
    handling is broken in some cases).  Please download the FSF 3.3.3 or upgrade
    to a newer version of GCC.</p>
+<p><b>GCC 3.4.x</b> on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
+   miscompiles portions of LLVM</a>.</p>
 <p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
    miscompile LLVM.</p>
 <p><b>Apple Xcode 2.3</b>: GCC crashes when compiling LLVM at -O3 (which is the
@@ -537,6 +539,8 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    miscompiles portions of LLVM</a> when compiling llvm itself into 64-bit 
    code.  LLVM will appear to mostly work but will be buggy, e.g. failing 
    portions of its testsuite.</p>
+<p><b>GCC 4.1.2 on OpenSUSE</b>: Seg faults during libstdc++ build and on x86_64
+platforms compiling md5.c gets a mangled constant.</p>
 <p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
 long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
 defined in a discarded section. You can safely ignore these messages as they are
@@ -712,14 +716,9 @@ you get it from the CVS repository:</p>
 configured by the LLVM configure script as well as automatically updated when
 you run <tt>cvs update</tt>.</p>
 
-<p>If you would like to get the GCC 3.4 front end source code, you can also get it from the CVS repository:</p>
-
-<pre>
-  cvs -z3 -d :pserver:anon@llvm.org:/var/cvs/llvm co llvm-gcc
-</pre>
-
-<p>Please note that you must follow <a href="CFEBuildInstrs.html">these 
-instructions</a> to successfully build the LLVM GCC front-end.</p>
+<p>If you would like to get the GCC front end source code, you can also get it 
+and build it yourself.  Please follow <a href="CFEBuildInstrs.html">these 
+instructions</a> to successfully get and build the LLVM GCC front-end.</p>
 
 </div>
 
@@ -730,10 +729,11 @@ instructions</a> to successfully build the LLVM GCC front-end.</p>
 
 <div class="doc_text">
 
-<p>Before configuring and compiling the LLVM suite, you need to extract the LLVM
-GCC front end from the binary distribution.  It is used for building the
-bytecode libraries later used by the GCC front end for linking programs, and its
-location must be specified when the LLVM suite is configured.</p>
+<p>Before configuring and compiling the LLVM suite, you can optionally extract the 
+LLVM GCC front end from the binary distribution.  It is used for running the 
+llvm-test testsuite and for compiling C/C++ programs.  Note that you can optionally
+<a href="CFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
+main LLVM repository.</p>
 
 <p>To install the GCC front end, do the following:</p>
 
@@ -743,6 +743,14 @@ location must be specified when the LLVM suite is configured.</p>
       -</tt></li>
 </ol>
 
+<p>Once the binary is uncompressed, you should add a symlink for llvm-gcc and 
+llvm-g++ to some directory in your path.  When you configure LLVM, it will 
+automatically detect llvm-gcc's presence (if it is in your path) enabling its
+use in llvm-test.  Note that you can always build or install llvm-gcc at any
+pointer after building the main LLVM repository: just reconfigure llvm and 
+llvm-test will pick it up.
+</p>
+
 <p>The binary versions of the GCC front end may not suit all of your needs.  For
 example, the binary distribution may include an old version of a system header
 file, not "fix" a header file that needs to be fixed for GCC, or it may be
@@ -750,7 +758,7 @@ linked with libraries not available on your system.</p>
 
 <p>In cases like these, you may want to try <a
 href="CFEBuildInstrs.html">building the GCC front end from source.</a> This is
-not for the faint of heart, so be forewarned.</p>
+much easier now than it was in the past.</p>
 
 </div>
 
@@ -1342,11 +1350,10 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   LLVM assembly.</dd>
 
   <dt><tt><b>llvm-ld</b></tt></dt>
-  <dd><tt>llvm-ld</tt> is very similar to gccld and provides a general purpose
-  and extensible linker for LLVM. This is the linker invoked by <tt>llvmc</tt>.
-  It allows optimization modules to be loaded so that language specific
-  optimizations can be applied at link time. This tool is considered
-  experimental.</dd>
+  <dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM. 
+  This is the linker invoked by <tt>llvmc</tt>. It performsn standard link time
+  optimizations and allows optimization modules to be loaded and run so that 
+  language specific optimizations can be applied at link time.</dd>
 
   <dt><tt><b>llvm-link</b></tt></dt>
   <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
@@ -1368,36 +1375,13 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   the -march=c option).</dd>
 
   <dt><tt><b>llvm-gcc</b></tt></dt>
-  <dd><tt>llvm-gcc</tt> is a GCC-based C frontend
-  that has been retargeted to emit LLVM code as the machine code output.  It
-  works just like any other GCC compiler, taking the typical <tt>-c, -S, -E,
-  -o</tt> options that are typically used.  The source code for the
-  <tt>llvm-gcc</tt> tool is available as a separate CVS module.
-  <blockquote>
-    <dl>
-      <dt><tt><b>gccas</b></tt></dt>
-      <dd>This tool is invoked by the <tt>llvm-gcc</tt> frontend as the 
-      "assembler" part of the compiler.  This tool actually assembles LLVM 
-      assembly to LLVM bytecode, performs a variety of optimizations, and 
-      outputs LLVM bytecode.  Thus when you invoke 
-      <tt>llvm-gcc -c x.c -o x.o</tt>, you are causing <tt>gccas</tt> to be 
-      run, which writes the <tt>x.o</tt> file (which is an LLVM bytecode file 
-      that can be disassembled or manipulated just like any other bytecode 
-      file).  The command line interface to <tt>gccas</tt> is designed to be 
-      as close as possible to the <b>system</b> `<tt>as</tt>' utility so that 
-      the gcc frontend itself did not have to be modified to interface to 
-      a "weird" assembler.</dd>
-
-      <dt><tt><b>gccld</b></tt></dt>
-      <dd><tt>gccld</tt> links together several LLVM bytecode files into one 
-      bytecode file and does some optimization.  It is the linker invoked by 
-      the GCC frontend when multiple .o files need to be linked together.  
-      Like <tt>gccas</tt>, the command line interface of <tt>gccld</tt> is 
-      designed to match the system linker, to aid interfacing with the GCC 
-      frontend.</dd>
-    </dl>
-  </blockquote>
-  </dd>
+  <dd><tt>llvm-gcc</tt> is a GCC-based C frontend that has been retargeted to 
+  use LLVM as its backend instead of GCC's RTL backend. It can also emit LLVM 
+  byte code or assembly (with the <tt>-emit-llvm</tt> option) instead of the
+  usual machine code output.  It works just like any other GCC compiler, 
+  taking the typical <tt>-c, -S, -E, -o</tt> options that are typically used.  
+  Additionally, the the source code for <tt>llvm-gcc</tt> is available as a 
+  separate CVS module.</dd>
 
   <dt><tt><b>opt</b></tt></dt>
   <dd><tt>opt</tt> reads LLVM bytecode, applies a series of LLVM to LLVM