Installing and Using Red Hat Developer Toolset
Edition 1
Legal Notice
Abstract
- Preface
- I. Introduction
- II. Development Tools
- III. Performance Monitoring Tools
- IV. Integrated Development Environments
- V. Getting Help
- A. Changes in Version 1.0
- B. Changes in Version 1.1
- C. Revision History
- Index
Mono-spaced Bold
To see the contents of the filemy_next_bestselling_novelin your current working directory, enter thecat my_next_bestselling_novelcommand at the shell prompt and press Enter to execute the command.
Press Enter to execute the command.Press Ctrl+Alt+F2 to switch to a virtual terminal.
mono-spaced bold. For example:
File-related classes includefilesystemfor file systems,filefor files, anddirfor directories. Each class has its own associated set of permissions.
Choose → → from the main menu bar to launch Mouse Preferences. In the Buttons tab, select the Left-handed mouse check box and click to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand).To insert a special character into a gedit file, choose → → from the main menu bar. Next, choose → from the Character Map menu bar, type the name of the character in the Search field and click . The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the button. Now switch back to your document and choose → from the gedit menu bar.
Mono-spaced Bold Italic or Proportional Bold Italic
To connect to a remote machine using ssh, typesshat a shell prompt. If the remote machine isusername@domain.nameexample.comand your username on that machine is john, typessh john@example.com.Themount -o remountcommand remounts the named file system. For example, to remount thefile-system/homefile system, the command ismount -o remount /home.To see the version of a currently installed package, use therpm -qcommand. It will return a result as follows:package.package-version-release
Publican is a DocBook publishing system.
mono-spaced roman and presented thus:
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
mono-spaced roman but add syntax highlighting as follows:
static int kvm_vm_ioctl_deassign_device(struct kvm *kvm,
struct kvm_assigned_pci_dev *assigned_dev)
{
int r = 0;
struct kvm_assigned_dev_kernel *match;
mutex_lock(&kvm->lock);
match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
assigned_dev->assigned_dev_id);
if (!match) {
printk(KERN_INFO "%s: device hasn't been assigned before, "
"so cannot be deassigned\n", __func__);
r = -EINVAL;
goto out;
}
kvm_deassign_device(kvm, match);
kvm_free_assigned_device(kvm, match);
out:
mutex_unlock(&kvm->lock);
return r;
}Note
Important
Warning
- search or browse through a knowledgebase of technical support articles about Red Hat products.
- submit a support case to Red Hat Global Support Services (GSS).
- access other product documentation.
Table of Contents
- Red Hat Developer Toolset can be used on multiple major and minor releases of Red Hat Enterprise Linux, as detailed in Section 1.3, “Compatibility”.
Important
/opt directory and is explicitly enabled by the user on demand using the supplied scl utility.
- Support for the Fortran programming language.
- Experimental support for the C++11 standard.
- Experimental support for C++11 atomic types and Transactional Memory.
- Improved support for link-time optimization (LTO).
- Improved support for interprocedural optimization.
- New
-Ofastgeneral optimization level. - New string length optimization pass.
- Various compile time and memory usage improvements.
- Support for OpenMP 3.1, an API specification for parallel programming.
- Optimization for various new Intel and AMD processors.
- Improved and expanded support for Python scripting.
- Improved handling of C++ debugee executables.
- Improved inferior control commands.
- Improved support for ambiguous line specifications.
- Improved tracepoint support.
- Multi-program debugging.
- The new
goldlinker, which is smaller and faster thanld. Note thatgoldis not the default linker and must be explicitly enabled by using thealternativescommand. - Support for link-time optimization (LTO) in conjunction with GCC.
- Support for build-IDs, unique numbers to identify executables.
- Support for the
IFUNCandUNIQUEsymbols that are used byglibcto improve performance. Due to dependencies on a particular version of theglibclibrary, these symbols are only available on Red Hat Enterprise Linux 6. - Compressed debug sections for smaller debug info files.
Table 1.1. Red Hat Developer Toolset 1.1 Compatibility Matrix
| “Run on” | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| < 5.6 | 5.6 EUS | 5.7 | 5.8 | 5.9 | 6.0 EUS | 6.1 EUS | 6.2 EUS | 6.3 | 6.4 | ||||
| “Build with” | < 5.6 | Unsupported version of the Red Hat Enterprise Linux host | |||||||||||
| 5.6 EUS |
|
|
|
|
|
|
|
|
|
| |||
| 5.7 | Unsupported version of the Red Hat Enterprise Linux host | ||||||||||||
| 5.8 | Unsupported version of the Red Hat Enterprise Linux host | ||||||||||||
| 5.9 |
|
|
|
|
|
|
|
|
|
| |||
| 6.0 EUS | Unsupported version of the Red Hat Enterprise Linux host | ||||||||||||
| 6.1 EUS |
|
|
|
|
|
|
|
|
|
| |||
| 6.2 EUS |
|
|
|
|
|
|
|
|
|
| |||
| 6.3 |
|
|
|
|
|
|
|
|
|
| |||
| 6.4 |
|
|
|
|
|
|
|
|
|
| |||
| |||||||||||||
Important
Table 1.2. Subscriptions that provide Red Hat Developer Toolset
| SKU | Subscription Name |
|---|---|
| RH2282403 | Red Hat Enterprise Linux Developer Support, Professional |
| RH2264664 | Red Hat Enterprise Linux Developer Support, Enterprise |
| RH2262474 | Red Hat Enterprise Linux Developer Suite |
| RH3482727 | Red Hat Enterprise Linux Developer Workstation, Professional |
| RH3413336 | Red Hat Enterprise Linux Developer Workstation, Enterprise |
| RH3414706 | 30 day Self-Supported Red Hat Enterprise Linux Developer Workstation Evaluation |
| RH3474212 | 60 day Supported Red Hat Enterprise Linux Developer Workstation Evaluation |
| RH3437268 | 90 day Supported Red Hat Enterprise Linux Developer Workstation Evaluation |
| SER0402 | 1-year Unsupported Partner Evaluation Red Hat Enterprise Linux |
| SER0403 | 1-year Unsupported Red Hat Advanced Partner Subscription |
- Display a list of all channels that are available to you in order to determine the exact name of the Red Hat Developer Toolset channel. To do so, type the following at a shell prompt as
root:rhn-channel --available-channelsThe name of the channel depends on the specific version of Red Hat Enterprise Linux you are using and is in therhel-format, wherearchitecture-variant-dts-versionarchitectureis the system's CPU architecture (x86_64ori386),variantis the Red Hat Enterprise Linux system variant (serverorworkstation), andversionis the Red Hat Enterprise Linux system version (5or6). - Subscribe the system to the Red Hat Developer Toolset channel by running the following command as
root:rhn-channel --add --channel=channel_nameReplacechannel_namewith the name you determined in the previous step. - To verify the list of channels you are subscribed to, at any time, run as
root:rhn-channel --list
- Display a list of all subscriptions that are available for your system to determine the pool ID of a subscription that provides Red Hat Developer Toolset. To do so, type the following at a shell prompt as
root:subscription-manager list --availableFor each available subscription, this command displays its name, unique identifier, expiration date, and other details related to your subscription. The pool ID is listed on a line beginning withPool Id.For a complete list of subscriptions that provide access to Red Hat Developer Toolset, refer to Table 1.2, “Subscriptions that provide Red Hat Developer Toolset”. - Attach the appropriate subscription to your system by running the following command as
root:subscription-manager subscribe --pool=pool_idReplacepool_idwith the pool ID you determined in the previous step. To verify the list of subscriptions your system has currently attached, at any time, run asroot:subscription-manager list --consumed - Display a list of available Yum repositories to retrieve repository metadata and to determine the exact name of the Red Hat Developer Toolset repositories. As
root, type:yum repolist allThe repository names depend on the specific version of Red Hat Enterprise Linux you are using, and are in the following format:rhel-
variant-dts-version-rpms rhel-variant-dts-version-debug-rpms rhel-variant-dts-version-source-rpmsReplacevariantwith the Red Hat Enterprise Linux system variant (serverorworkstation), andversionwith the Red Hat Enterprise Linux system version (5or6). - Enable the appropriate repository. On Red Hat Enterprise Linux 6, you can do so by running the following command as
root:yum-config-manager --enablerepositoryOn Red Hat Enterprise Linux 5, which does not support theyum-config-managertool, edit the/etc/yum.repos.d/redhat.repofile, locate the relevant[section, and set the value of therepository]enabledoption to1:enabled = 1
root:
yum install devtoolset-1.1scl utility, and other dependent packages to the system. You can also install any of the additional packages listed in the Package Manifest section of the Red Hat Developer Toolset 1.1 Release Notes by running the command in the following form as root:
yum install package_nameyum install libitm devtoolset-1.1-gdb-gdbserverroot:
debuginfo-install package_nameroot:
yum remove devtoolset-1.0-gcc-debuginforoot to update your Red Hat Enterprise Linux installation:
yum updateroot:
debuginfo-install package_nameroot:
yum remove devtoolset-1.1\*scl utility as well, type as root:
yum remove scl-utils\*Online Documentation
- Red Hat Subscription Management Guide — The Red Hat Subscription Management Guide provides detailed information on how to manage subscriptions on Red Hat Enterprise Linux.
- Red Hat Developer Toolset 1.1 Release Notes — The Release Notes for Red Hat Developer Toolset 1.1 contain more information about this product.
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides more information on the Eclipse IDE, libraries and runtime support, compiling and building, debugging, and profiling on this system.
- Red Hat Enterprise Linux 6 Installation Guide — The Installation Guide for Red Hat Enterprise Linux 6 explains how to obtain, install, and update the system.
- Red Hat Enterprise Linux 5 Installation Guide — The Installation Guide for Red Hat Enterprise Linux 5 explains how to obtain, install, and update the system.
- Red Hat Enterprise Linux 6 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 6 documents relevant information regarding the deployment, configuration, and administration of Red Hat Enterprise Linux 6.
- Red Hat Enterprise Linux 5 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 5 documents relevant information regarding the deployment, configuration, and administration of Red Hat Enterprise Linux 5.
See Also
- Appendix B, Changes in Version 1.1 provides a comprehensive list of changes and improvements over the Red Hat Enterprise Linux system versions of the GNU Compiler Collection, GNU Debugger, and binutils, as well as information about the language, ABI, and debugging compatibility.
Table of Contents
gcc compiler as follows:
scl enable devtoolset-1.1 'gcc -o output_file source_file...'output_file in the current working directory. If the -o option is omitted, the compiler creates a file named a.out by default.
scl enable devtoolset-1.1 'gcc -o object_file -c source_file'object_file. If the -o option is omitted, the compiler creates a file named after the source file with the .o file extension. To link object files together and create a binary file, run:
scl enable devtoolset-1.1 'gcc -o output_file object_file...'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset gcc as default:
scl enable devtoolset-1.1 'bash'Note
gcc you are using at any point, type the following at a shell prompt:
which gccgcc executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset gcc:
gcc -vImportant
Example 2.1. Compiling a C Program on the Command Line
hello.c with the following contents:
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }
gcc compiler from Red Hat Developer Toolset, type:
~]$ scl enable devtoolset-1.1 'gcc -o hello hello.c'hello in the current working directory.
gcc compiles a program, it creates an executable binary file. To run this program on the command line, change to the directory with the executable file and type:
./file_nameExample 2.2. Running a C Program on the Command Line
hello binary file as shown in Example 2.1, “Compiling a C Program on the Command Line”, you can run it by typing the following at a shell prompt:
~]$ ./hello
Hello, World!g++ compiler as follows:
scl enable devtoolset-1.1 'g++ -o output_file source_file...'output_file in the current working directory. If the -o option is omitted, the g++ compiler creates a file named a.out by default.
scl enable devtoolset-1.1 'g++ -o object_file -c source_file'object_file. If the -o option is omitted, the g++ compiler creates a file named after the source file with the .o file extension. To link object files together and create a binary file, run:
scl enable devtoolset-1.1 'g++ -o output_file object_file...'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset g++ as default:
scl enable devtoolset-1.1 'bash'Note
g++ you are using at any point, type the following at a shell prompt:
which g++g++ executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset g++:
g++ -vImportant
Example 2.3. Compiling a C++ Program on the Command Line
hello.cpp with the following contents:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "Hello, World!" << endl; return 0; }
g++ compiler from Red Hat Developer Toolset, type:
~]$ scl enable devtoolset-1.1 'g++ -o hello hello.cpp'hello in the current working directory.
g++ compiles a program, it creates an executable binary file. To run this program on the command line, change to the directory with the executable file and type:
./file_nameExample 2.4. Running a C++ Program on the Command Line
hello binary file as shown in Example 2.3, “Compiling a C++ Program on the Command Line”, you can run it by typing the following at a shell prompt:
~]$ ./hello
Hello, World!gfortran compiler as follows:
scl enable devtoolset-1.1 'gfortran -o output_file source_file...'output_file in the current working directory. If the -o option is omitted, the compiler creates a file named a.out by default.
scl enable devtoolset-1.1 'gfortran -o object_file -c source_file'object_file. If the -o option is omitted, the compiler creates a file named after the source file with the .o file extension. To link object files together and create a binary file, run:
scl enable devtoolset-1.1 'gfortran -o output_file object_file...'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset gfortran as default:
scl enable devtoolset-1.1 'bash'Note
gfortran you are using at any point, type the following at a shell prompt:
which gfortrangfortran executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset gfortran:
gfortran -vImportant
Example 2.5. Compiling a Fortran Program on the Command Line
hello.f with the following contents:
program hello print *, "Hello, World!" end program hello
gfortran compiler from Red Hat Developer Toolset, type:
~]$ scl enable devtoolset-1.1 'gfortran -o hello hello.f'hello in the current working directory.
gfortran compiles a program, it creates an executable binary file. To run this program on the command line, change to the directory with the executable file and type:
./file_nameExample 2.6. Running a Fortran Program on the Command Line
hello binary file as shown in Example 2.5, “Compiling a Fortran Program on the Command Line”, you can run it by typing the following at a shell prompt:
~]$ ./hello
Hello, World!Installed Documentation
- gcc(1) — The manual page for the
gcccompiler provides detailed information on its usage; with few exceptions,g++accepts the same command line options asgcc. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man gcc' - gfortran(1) — The manual page for the
gfortrancompiler provides detailed information on its usage. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man gfortran' - C++ Standard Library Documentation — Documentation on the C++ standard library can be optionally installed by typing the following at a shell prompt as
root:yum install devtoolset-1.1-libstdc++-docsOnce installed, HTML documentation is available at/opt/rh/devtoolset-1.1/root/usr/share/doc/devtoolset-1.1-libstdc++-docs-4.7.2/html/index.html.
Online Documentation
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides in-depth information about GCC.
- Using the GNU Compiler Collection — The official GCC manual provides an in-depth description of the GNU compilers and their usage.
- The GNU C++ Library — The GNU C++ library documentation provides detailed information about the GNU implementation of the standard C++ library.
- The GNU Fortran Compiler — The GNU Fortran compiler documentation provides detailed information on
gfortran's usage.
See Also
- Section B.1, “Changes in GCC 4.7.2” provides a comprehensive list of features and improvements over the Red Hat Enterprise Linux system version of the GNU Compiler Collection, as well as information about the language, ABI, and debugging compatibility.
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 3, GNU Debugger (GDB) provides information on how to debug programs written in C, C++, and Fortran.
- Chapter 4, binutils explains how to use the binutils, a collection of binary tools to inspect and manipulate object files and binaries.
- Chapter 5, elfutils explains how to use elfutils, a collection of binary tools to inspect and manipulate ELF files.
- Chapter 10, Eclipse provides a general introduction to the Eclipse development environment, and describes how to use it with the tools from Red Hat Developer Toolset.
Compiling Programs with Debugging Information
gcc compiler is run with the -g option. To do so on the command line, use a command in the following form:
scl enable devtoolset-1.1 'gcc -g -o output_file input_file...'scl enable devtoolset-1.1 'g++ -g -o output_file input_file...'Example 3.1. Compiling a C Program With Debugging Information
fibonacci.c with the following contents:
#include <stdio.h> #include <limits.h> int main (int argc, char *argv[]) { unsigned long int a = 0; unsigned long int b = 1; unsigned long int sum; while (b < LONG_MAX) { printf("%ld ", b); sum = a + b; a = b; b = sum; } return 0; }
~]$ scl enable devtoolset-1.1 'gcc -g -o fibonacci fibonacci.c'fibonacci in the current working directory.
Installing Debugging Information for Existing Packages
root:
debuginfo-installpackage_name
debuginfo-install utility to be available on your system.
Example 3.2. Installing Debugging Information for the glibc Package
~]# debuginfo-install glibc
Loaded plugins: product-id, refresh-packagekit, subscription-manager
--> Running transaction check
---> Package glibc-debuginfo.x86_64 0:2.12-1.47.el6_2.5 will be installed
...scl enable devtoolset-1.1 'gdb file_name'gdb debugger in interactive mode and displays the default prompt, (gdb). To quit the debugging session and return to the shell prompt, run the following command at any time:
quitscl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset gdb as default:
scl enable devtoolset-1.1 'bash'Note
gdb you are using at any point, type the following at a shell prompt:
which gdbgdb executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset gdb:
gdb -vExample 3.3. Running the gdb Utility on the fibonacci Binary File
fibonacci binary file as shown in Example 3.1, “Compiling a C Program With Debugging Information”, you can start debugging it with gdb by typing the following at a shell prompt:
~]$ scl enable devtoolset-1.1 'gdb fibonacci'
GNU gdb (GDB) Red Hat Enterprise Linux (7.4.50.20120120-43.el6)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb)listgdb displays first ten lines of the source code and any subsequent use of this command lists another ten lines. Once you start the execution, gdb displays the lines that are surrounding the line on which the execution stops, typically when you set a breakpoint.
list[file_name:]line_number
list[file_name:]function_name
list command displays by running the following command:
setlistsizenumber
Example 3.4. Listing the Source Code of the fibonacci Binary File
fibonacci.c file listed in Example 3.1, “Compiling a C Program With Debugging Information” has exactly 17 lines. Assuming that you have compiled it with debugging information and you want the gdb utility to be capable of listing the entire source code, you can run the following command to change the number of listed lines to 20:
(gdb) set listsize 20list command with no additional arguments:
(gdb) list
1 #include <stdio.h>
2 #include <limits.h>
3
4 int main (int argc, char *argv[]) {
5 unsigned long int a = 0;
6 unsigned long int b = 1;
7 unsigned long int sum;
8
9 while (b < LONG_MAX) {
10 printf("%ld ", b);
11 sum = a + b;
12 a = b;
13 b = sum;
14 }
15
16 return 0;
17 }Setting a New Breakpoint
break[file_name:]line_number
break[file_name:]function_name
Example 3.5. Setting a New Breakpoint
fibonacci.c file listed in Example 3.1, “Compiling a C Program With Debugging Information” with debugging information, you can set a new breakpoint at line 10 by running the following command:
(gdb) break 10
Breakpoint 1 at 0x4004e5: file fibonacci.c, line 10.Listing Breakpoints
infobreakpoints
Example 3.6. Listing Breakpoints
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000004004e5 in main at fibonacci.c:10Deleting Existing Breakpoints
clearline_number
clearfunction_name
clear command with no additional arguments:
clearExample 3.7. Deleting an Existing Breakpoint
fibonacci.c file listed in Example 3.1, “Compiling a C Program With Debugging Information” with debugging information, you can set a new breakpoint at line 7 by running the following command:
(gdb) break 7
Breakpoint 2 at 0x4004e3: file fibonacci.c, line 7.(gdb) clear 7
Deleted breakpoint 2runrun command:
runargument…
Example 3.8. Executing the fibonacci Binary File
fibonacci binary file by running the following command:
(gdb) run
Starting program: /home/john/fibonacci
Breakpoint 1, main (argc=1, argv=0x7fffffffe4d8) at fibonacci.c:10
10 printf("%ld ", b);gdb utility allows you to display the value of almost anything that is relevant to the program, from a variable of any complexity to a valid expression or even a library function. However, the most common task is to display the value of a variable.
variable_name
Example 3.9. Displaying the Current Values of Variables
fibonacci binary stopped after reaching the breakpoint at line 10, you can display the current values of variables a and b as follows:
(gdb)print a$1 = 0 (gdb)print b$2 = 1
continuecontinue command in the following form:
continuenumber
gdb utility also allows you to stop the execution after executing a single line of code. To do so, run:
stepstep command in the following form:
stepnumber
Example 3.10. Continuing the Execution of the fibonacci Binary File
fibonacci binary stopped after reaching the breakpoint at line 10, you can resume the execution by running the following command:
(gdb) continue
Continuing.
Breakpoint 1, main (argc=1, argv=0x7fffffffe4d8) at fibonacci.c:10
10 printf("%ld ", b);(gdb) step 3
13 b = sum;sum variable before it is assigned to b:
(gdb) print sum
$3 = 2Online Documentation
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides more information on the GNU Debugger and debugging.
- GDB Documentation — The official GDB documentation includes the GDB User Manual and other reference material.
See Also
- Section B.2, “Changes in GDB 7.5” provides a comprehensive list of features and improvements over the Red Hat Enterprise Linux system version of the GNU Debugger.
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 2, GNU Compiler Collection (GCC) provides further information on how to compile programs written in C, C++, and Fortran.
- Chapter 10, Eclipse provides a general introduction to the Eclipse development environment, and describes how to use it with the tools from Red Hat Developer Toolset.
gold linker, several new command line options, improvements to the linker script language, and support for link-time optimization, compressed debug sections, and new instruction sets. For a detailed list of changes, refer to Section B.3, “Changes in binutils 2.23.51”.
Table 4.1. Tools Included in binutils for Red Hat Developer Toolset
as tool as follows:
scl enable devtoolset-1.1 'as [option...] -o object_file source_file'object_file in the current working directory.
scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset as as default:
scl enable devtoolset-1.1 'bash'Note
as you are using at any point, type the following at a shell prompt:
which asas executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset as:
as -vld tool as follows:
scl enable devtoolset-1.1 'ld [option...] -o output_file object_file...'output_file in the current working directory. If the -o option is omitted, the compiler creates a file named a.out by default.
scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset ld as default:
scl enable devtoolset-1.1 'bash'Note
ld you are using at any point, type the following at a shell prompt:
which ldld executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset ld:
ld -vscl enable devtoolset-1.1 'tool [option...] file_name'objdump tool to inspect an object file, type:
scl enable devtoolset-1.1 'objdump [option...] object_file'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset binary tools as default:
scl enable devtoolset-1.1 'bash'Note
which objdumpobjdump executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset objdump:
objdump -vInstalled Documentation
- as(1), ld(1), addr2line(1), ar(1), c++filt(1), elfedit(1), gprof(1), nm(1), objcopy(1), objdump(1), ranlib(1), readelf(1), size(1), strings(1), strip(1), — Manual pages for various binutils tools provide more information about their respective usage. To display a manual page for the version included in Red Hat Developer Toolset, type:
scl enable devtoolset-1.1 'mantool'
Online Documentation
- Documentation for binutils — The binutils documentation provides an in-depth description of the binary tools and their usage.
See Also
- Section B.3, “Changes in binutils 2.23.51” provides a comprehensive list of features and improvements over the Red Hat Enterprise Linux system version of binutils.
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 5, elfutils explains how to use elfutils, a collection of binary tools to inspect and manipulate ELF files.
- Chapter 2, GNU Compiler Collection (GCC) provides information on how to compile programs written in C, C++, and Fortran.
eu-objdump, eu-readelf, and other utilities that allow you to inspect and manipulate ELF files. Refer to Table 5.1, “Tools Included in elfutils for Red Hat Developer Toolset” for a complete list of binary tools that are distributed with the Red Hat Developer Toolset version of elfutils.
Table 5.1. Tools Included in elfutils for Red Hat Developer Toolset
scl enable devtoolset-1.1 'tool [option...] file_name'eu-objdump tool to inspect an object file, type:
scl enable devtoolset-1.1 'eu-objdump [option...] object_file'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset binary tools as default:
scl enable devtoolset-1.1 'bash'Note
which eu-objdumpeu-objdump executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset eu-objdump:
eu-objdump -VSee Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 4, binutils explains how to use the binutils, a collection of binary tools to inspect and manipulate object files and binaries.
- Chapter 2, GNU Compiler Collection (GCC) provides information on how to compile programs written in C, C++, and Fortran.
dwz replaces DWARF information representation with equivalent smaller representation where possible, and reduces the amount of duplication by using techniques from Appendix E of the DWARF Standard.
dwz utility is provided by the devtoolset-1.1-dwz package, and is automatically installed with devtoolset-1.1 as described in Section 1.5, “Installing Red Hat Developer Toolset”.
dwz tool as follows:
scl enable devtoolset-1.1 'dwz [option...] file_name'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset dwz as default:
scl enable devtoolset-1.1 'bash'Note
dwz you are using at any point, type the following at a shell prompt:
which dwzdwz executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset dwz:
dwz -vInstalled Documentation
- dwz(1) — The manual page for the
dwzutility provides detailed information on its usage. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man dwz'
See Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 2, GNU Compiler Collection (GCC) provides information on how to compile programs written in C, C++, and Fortran.
- Chapter 4, binutils explains how to use the binutils, a collection of binary tools to inspect and manipulate object files and binaries.
- Chapter 5, elfutils explains how to use elfutils, a collection of binary tools to inspect and manipulate ELF files.
Table of Contents
netstat, ps, top, and iostat, others include pretty-printed function callgraph traces or tools for working around security bugs.
Table 7.1. Tools Distributed with SystemTap for Red Hat Developer Toolset
SystemTap is provided by the devtoolset-1.1-systemtap package, and is automatically installed with devtoolset-1.1 as described in Section 1.5, “Installing Red Hat Developer Toolset”.
stap-prep utility as follows:
scl enable devtoolset-1.1 'stap-prep'root user, the utility automatically offers the packages for installation. For more information on how to install these packages on your system, refer to the Red Hat Enterprise Linux SystemTap Beginners Guide.
scl enable devtoolset-1.1 'tool [option...]'stap tool to build an instrumentation module, type:
scl enable devtoolset-1.1 'stap [option...] argument...'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset SystemTap as default:
scl enable devtoolset-1.1 'bash'Note
which stapstap executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset SystemTap:
stap -VInstalled Documentation
- stap(1) — The manual page for the
stapcommand provides detailed information on its usage, as well as references to other related manual pages. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man stap' - staprun(8) — The manual page for the
stapruncommand provides detailed information on its usage. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man staprun' - SystemTap Tapset Reference Manual — HTML documentation on the most common tapset definitions is located at
/opt/rh/devtoolset-1.1/root/usr/share/doc/devtoolset-1.1-systemtap-client-1.8/index.html.
Online Documentation
- Red Hat Enterprise Linux 6 SystemTap Beginners Guide — The SystemTap Beginners Guide for Red Hat Enterprise Linux 6 provides an introduction to SystemTap and its usage.
- Red Hat Enterprise Linux 5 SystemTap Beginners Guide — The SystemTap Beginners Guide for Red Hat Enterprise Linux 5 provides an introduction to SystemTap and its usage.
- Red Hat Enterprise Linux 6 SystemTap Tapset Reference — The SystemTap Tapset Reference for Red Hat Enterprise Linux 6 provides further details about SystemTap.
- Red Hat Enterprise Linux 5 SystemTap Tapset Reference — The SystemTap Tapset Reference for Red Hat Enterprise Linux 5 provides further details about SystemTap.
- The SystemTap Documentation — The official SystemTap documentation provides further documentation on SystemTap, as well as numerous examples of SystemTap scripts.
See Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 8, Valgrind explains how to use Valgrind to profile applications and detect memory errors and memory management problems, such as the use of uninitialized memory, improper allocation and freeing of memory, and the use of improper arguments in system calls.
- Chapter 9, OProfile explains how to use OProfile to determine which sections of code consume the greatest amount of CPU time and why.
Table 8.1. Tools Distributed with Valgrind for Red Hat Developer Toolset
scl enable devtoolset-1.1 'valgrind [--tool=tool] program [option...]'--tool command line option must be specified in lower case, and if this option is omitted, Valgrind uses Memcheck by default. For example, to run Cachegrind on a program to identify the sources of cache misses, type:
scl enable devtoolset-1.1 'valgrind --tool=cachegrind program [option...]'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset Valgrind as default:
scl enable devtoolset-1.1 'bash'Note
which valgrindvalgrind executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset Valgrind:
valgrind --versionInstalled Documentation
- valgrind(1) — The manual page for the
valgrindutility provides detailed information on how to use Valgrind. To display the manual page for the version included in Red Hat Developer Toolset, type:scl enable devtoolset-1.1 'man valgrind' - Valgrind Documentation — HTML documentation for Valgrind is located at
/opt/rh/devtoolset-1.1/root/usr/share/doc/devtoolset-1.1-valgrind-3.8.1/html/index.html.
Online Documentation
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides more information about Valgrind and its Eclipse plug-in.
- Red Hat Enterprise Linux 6 Performance Tuning Guide — The Performance Tuning Guide for Red Hat Enterprise Linux 6 provides more detailed information about using Valgrind to profile applications.
See Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 7, SystemTap provides an introduction to SystemTap and explains how to use it to monitor the activities of a running system.
- Chapter 9, OProfile explains how to use OProfile to determine which sections of code consume the greatest amount of CPU time and why.
root privileges to run.
Table 9.1. Tools Distributed with OProfile for Red Hat Developer Toolset
root:
scl enable devtoolset-1.1 'tool [option...]'ophelp command to list available events in the XML format, type:
scl enable devtoolset-1.1 'ophelp -X'scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset OProfile as default:
scl enable devtoolset-1.1 'bash'Note
which opcontrolopcontrol executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset OProfile:
opcontrol --versionInstalled Documentation
- oprofile(1) — The manual page named oprofile provides an overview of OProfile and available tools. To display the manual page for the version included in Red Hat Developer Toolset, type:
scl enable devtoolset-1.1 'man oprofile' - opannotate(1), oparchive(1), opcontrol(1), opgprof(1), ophelp(1), opimport(1), opreport(1) — Manual pages for various tools distributed with OProfile provide more information on their respective usage. To display the manual page for the version included in Red Hat Developer Toolset, type:
scl enable devtoolset-1.1 'mantool'
Online Documentation
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides more information on OProfile.
- Red Hat Enterprise Linux 6 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 6 describes in detail how to install, configure, and start using OProfile on this system.
- Red Hat Enterprise Linux 5 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 5 describes in detail how to install, configure, and start using OProfile on this system.
See Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 7, SystemTap provides an introduction to SystemTap and explains how to use it to monitor the activities of a running system.
- Chapter 8, Valgrind explains how to use Valgrind to profile applications and detect memory errors and memory management problems, such as the use of uninitialized memory, improper allocation and freeing of memory, and the use of improper arguments in system calls.
gcc or gdb) and Eclipse offer two distinct approaches to programming.
Eclipse is available to make it easier to install all packages that form the Eclipse integrated development environment at the same time.
Eclipse package group and all its dependencies on your system, type the following at a shell prompt as root:
yumgroupinstallEclipse
root:
yuminstalleclipse-\*
Note
scl enable devtoolset-1.1 'eclipse'gcc compiler and gdb debugger instead of the Red Hat Enterprise Linux system equivalents.
Important
scl utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalents. This allows you to run a shell session with Red Hat Developer Toolset gcc and gdb as the default compiler and debugger for Eclipse:
scl enable devtoolset-1.1 'bash'Note
gcc you are using at any point, type the following at a shell prompt:
which gccgcc executable path will begin with /opt. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset gcc:
gcc -v~/workspace/, which is the default option, or click the button to browse your file system and select a custom directory. You can also select the Use this as the default and do not ask again check box to prevent Eclipse from prompting you the next time you run it. When you are done, click the button to confirm the selection and proceed with the startup.
Installed Documentation
- Eclipse includes a built-in system which provides extensive documentation for each integrated feature and tool. This greatly decreases the initial time investment required for new developers to become fluent in its use. The use of this Help section is detailed in the Red Hat Enterprise Linux Developer Guide linked below.
Online Documentation
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides more information on Eclipse, including a description of the user interface, overview of available development toolkits, or instructions on how to use it to build RPM packages.
See Also
- Chapter 1, Red Hat Developer Toolset provides an overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 2, GNU Compiler Collection (GCC) provides information on how to compile programs written in C, C++, and Fortran on the command line.
Table of Contents
Red Hat Developer Toolset
- Red Hat Developer Toolset 1.1 Release Notes — The Release Notes for Red Hat Developer Toolset 1.1 provide more information about this product.
- Red Hat Developer Toolset 1.1 Software Collections Guide — The Software Collections Guide for Red Hat Developer Toolset 1.1 explains the concept of Software Collections and documents the
scltool.
Red Hat Enterprise Linux
- Red Hat Enterprise Linux 6 Developer Guide — The Developer Guide for Red Hat Enterprise Linux 6 provides detailed information about libraries and runtime support, compiling and building, debugging, and profiling.
- Red Hat Enterprise Linux 6 Installation Guide — The Installation Guide for Red Hat Enterprise Linux 6 explains how to obtain, install, and update the system.
- Red Hat Enterprise Linux 5 Installation Guide — The Installation Guide for Red Hat Enterprise Linux 5 explains how to obtain, install, and update the system.
- Red Hat Enterprise Linux 6 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 6 documents relevant information regarding the deployment, configuration, and administration of Red Hat Enterprise Linux 6.
- Red Hat Enterprise Linux 5 Deployment Guide — The Deployment Guide for Red Hat Enterprise Linux 5 documents relevant information regarding the deployment, configuration, and administration of Red Hat Enterprise Linux 5.
- Webinars
- The Webinars page contains information on upcoming Red Hat and open source events around the world. Here you can register for upcoming webinars or watch archived ones on demand.
- Success Stories
- Read the success stories of other Red Hat customers to learn how leading organizations are finding unbeatable value, performance, security and reliability with Red Hat solutions.
- Product Documentation
- This provides a list of links to the various Red Hat documents, including books for Red Hat Enterprise Linux, Identity Management and Infrastructure, Red Hat Enterprise Storage, JBoss Enterprise Middleware, and System Management.
- Reference Architectures
- Reference Architectures contains a list of whitepapers that detail technical case studies of solutions that have been built, tested, and bench-marked by senior Red Hat engineers. They explain the capabilities and limitations of a given solution, as well as detailed notes on how to implement the solution.
- Evaluations & Demos
- You can download free evaluations of various Red Hat products from here, including Red Hat Enterprise Linux, Red Hat Enterprise Virtualization, Red Hat Storage Appliance, and JBoss Enterprise Middleware evaluations.
- Certified Hardware
- This section has information on what systems, components, and peripherals Red Hat Enterprise Linux 6, 5, and 4 support.
- Getting Started
- The Getting Started page has links to information to help get up and running with Red Hat subscriptions, including product registration information, accessing your resources, and engaging in global support. It also has links to a Red Hat Welcome Kit and a Quick Guide to Red Hat Support.
- Downloads
- Here is where you can download all that Red Hat offers with descriptions of what each entails.
- Activate a New Subscription
- After purchasing a Red Hat subscription this is where you go to activate it. Note that the section requires you to enter your Red Hat login and password.
- Support Essentials
- Here you can find a list of articles and group discussions, viewable by new posts, most popular, and recent comments, as well as the most recent Red Hat errata.
- Security
- Red Hat releases errata to address bugs, provide enhancements, or to fix security vulnerabilities. With each erratum an advisory is supplied to give the details of the issues being fixed, as well as how to obtain and install the required software packages. This section has information about the errata, including:
- Checking the security update policy and lifetime for all Red Hat products
- Getting the latest security updates for Red Hat products
- Getting notified of new security updates
- Finding out if a specific CVE affects a Red Hat product
- Reporting a security vulnerability
- How we measure security vulnerabilities
- Security Response Team mission and standards of service
- Support
- This is where all the information regarding Red Hat support can be found, including links for:
- Support Cases
- Support Programs
- Product Life Cycles
- Supported Environments
- Help & Assistance
- Site Help
- Knowledgebase
- The Knowledgebase contains a large number of whitepapers on a variety of topics which can serve as another source of documentation for your project. Note that the section requires you to enter your Red Hat login and password.
- Groups
- This section allows users to join a group to collaborate on the documents. They can also create and comment on discussions to interact with other customers, Red Hat support staff, and certified engineers. Note that the section requires you to enter your Red Hat login and password.
- Videos
- A number of videos on how to get vital solutions, useful tips, product demonstrations, and inside information can be accessed from here. You can also rate and comment on all of the videos.
- Tech Briefs
- Tech briefs provide practical advice to help solve real-world problems with Red Hat products. Each tech brief provides a detailed use case covering best practices, how-to instructions, or detailed discussions on how to use Red Hat technology effectively, and are reviewed and tested by Red Hat engineers.
- Source
- This is the kernel source browser and contains links to all the kernel sources broken into each individual patch, unlike the kernel srpm which is shipped as one big patch. Note that the section requires you to enter your Red Hat login and password.
- Support Cases
- This is where users can view all their support cases, make changes or view any updates. Note that the section requires you to enter your Red Hat login and password.
Background Information
- Hardware type, make, and model on which the product runs
- Software version
- Latest upgrades
- Any recent changes to the system
- An explanation of the problem and the symptoms
- Any messages or significant information about the issue
Note
Diagnostics
root:
yuminstallsos
root:
sosreportAccount and Contact Information
- Red Hat customer number or Red Hat Network (RHN) login name
- Company name
- Contact name
- Preferred method of contact (phone or email) and contact information (phone number or email address)
Issue Severity
- Severity 1 (urgent)
- A problem that severely impacts your use of the software for production purposes. It halts your business operations and has no procedural work around.
- Severity 2 (high)
- A problem where the software is functioning but production is severely reduced. It causes a high impact to business operations and no work around exists.
- Severity 3 (medium)
- A problem that involves partial, non-critical loss of the use of the software. There is a medium to low impact on your business and business continues to function by utilizing a work around.
- Severity 4 (low)
- A general usage question, report of a documentation error, or a recommendation for a future product improvement.
- Technical escalation
- If an issue is not being resolved appropriately or if you need a more senior resource to attend to it.
- Management escalation
- If the issue has become more severe or you believe it requires a higher priority.
Important
Online Documentation
- Getting Started — The Getting Started page serves as a starting point for people who purchased a Red Hat subscription, and offers the Red Hat Welcome Kit and Quick Guide to Red Hat Support for download.
- How can a RHEL Self-Support subscription be used? — A Knowledgebase article for customers with a Self-Support subscription.
- Red Hat Global Support Services and public mailing lists — A Knowledgebase article that answers frequent questions about public Red Hat mailing lists.
-std=c++11 or -std=gnu++11 command line options. However, there is no guarantee for compatibility between C++11 code compiled by different versions of the compiler. Refer to Section A.1.3.1, “C++ ABI” for details.
libstdc++, supports a majority of the C++11 features. However, there is no or only partial support for some features such as certain properties on type traits or regular expressions. For details, refer to the libstdc++ documentation, which also lists implementation-defined behavior.
exception_ptr and future requires changes to the exception handling runtime in the system libstdc++ package. These changes will be distributed through the normal Z-stream channel. Refer to the Guidance on Experimental Features in gcc version 4.7.0 section in the Red Hat Developer Toolset 1.0 Release Notes for more information.
-std=c1x and -std=gnu1x command line options, gcc now accepts -std=c11 and -std=gnu11. Note that since this support is experimental, it may change incompatibly in future releases.
__STDC_UTF_16__ and __STDC_UTF_32__), nonreturning functions (_Noreturn and <stdnoreturn.h>), and alignment support (_Alignas, _Alignof, max_align_t, and <stdalign.h>).
- The GCC compilers support the OpenMP API specification for parallel programming, version 3.1. Refer to the OpenMP website for more information on this specification.
- The C++11 and C11 standards provide programming abstractions for multi-threaded programs. The respective standard libraries include programming abstractions for threads and thread-related features such as locks, condition variables, or futures. These new versions of the standard also define a memory model that precisely specifies the runtime behavior of a multi-threaded program, such as the guarantees provided by compilers and the constraints programmers have to pay attention to when writing multi-threaded programs.Note that support for the memory model is still experimental (see below for details). For more information about the status of support for C++11 and C11, refer to Section A.1.1.1, “C++11” and Section A.1.1.2, “C11” respectively.
C++11 Types and GCC Built-ins for Atomic Memory Access
atomic<T>, where T is the non-atomic base type and must be trivially copyable (for example, atomic<int> is an atomic integer). GCC does not yet support any base type T, but only those that can be accessed atomically with the atomic instructions offered by the target architecture. This is not a significant limitation in practice, given that atomics are primarily designed to expose hardware primitives in an architecture-independent fashion; pointers and integrals that are not larger than a machine word on the target are supported as base types. Using base types that are not yet supported results in link-time errors.
__sync) are still supported.
Transactional Memory
libitm, then ensures this atomicity guarantee when executing the compiled program. Compared to atomic memory accesses, it is a higher-level programming abstraction, because it is not limited to single memory locations, does not require special data types for the data it modifies, and because transactions can contain arbitrary code and be nested within other transactions (with some restrictions explained subsequently).
__transaction_atomic or __transaction_relaxed keywords followed by a compound statement or expression, respectively. The following example illustrates how to increment a global variable y if another variable x has a value less than 10:
__transaction_atomic { if (x < 10) y++; }x and y and store to y, all these memory accesses are virtually executed as one indivisible step.
init(data);
__transaction_atomic { data_public = true;} // data_public is initially false__transaction_atomic { if (data_public) use(data); }__transaction_atomic { temp = copy(data); if (data_public) use(temp); }copy(data) races with init(data) in the initializing thread, because this can be executed even if data_public is not true. Another example for data races is one thread accessing a variable x transactionally and another thread accessing it nontransactionally at potentially the same time. Note that the data can be safely reclaimed using code like this (assuming only one thread ever does this):
__transaction_atomic { data_public = false; }
destruct(data);destruct() does not race with potential concurrent uses of the data because after the transaction finishes, it is guaranteed that data_public is false and thus data is private. See the specification and the C++11 memory model for more background information about this.
__transaction_atomic) and relaxed transactions (__transaction_relaxed). The former guarantee atomicity with regard to all other code, but allow only code that is known to not include nontransactional kinds of synchronization, such as atomic or volatile memory access. In contrast, relaxed transactions allow all code (for example calls to I/O functions), but only provide atomicity with regard to other transactions. Therefore, atomic transactions can be nested within other atomic and relaxed transactions, but relaxed transactions can only be nested within other relaxed transactions. Furthermore, relaxed transactions are likely to be executed with less performance, but this depends on the implementation and available hardware.
transaction_safe function attribute to the declarations of these functions and by including this declaration when defining the function. In turn, GCC then verifies that the code in these functions is safe for atomic transactions and generates code accordingly. If the programmer does not follow these constraints and/or steps, compile-time or link-time errors occur. Note that within a compilation unit, GCC detects automatically whether a function is safe for use within transactions, and the attributes therefore typically do not need to be added. See the draft specification linked above for further details.
libitm is still experimental, and both the ABI and API could change in the future if this is required due to the evolution of the specification of the language constructs, or due to implementation requirements. Note that when executing applications built with the -gnu-tm command line option, it is currently a prerequisite to also have the appropriate version of the libitm.so.1 shared library installed. Refer to the Guidance on Experimental Features in gcc version 4.7.0 section in the Red Hat Developer Toolset 1.0 Release Notes for more information.
Table A.1. Processor Optimization Options
| Option | Description |
|---|---|
-march=core2 and -mtune=core2
| Optimization for Intel Core 2 processors. |
-march=corei7 and -mtune=corei7
| Optimization for Intel Core i3, i5, and i7 processors. |
-march=corei7-avx and -mtune=corei7-avx
| Optimization for Intel Core i3, i5, and i7 processors with AVX. |
-march=core-avx-i
| Optimization for the Intel processor code-named Ivy Bridge with RDRND, FSGSBASE, and F16C. |
-march=core-avx2
| Optimization for a next-generation processor from Intel with AVX2, FMA, BMI, BMI2, and LZCNT. |
-march=bdver2 and -mtune=bdver2
| Optimization for AMD family 15h processors code-named Piledriver. |
-march=btver1 and -mtune=btver1
| Optimization for AMD family 14 processors code-named Bobcat. |
-march=bdver1 and -mtune=bdver1
| Optimization for AMD family 15 processors code-named Bulldozer. |
Table A.2. Support for Processor-specific Intrinsics and Instructions
| Option | Description |
|---|---|
-mavx2
| Support for Intel AVX2 intrinsics, built-in functions, and code generation. |
-mbmi2
| Support for Intel BMI2 intrinsics, built-in functions, and code generation. |
-mlzcnt
|
Implementation and automatic generation of __builtin_clz* using the lzcnt instruction.
|
-mfma
| Support for Intel FMA3 intrinsics and code generation. |
-mfsgsbase
| Enables the generation of new segment register read/write instructions through dedicated built-ins. |
-mrdrnd
|
Support for the Intel rdrnd instruction.
|
-mf16c
| Support for two additional AVX vector conversion instructions. |
-mtbm
| Support for TBM (Trailing Bit Manipulation) built-in functions and code generation. |
-mbmi
| Support for AMD's BMI (Bit Manipulation) built-in functions and code generation. |
-mcrc32
|
Support for crc32 intrinsics.
|
-mmovbe
|
Enables the use of the movbe instruction to implement __builtin_bswap32 and __builtin_bswap64.
|
-mxop, -mfma4, and -mlwp
| Support for the XOP, FMA4, and LWP instruction sets for the AMD Orochi processors. |
-mabm
|
Enables the use of the popcnt and lzcnt instructions on AMD processors.
|
-mpopcnt
|
Enables the use of the popcnt instruction on both AMD and Intel processors.
|
-fexcess-precision=standard and disabled by -fexcess-precision=fast. This feature is enabled by default when using standards conformance options such as -std=c99.
-flto option needs to be specified at both compile time and link time. For further details, including interoperability with linkers and parallel execution of LTO, refer to the documentation for -flto in the GCC 4.7.0 Manual. Also note that the internal representation is not a stable interface, so LTO will only apply to code generated by the same version of GCC.
Note
-flto and the -g options together is unsupported in Developer Toolset.
-Ofast is now supported as a general optimization level. It operates similar to -O3, adds options that can yield better-optimized code, but in turn might invalidate standards compliance (for example, -ffast-math is enabled by -Ofast).
const, pure, and noreturn to functions declared in header files. Use the -Wsuggest-attribute=[const|pure|noreturn] command line option to enable this.
-Wall).
abort() or memcpy()) must be declared with extern "C" to be considered as a redeclaration, otherwise it is ill-formed.
Duplicate Member
struct declaration:
struct A { int *a; union { struct { int *a; }; }; };
.a actually refers to and one of the fields therefore needs to be renamed.
Header Dependency Changes
<iostream>, <string>, and other STL headers that previously included <unistd.h> as an implementation detail (to get some feature macros for gthr*.h purposes) no longer do so, because it was a C++ standard violation. This can result in diagnostic output similar to the following:
error: ‘truncate’ was not declared in this scope error: ‘sleep’ was not declared in this scope error: ‘pipe’ was not declared in this scope error: there are no arguments to 'offsetof' that depend on a template parameter, so a declaration of 'offsetof' must be available
#include <unistd.h><cstddef> to get namespace-std-scoped versions of size_t and ptrdiff_t. As such, C++ programs that used the macros NULL or offsetof without including <cstddef> will no longer compile. The diagnostic produced is similar to the following:
error: 'ptrdiff_t' does not name a type error: 'size_t' has not been declared error: 'NULL' was not declared in this scope error: there are no arguments to 'offsetof' that depend on a template parameter, so a declaration of 'offsetof' must be available
#include <cstddef>Name Lookup Changes
- is either in scope at the point of the template's definition, or
- can be found by argument-dependent lookup at the point of instantiation.
template<typename T> int t(T i) { return f(i); } int f(int i) { return i; } int main() { return t(1); }
In instantiation of ‘int t(T) [with T = int]’ required from here error: ‘f’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] note: ‘int f(int)’ declared here, later in the translation unit
f() before the definition of template function t(). The -fpermissive compiler flag turns compile-time errors into warnings and can be used as a temporary workaround.
Uninitialized const
struct A { int a; A (); }; struct B : public A { }; const B b;
error: uninitialized const ‘b’ [-fpermissive] note: ‘const struct B’ has no user-provided default constructor
B does not have a user-provided default constructor. Either an initializer needs to be provided, or the default constructor needs to be added.
Visibility of Template Instantiations
std::vector with hidden user defined types such as struct my_hidden_struct can now expect hidden visibility for std::vector<my_hidden_struct> symbols. As a result, users that compile with the -fvisibility=hidden command line option should be aware of the visibility of types included from the library headers used. If the header does not explicitly control symbol visibility, types from those headers will be hidden, along with instantiations that use those types. For instance, consider the following code:
#include <vector> // template std::vector has default visibility #include <ctime> // struct tm has hidden visibility template class std::vector<tm>; // instantiation has hidden visibility
<foo.h> is to create a forwarding header on the -I include path consisting of the following:
#pragma GCC visibility push(default) #include_next <foo.h> #pragma GCC visibility push
User-defined Literal Support
-std={c++11,c++0x,gnu++11,gnu++0x} command line option, GCC 4.7.0 unlike older versions supports user-defined literals, which are incompatible with some valid ISO C++03 code. In particular, white space is now needed after a string literal before something that could be a valid user defined literal. Consider the following code:
const char *p = "foobar"__TIME__;
__TIME__ macro expands to some string literal and is concatenated with the other one. In C++11, __TIME__ is not expanded and instead, operator "" __TIME__ is being looked up, which results in a warning like:
error: unable to find string literal operator ‘operator"" __TIME__’
Taking the Address of Temporary
struct S { S (); int i; }; void bar (S *); void foo () { bar (&S ()); }
-fpermissive compiler flag turns compile-time errors into warnings and can be used as a temporary workaround.
Miscellaneous
__cplusplus to the correct value: 199711L for C++98/03, and 201103L for C++11.
struct A { A(); }; struct B : A { int i; }; const B b = B();
typedef names used in a template, which may cause G++ to reject some ill-formed code that was accepted by earlier releases. The -fno-access-control option can be used as a temporary workaround until the code is corrected.
- the injected-class-name is not accessible because it is from a private base, or
- the injected-class-name cannot be used as an argument for a template parameter.
-fno-access-control, the second is only rejected with -pedantic.
-Wall option. Although these warnings do not result in compilation failure on their own, often -Wall is used in conjunction with -Werror, causing these warnings to act like errors. This section provides a list of these new or newly enabled warnings. Unless noted otherwise, these warnings apply to both C and C++.
-Wall command line option has changed and now includes the new warning flags -Wunused-but-set-variable and, with -Wall -Wextra, -Wunused-but-set-parameter. This may result in new warnings in code that compiled cleanly with previous versions of GCC. For example, consider the following code:
void fn (void) { int foo; foo = bar (); /* foo is never used. */ }
warning: variable "foo" set but not used [-Wunused-but-set-variable]
__attribute__((__unused__)). As a workaround, you can use the -Wno-error=unused-but-set-variable or -Wno-error=unused-but-set-parameter command line option.
-Wenum-compare option causes GCC to report a warning when values of different enum types are being compared. Previously, this option only worked for C++ programs, but now it works for C as well. This warning is enabled by -Wall and may be avoided by using a type cast.
-Wno-int-to-pointer-cast option, which is available for both C and C++.
-Wconversion. To disable these warnings, use the new -Wno-conversion-null command line option.
delete. This is unsafe to do because the pointer might refer to a base class that does not have a virtual destructor. The warning is enabled by -Wall and by a new command line option, -Wdelete-non-virtual-dtor.
-Wc++11-compat and -Wc++0x-compat options are now available. These options cause GCC to display a warning about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011 (such as identifiers in ISO C++ 1998 that are keywords in ISO C++ 2011). This warning is enabled by -Wall and enables the -Wnarrowing option.
-std=c++11 option is supported in Red Hat Developer Toolset 1.0 only when all C++ objects compiled with that flag have been built using the same major version of Red Hat Developer Toolset. The mixing of objects, binaries and libraries, built by the Red Hat Enterprise Linux 5 or 6 system toolchain GCC using the -std=c++0x or -std=gnu++0x flags, with those built with the -std=c++11 or -std=gnu++11 flags using the GCC in Red Hat Developer Toolset is explicitly not supported.
-std=c++11 or -std=gnu++11 options cannot be guaranteed, and so is not supported.
-std=c++98) can be freely mixed with binaries and shared libraries built by the Red Hat Enterprise Linux 5 or 6 system toolchain GCC. Red Hat recommends use of this default -std=c++98 mode for production software development.
Important
-Wabi will now display a warning about code that uses the old mangling.
strlen(), strchr(), strcpy(), strcat() and stpcpy() (as well as their respective _FORTIFY_SOURCE variants) by transforming them into custom, faster code. This means that there might be fewer or other calls to those functions than in the original source code. The optimization is enabled by default at -O2 or higher optimization levels. It is disabled when using -fno-optimize-strlen or when optimizing for size.
-fomit-frame-pointer is now enabled by default. The prior default setting can be chosen by using the -fno-omit-frame-pointer command line option.
-fexcess-precision=fast.
-gdwarf-2 -gstrict-dwarf or -gdwarf-3 -gstrict-dwarf options (the latter are handled partially by versions of GDB older than 7.0).
-gdwarf-2 -gstrict-dwarf options with those tools.
Note
-flto and the -g options together is unsupported in Developer Toolset.
gcc and g++ report an error when invalid command line options are used. In particular, when only linking and not compiling code, earlier versions of GCC ignored all options starting with --. For example, options accepted by the linker such as --as-needed and --export-dynamic are not accepted by gcc and g++ anymore, and should now be directed to the linker using -Wl,--as-needed or -Wl,--export-dynamic if that is intended.
-combine command line option is not accepted anymore.
Changes Since Red Hat Enterprise Linux 6.2
- Support for linespecs has been improved (in particular, a more consistent handling of ambiguous linespecs, some support for labels in the program's source, and FILE:LINE support now extends to further linespecs types). Breakpoints are now set on all matching locations in all inferiors and will be updated according to changes in the inferior.
- New inferior control commands
skip functionandskip filehave been added. These commands can be uses to skip certain functions and files when stepping. - The
info threadscommand now displays the thread name as set byprctlorpthread_setname_np. In addition, new commandsthread nameandthread findhave been added. Thethread namecommand accepts a name as an argument and can be used to set the name of the current thread. Thethread findcommand accepts a regular expression and allows the user to find threads that match it. - GDB now provides support for reading and writing a new
.gdb_indexsection. The commandgdb-add-indexcan be used to add.gdb_indexto a file, which allows GDB to load symbols from that file faster. Note that this feature is already present in Red Hat Enterprise Linux 6.1 and later. - The
watchcommand has been adapted to accept-locationas an optional argument. - Two new special values can now be used when specifying the current search path for
libthread_db:$sdirrepresents the default system locations of shared libraries, and$pdirstands for the directory with thelibthreadthat is used by the application. - A new command
info macroshas been added. This command accepts linespec as an optional argument and can be used to display the definitions of macros at that linespec location. Note that in order to do this, the debugged program must be compiled with the-g3command line option to have macro information available in it. - A new command
aliashas been added. This command can be used to create an alias of an existing command. - The
info macrocommand now accepts-alland--as valid options. - To display a function parameter's entry value (that is, the value at the time of function entry), the suffix
@entrycan be added to the parameter. GDB now displays@entryvalues in backtraces, if available. - New
set print entry-valuesandshow print entry-valuescommands have been added. Theset print entry-valuescommand acceptsboth,compact,default,if-needed,no,only, andpreferredas valid arguments and can be used to enable printing of function arguments at function entry. Theshow print entry-valuescommand can be used to determine whether this feature is enabled. - New
set debug entry-valuesandshow debug entry-valuescommands have been added. Theset debug entry-valuescommand can be used to enable printing of debugging information for determining frame argument values at function entry and virtual tail call frames. !has been added as an alias ofcommandshell.command- The
watchcommand now acceptsmaskas an argument. This can be used to create masked watchpoints.mask_value - New
set extended-promptandshow extended-promptcommands have been added. Theset extended-promptcommand enables support for a defined set of escape sequences that can be used to display various information. Theshow extended-promptcommand can be used to determine whether the extended prompt is enabled. - New
set basenames-may-differandshow basenames-may-differcommands have been added. Theset basenames-may-differcommand enables support for source files with multiple base names. Theshow basenames-may-differcommand can be used to determine whether this support is enabled. The default option isoffto allow faster GDB operations. - A new command line option
-ix(or--init-command) has been added. This option acts like-x(or--command), but is executed before loading the debugged program. - A new command line option
-iex(or--init-eval-command) has been added. This option acts like-ex(or--eval-command), but is executed before loading the debugged program.
- When debugging a template instantiation, parameters of the template are now put in scope.
- The
register_pretty_printerfunction in modulegdb.printingnow takes an optionalreplaceargument. - The
maint set python print-stack on|offcommand has been deprecated and will be deleted in GDB 7.5. The new commandset python print-stack none|full|messagehas replaced it. - A prompt substitution hook (
prompt_hook) is now available to the Python API. - A new Python module
gdb.prompthas been added to the GDB Python modules library. - Python commands and convenience-functions located in
anddata_directory/python/gdb/command/are now automatically loaded on GDB start-up.data_directory/python/gdb/function/ - Blocks now provide four new attributes:
global_block,static_block,is_static, andis_global. - The
gdb.breakpointfunction has been deprecated in favor ofgdb.breakpoints. - A new class
gdb.FinishBreakpointis provided. - Type objects for
structanduniontypes now allow access to the fields using standard Python dictionary (mapping) methods. - A new event
gdb.new_objfilehas been added. - A new function
deep_itemshas been added to thegdb.typesmodule. - The function
gdb.Writenow accepts an optional keywordstream. - Parameters can now be sub-classed in Python, which allows for implementation of the
get_set_docandget_show_docfunctions. - Symbols, Symbol Table, Symbol Table and Line, Object Files, Inferior, Inferior Thread, Blocks, and Block Iterator APIs now have an
is_validmethod. - Breakpoints can now be sub-classed in Python, which allows for implementation of the
stopfunction that is executed each time the inferior reaches that breakpoint. - A new function
gdb.lookup_global_symbolhas been added. This function can be used to look up a global symbol. - GDB values in Python are now callable if the value represents a function.
- A new module
gdb.typeshas been added. - A new module
gdb.printinghas been added. - New commands
info pretty-printers,enable pretty-printer, anddisable pretty-printerhave been added. - A new
gdb.parameter("directories")function call is now available. - A new function
gdb.newest_framehas been added. This function can be used to return the newest frame in the selected thread. - The
gdb.InferiorThreadclass now supports a newnameattribute. - Support for inferior events has been added. Python scripts can now add observers in order to be notified of events occurring in the process being debugged.
Changes Since Red Hat Enterprise Linux 5.8
- For remote targets, debugging of shared libraries is now supported by default.
- New commands
set observerandshow observerhave been added. Theset observercommand acceptsonoroffas an argument and can be used to allow or disallow the GNU Debugger to affect the execution of the debugged program. Use theshow observercommand to determine whether observer mode is enabled. - A new convenience variable
$_threadhas been added. This variable stores the number of the current thread. - The
sourcecommand now accepts-sas a valid option. This option can be used to search for the script in the source search path regardless of the path in the file name. - Support for tracepoints, including fast and static tracepoints, has been added to
gdbserver. - The
--batchcommand line option has been adapted to disable pagination and queries. - Direct support for the reading and writing byte, word, and double-word x86 general purpose registers such as
$alhas been added. - The
commandscommand now accepts a range of breakpoints as an argument. - The
rbreakcommand now accepts a file name as part of its argument. This can be used to limit the functions selected by the supplied regular expression to those that are defined in the specified file. - Support for multi-program (sometimes referred to as multi-executable or multi-exec) debugging has been added. In particular, the GNU Debugger now supports the following commands:
- The
add-inferiorcommand can be used to add a new inferior. - The
clone-inferiorcommand can be used to create a copy of an inferior with the same executable loaded. - The
remove-inferiorcommand accepts an inferior ID as an argument and can be used to remove an inferior.
- Support for trace state variables has been added. In particular, the GNU Debugger now supports the following commands:
- The
tvariable $command can be used to define or modify a trace state variable.variable_name[=expression] - The
info tvariablescommand can be used to display a list of currently defined trace state variables and their values. - The
delete tvariable $command can be used to delete one or more trace state variables.variable_name...
- A new
ftracehas been added. This command accepts a function name, a line number, or an address as an argument, and can be used to define a fast tracepoint at that location. - Support for disconnected tracing, trace files, and circular trace buffer has been added.
- A new
tevalcommand has been added. This command accepts one or more expressions to evaluate at a tracepoint. - The GNU Debugger has been adapted to parse the
0bprefix of binary numbers exactly the same way as the GNU Compiler Collection. - The GNU Debugger now supports the following commands for process record and replay:
- New commands
set record memoryandshow record memoryhave been added. Theset record memorycommand acceptsonoroffas an argument and can be used to enable or disable stopping the inferior when a memory change of the next instruction cannot be recorded. Use theshow record memory-querycommand to determine whether this feature is enabled. - A new command
record savehas been added. This command accepts a file name as an argument and can be used to save the execution log to a file. - A new command
record restorehas been added. This command accepts a file name as an argument and can be used to restore the execution log from a file.
- A new command
evalhas been added. This command accepts a format string followed by one or more arguments, transforms it to a command, and then executes it. - A new command
save breakpointshas been added. This command accepts a file name as an argument and can be used to store all currently defined breakpoints to a file. To restore the saved breakpoints from this file, use thesourcecommand. - New commands
may-write-registers,set may-write-memory,set may-insert-breakpoints,set may-insert-tracepoints,set may-insert-fast-tracepoints, andset may-interrupthave been added. All of these commands accept eitheronoroffas an argument, and can be used to set individual permissions for the target. - A new command
main info program-spaceshas been added. This command can be used to display information about currently loaded program spaces. - New commands
set remote interrupt-sequenceandshow remote interrupt-sequencehave been added. Theset remote interrupt-sequencecommand acceptsCtrl-C,BREAK, andBREAK-gas valid arguments, and can be used to specify which interrupt sequence to send to the remote target in order to interrupt its execution. Use theshow remote interrupt-sequenceto determine the current setting. - New commands
set remote interrupt-on-connectandshow remote interrupt-on-connecthave been added. Theset remote interrupt-on-connectaccepts eitheronoroffas an argument, and can be used to enable sending an interrupt sequence to the remote target when the GNU Debugger connects to it. Use theshow remote interrupt-on-connectcommand to determine whether this feature is enabled. - The
set remotebreakandshow remotebreakcommands have been deprecated and users are advised to useset remote interrupt-sequenceandshow remote interrupt-sequenceinstead. - The
disassemblecommand has been adapted to accept two arguments in the form ofstart,+length. - The
sourcecommand can now be used to read commands from Python scripts.
- Argument-dependent lookup (ADL) now directs function search to the namespaces of its arguments regardless of whether the namespace has been imported.
- In addition to member operators, the GNU Debugger can now look up operators that are:
- defined in the global scope,
- defined in a namespace and imported via the
usingdirective, - implicitly imported from an anonymous namespace, or
- the argument-dependent lookup (ADL operators.
- Support for printing of static const class members that are initialized in the class definition has been enhanced.
- Support for importing of namespaces has been added.
- The C++ expression parser has been adapted to handle the cast operators
static_cast<>,dynamic_cast<>,const_cast<>, andreinterpret_cast<>.
- The GNU Debugger is now installed with a new directory located at
/opt/rh/devtoolset-1.1/root/usr/share/gdb/python/. This directory serves as a standard location for Python scripts written for GDB. - The Python API has been adapted to provide access to symbols, symbol tables, program spaces, breakpoints, inferiors, threads, and frame's code blocks. Users are now also allowed to create custom GDB parameters from the API and manipulate them by using the
setandshowcommands. - New functions
gdb.target_charset,gdb.target_wide_charset,gdb.progspaces,gdb.current_progspace, andgdb.string_to_argvhave been added. - A new exception
gdb.GdbErrorhas been added. - The GNU Debugger now searches pretty-printers in the current program space.
- The GNU Debugger can now enable or disable pretty-printers individually.
- The GNU Debugger has been adapted to look for names of Python scripts to automatically load in a special section named
.debug_gdb_scripts.
Changes Since Red Hat Enterprise Linux 6.2
- A new command
info auto-loadhas been added and can be used to display the status of various automatically loaded files. Theinfo auto-load gdb-scriptscommand lists automatically loaded canned sequences of commands,info auto-load python-scriptsdisplays the status of automatically loaded Python scripts,info auto-load local-gdbinitdisplays whether a local.gdbinitfile in the current working directory is loaded, andinfo auto-load libthread-dbdisplays whether the inferior-specific thread debugging shared library is loaded. - New commands
set auto-loadandshow auto-loadhave been added and can be used to control automatic loading of files:- The
set auto-load gdb-scriptsandshow auto-load gdb-scriptscommands control automatic loading of GDB scripts. - The
set auto-load python-scriptsandshow auto-load python-scriptscommands control automatic loading of Python scripts. - The
set auto-load local-gdbinitandshow auto-load local-gdbinitcommands control automatic loading of.gdbinitfrom the current working directory. - The
set auto-load libthread-dbandshow auto-load libthread-dbcommands control automatic loading of inferior-specificlibthread_db. - The
set auto-load scripts-directoryandshow auto-load scripts-directorycommands control the list of directories from which to automatically load GDB and Python scripts. - The
set auto-load safe-pathandshow auto-load safe-pathcommands control the list of directories from which it is safe to automatically load all previously mentioned items. - The
set debug auto-loadandshow debug auto-loadcommands control displaying of debugging information for all previously mentioned items.
Theset auto-load offcommand can be used to disable automatic loading globally. You can also useshow auto-loadwith no subcommand to display current settings of all previously mentioned items. - The
maint set python auto-load on|offcommand has been replaced withset auto-load python-scripts on|off. - The
maintenance print section-scriptscommand has been renamed toinfo auto-load python-scripts [and is no longer classified as a maintenance-only command.pattern] - Support for the Guile extension language has been removed.
- The GNU Debugger has been adapted to follow GCC's rules on accessing volatile objects when reading or writing target state during expression evaluation.
Changes Since Red Hat Enterprise Linux 5.8
as), GNU linker (ld), newly added ELF linker (gold), and other binary tools that are part of the binutils are now released under the GNU General Public License, version 3.
gold, is now available in addition to ld, the existing GNU linker. gold is intended to be a drop-in replacement for ld, so ld's documentation is intended to be the reference documentation. gold supports most of ld's features, except notable ones such as MRI-compatible linker scripts, cross-reference reports (--cref), and various other minor options. It also provides significantly improved link time with very large C++ applications.
gold linker is not enabled by default. Users can explicitly switch between ld and gold by using the alternatives mechanism.
Changes Since Red Hat Enterprise Linux 6.2
- A new
INPUT_SECTION_FLAGSkeyword has been added to the linker script language. This keyword can be used to select input sections by section header flags. - A new
SORT_BY_INIT_PRIORITYkeyword has been added to the linker script language. This keyword can be used to sort sections by numerical value of the GCCinit_priorityattribute encoded in the section name.
Changes Since Red Hat Enterprise Linux 5.8
- GNU/Linux targets now support the
STB_GNU_UNIQUEsymbol binding, a GNU extension to the standard set of ELF symbol bindings. The binding is passed on to the dynamic linker, which ensures that in the entire process there is only one symbol with the given name and type in use.Note
The implementation of this feature depends on capabilities only found in newer versions of theglibclibrary. Consequently, this feature is currently available in Red Hat Developer Toolset for Red Hat Enterprise Linux 6. - A new command line option
--no-export-dynamichas been added. This option can be used to undo the effect of the-Eand--export-dynamicoptions. - A new command line option
--warn-alternate-emhas been added. This option can be used to display a warning if an ELF format object file uses an alternate machine code. - A new linker script function
REGION_ALIAShas been added. This function can be used to create alias names of memory regions. - A new command line option
-Ttext-segmenthas been added for ELF-based targets. This option can be used to set the address of the first byte of the text segment.address - A new linker script command
INSERThas been added. This command can be used to augment the default script. - In a linker script input section, it is now possible to specify a file within an archive by using the
syntax.archive:file - The
--sort-commoncommand line option now acceptsascendinganddescendingas optional arguments. This can be used to specify which sorting order to use. - A new command line option
--build-idhas been added for ELF-based targets. This option can be used to generate a unique per-binary identifier embedded in a note section. - A new command line option
--default-script=(orfile_name-dT) has been added. This option can be used to specify a replacement for the built-in linker script.file_name - A new command line option
-Bsymbolic-functionshas been added. When creating a shared library, this option will cause references to global function symbols to be bound to the definitions with the shared library, if such exist. - The new command line options
--dynamic-list-cpp-newand--dynamic-list-datahave been added, which can be used to modify the dynamic list.
Changes Since Red Hat Enterprise Linux 6.2
- The
--copy-dt-needed-entriescommand line option is no longer enabled by default. Instead,--no-copy-dt-needed-entriesis now the default option. - Evaluation of linker script expressions has been significantly improved. Note that this can negatively affect scripts that rely on undocumented behavior of the old expression evaluation.
Changes Since Red Hat Enterprise Linux 5.8
- The
--add-neededcommand line option has been renamed to--copy-dt-needed-entriesin order to avoid confusion with the--as-neededoption. - For GNU/Linux systems, the linker no longer processes any relocations made against symbols of the
STT_GNU_IFUNCtype. Instead, it emits them into the resulting binary for processing by the loader.Note
The implementation of this feature depends on capabilities only found in newer versions of theglibclibrary. Consequently, this feature is currently available in Red Hat Developer Toolset for Red Hat Enterprise Linux 6. - The
--as-neededcommand line option has been adapted to link in a dynamic library in the following two cases:- if the dynamic library satisfies undefined symbols in regular objects, and
- if the dynamic library satisfies undefined symbols in other dynamic libraries unless the library is already found in a
DT_NEEDEDentry of one of the libraries that are already linked.
- The
-l:command line option now searches the library path for a file name calledfile_namefile_namewithout adding the.aor.sofile extension.
Changes Since Red Hat Enterprise Linux 6.2
- The GNU Assembler no longer requires double ampersands in macros.
- A new
--compress-debug-sectionscommand line option has been added to enable compression of DWARF debug information sections in the relocatable output file. Compressed debug sections are currently supported by thereadelf,objdump, andgoldtools, but not byld.
Changes Since Red Hat Enterprise Linux 5.8
- GNU/Linux targets now support
gnu_unique_objectas a value of the.typepseudo operation. This value can be used to mark a symbol as globally unique in the entire process. - Support for the new discriminator column in the DWARF line table with a discriminator operand for the
.locdirective has been added. - The
.typepseudo operation now accepts a type ofSTT_GNU_IFUNC. This can be used to indicate that if the symbol is the target of a relocation, its value should not be used. Instead, the function should be invoked and its result used as the value. - A new pseudo operation
.cfi_val_encoded_addrhas been added. This pseudo operation can be used to record constant addresses in unwind tables without runtime relocation. - A new command line option
-msse-check=[none|error|warning]has been added for x86 targets. - The
-acommand line option now acceptsgas a valid sub-option. This combination can be used to enable assembly listings with additional information about the assembly, including the list of supplied command line options or the assembler version. - A new command line option
-msse2avxhas been added for x86 targets. This option can be used to encode SSE instructions with VEX prefix. - x86 targets now support the Intel XSAVE, EPT, MOVBE, AES, PCLMUL, and AVX/FMA instructions.
- New command line options
-march=,cpu[,+extension…]-mtune=,cpu-mmnemonic=[att|intel],-msyntax=[att|intel],-mindex-reg,-mnaked-reg, and-mold-gcchave been added for x86 targets. - New pseudo operations
.string16,.string32, and.string64have been added. These pseudo operations be used to generate wide character strings. - The i386 port now supports the SSE5 instruction set.
- A new pseudo operation
.relochas been added. This pseudo operation serves as a low-level interface for creating relocations.
Changes Since Red Hat Enterprise Linux 6.2
Changes Since Red Hat Enterprise Linux 5.8
- “Thin” archives are now supported. Instead of containing object files, such archives contain just pathnames pointing to those files.
- The i386 port now supports the SSE5 instruction set.
Changes Since Red Hat Enterprise Linux 6.2
Changes Since Red Hat Enterprise Linux 5.8
- The
--as-neededcommand line option has been adapted to link in a dynamic library in the following two cases:- if the dynamic library satisfies undefined symbols in regular objects, and
- if the dynamic library satisfies undefined symbols in other dynamic libraries unless the library is already found in a
DT_NEEDEDentry of one of the libraries that are already linked.
- A new compile flag
-fstack-arrayshas been added. This flag causes all local arrays to be put on stack memory, which can significantly improve the performance of some programs. Note that programs that use very large local arrays may require you to extend your runtime limits for stack memory. - Compile time has been significantly improved. For example, the improvement may be noticeable when working with programs that use large array constructors.
- To improve code generation and diagnostics, the
-fwhole-filecompile flag is now enabled by default, and can be used with a newly supported-fwhole-programflag. To disable it, use the deprecated-fno-whole-fileflag. - A new command line option
-Mis now supported. Similarly togcc, this option allows you to generate Makefile dependencies. Note that the-cppoption may be required as well. - The
-finit-real=command line option now supportssnanas a valid value. This allows you to initialize REAL and COMPLEX variables with a signaling NaN (not a number), and requires you to enable trapping (for example, by using the-ffpe-trap=command line option). Note that compile-time optimizations may turn a signaling NaN into a quiet NaN. - A new command line option
-fcheck=has been added. This option accepts the following arguments:- The
-fcheck=boundsoption is equivalent to the-fbounds-checkcommand line option. - The
-fcheck=array-tempsoption is equivalent to the-fcheck-array-temporariescommand line option. - The
-fcheck=dooption checks for invalid modification of loop iteration variables. - The
-fcheck=recursiveoption checks for recursive calls to subroutines or functions that are not marked as recursive. - The
-fcheck=pointeroption performs pointer association checks in calls, but does not handle undefined pointers nor pointers in expressions. - The
-fcheck=alloption enables all of the above options.
- A new command line option
-fno-protect-parenshas been added. This option allows the compiler to reorder REAL and COMPLEX expressions with no regard to parentheses. - When OpenMP's
WORKSHAREis used, array assignments andWHEREwill now be run in parallel. - More Fortran 2003 and Fortran 2008 mathematical functions can now be used as initialization expressions.
- The
GCC$compiler directive now enables support for some extended attributes such asSTDCALL.
- The
-Ofastcommand line option now automatically enables the-fno-protect-parensand-fstack-arraysflags. - Front-end optimizations can now be disabled by the
-fno-frontend-optimizeoption, and selected by the-ffrontend-optimizeoption. The former is essentially only desirable if invalid Fortran source code needs to be compiled (for example, when functions—as compared to subroutines—have side-effects) or to work around compiler bugs. - The
GFORTRAN_USE_STDERRenvironment variable has been removed, and GNU Fortran now always prints error messages to standard error. - The
-fdump-corecommand line option and theGFORTRAN_ERROR_DUMPCOREenvironment variable have been removed. When encountering a serious error, GNU Fortran now always aborts the execution of the program. - The
-fbacktracecommand line option is now enabled by default. When a fatal error occurs, GNU Fortran now attempts to print a backtrace to standard error before aborting the execution of the program. To disable this behavior, use the-fno-backtraceoption. - GNU Fortran no longer supports the use of the
-Mcommand line option to generate Makefile dependencies for the module path. To perform this operation, use the-Joption instead. - To significantly reduce the number of warnings, the
-Wconversioncommand line option now only displays warnings when a conversion leads to information loss, and a new command line option-Wconversion-extrahas been added to display warnings about other conversions. The-Wconversionoption is now enabled with-Wall. - A new command line option
-Wunused-dummy-argumenthas been added. This option can be used to display warnings about unused dummy arguments, and is now enabled with-Wall. Note that the-Wunused-variableoption previously also warned about unused dummy arguments. - The
COMMONdefault padding has been changed. Previously, the padding was added before a variable. Now it is added after a variable to increase the compatibility with other vendors, as well as to help to obtain the correct output in some cases. Note that this behavior is in contrast with the behavior of the-falign-commonsoption. - GNU Fortran no longer links against the
libgfortranbeginlibrary. TheMAIN__assembler symbol is the actual Fortran main program and is invoked by themainfunction, which is now generated and put in the same object file asMAIN__. Note that thelibgfortranbeginlibrary is still present for backward compatibility.
- Improved but still experimental support for polymorphism between libraries and programs and for complicated inheritance patterns.
- Generic interface names which have the same name as derived types are now supported, which allows the creation of constructor functions. Note that Fortran does not support static constructor functions; only default initialization or an explicit structure-constructor initialization are available.
- Automatic (re)allocation: In intrinsic assignments to allocatable variables, the left-hand side will be automatically allocated (if unallocated) or reallocated (if the shape or type parameter is different). To avoid the small performance penalty, you can use
a(:) = ...instead ofa = ...for arrays and character strings — or disable the feature using-std=f95or-fno-realloc-lhs. - Experimental support of the
ASSOCIATEconstruct has been added. - In pointer assignments it is now possible to specify the lower bounds of the pointer and, for a rank-1 or a simply contiguous data-target, to remap the bounds.
- Deferred type parameter: For scalar allocatable and pointer variables the character length can now be deferred.
- Namelist variables with allocatable attribute, pointer attribute, and with a non-constant length type parameter are now supported.
- Support has been added for procedure-pointer function results and procedure-pointer components (including PASS).
- Support has been added for allocatable scalars (experimental),
DEFERREDtype-bound procedures, and theERRMSG=argument of theALLOCATEandDEALLOCATEstatements. - The
ALLOCATEstatement now supports type-specs and theSOURCE=argument. - Rounding (
ROUND=,RZ, ...) for output is now supported. - The
INT_FAST{8,16,32,64,128}_Tformat forISO_C_BINDINGintrinsic module type parameters is now supported. OPERATOR(*)andASSIGNMENT(=)are now allowed asGENERICtype-bound procedures (i.e. as type-bound operators).
PASS attribute now have to use CLASS in line with the Fortran 2003 standard; the workaround to use TYPE is no longer supported.
- A new command line option
-std=f2008tshas been added. This option enables support for programs that conform to the Fortran 2008 standard and the draft Technical Specification (TS) 29113 on Further Interoperability of Fortran with C. For more information, refer to the Chart of Fortran TS 29113 Features supported by GNU Fortran. - The
DO CONCURRENTconstruct is now supported. This construct can be used to specify that individual loop iterations do not have any interdependencies. - Full single-image support except for polymorphic coarrays has been added, and can be enabled by using the
-fcoarray=singlecommand line option. Additionally, GNU Fortran now provides preliminary support for multiple images via an MPI-based coarray communication library. Note that the library version is not yet usable as remote coarray access is not yet possible. - The
STOPandERROR STOPstatements have been updated to support all constant expressions. - The
CONTIGUOUSattribute is now supported. - Use of
ALLOCATEwith theMOLDargument is now supported. - The
STORAGE_SIZEintrinsic inquiry function is now supported. - The
NORM2andPARITYintrinsic functions are now supported. - The following bit intrinsics have been added:
- the
POPCNTandPOPPARbit intrinsics for counting the number of 1 bits and returning the parity; - the
BGE,BGT,BLE, andBLTbit intrinsics for bitwise comparisons; - the
DSHIFTLandDSHIFTRbit intrinsics for combined left and right shifts; - the
MASKLandMASKRbit intrinsics for simple left and right justified masks; - the
MERGE_BITSbit intrinsic for a bitwise merge using a mask; - the
SHIFTA,SHIFTL, andSHIFTRbit intrinsics for shift operations; - the transformational bit intrinsics
IALL,IANY, andIPARITY.
- The
EXECUTE_COMMAND_LINEintrinsic subroutine is now supported. - The
IMPUREattribute for procedures is now supported. This allows the use ofELEMENTALprocedures without the restrictions ofPURE. - Null pointers (including
NULL()) and unallocated variables can now be used as an actual argument to optional non-pointer, non-allocatable dummy arguments, denoting an absent argument. - Non-pointer variables with the
TARGETattribute can now be used as an actual argument toPOINTERdummies withINTENT(IN). - Pointers that include procedure pointers and those in a derived type (pointer components) can now also be initialized by a target instead of only by
NULL. - The
EXITstatement (with construct-name) can now be used to leave theASSOCIATE,BLOCK,IF,SELECT CASE, andSELECT TYPEconstructs in addition toDO. - Internal procedures can now be used as actual arguments.
- The named constants
INTEGER_KINDS,LOGICAL_KINDS,REAL_KINDS, andCHARACTER_KINDSof the intrinsic moduleISO_FORTRAN_ENVhave been added. These arrays contain the supported 'kind' values for the respective types. - The
C_SIZEOFmodule procedures of theISO_C_BINDINGSintrinsic module and theCOMPILER_VERSIONandCOMPILER_OPTIONSmodule procedures of theISO_FORTRAN_ENVintrinsic module have been implemented. - The
OPENstatement now supports theNEWUNIT=option. This option returns a unique file unit and therefore prevents inadvertent use of the same unit in different parts of the program. - Unlimited format items are now supported.
- The
INT{8,16,32}andREAL{32,64,128}format forISO_FORTRAN_ENVintrinsic module type parameters are now supported. - It is now possible to use complex arguments with the
TAN,SINH,COSH,TANH,ASIN,ACOS, andATANfunctions. Additionally, the new functionsASINH,ACOSH, andATANHhave been added for real and complex arguments, andATAN(Y,X)now serves as an alias forATAN2(Y,X). - The
BLOCKconstruct has been implemented.
- Vectors of type
vector long longorvector longare passed and returned using the same method as other vectors with theVSXinstruction set. Previously GCC did not adhere to the ABI for 128-bit vectors with 64-bit integer base types (see GCC PR 48857). - The
-mrecipcommand line option has been added, which indicates whether the reciprocal and reciprocal square root instructions should be used. - The
-mveclibabi=masscommand line option has been added. This can be used to enable the compiler to auto-vectorize mathematical functions using the Mathematical Acceleration Subsystem library. - The
-msingle-pic-basecommand line option has been added, which instructs the compiler to avoid loading thePICbase register in function prologues. The PIC base register must be initialized by the runtime system. - The
-mblock-move-inline-limitcommand line option has been added, which enables the user to control the maximum size of inlinedmemcpycalls and similar.
- The
info oscommand has been changed and can now display information on several objects managed by the operating system, in particular:- The
info os procgroupscommand lists process groups. - The
info os filescommand lists file descriptors. - The
info os socketscommand lists internet-domain sockets. - The
info os shmcommand lists shared-memory regions. - The
info os semaphorescommand lists semaphores. - The
info os msgcommand lists message queues. - The
info os modulescommand lists loaded kernel modules.
- GDB now has support for Static Defined Tracing (SDT) probes. Currently, the only implemented back end is for SystemTap probes (the
sys/sdt.hheader file). You can set a breakpoint by using the new-probe,-pstap, or-probe-stapoptions, and inspect the probe arguments by using the new$_probe_argfamily of convenience variables. - The
symbol-reloadingoption has been deleted. gdbservernow supports STDIO connections, for example:(gdb)
target remote | ssh myhost gdbserver - hello- GDB is now able to print flag enums. In a flag enum, all enumerator values have no bits in common when pairwise AND-ed. When GDB prints a value whose type is a flag enum, GDB shows all the constants; for example, for enum
E { ONE = 1, TWO = 2}:(gdb)
print (enum E) 3$1 = (ONE | TWO) - The file name part of a linespec now matches trailing components of a source file name. For example,
break gcc/expr.c:1000now sets a breakpoint in thebuild/gcc/expr.cfile, but not inbuild/libcpp/expr.c. - The
info procandgenerate-core-filecommands now work on remote targets connected togdbserver. - The command
info catchhas been removed. - The Ada-specific
catch exceptionandcatch assertcommands now accept conditions at the end of the command. - The
info static-tracepoint-markercommand now works on native targets with an in-process agent. - GDB can now set breakpoints on inline functions.
- The
.gdb_indexsection has been updated to include symbols for inline functions. By default, GDB now ignores older.gdb_indexsections until their.gdb_indexsections can be recreated. The new commandset use-deprecated-index-sections oncauses GDB to use any older.gdb_indexsections it finds. If this option is set, the ability to set breakpoints on inline functions is lost in symbol files with older.gdb_indexsections.The.gdb_indexsection has also been updated to record more information about each symbol. - GDB now provides Ada support for GDB/MI Variable Objects.
- GDB now supports
breakpoint always-inserted modein therecordtarget. gdbservernow supports evaluation of breakpoint conditions. Note that you can instruct GDB to send the breakpoint conditions in bytecode form, butgdbserveronly reports the breakpoint trigger to GDB when its condition evaluates to true.- The
z0/z1breakpoint insertion packets have been extended to carry a list of conditional expressions over to the remote stub depending on the condition evaluation mode. You can use theset remote conditional-breakpoints-packetcommand to control the use of this extension. - A new RSP packet
QProgramSignalscan be used to specify the signals the remote stub can pass to the debugged program without GDB involvement. - A new command
-info-oshas been added as the MI equivalent ofinfo os. - Output logs, such as
set loggingand related, now include MI output. - New
set use-deprecated-index-sections on|offandshow use-deprecated-index-sections on|offcommands have been added. These commands allow you to control the use of deprecated.gdb_indexsections. - New
catch loadandcatch unloadcommands have been added. These commands allow you to stop execution of a debugged program when a shared library is loaded or unloaded. - A new command
enable counthas been added. This command allows you to auto-disable a breakpoint after several hits. - A new command
info vtblhas been added. This command allows you to show the virtual method tables for C++ and Java objects. - A new command
explorehas been added. It supports two subcommandsexplore valueandexplore type, and allows you to recursively explore values and types of expressions. Note that this command is only available with Python-enabled GDB. - A new command
dprintfhas been added. This command allows you to create a dynamiclocation,format,args...printf-type breakpoint, which performs aprintf-like operation and then resumes program execution. - New
set print symbolandshow print symbolcommands have been added. These commands allow you to control whether GDB attempts to display the symbol, if any, that corresponds to addresses it prints. This functionality is enabled by default, but you can restore the previous behavior by running theset print symbol offcommand. - New
set breakpoint condition-evaluationandshow breakpoint condition-evaluationcommands have been added. These commands allow you to control whether breakpoint conditions are evaluated by GDB (thehostoption), or bygdbserver(thetargetoption). The default option,auto, chooses the most efficient available mode. - New
set dprintf-style gdb|call|agentandshow dprintf-stylecommands have been added. These commands allow you to control the way in which a dynamicprintfis performed: thegdboption requests a GDBprintfcommand,callcausesdprintfto call a function in the inferior, andagentrequests that the target agent such asgdbserverdoes the printing. - New
set dprintf-function,expressionshow dprintf-function,set dprintf-channel, andexpressionshow dprintf-channelcommands have been added. These commands allow you to set the function and optional first argument to the call when using thecallstyle of dynamicprintf. - New
set disconnected-dprintf on|offandshow disconnected-dprintfcommands have been added. These commands allow you to control whether agent-style dynamicprintfs continue to be in effect after GDB disconnects.
- GDB commands implemented in Python can now be put in the
gdb.COMMAND_USERcommand class. - The
maint set python print-stack on|offcommand has been removed and replaced byset python print-stack. - A new class
gdb.printing.FlagEnumerationPrinterhas been added. This class can be used to applyflag enum-style pretty-printing to enums. - The
gdb.lookup_symbolfunction now works correctly when there is no current frame. - The
gdb.Symbolobject now has an additional attributeline. This attribute holds the line number in the source at which the symbol was defined. - The
gdb.Symbolobject now has an additional attributeneeds_frame, and a new methodvalue. Theneeds_frameattribute indicates whether the symbol requires a frame to compute its value, and thevaluemethod computes the symbol's value. - The
gdb.Valueobject now has a new methodreferenced_value. This method can be used to dereference a pointer as well as C++ reference values. - The
gdb.Symtabobject now has two new methods,global_blockandstatic_block. These methods return the global and static blocks (asgdb.Blockobjects) of the underlying symbol table respectively. - A new method
gdb.find_pc_linereturns thegdb.Symtab_and_lineobject associated with a PC value. - The
gdb.Symtab_and_lineobject now has an additional attributelast. This attribute holds the end of the address range occupied by the code for the current source line.
- A new
SORT_NONEkeyword has been added to the linker script language. This keyword can be used to disable section sorting. - A new linker-provided symbol,
__ehdr_start, has been added. When producing ELF output, this symbol points to the ELF file header (and nearby program headers) in the program's memory image.
- Support for
.bundle_align_mode,.bundle_lock, and.bundle_unlockdirectives for x86 targets has been added.. - On x86 architectures, the GNU Assembler now allows
rep bsf,rep bsr, andrep retsyntax.
Changes Since Red Hat Enterprise Linux 6.3
libdwnow handles compressed debuginfo sections. Thedwarf_highpcfunction now handles the DWARF 4DW_AT_high_pcconstant form.eu-elflintnow accepts executables produced by thegoldlinker (see Section A.3, “Changes in binutils 2.22.52”).
Changes Since Red Hat Enterprise Linux 5.9
- DWARF 4 is now supported. Support for
DW_OP_GNU_implicit_pointer,STB_GNU_UNIQUEwas added. libdwflnow supports automatic decompression of files compressed withgzip,bzip2andlzma, and of Linux kernel images made withgzip,bzip2orlzma. Files named with compression suffixes are searched for Linux kernel images. Core file support was improved. Support has been added for decoding DWARF CFI into location description form. Support has been added for some new DWARF 3 expression operations, which were previously omitted. A new function,dwfl_dwarf_line, has been added.libdwhas new functionsdwarf_next_unit,dwarf_offdie_types,dwarf_lineisa,dwarf_linediscriminator,dwarf_lineop_index,dwarf_getlocation_implicit_pointer, anddwarf_aggregate_size.libelfnow supports using more than 65536 program headers in a file. A new functionelf_getphdrnumhas been added.libcpuIntel SSE4 disassembler support has been added.
Changes Since Red Hat Enterprise Linux 6.3
- Support for Intel Advanced Vector Extensions (AVX) and
Advanced Encryption Standard(AES) instruction sets has been added. Note that this support is only available for 64-bit code. - A new command line option
--soname-synonymshas been added. This option can be used to inform Memcheck, Massif, Helgrind, and DRD (that is, the tools that replace themallocfunction) that the implementation ofmallocis either linked statically into the executable, or is provided by a shared library other thanlibc.so. As a result, users can now process both statically linked programs and programs that use othermalloclibraries, such as TCMalloc or JEMalloc. This option is, however, very general and does not necessarily apply only tomalloc-family functions. - A new command line option
--redzone-size=has been added to tools that provide their own replacement fornumbermallocand other functions. This option allows you to specify the size of the padding blocks (also known as redzones) that are added before and after each client allocated block. Smaller values reduce the amount of memory required by Valgrind; bigger numbers increase the chance to detect blocks that are overrun or underrun. - The
leak_checkGDB server monitor command now can now be used to control the maximum number of loss records that Memcheck outputs. - Memcheck now uses less memory when working with applications that allocate a large number of blocks or that have many partially-defined bytes.
- A new GDB server monitor command
block_listhas been added. This allows Memcheck to list the addresses and sizes of the blocks of a leak search loss record. - A new GDB server monitor command
who_points_athas been added. This allows Memcheck to list the locations that are pointing at a block. - When the Memcheck tool is executed with a redzone size greater than 0,
VALGRIND_MALLOCLIKE_BLOCKdetects an invalid access of these redzones by marking themnoaccess. Similarly, if a redzone size is given for a memory pool,VALGRIND_MEMPOOL_ALLOCmarks the redzonesnoaccess. Note that this functionality still allows you to find some bugs if the you have forgotten to mark the pool superblocknoaccess. - The performance of Memcheck's memory leak check has been improved. The improvement is especially significant in cases where there are many leaked blocks or many suppression rules used to suppress leak reports.
- More facilities that can help finding the cause of a data race have been added to DRD, namely the
--ptrace-addrcommand line option and theDRD_STOP_TRACING_VAR(x)macro. - The C++ demangler has been updated to support C++ programs compiled by
g++up to at least version 4.6. - A new command line option
--fair-sched=yeshas been added. This option allows you to select round-robin scheduling of threads, improves responsiveness of interactive multithreaded applications, and improves repeatability of results from the thread checkers Helgrind and DRD. The pipe-based thread serialization mechanism is selected by default. - Support for running Valgrind on Valgrind has been improved. Tool developers can now use Valgrind on Helgrind or Memcheck.
gdbserverhas been adapted to display the float shadow registers as integer rather than float values, as the shadow values are mostly used as bit patterns.- The maximum limit for the
--num-callerscommand line option has been increased to500. - The performance of error matching when there are many suppression records in use has been improved.
- Support for DWARF4 debugging information has been improved.
- Support for DWARF debug information compressed with
dwzhas been added. - Control over the IR optimizer's handling of the tradeoff between performance and precision of exceptions has been improved. In particular, the
--vex-iropt-precise-memory-exnscommand line option has been replaced by--vex-iropt-register-updates, which provides extended functionality and allows the Valgrindgdbserverto always show up-to-date register values to GDB. - Modest performance gains have been achieved by the use of translation chaining for JIT-generated code.
- The memory consumption of the Memcheck tool has been reduced in some scenarios.
- Handling of freed memory in the Memcheck tool has been improved, which allows the tool to detect use-after-free that would previously have been missed.
- The performance of the Helgrind tool has been improved. As well, the tool now consumes less memory, especially when working with large, long running applications that perform many synchronization events such as lock, unlock, and similar.
- Helgrind now displays locksets for both threads involved in a race.
- Helgrind now displays error messages that are better formatted and generally easier to understand.
- Helgrind now provides facilities and documentation regarding annotation of thread-safe reference-counted C++ classes.
- A new command line option
--check-stack-refs=no|yeshas been added to Helgrind. This option allows you to disable race checking on thread stacks. The option is set toyesby default. - A new command line option
--free-is-write=no|yeshas been added to Helgrind. This option allows you to enable detection of races where one thread accesses heap memory, but another one frees it without any coordinating synchronization event. The option is set tonoby default. - DRD can now produce XML output.
- Support for delayed thread deletion has been added to DRD to detect race conditions that occur close to the end of a thread (the
--join-list-voloption). - The exp-ptrcheck tool has been renamed to exp-sgcheck (Stack and global Array Checking).
- The exp-sgcheck tool has been reduced in scope to improve performance and remove checking that Memcheck does better. In particular, the ability to check for overruns for stack and global arrays is unchanged, but the ability to check for overruns of heap blocks has been removed.
- Valgrind now provides an embedded GDB server, which allows you to control a Valgrind run from GDB and perform GDB operations such as single stepping, breakpoints, examining data, and so on. Tool-specific functionality is also available, and it is now possible to query the definedness state of variables or memory from within GDB when running Memcheck, add arbitrarily large memory watchpoints, etc. To use the GDB server, start Valgrind with the
--vgdb-error=0command line option and follow the on-screen instructions. - Support for unfriendly self-modifying code has been improved. A new command line option
--smc-check=all-non-filehas been added to add the relevant consistency checks only to code that originates in non-file-backed mappings. In effect, this confines the consistency checking only to code that is or might be JIT-generated, and avoids checks on code that must have been compiled ahead of time. Consequently, this functionality significantly improves the performance of applications that generate code at run time. - New client requests
VALGRIND_DISABLE_ERROR_REPORTINGandVALGRIND_ENABLE_ERROR_REPORTINGhave been added. These requests enable and disable error reporting on a per-thread and nestable basis, which is useful for hiding errors in particularly troublesome pieces of code. The MPI wrapper library,libmpiwrap.c, now uses this facility. - The
--mod-funcnamecommand line option has been added tocg_diff.
Changes Since Red Hat Enterprise Linux 5.9
- When running in 64-bit mode, Valgrind now supports the SSE4.2 instruction set with the exception of SSE4.2 AES instructions. In 32-bit mode, Valgrind only provides support up to and including the SSSE3 instruction set.
- A new processing script cg_diff has been added to Cachegrind. This processing script can find the difference between two profiles, and can therefore be used to evaluate the performance effects of a change in a program.
- The behavior of the cg_annotate's rarely-used
--thresholdoption has been changed. - Callgrind now supports branch prediction simulation and can optionally count the number of executed global bus events. Note that in order to use this functionality for a better approximation of a “Cycle Estimation” as a derived event, you must manually update the event formula in KCachegrind.
- To accommodate machines with three levels of caches, both Cachegrind and Callgrind now refer to the LL (last-level) cache rather than the L2 cache. When Cachegrind or Callgrind auto-detects the cache configuration of such a machine, it now runs the simulation as if the L2 cache is not present. Consequently, the results are less likely to match the true result for the machine and should not be considered authoritative, but provide a general idea about a program's locality.
- A new command line option
--pages-as-heaphas been added to Massif. When this option is enabled, Massif tracks memory allocations at the level of memory pages (as mapped bymmap,brkand similar functions) instead of tracking allocations at the level of heap blocks (as allocated withmalloc,new, ornew[]). Each mapped page is treated as its own block. Interpreting the page-level output is harder than the heap-level output, but allows you to account for every byte of memory used by a program. By default, the--pages-as-heapoption is disabled. - New command line options
--free-is-writeand--trace-allochave been added to DRD. The--free-is-writeoption allows you to detect reading from already freed memory, the--trace-alloccan be used to trace of all memory allocations and deallocations. - A number of new allocations have been added to DRD. As well, you can now annotate custom barrier implementations and benign races on static variables.
- DRD's happens before and happens after annotations have been enhanced and can be used to annotate, for example, a smart pointer implementation.
- Helgrind's annotation set has been significantly improved to provide a general set of annotations to describe locks, semaphores, barriers, and condition variables. In addition, Helgrind now supports annotations to describe thread-safe reference counted heap objects.
- A new command line option
--show-possibly-losthas been added to Memcheck. By default this option is enabled and causes the leak detector to show possibly-lost blocks. - A new experimental heap profiler, DHAT (Dynamic Heap Analysis Tool), has been added. DHAT keeps track of allocated heap blocks, and also inspects every memory reference to see which block (if any) is being accessed. This gives a lot of insight into block lifetimes, utilization, turnover, liveness, and the location of hot and cold fields. You can use DHAT to do hot-field profiling.
- Support for unfriendly self-modifying code has been improved, and the extra overhead incurred by
--smc-check=allhas been reduced by approximately a factor of 5 as compared with the previous version of Valgrind. - A new command line option
--fullpath-afterhas been added. This option can be used to display directory names for source files in error messages, and is combined with a flexible mechanism for specifying which parts of the paths should be shown. - A new command line option
--require-text-symbolhas been added. This option stops the execution if a specified symbol is not found in a given shared object when loaded into the process. As a result, working with function intercepting and wrapping is now safer and more reliable. - Valgrind now implements more reliable stack unwinding on amd64-linux, particularly in the presence of function wrappers, and with gcc-4.5 compiled code.
- Valgrind now implements modest scalability (performance improvements) for very large, long-running applications.
- Valgrind now provides improved support for analyzing programs that are running in Wine. Users can now include the
valgrind/valgrind.h,valgrind/memcheck.h, andvalgrind/drd.hheader files in Windows programs that are compiled with MinGW or one of the Microsoft Visual Studio compilers.
Changes Since Red Hat Enterprise Linux 6.3
Changes Since Red Hat Enterprise Linux 5.9
- Support has been added for AMD family11h, family12h, family14h, and AMD family15h processors.
- Generation of XML output has been corrected.
- Handling of the
--session-dircommand line option has been improved and a possible buffer overflow in the XML generator has been fixed.
| Revision History | |||
|---|---|---|---|
| Revision 1.1-0.400 | 2013-10-31 | ||
| |||
| Revision 1.1-0 | Tue Jan 22 2013 | ||
| |||
| Revision 1.0-2 | Fri Nov 09 2012 | ||
| |||
| Revision 1.0-1 | Wed Oct 10 2012 | ||
| |||
| Revision 1.0-0 | Tue Jun 26 2012 | ||
| |||
| Revision 0.0-2 | Tue May 22 2012 | ||
| |||
| Revision 0.0-1 | Tue May 1 2012 | ||
| |||
| Revision 0.0-0 | Mon Apr 23 2012 | ||
| |||
A
- ABI
- compatibility, ABI Compatibility
- addr2line
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- application binary interface (see ABI)
- ar
- overview, binutils
- usage, Using Other Binary Tools
- as (see GNU assembler)
- assembling (see GNU assembler)
B
- bfd
- features, New Features
- binutils, binutils
- compatibility, Changes in binutils 2.22.52
- documentation, Additional Resources
- features, Main Features, Changes in binutils 2.22.52
- installation, Installing binutils
- overview, binutils
- usage, Using the GNU Assembler, Using the GNU Linker, Using Other Binary Tools
- version, Main Features, binutils, Changes in binutils 2.22.52, Changes in binutils 2.23.51
C
- C programming language
- compiling, Using the C Compiler, Preparing a Program for Debugging
- running, Running a C Program
- support, GNU C Compiler
- C++ programming language
- compiling, Using the C++ Compiler, Preparing a Program for Debugging
- running, Running a C++ Program
- support, GNU C++ Compiler
- C++11 (see GNU Compiler Collection)
- c++filt
- overview, binutils
- usage, Using Other Binary Tools
- C11 (see GNU Compiler Collection)
- Cachegrind
- overview, Valgrind
- usage, Using Valgrind
- Callgrind
- overview, Valgrind
- usage, Using Valgrind
- compatibility
- GNU Compiler Collection, Language Compatibility, ABI Compatibility, Debugging Compatibility, Other Compatibility, C++11 Compatibility, Compatibility Changes, Fortran 2003 Compatibility, Fortran 2008 Compatibility, Fortran 77 Compatibility
- GNU Debugger, Compatibility Changes
- Red Hat Developer Toolset, Compatibility
- compiling (see GNU Compiler Collection)
- Customer Portal, Accessing the Customer Portal
- Connect menu, The Connect Menu
- Deploy menu, The Deploy Menu
- overview, Accessing the Customer Portal
- Plain menu, The Plan Menu
D
- debugging (see GNU Debugger)
- Developer Toolset (see Red Hat Developer Toolset)
- documentation
- Red Hat Product Documentation, Accessing Red Hat Product Documentation
- DRD
- overview, Valgrind
- usage, Using Valgrind
- dwz, dwz
- documentation, Additional Resources
- installation, Installing dwz
- overview, dwz
- usage, Using dwz
- version, Main Features, dwz
E
- Eclipse, Eclipse
- configuration, Running Eclipse
- documentation, Additional Resources
- installation, Installing Eclipse
- overview, Eclipse
- usage, Running Eclipse
- elfedit
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- elfutils, elfutils
- documentation, Additional Resources
- installation, Installing elfutils
- overview, elfutils
- usage, Using elfutils
- version, Main Features, elfutils, Changes in elfutils 0.154
- eu-addr2line
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-ar
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-elfcmp
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-elflint
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-findtextrel
- overview, elfutils
- usage, Using elfutils
- eu-make-debug-archive
- overview, elfutils
- usage, Using elfutils
- eu-nm
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-objdump
- overview, elfutils
- usage, Using elfutils
- eu-ranlib
- overview, elfutils
- usage, Using elfutils
- eu-readelf
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-size
- overview, elfutils
- usage, Using elfutils
- eu-strings
- overview, elfutils
- usage, Using elfutils
- eu-strip
- features, Changes in elfutils 0.154
- overview, elfutils
- usage, Using elfutils
- eu-unstrip
- overview, elfutils
- usage, Using elfutils
F
- feedback
- contact information for this manual, We Need Feedback!
- Fortran programming language
- compiling, Using the Fortran Compiler
- running, Running a Fortran Program
- support, GNU Fortran Compiler
G
- g++ (see GNU Compiler Collection)
- GAS (see GNU assembler)
- GCC (see GNU Compiler Collection)
- gcc (see GNU Compiler Collection)
- GDB (see GNU Debugger)
- gfortran (see GNU Compiler Collection)
- Global Support Services
- contacting, Contacting Global Support Services
- GNU assembler, Using the GNU Assembler
- compatibility, Compatibility Changes
- documentation, Additional Resources
- features, New Features, GNU Assembler
- installation, Installing binutils
- overview, binutils
- usage, Using the GNU Assembler
- GNU Binutils (see binutils)
- GNU Compiler Collection, GNU Compiler Collection (GCC)
- C support, GNU C Compiler
- C++ support, GNU C++ Compiler
- compatibility, Language Compatibility, ABI Compatibility, Debugging Compatibility, Other Compatibility, C++11 Compatibility, Compatibility Changes, Fortran 2003 Compatibility, Fortran 2008 Compatibility, Fortran 77 Compatibility
- documentation, Additional Resources
- features, Main Features, Status and Features, New Features, Fortran 2003 Features, Fortran 2008 Features
- Fortran support, GNU Fortran Compiler
- installation, Installing the C Compiler, Installing the C++ Compiler, Installing the Fortran Compiler
- overview, GNU Compiler Collection (GCC)
- usage, Using the C Compiler, Using the C++ Compiler, Using the Fortran Compiler, Preparing a Program for Debugging
- version, Main Features, GNU Compiler Collection (GCC), Changes in GCC 4.7.0, Changes in GCC 4.7.2
- GNU Debugger, GNU Debugger (GDB)
- compatibility, Compatibility Changes
- documentation, Additional Resources
- features, Main Features, New Features
- installation, Installing the GNU Debugger
- overview, GNU Debugger (GDB)
- preparation, Preparing a Program for Debugging
- usage, Running the GNU Debugger, Listing Source Code, Setting Breakpoints, Starting Execution, Displaying Current Values, Continuing Execution
- version, Main Features, GNU Debugger (GDB), Changes in GDB 7.4, Changes in GDB 7.5
- GNU linker, Using the GNU Linker
- compatibility, Compatibility Changes
- documentation, Additional Resources
- features, New Features, GNU Linker
- installation, Installing binutils
- overview, binutils
- usage, Using the GNU Linker
- gold (see GNU linker)
- gprof
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- GSS (see Global Support Services)
H
- Helgrind
- overview, Valgrind
- usage, Using Valgrind
- help
- accessing the Customer Portal, Accessing the Customer Portal
- getting help, Do You Need Help?
- Global Support Services, Contacting Global Support Services
- Red Hat Product Documentation, Accessing Red Hat Product Documentation
L
- ld (see GNU linker)
- linking (see GNU linker)
M
- Massif
- overview, Valgrind
- usage, Using Valgrind
- Memcheck
- overview, Valgrind
- usage, Using Valgrind
N
- nm
- overview, binutils
- usage, Using Other Binary Tools
O
- objcopy
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- objdump
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- opannotate
- overview, OProfile
- usage, Using OProfile
- oparchive
- overview, OProfile
- usage, Using OProfile
- opcontrol
- overview, OProfile
- usage, Using OProfile
- opgprof
- overview, OProfile
- usage, Using OProfile
- ophelp
- overview, OProfile
- usage, Using OProfile
- opimport
- overview, OProfile
- usage, Using OProfile
- opjitconv
- overview, OProfile
- usage, Using OProfile
- opreport
- overview, OProfile
- usage, Using OProfile
- OProfile, OProfile
- documentation, Additional Resources
- installation, Installing OProfile
- overview, OProfile, Changes in OProfile 0.154
- usage, Using OProfile
- version, Main Features, OProfile
- oprofiled
- overview, OProfile
- usage, Using OProfile
R
- ranlib
- overview, binutils
- usage, Using Other Binary Tools
- readelf
- features, New Features
- overview, binutils
- usage, Using Other Binary Tools
- Red Hat Customer Portal (see Customer Portal)
- Red Hat Developer Toolset, Red Hat Developer Toolset
- compatibility, Compatibility
- documentation, Additional Resources, Accessing Red Hat Product Documentation
- features, Main Features
- installation, Installing Red Hat Developer Toolset
- overview, About Red Hat Developer Toolset
- subscription, Getting Access to Red Hat Developer Toolset
- support, About Red Hat Developer Toolset
- uninstallation, Uninstalling Red Hat Developer Toolset
- update, Updating Red Hat Developer Toolset
- Red Hat Enterprise Linux
- documentation, Additional Resources, Accessing Red Hat Product Documentation
- supported versions, Compatibility
- Red Hat Subscription Management
- subscription, Using Red Hat Subscription Management
- RHN Classic
- subscription, Using RHN Classic
S
- scl (see Software Collections)
- size
- overview, binutils
- usage, Using Other Binary Tools
- Software Collections
- documentation, Additional Resources, Accessing Red Hat Product Documentation
- overview, About Red Hat Developer Toolset
- stap
- overview, SystemTap
- usage, Using SystemTap
- stap-merge
- overview, SystemTap
- usage, Using SystemTap
- stap-prep
- overview, SystemTap
- usage, Installing SystemTap
- stap-report
- overview, SystemTap
- usage, Using SystemTap
- staprun
- overview, SystemTap
- usage, Using SystemTap
- stapsh
- overview, SystemTap
- usage, Using SystemTap
- strings
- overview, binutils
- usage, Using Other Binary Tools
- strip
- overview, binutils
- usage, Using Other Binary Tools
- support
- Red Hat Developer Toolset, About Red Hat Developer Toolset
- SystemTap, SystemTap
- documentation, Additional Resources
- installation, Installing SystemTap
- overview, SystemTap
- usage, Using SystemTap
- version, Main Features, SystemTap
V
- Valgrind, Valgrind
- documentation, Additional Resources
- installation, Installing Valgrind
- overview, Valgrind
- usage, Using Valgrind
- version, Main Features, Valgrind



