home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / doc / gcc-4.1-base / NEWS.html < prev    next >
Encoding:
Extensible Markup Language  |  2007-03-02  |  31.0 KB  |  794 lines

  1.   <?xml version="1.0" encoding="ISO-8859-1"?>
  2.   <!DOCTYPE html
  3.             PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4.             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  23.   
  24.   
  25.    <head>
  26.  
  27.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  28.     <link rev="made" href="mailto:gcc@gcc.gnu.org" />
  29.     <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
  30.     <link rel="stylesheet" type="text/css" href="/gnu.css" />
  31.     <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
  32.   
  33.  <title>
  34. GCC 4.1 Release Series — Changes, New Features, and Fixes
  35. - GNU Project - Free Software Foundation (FSF)</title>
  36.    </head>
  37.  
  38.  
  39. <!-- GCC maintainers, please do not hesitate to update/contribute entries
  40.      concerning those part of GCC you maintain!  2002-03-23, Gerald.
  41. -->
  42.  
  43. <body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
  44.  
  45.  
  46.  
  47. <h1 align="center">
  48. GCC 4.1 Release Series<br />Changes, New Features, and Fixes
  49. </h1>
  50.  
  51. <p>The latest release in the 4.1 release series is
  52. <a href="#4.1.2">GCC 4.1.2</a>.</p>
  53.  
  54. <h2>Caveats</h2>
  55.  
  56. <h2>General Optimizer Improvements</h2>
  57.  
  58.   <ul>
  59.  
  60.     <li>GCC now has infrastructure for inter-procedural optimizations and
  61.     the following inter-procedural optimizations are implemented:<br />
  62.     <ul>
  63.         <li>Profile guided inlining.  When doing profile feedback
  64.         guided optimization, GCC can now use the profile to make
  65.         better informed decisions on whether inlining of a function
  66.         is profitable or not.  This means that GCC will no longer
  67.         inline functions at call sites that are not executed very
  68.         often, and that functions at hot call sites are more likely
  69.         to be inlined.<br />
  70.         A new parameter <code>min-inline-recursive-probability</code>
  71.         is also now available to throttle recursive inlining
  72.         of functions with small average recursive depths.</li>
  73.         <li>Discovery of <code>pure</code> and <code>const</code>
  74.         functions, a form of side-effects analysis.  While older GCC
  75.         releases could also discover such special functions, the new
  76.         IPA-based pass runs earlier so that the results are available
  77.         to more optimizers.  The pass is also simply more powerful
  78.         than the old one.</li>
  79.         <li>Analysis of references to static variables and type escape
  80.         analysis, also forms of side-effects analysis.  The results
  81.         of these passes allow the compiler to be less conservative
  82.         about call-clobbered variables and references.  This results
  83.         in more redundant loads being eliminated and in making static
  84.         variables candidates for register promotion.</li>
  85.         <li>Improvement of RTL-based alias analysis.  The results of type
  86.         escape analysis are fed to the RTL type-based alias analyzer,
  87.         allowing it to disambiguate more memory references.</li>
  88.         <li>Interprocedural constant propagation and function versioning.
  89.         This pass looks for functions that are always called with the
  90.         same constant value for one or more of the function arguments,
  91.         and propagates those constants into those functions.</li>
  92.         <li>GCC will now eliminate static variables whose usage was
  93.         optimized out.</li>
  94.         <li><code>-fwhole-program --combine</code> can now be used to
  95.             make all functions in program static allowing whole program
  96.         optimization.  As an exception, the <code>main</code> function
  97.         and all functions marked with the new
  98.         <code>externally_visible</code> attribute are kept global so
  99.         that programs can link with runtime libraries.</li>
  100.     </ul></li>
  101.  
  102.     <li>GCC can now do a form of partial dead code elimination (PDCE) that
  103.     allows code motion of expressions to the paths where the result of
  104.     the expression is actually needed.  This is not always a win, so
  105.     the pass has been limited to only consider profitable cases.  Here
  106.     is an example:
  107.  
  108.     <pre>
  109.     int foo (int *, int *);
  110.     int
  111.     bar (int d)
  112.     {
  113.       int a, b, c;
  114.       b = d + 1;
  115.       c = d + 2;
  116.       a = b + c;
  117.       if (d)
  118.         {
  119.           foo (&b, &c);
  120.           a = b + c;
  121.         }
  122.       printf ("%d\n", a);
  123.     }
  124.     </pre>
  125.  
  126.     The <code>a = b + c</code> can be sunk to right before the
  127.     <code>printf</code>.  Normal code sinking will not do this, it will
  128.     sink the first one above into the else-branch of the conditional
  129.     jump, which still gives you two copies of the code.</li>
  130.  
  131.     <li>GCC now has a value range propagation pass.  This allows the compiler
  132.     to eliminate bounds checks and branches.  The results of the pass
  133.     can also be used to accurately compute branch probabilities.</li>
  134.  
  135.     <li>The pass to convert PHI nodes to straight-line code (a form of
  136.     if-conversion for GIMPLE) has been improved significantly.  The two
  137.     most significant improvements are an improved algorithm to determine
  138.     the order in which the PHI nodes are considered, and an improvement
  139.     that allow the pass to consider if-conversions of basic blocks with
  140.     more than two predecessors.</li>
  141.  
  142.     <li>Alias analysis improvements.  GCC can now differentiate between
  143.     different fields of structures in Tree-SSA's virtual operands form.
  144.     This lets stores/loads from non-overlapping structure fields not
  145.     conflict.  A new algorithm to compute points-to sets was contributed
  146.     that can allows GCC to see now that <code>p->a</code> and
  147.     <code>p->b</code>, where <code>p</code> is a pointer to a
  148.     structure, can never point to the same field.</li>
  149.  
  150.     <li>Various enhancements to auto-vectorization:<br />
  151.     <ul>
  152.         <li>Incrementally preserve SSA form when vectorizing.</li>
  153.         <li>Incrementally preserve loop-closed form when vectorizing.</li>
  154.         <li>Improvements to peeling for alignment:
  155.                 generate better code when the misalignment of an access
  156.                 is known at compile time, or when different accesses are
  157.                 known to have the same misalignment, even if the
  158.                 misalignment amount itself is unknown.</li>
  159.         <li>Consider dependence distance in the vectorizer.</li>
  160.         <li>Externalize generic parts of data reference analysis to
  161.         make this analysis available to other passes.</li>
  162.         <li>Vectorization of conditional code.</li>
  163.         <li>Reduction support.</li>
  164.     </ul></li>
  165.  
  166.     <li>GCC can now partition functions in sections of hot and cold code.
  167.     This can significantly improve performance due to better instruction
  168.     cache locality.  This feature works best together with profile
  169.     feedback driven optimization.</li>
  170.  
  171.     <li>A new pass to avoid saving of unneeded arguments to the stack in
  172.     <code>vararg</code> functions if the compiler can prove that they
  173.     will not be needed.</li>
  174.  
  175.     <li>Transition of basic block profiling to tree level implementation has
  176.         been completed.  The new implementation should be considerably more
  177.     reliable (hopefully avoiding profile mismatch errors when using
  178.     <code>-fprofile-use</code> or <code>-fbranch-probabilities</code>) and
  179.     can be used to drive higher level optimizations, such as inlining.
  180.     <p>
  181.     The <code>-ftree-based-profiling</code> command line option was
  182.     removed and <code>-fprofile-use</code> now implies disabling old RTL
  183.     level loop optimizer (<code>-fno-loop-optimize</code>).  Speculative
  184.     prefetching optimization (originally enabled by
  185.     <code>-fspeculative-prefetching</code>) was removed.</p></li>
  186.   </ul>
  187.  
  188.  
  189. <h2>New Languages and Language specific improvements</h2>
  190.  
  191. <h3>C and Objective-C</h3>
  192.   <ul>
  193.     <li>The old Bison-based C and Objective-C parser has been replaced
  194.     by a new, faster hand-written recursive-descent parser.</li>
  195.   </ul>
  196.  
  197.   <h3>Ada</h3>
  198.   <ul>
  199.     <li>The build infrastructure for the Ada runtime library and tools
  200.     has been changed to be better integrated with the rest of the build
  201.     infrastructure of GCC.  This should make doing cross builds of Ada a
  202.     bit easier.</li>
  203.   </ul>
  204.  
  205. <h3 id="cplusplus">C++</h3>
  206.   <ul>
  207.     <li>ARM-style name-injection of friend declarations is no longer
  208.         the default.  For example:
  209.  
  210.     <pre>
  211.           struct S {
  212.             friend void f();
  213.           };
  214.  
  215.           void g() { f(); }</pre>
  216.  
  217.         will not be accepted; instead a declaration of <code>f</code>
  218.         will need to be present outside of the scope of
  219.         <code>S</code>.  The new <code>-ffriend-injection</code>
  220.         option will enable the old behavior.</li>
  221.  
  222.     <li>
  223.      The (undocumented) extension which permitted templates with
  224.      default arguments to be bound to template template parameters with
  225.      fewer parameters has been deprecated, and will be removed in the
  226.      next major release of G++.  For example:
  227.  
  228.      <pre>
  229.        template <template <typename> class C>
  230.        void f(C<double>) {}
  231.  
  232.        template <typename T, typename U = int>
  233.        struct S {};
  234.  
  235.        template void f(S<double>);
  236.      </pre>      
  237.  
  238.      makes use of the deprecated extension.  The reason this code is
  239.      not valid ISO C++ is that <code>S</code> is a template with two
  240.      parameters; therefore, it cannot be bound to <code>C</code> which
  241.      has only one parameter.
  242.     </li>
  243.   </ul>
  244.  
  245.   <h4>Runtime Library (libstdc++)</h4>
  246.  
  247.   <ul>
  248.     <li>Optimization work:
  249.       <ul>
  250.         <li>A new implementation of <code>std::search_n</code> is provided,
  251.         better performing in case of random access iterators.</li>
  252.     <li>Added further efficient specializations of <code>istream</code>
  253.             functions, i.e., character array and string extractors.</li>
  254.         <li>Other smaller improvements throughout.</li>
  255.       </ul></li>
  256.     <li>Policy-based associative containers, designed for high-performance,
  257.         flexibility and semantic safety are delivered in 
  258.     <code>ext/pb_assoc</code>.</li>
  259.     <li>A versatile string class, <code>__gnu_cxx::__versa_string</code>,
  260.         providing facilities conforming to the standard requirements for
  261.     <code>basic_string</code>, is delivered in
  262.     <code><ext/vstring.h></code>.  In particular:
  263.       <ul>
  264.         <li>Two base classes are provided:  the default one avoids reference
  265.         counting and is optimized for short strings;  the alternate one,
  266.             still uses it while improving in a few low level areas (e.g.,
  267.         alignment).  See <code>vstring_fwd.h</code> for some useful
  268.         typedefs.</li>
  269.     <li>Various algorithms have been rewritten (e.g., replace), the code
  270.             streamlined and simple optimizations added.</li>
  271.     <li>Option 3 of DR 431 is implemented for both available bases, thus
  272.             improving the support for stateful allocators.</li>  
  273.       </ul></li>
  274.      <li>As usual, many bugs have been fixed (e.g., libstdc++/13583,
  275.          libstdc++/23953) and LWG resolutions put into effect for the first
  276.          time (e.g., DR 280, DR 464, N1780 recommendations for DR 233,
  277.      TR1 Issue 6.19).  The implementation status of TR1 is now tracked in
  278.      the docs in <code>tr1.html</code>.</li>
  279.   </ul>
  280.  
  281. <h3>Objective-C++</h3>
  282.   <ul>
  283.     <li>A new language front end for Objective-C++ has been added.  This language allows
  284.         users to mix the object oriented features of Objective-C with those of C++.</li>
  285.   </ul>
  286.  
  287. <h3>Java (GCJ)</h3>
  288.   <ul>
  289.     <li>Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
  290.         features (plus some 0.20 bug-fixes)
  291.       <ul>
  292.         <li>Networking
  293.           <ul>
  294.         <li>The <code>java.net.HttpURLConnection</code> implementation no
  295.                 longer buffers the entire response body in memory.
  296.                 This means that response bodies larger than available
  297.                 memory can now be handled.</li>
  298.           </ul>
  299.         </li>
  300.  
  301.         <li>(N)IO
  302.           <ul>
  303.             <li><code>NIO FileChannel.map</code> implementation, fast bulk put
  304.                 implementation for <code>DirectByteBuffer</code>
  305.         (speeds up this method 10x).</li>
  306.             <li><code>FileChannel.lock()</code> and
  307.             <code>FileChannel.force()</code> implemented.</li>
  308.           </ul>
  309.         </li>
  310.  
  311.         <li>XML
  312.           <ul>
  313.             <li><code>gnu.xml</code> fix for nodes created outside a
  314.             namespace context.</li>
  315.             <li>Add support for output indenting and cdata-section-elements
  316.                 output instruction in <code>xml.transform</code>.</li>
  317.             <li><code>xml.xpath</code> corrections for cases where
  318.                 elements/attributes might have been created in
  319.                 non-namespace-aware mode.  Corrections to handling of
  320.                 XSL variables and minor conformance updates.</li>
  321.           </ul>
  322.         </li>
  323.  
  324.     <li>AWT
  325.       <ul>
  326.         <li>GNU JAWT implementation, the AWT Native Interface,
  327.         which allows direct access to native screen resources from
  328.         within a Canvas's paint method.  GNU Classpath Examples
  329.         comes with a Demo, see
  330.         <code>libjava/classpath/examples/README</code>.</li>
  331.  
  332.         <li><code>awt.datatransfer</code> updated to 1.5 with support
  333.         for <code>FlavorEvents</code>.  The gtk+ awt peers now allow
  334.         copy/paste of text, images, URIs/files and serialized objects
  335.         with other applications and tracking clipboard change events with
  336.         gtk+ 2.6 (for gtk+ 2.4 only text and serialized objects
  337.         are supported). A GNU Classpath Examples datatransfer Demo
  338.         was added to show the new functionality.</li>
  339.  
  340.         <li>Split gtk+ awt peers event handling in two threads and
  341.         improve gdk lock handling (solves several awt lock ups).</li>
  342.  
  343.         <li>Speed up awt Image loading.</li>
  344.  
  345.         <li>Better gtk+ scrollbar peer implementation when using
  346.         gtk+ >= 2.6.</li>
  347.  
  348.         <li>Handle image loading errors correctly for gdkpixbuf
  349.         and <code>MediaTracker</code>.</li>
  350.  
  351.         <li>Better handle GDK lock. Properly prefix gtkpeer native
  352.         functions (<code>cp_gtk</code>).</li>
  353.  
  354.         <li><code>GdkGraphics2D</code> has been updated to use
  355.         Cairo 0.5.x or higher.</li>
  356.  
  357.         <li><code>BufferedImage</code> and <code>GtkImage</code>
  358.         rewrites. All image drawing operations should now work
  359.         correctly (flipping requires gtk+ >= 2.6)</li>
  360.  
  361.         <li>Future <code>Graphics2D</code>, image and text work is
  362.         documented at: <a href="http://developer.classpath.org/mediation/ClasspathGraphicsImagesText">
  363.         http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
  364.         </a></li>
  365.  
  366.         <li>When gtk+ 2.6 or higher is installed the default log
  367.         handler will produce stack traces whenever a WARNING,
  368.         CRITICAL or ERROR message is produced.</li>
  369.       </ul>
  370.     </li>
  371.  
  372.     <li>Free Swing
  373.       <ul>
  374.         <li>The <code>RepaintManager</code> has been reworked for more
  375.         efficient painting, especially for large GUIs.</li>
  376.  
  377.         <li>The layout manager <code>OverlayLayout</code> has been
  378.         implemented, the <code>BoxLayout</code> has been rewritten to
  379.         make use of the <code>SizeRequirements</code> utility class and
  380.         caching for more efficient layout.</li>
  381.  
  382.         <li>Improved accessibility support.</li>
  383.  
  384.         <li>Significant progress has been made in the
  385.         implementation of the <code>javax.swing.plaf.metal</code>
  386.         package, with most UI delegates in a working state now.
  387.         Please test this with your own applications and provide feedback
  388.         that will help us to improve this package.</li>
  389.  
  390.         <li>The GUI demo (<code>gnu.classpath.examples.swing.Demo</code>)
  391.         has been extended to highlight various features in our
  392.         Free Swing implementation. And it includes a look and feel
  393.         switcher for Metal (default), Ocean and GNU themes.</li>
  394.  
  395.         <li>The <code>javax.swing.plaf.multi</code> package is now
  396.         implemented.</li>
  397.  
  398.         <li>Editing and several key actions for <code>JTree</code> and
  399.         <code>JTable</code> were implemented.</li>
  400.  
  401.         <li>Lots of icons and look and feel improvements for Free
  402.         Swing basic and metal themes were added.  Try running the
  403.         GNU Classpath Swing Demo in examples
  404.         (<code>gnu.classpath.examples.swing.Demo</code>) with:
  405.         <code>-Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel</code>
  406.         or
  407.         <code>-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel</code></li>
  408.  
  409.         <li>Start of styled text capabilites for
  410.         <code>java.swing.text</code>.</li>
  411.  
  412.         <li><code>DefaultMutableTreeNode</code> pre-order, post-order,
  413.         depth-first and breadth-first traversal enumerations
  414.         implemented.</li>
  415.  
  416.         <li><code>JInternalFrame</code> colors and titlebar draw
  417.         properly.</li>
  418.  
  419.         <li><code>JTree</code> is working up to par (icons, selection and
  420.         keyboard traversal).</li>
  421.  
  422.         <li><code>JMenus</code> were made more compatible in visual and
  423.         programmatic behavior.</li>
  424.  
  425.         <li><code>JTable</code> <code>changeSelection</code> and
  426.         multiple selections implemented.</li>
  427.  
  428.         <li><code>JButton</code> and <code>JToggleButton</code> change
  429.         states work properly now.</li>
  430.  
  431.         <li><code>JFileChooser</code> fixes.</li>
  432.  
  433.         <li><code>revalidate()</code> and <code>repaint()</code>
  434.         fixes which make Free Swing much more responsive.</li>
  435.  
  436.         <li><code>MetalIconFactory</code> implemented.</li>
  437.  
  438.         <li>Free Swing Top-Level Compatibility. <code>JFrame</code>,
  439.         <code>JDialog</code>, <code>JApplet</code>,
  440.         <code>JInternalFrame</code>, and <code>JWindow</code> are now
  441.         1.5 compatible in the sense that you can call <code>add()</code>
  442.         and <code>setLayout()</code> directly on them, which will have
  443.         the same effect as calling <code>getContentPane().add()</code>
  444.         and <code>getContentPane().setLayout()</code>.</li>
  445.  
  446.         <li>The <code>JTree</code> interface has been completed.
  447.         <code>JTree</code>s now recognizes mouse clicks and selections
  448.         work.</li>
  449.  
  450.         <li><code>BoxLayout</code> works properly now.</li>
  451.  
  452.         <li>Fixed <code>GrayFilter</code> to actually work.</li>
  453.  
  454.         <li>Metal <code>SplitPane</code> implemented.</li>
  455.  
  456.         <li>Lots of Free Swing text and editor stuff work now.</li>
  457.       </ul>
  458.     </li>
  459.  
  460.     <li>Free RMI and Corba
  461.       <ul>
  462.         <li>Andrew Watson, Vice President and Technical
  463.         Director of the Object Management Group, has officially
  464.         assigned us 20 bit Vendor Minor Code Id: <code>0x47430</code>
  465.         ("GC") that will mark remote classpath-specific system
  466.         exceptions.  Obtaining the VMCID means that GNU Classpath
  467.         now is a recogniseable type of node in a highly
  468.         interoperable CORBA world.</li>
  469.  
  470.         <li>GNU Classpath now includes the first working draft to
  471.         support the RMI over IIOP protocol. The current
  472.         implementation is capable of remote invocations,
  473.         transferring various Serializables and Externalizables via
  474.         RMI-IIOP protocol.  It can flatten graphs and, at least
  475.         for the simple cases, is interoperable with 1.5 JDKs.</li>
  476.  
  477.         <li><code>org.omg.PortableInterceptor</code> and related
  478.         functionality in other packages is now implemented:
  479.         <ul>
  480.           <li>The sever and client interceptors work as required
  481.           since 1.4.</li>
  482.           <li>The <code>IOR</code> interceptor works as needed for
  483.           1.5.</li>
  484.         </ul>
  485.         </li>
  486.  
  487.         <li>The <code>org.omg.DynamicAny</code> package is completed
  488.         and passes the prepared tests.</li>
  489.  
  490.         <li>The Portable Object Adapter should now support the
  491.         output of the recent IDL to java compilers. These
  492.         compilers now generate servants and not CORBA objects as
  493.         before, making the output depend on the existing POA
  494.         implementation. Completing POA means that such code can
  495.         already be tried to run on Classpath. Our POA is tested
  496.         for the following usager scenarios:
  497.         <ul>
  498.           <li>POA converts servant to the CORBA object.</li>
  499.           <li>Servant provides to the CORBA object.</li>
  500.           <li>POA activates new CORBA object with the given Object
  501.           Id (byte array) that is later accessible for the
  502.           servant.</li>
  503.           <li>During the first call, the ServantActivator provides
  504.           servant for this and all subsequent calls on the current
  505.           object.</li>
  506.           <li>During each call, the ServantLocator provides
  507.           servant for this call only.</li>
  508.           <li>ServantLocator or ServantActivator forwards call to
  509.           another server.</li>
  510.           <li>POA has a single servant, responsible for all
  511.           objects.</li>
  512.           <li>POA has a default servant, but some objects are
  513.           explicitly connected to they specific servants.</li>
  514.         </ul>
  515.         The POA is verified using tests from the former
  516.         <code>cost.omg.org</code>.</li>
  517.  
  518.         <li>The CORBA implementation is now a working prototype
  519.         that should support features up to 1.3 inclusive.  We
  520.         invite groups writing CORBA dependent applications
  521.         to try Classpath implementation, reporting any possible
  522.         bugs.
  523.         The CORBA prototype is interoperable with Sun's
  524.         implementation v 1.4, transferring object references,
  525.         primitive types, narrow and wide strings, arrays,
  526.         structures, trees, abstract interfaces and value types
  527.         (feature of CORBA 2.3) between these two platforms.
  528.         Remote exceptions are transferred and handled correctly.
  529.         The stringified object references (IORs) from various
  530.         sources are parsed as required.  The transient (for
  531.         current session) and permanent (till jre restart)
  532.         redirections work.  Both Little and Big Endian encoded
  533.         messages are accepted.  The implementation is verified
  534.         using tests from the former cost.omg.org.  The current
  535.         release includes working examples (see the examples
  536.         directory), demonstrating the client-server communication,
  537.         using either CORBA Request or IDL-based stub (usually
  538.         generated by a IDL to java compiler).  These examples also
  539.         show how to use the Classpath CORBA naming service.  The
  540.         IDL to java compiler is not yet written, but as our
  541.         library must be compatible, it naturally accepts the
  542.         output of other idlj implementations.</li>
  543.       </ul>
  544.     </li>
  545.  
  546.     <li>Misc
  547.       <ul>
  548.  
  549.         <li>Updated <code>TimeZone</code> data against Olson
  550.         tzdata2005l.</li>
  551.  
  552.         <li>Make <code>zip</code> and <code>jar</code> packages UTF-8
  553.         clean.</li>
  554.  
  555.         <li>"native" code builds and compiles (warning free) on
  556.         Darwin and Solaris.</li>
  557.  
  558.         <li><code>java.util.logging.FileHandler</code> now rotates
  559.         files.</li>
  560.  
  561.         <li>Start of a generic JDWP framework in
  562.         <code>gnu/classpath/jdwp</code>.  This is unfinished,
  563.         but feedback (at <code>classpath@gnu.org</code>) from
  564.         runtime hackers is greatly appreciated. Although most of
  565.         the work is currently being done around <code>gcj/gij</code>
  566.         we want this framework to be as VM neutral as possible.
  567.         Early design is described in: <a
  568.         href="http://gcc.gnu.org/ml/java/2005-05/msg00260.html">
  569.         http://gcc.gnu.org/ml/java/2005-05/msg00260.html</a></li>
  570.  
  571.         <li>QT4 AWT peers, enable by giving configure
  572.         <code>--enable-qt-peer</code>.  Included, but not ready for
  573.         production yet. They are explicitly disabled and not supported.
  574.         But if you want to help with the development of these new
  575.         features we are interested in feedback. You will have to
  576.         explicitly enable them to try them out (and they will most
  577.         likely contain bugs).</li>
  578.  
  579.         <li>Documentation fixes all over the place.  See
  580.         <a href="http://developer.classpath.org/doc/">
  581.         http://developer.classpath.org/doc/</a></li>
  582.       </ul>
  583.     </li>
  584.       </ul>
  585.     </li>
  586.   </ul>
  587. <h2>New Targets and Target Specific Improvements</h2>
  588.  
  589. <h3>IA-32/x86-64</h3>
  590.   <ul>
  591.     <li>The x86-64 medium model (that allows building applications whose data
  592.     segment exceeds 4GB) was redesigned to match latest ABI draft.  New
  593.     implementation split large datastructures into separate segment
  594.     improving performance of accesses to small datastructures and also
  595.     allows linking of small model libraries into medium model programs as
  596.     long as the libraries are not accessing the large datastructures
  597.     directly.  Medium model is also supported in position independent code
  598.     now.
  599.         <p>
  600.     The ABI change results in partial incompatibility among medium
  601.     model objects. Linking medium model libraries (or objects) compiled
  602.     with new compiler into medium model program compiled with older will
  603.     likely result in exceeding ranges of relocations.</p>
  604.     <p>
  605.     Binutils 2.16.91 or newer are required for compiling medium model
  606.     now.</p></li>
  607.   </ul>
  608.  
  609. <h3>RS6000 (POWER/PowerPC)</h3>
  610.   <ul>
  611.     <li>The AltiVec vector primitives in <code><altivec.h></code> are
  612.     now implemented in a way that puts a smaller burden on the
  613.     preprocessor, instead processing the "overloading" in the front ends.
  614.     This should benefit compilation speed on AltiVec vector code.</li>
  615.     <li>AltiVec initializers now are generated more efficiently.</li>
  616.     <li>The popcountb instruction available on POWER5 now is generated.</li>
  617.     <li>The floating point round to integer instructions available on
  618.     POWER5+ now is generated.</li>
  619.     <li>Floating point divides can be synthesized using the floating
  620.     point reciprocal estimate instructions.</li>
  621.     <li>Double precision floating point constants are initialized as single
  622.     precision values if they can be represented exactly.</li>
  623.   </ul>
  624.  
  625. <h3>S/390, zSeries and System z9</h3>
  626.   <ul>
  627.     <li>Support for the IBM System z9 109 processor has been added.  When
  628.     using the <code>-march=z9-109</code> option, the compiler will
  629.     generate code making use of instructions provided by the extended
  630.     immediate facility.</li>
  631.     <li>Support for 128-bit IEEE floating point has been added.  When using
  632.     the <code>-mlong-double-128</code> option, the compiler will map the
  633.     <code>long double</code> data type to 128-bit IEEE floating point.
  634.     Using this option constitutes an ABI change, and requires glibc
  635.     support.</li>
  636.     <li>Various changes to improve performance of generated code have been
  637.     implemented, including:
  638.       <ul>
  639.     <li>In functions that do not require a literal pool, register
  640.         <code>%r13</code> (which is traditionally reserved as literal pool
  641.         pointer), can now be freely used for other purposes by the
  642.         compiler.</li>
  643.     <li>More precise tracking of register use allows the compiler to
  644.         generate more efficient function prolog and epilog code in certain
  645.         cases.</li>
  646.     <li>The <code>SEARCH STRING</code>, <code>COMPARE LOGICAL
  647.         STRING</code>, and <code>MOVE STRING</code> instructions are now
  648.         used to implement C string functions.</li>
  649.     <li>The <code>MOVE CHARACTER</code> instruction with single byte
  650.         overlap is now used to implement the <code>memset</code> function
  651.         with non-zero fill byte.</li>
  652.     <li>The <code>LOAD ZERO</code> instructions are now used where
  653.         appropriate.</li>
  654.     <li>The <code>INSERT CHARACTERS UNDER MASK</code>, <code>STORE
  655.         CHARACTERS UNDER MASK</code>, and <code>INSERT IMMEDIATE</code>
  656.         instructions are now used more frequently to optimize bitfield
  657.         operations.</li>
  658.     <li>The <code>BRANCH ON COUNT</code> instruction is now used more
  659.         frequently.  In particular, the fact that a loop contains a
  660.         subroutine call no longer prevents the compiler from using this
  661.         instruction.</li>
  662.     <li>The compiler is now aware that all shift and rotate instructions
  663.         implicitly truncate the shift count to six bits.</li>
  664.       </ul></li>
  665.     <li>Back-end support for the following generic features has been
  666.     implemented:
  667.       <ul>
  668.     <li>The full set of
  669.         <a href="http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html">
  670.         built-in functions for atomic memory access</a>.</li>
  671.     <li>The <code>-fstack-protector</code> feature.</li>
  672.     <li>The optimization pass avoiding unnecessary stores of incoming 
  673.         argument registers in functions with variable argument list.</li>
  674.       </ul></li>
  675.   </ul>
  676.  
  677. <h3>SPARC</h3>
  678.   <ul>
  679.     <li>The default code model in 64-bit mode has been changed from
  680.     Medium/Anywhere to Medium/Middle on Solaris.</li>
  681.     <li>TLS support is disabled by default on Solaris prior to release 10.
  682.     It can be enabled on TLS-capable Solaris 9 versions (4/04 release and
  683.     later) by specifying <code>--enable-tls</code> at configure time.</li>
  684.   </ul>
  685.  
  686. <h3>MorphoSys</h3>
  687.   <ul>
  688.     <li>Support has been added for this new architecture.</li>
  689.   </ul>
  690.  
  691. <h2><a name="obsolete_systems">Obsolete Systems</a></h2>
  692.  
  693. <h2>Documentation improvements</h2>
  694.  
  695. <h2>Other significant improvements</h2>
  696.  
  697.   <ul>
  698.     <li>GCC can now emit code for protecting applications from stack-smashing
  699.     attacks.  The protection is realized by buffer overflow detection and
  700.     reordering of stack variables to avoid pointer corruption.</li>
  701.  
  702.     <li>Some built-in functions have been fortified to protect them against
  703.     various buffer overflow (and format string) vulnerabilities. Compared
  704.     to the mudflap bounds checking feature, the safe builtins have far
  705.     smaller overhead.  This means that programs built using safe builtins
  706.     should not experience any measurable slowdown.</li>
  707.   </ul>
  708.  
  709. <h2><a name="4.1.2">GCC 4.1.2</a></h2>
  710.  
  711. <p>This is the <a
  712. href="http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2">list
  713. of problem reports (PRs)</a> from GCC's bug tracking system that are
  714. known to be fixed in the 4.1.2 release. This list might not be
  715. complete (that is, it is possible that some PRs that have been fixed
  716. are not listed here).</p>
  717.  
  718. <p>
  719.   When generating code for a shared library, GCC now recognizes that
  720.   global functions may be replaced when the program runs.  Therefore,
  721.   it is now more conservative in deducing information from the bodies
  722.   of functions.  For example, in this example:
  723. </p>
  724.  
  725.   <pre>
  726.     void f() {}
  727.     void g() { 
  728.      try { f(); } 
  729.      catch (...) { 
  730.        cout << "Exception";
  731.      }
  732.     }
  733.   </pre>
  734.  
  735. <p>
  736.   G++ would previously have optimized away the catch clause, since it
  737.   would have concluded that <code>f</code> cannot throw exceptions.
  738.   Because users may replace <code>f</code> with another function in
  739.   the main body of the program, this optimization is unsafe, and is no
  740.   longer performed.  If you wish G++ to continue to optimize as
  741.   before, you must add a <code>throw()</code> clause to the
  742.   declaration of <code>f</code> to make clear that it does not throw
  743.   exceptions. 
  744. </p>  
  745.  
  746.  
  747.  
  748.  
  749. <!-- ==================================================================== -->
  750.  
  751. <div class="copyright">
  752.  
  753. <p>Please send FSF & GNU inquiries & questions to
  754. <a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
  755. There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
  756. to contact</a> the FSF.</p>
  757.  
  758. <p>These pages are maintained by
  759. <a href="http://gcc.gnu.org/about.html">the GCC team</a>.</p>
  760.  
  761. <address>For questions related to the use of GCC, please consult these web
  762. pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
  763. that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
  764. mailing list might help.<br />
  765. Please send comments on these web pages and the development of GCC to our
  766. developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
  767. or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.  All of our lists
  768. have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
  769. </address>
  770.  
  771. <p>Copyright (C) Free Software Foundation, Inc.,
  772. 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.</p>
  773. <p>Verbatim copying and distribution of this entire article is
  774. permitted in any medium, provided this notice is preserved.</p>
  775.  
  776. <table width="100%" border="0"><tr><td>
  777.   <!-- IGNORE DIFF -->Last modified 2007-02-14
  778. </td><td align="right" valign="bottom">
  779.   <a href="http://validator.w3.org/check/referer">
  780.       <img src="http://www.w3.org/Icons/valid-xhtml10"
  781.      alt="Valid XHTML 1.0" border="0" width="88" height="31" />
  782.    
  783.   </a>
  784. </td></tr></table>
  785.  
  786. </div>
  787.  
  788. <!-- ==================================================================== -->
  789.  
  790. </body>
  791.      </html>
  792.   
  793.  
  794.