You are viewing nickclifton

Previous Entry | Next Entry

Novemeber 2012 GNU Toolchain Update

Deep Thought
Hi Guys,

  One month on and the GCC sources are now in a lot better shape.  The cause for most of the problems last month was that a new register allocator pass has been brought in to GCC.  This pass - LRA or Local Register Allocator - is meant to be simpler, easier to debug, and provide a better job of register allocation.   It is still rather new however, which is why there were so many problems last month.  A lot of these have been sorted out now, which is good news as the 4.8 branch will be happening soon.

  A paper describing the LRA pass was presented at the GNU Tools Cauldron this year, and you can find a copy of it here:

  http://gcc.gnu.org/wiki/cauldron2012?action=AttachFile&do=get&target=Local_Register_Allocator_Project_Detail.pdf

  Another tool that was presented at the GNU Tools Cauldron and which has now made it into the official GCC sources is Google's Address Sanitizer:
 
http://gcc.gnu.org/wiki/cauldron2012#Finding_races_and_memory_errors_with_GCC_instrumentation_.28AddressSanitizer.29

  This is a memory error detector that is enabled via the new -faddress-sanitizer command line option.  It augments memory access instructions in order to detect use-after-free and out-of-bound accesses to objects on the heap. 


  There are a couple of new warning options as well:
 
    -Wabi-tag

  This is a C++ warning which triggers if a subobject has an abi_tag attribute that the complete object type does not have.  ABI tags are used to annotate functions and classes where the ABI that the implementation has changed.  So if a tag is applied to a component of an object, but not also applied to the entire class then problems can still arise.

   -Wreturn-local-addr

  This issues a warning when a function returns a pointer (or in C++, a reference) to a variable that goes out of scope after the function returns.  This warning is actually enabled by default, so the only real use of the command line option is its inverse.  Ie:
  -Wno-return-local-addr.


  A couple of minor new features have also been added:
 
    -fno-canonical-system-headers

  This tells the compiler that when the preprocessor is running it should not change system header paths by expanding symbolic links, or resolving references to "../" and "./".

 
    -fext-numeric-literals

  In C++, accept imaginary, fixed-point, or machine-defined literal number suffixes as GNU extensions.  When this option is turned off these suffixes are treated as C++11 user-defined literal numeric suffixes.  This is on by default for all pre-C++11 dialects and all GNU dialects, but off by default for ISO C++11 onwards (option -std=c++11).

 
     -gsplit-dwarf
    
  This tells the compiler driver to separate as much dwarf debugging information as possible into a separate output file with the extension .dwo.  This option allows the build system to avoid linking files with debug information.  To be useful, this option requires a debugger capable of reading .dwo files.

  This was already possible using explicit linker and objcopy command lines, but this feature allows the process to be automated by the gcc compiler driver.
 
Cheers
  Nick

Comments

( 1 comment — Leave a comment )
Miles Bader
Nov. 22nd, 2012 04:35 am (UTC)
die, reload, die!
Note that LRA isn't a replacement for the general register allocator (IRA), but for for the greatly reviled reload. Reload is one of the most quirky, confusing, and hard to deal with parts of gcc, so this is a change that has long been anticipated.

When all ports have been moved to LRA and the old reload code is finally deleted, it will be a time of great joy... :]
( 1 comment — Leave a comment )

Profile

Deep Thought
nickclifton
nickclifton

Latest Month

July 2014
S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
Powered by LiveJournal.com
Designed by chasethestars