Getting Started Guide
Getting Started Guide
Sourcery G++ Lite: ARM GNU/Linux: Sourcery G++ Lite 2010.09-50: Getting Started
CodeSourcery, Inc. Copyright 2005, 2006, 2007, 2008, 2009, 2010 CodeSourcery, Inc.
All rights reserved.
Abstract
This guide explains how to install and build applications with Sourcery G++ Lite, CodeSourcery's customized and validated version of the GNU Toolchain. Sourcery G++ Lite includes everything you need for application development, including C and C++ compilers, assemblers, linkers, and libraries. When you have finished reading this guide, you will know how to use Sourcery G++ from the command line.
Table of Contents
Preface ...................................................................................................................... v 1. Intended Audience ........................................................................................... vi 2. Organization ................................................................................................... vi 3. Typographical Conventions .............................................................................. vii 1. Quick Start .............................................................................................................. 1 1.1. Installation and Set-Up ................................................................................... 2 1.2. Configuring Sourcery G++ Lite for the Target System ........................................... 2 1.3. Building Your Program ................................................................................... 2 1.4. Running and Debugging Your Program .............................................................. 2 2. Installation and Configuration ..................................................................................... 4 2.1. Terminology ................................................................................................. 5 2.2. System Requirements ..................................................................................... 5 2.3. Downloading an Installer ................................................................................. 6 2.4. Installing Sourcery G++ Lite ............................................................................ 6 2.5. Installing Sourcery G++ Lite Updates ................................................................ 9 2.6. Setting up the Environment .............................................................................. 9 2.7. Uninstalling Sourcery G++ Lite ...................................................................... 11 3. Sourcery G++ Lite for ARM GNU/Linux .................................................................... 13 3.1. Included Components and Features .................................................................. 14 3.2. Library Configurations .................................................................................. 14 3.3. Compiling for ARMv4T and ARMv5T Systems ................................................. 15 3.4. Target Kernel Requirements ........................................................................... 15 3.5. Target Dynamic Loader Requirements .............................................................. 15 3.6. Using Sourcery G++ Lite on GNU/Linux Targets ............................................... 16 3.7. Using GDB Server for Debugging ................................................................... 18 3.8. GLIBC Backtrace Support ............................................................................. 20 3.9. Using VFP Floating Point .............................................................................. 20 3.10. ABI Compatibility ...................................................................................... 21 3.11. Object File Portability ................................................................................. 22 4. Using Sourcery G++ from the Command Line ............................................................. 23 4.1. Building an Application ................................................................................. 24 4.2. Running Applications on the Target System ....................................................... 24 4.3. Running Applications from GDB .................................................................... 25 5. Sourcery G++ Debug Sprite ...................................................................................... 26 5.1. Probing for Debug Devices ............................................................................ 27 5.2. Invoking Sourcery G++ Debug Sprite ............................................................... 27 5.3. Sourcery G++ Debug Sprite Options ................................................................ 28 5.4. Remote Debug Interface Devices ..................................................................... 29 5.5. Actel FlashPro Devices ................................................................................. 29 5.6. Debugging a Remote Board ........................................................................... 30 5.7. Supported Board Files ................................................................................... 30 5.8. Board File Syntax ........................................................................................ 30 6. Next Steps with Sourcery G++ .................................................................................. 34 6.1. Sourcery G++ Knowledge Base ...................................................................... 35 6.2. Example Programs ....................................................................................... 35 6.3. Manuals for GNU Toolchain Components ......................................................... 35 A. Sourcery G++ Lite Release Notes ............................................................................. 36 A.1. Changes in Sourcery G++ Lite for ARM GNU/Linux ......................................... 37 B. Sourcery G++ Lite Licenses ..................................................................................... 49 B.1. Licenses for Sourcery G++ Lite Components .................................................... 50 B.2. Sourcery G++ Software License Agreement ...................................................... 51
iii
iv
Preface
This preface introduces the Sourcery G++ Lite Getting Started guide. It explains the structure of this guide and describes the documentation conventions used.
Preface
1. Intended Audience
This guide is written for people who will install and/or use Sourcery G++ Lite. This guide provides a step-by-step guide to installing Sourcery G++ Lite and to building simple applications. Parts of this document assume that you have some familiarity with using the command-line interface.
2. Organization
This document is organized into the following chapters and appendices: Chapter 1, Quick Start This chapter includes a brief checklist to follow when installing and using Sourcery G++ Lite for the first time. You may use this chapter as an abbreviated guide to the rest of this manual. This chapter describes how to download, install and configure Sourcery G++ Lite. This section describes the available installation options and explains how to set up your environment so that you can build applications. This chapter contains information about using Sourcery G++ Lite that is specific to ARM GNU/Linux targets. You should read this chapter to learn how to best use Sourcery G++ Lite on your target system. This chapter explains how to build applications with Sourcery G++ Lite using the command line. In the process of reading this chapter, you will build a simple application that you can use as a model for your own programs. This chapter describes the use of the Sourcery G++ Debug Sprite for remote debugging. The Sprite is provided for debugging of the Linux kernel on the target board. This chapter includes information about the debugging devices and boards supported by the Sprite for ARM GNU/Linux.
Chapter 6, Next Steps with Sourcery This chapter describes where you can find additional docuG++ mentation and information about using Sourcery G++ Lite and its components. It also provides information about Sourcery G++ subscriptions. CodeSourcery customers with Sourcery G++ subscriptions receive comprehensive support for Sourcery G++. Appendix A, Sourcery G++ Lite Release Notes This appendix contains information about changes in this release of Sourcery G++ Lite for ARM GNU/Linux. You should read through these notes to learn about new features and bug fixes. This appendix provides information about the software licenses that apply to Sourcery G++ Lite. Read this appendix to understand your legal rights and obligations as a user of Sourcery G++ Lite.
vi
Preface
3. Typographical Conventions
The following typographical conventions are used in this guide: > command arg ... A command, typed by the user, and its output. The > character is the command prompt. The name of a program, when used in a sentence, rather than in literal input or output. Text provided to or received from a computer program. Text that should be replaced with an appropriate value when typing a command. At the end of a line in command or program examples, indicates that a long line of literal input or output continues onto the next line in the document.
command
literal placeholder
vii
Quick Start
Sourcery G++ Lite for ARM GNU/Linux is intended for developers working on embedded GNU/Linux applications. It may also be used for Linux kernel development and debugging, or to build a GNU/Linux distribution. Follow the steps given in this chapter to install Sourcery G++ Lite and build and run your first application program. The checklist given here is not a tutorial and does not include detailed instructions for each step; however, it will help guide you to find the instructions and reference information you need to accomplish each step. Note that this checklist is also oriented towards application debugging rather than kernel debugging. You can find additional details about the components, libraries, and other features included in this version of Sourcery G++ Lite in Chapter 3, Sourcery G++ Lite for ARM GNU/Linux.
http://www.codesourcery.com/gnu_toolchains/
Quick Start
Run your program on the ARM GNU/Linux target. To run a program using the included Sourcery G++ libraries, you must install the sysroot on the target, as previously discussed. Copy the executable for your program to the target system. The method you use for launching your program depends on how you have installed the libraries and built your program. In some cases, you may need to invoke the Sourcery G++ dynamic linker explicitly. Refer to Section 3.6, Using Sourcery G++ Lite on GNU/Linux Targets for details. Debug your program on the target using GDB server. You can use GDB server on a remote target to debug your program. When debugging a program that uses the included Sourcery G++ libraries, you must use the gdbserver executable included in the sysroot, and similar issues with respect to the dynamic linker as discussed previously apply. See Section 3.7, Using GDB Server for Debugging for detailed instructions. Once you have started GDB server on the target, you can connect to it from the debugger on your host system. Refer to Section 4.3, Running Applications from GDB for instructions on remote debugging from command-line GDB.
2.1. Terminology
Throughout this document, the term host system refers to the system on which you run Sourcery G++ while the term target system refers to the system on which the code produced by Sourcery G++ runs. The target system for this version of Sourcery G++ is arm-none-linux-gnueabi. If you are developing a workstation or server application to run on the same system that you are using to run Sourcery G++, then the host and target systems are the same. On the other hand, if you are developing an application for an embedded system, then the host and target systems are probably different.
prompts for an alternate location. On Linux hosts, the installer puts temporary files in the directory specified by the IATEMPDIR environment variable, or /tmp if that is not set.
1 2
http://www.codesourcery.com/gnu_toolchains/ https://support.codesourcery.com/GNUToolchain/
The graphical installer guides you through the steps to install Sourcery G++ Lite.
You may want to change the install directory pathname and customize the shortcut installation.
Choose Shortcut Folder. You can customize where the installer creates shortcuts for quick access to Sourcery G++ Lite. When the installer has finished, it asks if you want to launch a viewer for the Getting Started guide. Finally, the installer displays a summary screen to confirm a successful install before it exits.
Install Complete.
If you prefer, you can run the installer in console mode rather than using the graphical interface. To do this, invoke the installer with the -i console command-line option. For example: > /path/to/package.exe -i console
> /bin/sh ./path/to/package.bin After the installer starts, follow the on-screen dialogs to install Sourcery G++ Lite. For additional details on running the installer, see the discussion and screen shots in the Microsoft Windows section above. If you prefer, or if your host system does not run the X Window System, you can run the installer in console mode rather than using the graphical interface. To do this, invoke the installer with the -i console command-line option. For example: > /bin/sh ./path/to/package.bin -i console
10
> export CYGPATH=c:/cygwin/bin/cygpath directs Sourcery G++ Lite to use c:/cygwin/bin/cygpath as the path conversion utility. The value of CYGPATH must be an ordinary Windows path, not a Cygwin path.
11
To uninstall third-party drivers bundled with Sourcery G++ Lite, first disconnect the associated hardware device. Then use Uninstall a program (Vista and newer) or Add or Remove Programs (older versions of Windows) to remove the drivers separately. Depending on the device, you may need to reboot your computer to complete the driver uninstall.
12
13
Debugging support and simulators GNU Debugger 7.2.50 Sourcery G++ Debug Sprite for 2010.09-50 Provided for kernel debugging only. See ARM Chapter 5, Sourcery G++ Debug Sprite. GDB Server Target libraries GNU C Library Linux Kernel Headers Other utilities GNU Make GNU Core Utilities N/A N/A Build support on Windows hosts. Build support on Windows hosts. 2.11 2.6.35.2 Separate manual included. N/A Included with GDB. See Section 3.7, Using GDB Server for Debugging.
ARMv4T - Little-Endian, Soft-Float, GLIBC Command-line option(s): Sysroot subdirectory: Dynamic linker: Notes: -march=armv4t armv4t/ lib/ld-linux.so.3 This should also be used for ARMv5T cores such as the ARM1020T.
ARMv7-A Thumb-2 - Little-Endian, Soft-Float, GLIBC Command-line option(s): Sysroot subdirectory: Dynamic linker: -mthumb -march=armv7-a thumb2/ lib/ld-linux.so.3
14
Sourcery G++ includes copies of run-time libraries that have been built with optimizations for different target architecture variants or other sets of build options. Each such set of libraries is referred to as a multilib. When you link a target application, Sourcery G++ selects the multilib matching the build options you have selected. Each multilib corresponds to a sysroot directory which contains the files that should be installed on the target system. The sysroot contains the dynamic linker used to run your applications on the target as well as the libraries. Refer to Section 3.6, Using Sourcery G++ Lite on GNU/Linux Targets for instructions on how to install and use these support files on your target GNU/Linux system. You can find the sysroot directories provided with Sourcery G++ in the arm-none-linux-gnueabi/ libc directory of your installation. In the tables below, the dynamic linker pathname is given relative to the corresponding sysroot.
http://support.codesourcery.com/GNUToolchain/kbentry117
15
16
If you choose to overwrite your existing C library, you may not be able to boot your system. You should back up your existing system before overwriting the C library and ensure that you can restore the backup even with your system offline. The next step is to identify the correct sysroot subdirectory in the Sourcery G++ Lite install directory on your host system. The sysroot you copy to the target must be the one that corresponds to the linker options you are using to build your applications. The tables in Section 3.2, Library Configurations tell you which sysroot subdirectories correspond to which sets of command-line options. From the command line, you can identify the appropriate sysroot for your program by invoking the compiler with -print-sysroot added to your other build options. This causes GCC to print the host sysroot pathname and exit. The mechanism you use for copying the sysroot to your target board depends on its hardware and software configuration. You may be able to use FTP or SSH with a server already running on your target. If your target board does not have networking configured, you may be able to copy files using an SD card or USB memory stick, or via a file transfer utility over a serial line. The instructions that come with your board may include specific suggestions. When running Sourcery G++ on a GNU/Linux host, as an alternative to copying files to the target system, you may be able to NFS-mount the Sourcery G++ Lite installation directory from your host system on the target system. It is especially convenient for debugging if you can make the sysroot pathname on the target system be identical to that on the GNU/Linux host system; refer to Section 3.7.3, Setting the Sysroot in the Debugger for further discussion of this issue. Otherwise, you must copy files from the appropriate sysroot subdirectory in the arm-none-linux-gnueabi/libc directory of your Sourcery G++ Lite install to the target system. In many cases, you do not need to copy all of the files in the sysroot. For example, the usr/ include subdirectory contains files that are only needed if you will actually be running the compiler on your target system. You do not need these files for non-native compilers. You also do not need any .o or .a files; these are used by the compiler when linking programs, but are not needed to run programs. You should definitely copy all .so files and the executable files in usr/bin and sbin.
17
Note that if you specify an incorrect path for --dynamic-linker, the common failure mode seen when running your application on the target is similar to > ./factorial ./factorial: No such file or directory or > ./factorial ./factorial: bad ELF interpreter: No such file or directory This can be quite confusing since it appears from the error message as if it is the ./factorial executable that is missing rather than the dynamic linker it references.
18
You must copy the sysroot to your target system as described in Section 3.6.1, Installing the Sysroot. You must also copy the executable you want to debug to your target system. If you have installed the sysroot in the root directory of the filesystem on the target, you can invoke gdbserver as: > gdbserver :10000 program arg1 arg2 ... where program is the path to the program you want to debug and arg1 arg2 ... are the arguments you want to pass to it. The :10000 argument indicates that gdbserver should listen for connections from GDB on port 10000. You can use a different port, if you prefer. If you have installed the sysroot in an alternate directory, invoking gdbserver becomes more complicated. You must build your application using the link-time options to specify the location of the sysroot, as described in Section 3.6.2, Using Linker Options to Specify the Sysroot Location. You must also invoke gdbserver itself using the dynamic linker provided in the Sourcery G++ sysroot, as described in Section 3.6.3, Specifying the Sysroot Location at Runtime. In other words, the command to invoke gdbserver in this case would be similar to: > sysroot/lib/ld-linux.so.3 \ --library-path sysroot/lib:sysroot/usr/lib \ sysroot/usr/lib/bin/gdbserver :10000 program arg1 arg2 ...
19
Refer to Section 3.6.1, Installing the Sysroot for more information about installing the sysroot on the target. Note that if you have installed a stripped copy of the provided libraries on the target, you should give GDB the location of an unstripped copy on the host.
20
Note that, in addition to selecting hard/soft float and the ABI via the -mfloat-abi option, you can also compile for a particular FPU using the -mfpu option. For example, -mfpu=neon selects VFPv3 with NEON coprocessor extensions.
http://infocenter.arm.com
21
RTABI - ARM IHI 0043C (19 October 2009) AAELF - ARM IHI 0044D (28 October 2009) ABI Addenda - ARM IHI 0045C (4 November 2009) Sourcery G++ currently produces DWARF version 2, rather than DWARF version 3 as specified in AADWARF.
22
23
24
25
26
Sourcery G++ Lite contains the Sourcery G++ Debug Sprite for ARM GNU/Linux. This Sprite is provided to allow debugging of programs running on a bare board. You can use the Sprite to debug a program when there is no operating system on the board, or for debugging the operating system itself. If the board is running an operating system, and you wish to debug a program running on that OS, you should use the facilities provided by the OS itself (for instance, using gdbserver). The Sprite acts as an interface between GDB and external debug devices and libraries. Refer to Section 5.2, Invoking Sourcery G++ Debug Sprite for information about the specific devices supported by this version of Sourcery G++ Lite. Note for Linux users The Debug Sprite provided with Sourcery G++ Lite allows remote debugging of the Linux kernel running on the target. For remote debugging of application programs, you should use gdbserver instead. See Chapter 3, Sourcery G++ Lite for ARM GNU/Linux for details about how to install and run gdbserver on the target. Important The Sourcery G++ Debug Sprite is not part of the GNU Debugger and is not free or opensource software. You may use the Sourcery G++ Debug Sprite only with the GNU Debugger. You may not distribute the Sourcery G++ Debug Sprite to any third party.
27
scheme:scheme-specific-part[?device-options] Most device URL schemes also follow the regular format: scheme:[//hostname:[port]]/path[?device-options] The meanings of hostname, port, path and device-options parts depend on the scheme and are described below. The following schemes are supported in Sourcery G++ Lite for ARM GNU/Linux: rdi Use an RDI debugging device. Refer to Section 5.4, Remote Debug Interface Devices. Use a FlashPro debugging device. Refer to Section 5.5, Actel FlashPro Devices.
flashpro
The optional ?device-options portion is allowed in all schemes. These allow additional devicespecific options of the form name=value. Multiple options are concatenated using &. The board-file specifies an XML file that describes how to initialize the target board, as well as other properties of the board used by the debugger. If board-file refers to a file (via a relative or absolute pathname), it is read. Otherwise, board-file can be a board name, and the toolchain's board directory is searched for a matching file. See Section 5.7, Supported Board Files for the list of supported boards, or invoke the Sprite with the -b option to list the available board files. You can also write a custom board file; see Section 5.8, Board File Syntax for more information about the file format. Both the device-url and board-file command-line arguments are required to correctly connect the Sprite to a target board.
-i
-l [host]:port
-m
28
-q -v
If any of -b, -i or -h are given, the Debug Sprite terminates after providing the information rather than waiting for a debugger connection.
rdi-config=configfile
29
Once you have set up your board using the FlashPro software, you can check that it is recognized by the Sourcery G++ Debug Sprite by running the following command: > arm-none-linux-gnueabi-sprite -i flashpro: [jtagclock=<n:93750-4000000>] FlashPro device flashpro://usb12345/ - FlashPro Device ... If output similar to the above does not appear, your FlashPro device is not working correctly. Contact CodeSourcery for further guidance in that case.
https://support.codesourcery.com/GNUToolchain/kbentry132
30
The file's DTD is: <!-- Board description files Copyright (c) 2007-2009 CodeSourcery, Inc. THIS FILE CONTAINS PROPRIETARY, CONFIDENTIAL, AND TRADE SECRET INFORMATION OF CODESOURCERY AND/OR ITS LICENSORS. You may not use or distribute this file without the express written permission of CodeSourcery or its authorized distributor. This file is licensed only for use with Sourcery G++. No other use is permitted. --> <!ELEMENT board (properties?, feature?, initialize?, memory-map?)> <!ELEMENT properties (description?, property*)> <!ELEMENT initialize (write-register | write-memory | delay | wait-until-memory-equal | wait-until-memory-not-equal)* > <!ELEMENT write-register EMPTY> <!ATTLIST write-register address CDATA #REQUIRED value CDATA #REQUIRED bits CDATA #IMPLIED> <!ELEMENT write-memory EMPTY> <!ATTLIST write-memory address CDATA #REQUIRED value CDATA #REQUIRED bits CDATA #IMPLIED> <!ELEMENT delay EMPTY> <!ATTLIST delay time CDATA #REQUIRED> <!ELEMENT wait-until-memory-equal EMPTY> <!ATTLIST wait-until-memory-equal address CDATA #REQUIRED value CDATA #REQUIRED timeout CDATA #IMPLIED bits CDATA #IMPLIED> <!ELEMENT wait-until-memory-not-equal EMPTY> <!ATTLIST wait-until-memory-not-equal address CDATA #REQUIRED value CDATA #REQUIRED timeout CDATA #IMPLIED bits CDATA #IMPLIED> <!ELEMENT memory-map (memory-device)*> <!ELEMENT memory-device (property*, description?, sectors*)> <!ATTLIST memory-device address CDATA #REQUIRED
31
size type
CDATA CDATA
#IMPLIED>
<!ELEMENT description (#PCDATA)> <!ELEMENT property (#PCDATA)> <!ATTLIST property name CDATA #REQUIRED> <!ELEMENT sectors EMPTY> <!ATTLIST sectors size CDATA #REQUIRED count CDATA #REQUIRED> <!ENTITY % gdbtarget SYSTEM "gdb-target.dtd"> %gdbtarget; All values can be provided in decimal, hex (with a 0x prefix) or octal (with a 0 prefix). Addresses and memory sizes can use a K, KB, M, MB, G or GB suffix to denote a unit of memory. Times must use a ms or us suffix. The following elements are available: <board> This top-level element encapsulates the entire description of the board. It can contain <properties>, <feature>, <initialize> and <memory-map> elements. The <properties> element specifies specific properties of the target system. This element can occur at most once. It can contain a <description> element. It can also contain <property> elements with the following names: banked-regs The banked-regs property specifies that the CPU of the target board has banked registers for different processor modes (supervisor, IRQ, etc.). The has-vfp property specifies that the CPU of the target board has VFP registers. The system-v6-m property specifies that the CPU of the target board has ARMv6-M architecture system registers. The system-v7-m property specifies that the CPU of the target board has ARMv7-M architecture system registers. The core-family property specifies the ARM family of the target. The body of the <property> element may be one of arm7, arm9, arm11, and cortex. This property specifies the target clock frequency (in Hertz) after reset. It is used to configure flash programming algorithms.
<properties>
has-vfp
system-v6-m
system-v7-m
core-family
system-clock
32
<initialize>
The <initialize> element defines an initialization sequence for the board, which the Sprite performs before downloading a program. It can contain <write-register>, <write-memory> and <delay> elements. This element is used to inform GDB about additional registers and peripherals available on the board. It is passed directly to GDB; see the GDB manual for further details. This element describes the memory map of the target board. It is used by GDB to determine where software breakpoints may be used and when flash programming sequences must be used. This element can occur at most once. It can contain <memory-device> elements. This element specifies a region of memory. It has four attributes: address, size, type and device. The address and size attributes specify the location of the memory device. The type attribute specifies that device as ram, rom or flash. The device attribute is required for flash regions; it specifies the flash device type. The <memory-device> element can contain a <description> element. This element writes a value to a control register. It has three attributes: address, value and bits. The bits attribute, specifying the bit width of the write operation, is optional; it defaults to 32. This element writes a value to a memory location. It has three attributes: address, value and bits. The bits attribute is optional and defaults to 32. Bit widths of 8, 16 and 32 bits are supported. The address written to must be naturally aligned for the size of the write being done. This element introduces a delay. It has one attribute, time, which specifies the number of milliseconds, or microseconds to delay by. This element encapsulates a human-readable description of its enclosing element. The <property> element allows additional name/value pairs to be specified. The property name is specified in a name attribute. The property value is the body of the <property> element.
<feature>
<memory-map>
<memory-device>
<write-register>
<write-memory>
<delay>
<description>
<property>
33
34
https://support.codesourcery.com/GNUToolchain/
35
36
37
VMOV instruction bug fix. A bug that caused the assembler to incorrectly reject certain valid immediate operands for the VMOV instruction has been fixed.
Precision improvement with vectorization enabled. The GCC auto-vectorizer no longer uses NEON floating-point instructions unless the -funsafe-math-optimizations option (implied by -ffast-math) is specified. This is because NEON hardware does not fully support the IEEE 754 standard for floating-point arithmetic. In particular, very small quantities may be flushed to zero. Alignment attributes. A bug has been fixed that caused the compiler to ignore alignment attributes of C++ static member variables where the attribute was present on the definition, but not the declaration. naked attribute semantics. The naked function attribute now also implies the noinline and noclone attributes. This fixes bugs resulting from invalid optimizations of functions with this attribute. Stack corruption bug fix. A bug in GCC has been fixed that caused stack corruption in functions with the interrupt attribute. GCC bug fix for push multiple instruction generation. A bug has been fixed that caused GCC to generate incorrect push multiple instructions, causing an assembler warning register range not in ascending order. Thumb-2 internal compiler error fix. A bug has been fixed that caused the compiler to crash when compiling Thumb-2 code using 64-bit integer arithmetic. Compiler optimization improvements. timization improvements, including: The compiler has been enhanced with a number of op-
More efficient assignment for structures containing bitfields. Better code for initializing C++ arrays with explicit element initializers. Improved logic for eliminating/combining redundant comparisons in code with nested conditionals. Better selection of loop variables, resulting in fewer temporaries and more efficient register usage. More optimization of references to globals in position-independent code. Various Thumb code generation improvements. Better code when constant addresses are used as arguments to inline assembly statements.
1
https://support.codesourcery.com/GNUToolchain/kbentry1
38
Better code for copying small constant strings. Improved tuning for Cortex-M4 processors. Cortex-A9 specific tuning for VFP and NEON instructions. Use of more NEON features. Preprocessor symbols for floating-point calling convention. Built-in preprocessor symbols __ARM_PCS and __ARM_PCS_VFP are now defined to indicate the current floating-point calling convention. GCC version 4.5.1. Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.5.1. For more information about changes from GCC version 4.4 that was included in previous releases, see http://gcc.gnu.org/gcc-4.5/changes.html. C++ locale support. The C++ standard library now includes locale support.
New -Wdouble-promotion warning option. The compiler has a new option, -Wdouble-promotion, which enables warnings about implicit promotions of float values to double. This option is useful when compiling code for processors (such as ARM Cortex-M4) that have hardware support for single-precision floating-point arithmetic only, where unintentional use of double precision results in dramatically slower code. Linker bug fix. A bug that caused the linker error relocation truncated to fit: R_ARM_THM_JUMP24 when linking some Thumb-2 applications has been fixed. Assembler PC-relative store fix. A bug that caused the assembler to reject some valid PC-relative store instructions has been fixed. It now issues a warning instead for architectures where these instructions are deprecated. ARMv7-A linker bug fix. A bug in the linker support for --fix-cortex-a8, which is enabled by default when linking ARMv7-A objects, has been fixed. Programs affected by the bug sometimes crashed with segmentation fault or illegal instruction errors. Smaller C++ programs with -g. An assembler bug has been fixed that caused unnecessary references to exception-handling routines from C++ programs when debug information is enabled. For programs that do not otherwise use exceptions, this change results in smaller code size. Additional validation in the assembler. The assembler now diagnoses an error, instead of producing an invalid object file, when directives such as .hidden are missing operands. Assembler PC-relative load fix. An assembler bug that caused the assembler to reject some references to global symbols has been fixed. This bug affected Thumb instructions of the form ldr r0, symbol. Strip bug fix. A bug in the strip and objcopy utilities, which resulted in stripped object files that the linker could not recognize, has been fixed. Binutils update. The binutils package has been updated to version 2.20.51.20100809 from the FSF trunk. This update includes numerous bug fixes. More efficient process creation functions. The system and popen functions provided by GLIBC have been improved to require less memory when memory overcommit is disabled in the Linux kernel.
39
Optimized string and memory functions. The performance of GLIBC's string and memory functions, including strstr and memmem, have been significantly improved for large inputs. Linux kernel headers update. Linux kernel header files have been updated to version 2.6.35.2.
Improved support for debugging RealView C++ programs . GDB has been enhanced to handle some debug information contained in binaries produced by the ARM RealView compiler. Formerly, GDB sometimes crashed on programs which use C++ templates. Another bug has been fixed that caused GDB to fail to place breakpoints in binaries produced by the ARM RealView compiler when the source file location for the breakpoint was specified as an absolute pathname. GDB update. The included version of GDB has been updated to 7.2.50.20100908. This update adds numerous bug fixes and new features, including improved C++ language support, a new command to save breakpoints to a file, a new convenience variable $_thread that holds the number of the current thread, among many other improvements. GDB crash fix. A bug has been fixed that caused GDB to crash on launch if the environment variable CYGPATH is set to a program that does not exist or cannot be executed.
40
Weak symbols. An assembler bug has been fixed that caused incorrect code to be generated for references to weak symbols when a default definition is also provided in the same file. ARM internal compiler error fix. A bug that caused the error internal compiler error: in get_arm_condition_code when compiling code using 64-bit integers has been fixed. Optimization of ARM NEON vdupq_n* intrinsics. for vdupq_n* intrinsics to load particular constants. The compiler now generates better code
Linker bug fix for --section-start. A linker bug that caused --section-start to fail to work as documented if the section is defined in multiple object files has been fixed. GCC inline assembly bug fixes. A bug that caused NEON/VFP registers specified in the clobber list of inline assembly statements to be saved and restored incorrectly has been fixed. Another bug that caused incorrect code when double-precision or quad-precision registers were specified in the clobber list has also been fixed. Assembler segmentation fault fix. A bug has been fixed that caused the assembler to crash when processing some data filling directives, such as .fill 0, 0, 0. Linker bug with Cortex-A8 erratum fix. A bug in the --fix-cortex-a8 linker option, which is enabled by default when linking ARMv7-A objects, has been fixed. The bug could cause the linker to generate incorrect shared libraries. Improved code generation for Cortex-A5. The compiler has been enhanced to provide instruction scheduling for Cortex-A5 cores. To take advantage of this, use the -mcpu=cortex-a5 commandline option. Improved support for debugging RealView programs . GDB has been enhanced to handle some debug information contained in binaries produced by the ARM RealView compiler. Formerly, GDB sometimes crashed on these programs and libraries. Better use of NEON instructions on Cortex-A8. The compiler now generates better code when optimizing for the Cortex-A8 by being less eager to use NEON instructions. Assembler segmentation fault fix. A bug has been fixed that caused the assembler to crash when assembling some Thumb-only instructions in ARM mode. The assembler now gives an error on all incorrect uses of Thumb-only instructions in ARM mode. GCC internal compiler error. A bug has been fixed that caused GCC to crash when compiling some C++ code using templates at -O2 or -O3. Backtracing through library functions. GLIBC has been improved to allow backtracing through system calls and other functions that formerly did not provide sufficient debug information to support this feature. GCC internal compiler error with optimize attribute. A bug has been fixed that caused the compiler to crash when invoked with the -O0 or -O1 option on code using the optimize attribute to specify higher optimization levels for individual functions. C++ array initializer optimization. array initializations in C++. The compiler now generates better code for some non-constant
41
42
NEON assembler fix. The assembler now correctly handles the three-operand form of NEON logic instructions, such as vorr.i32 q0, q0, #0xff Warning for deprecated instructions. The assembler now issues warnings about uses of swp or swpb instructions on architectures where they have been deprecated. Disassembler bug fix. A bug in the disassembler has been fixed that caused incorrect output for data objects, including literal pools and the interrupt vector. Optimizer bug fix. A bug in GCC that caused internal compiler errors at -O2 or above has been fixed. The bug also occurred at other optimization levels when the -fpromote-loop-indices command-line option was used. EGLIBC version 2.11. Sourcery G++ Lite for ARM GNU/Linux now includes EGLIBC version 2.11 library which is based on GNU C Library version 2.11. For more information about changes, see http://www.eglibc.org/news#eglibc_2_11. Linker fix for data-only sections. A bug has been fixed that caused the linker to incorrectly mark parts of the output as containing code, rather than data, when linking data-only sections not explicitly tagged as such. The bug resulted in incorrect disassembly. Linker relocation diagnostics. A bug that caused the linker to incorrectly diagnose overflows for some valid relocations has been fixed. GDB asynchronous mode fix. GDB can now be used from the command line in asynchronous mode with remote targets. Previously, GDB did not accept user input while asynchronous commands (such as continue &) were running. Frame manipulation bug fix. A bug in GDB has been fixed that caused frame manipulation commands to report an internal error in some cases when used on arbitrary stack frames specified by an address. Thumb-2 single stepping. GDB now supports stepping through Thumb-2 conditionally executed instructions. Earlier versions of GDB reported the error Stepping through Thumb-2 IT blocks is not yet supported. A bug that caused GDB to lose control when stepping over wide Thumb-2 branch instructions has also been fixed. Read watchpoints bug fix. A GDB bug has been fixed that caused watchpoints set to trigger on memory reads to be silently ignored in some cases. Setting thread-specific breakpoints in GDB. A bug in GDB has been fixed that caused a syntax error for the break *expression thread threadnum command. Improved backtrace function. The backtrace function can now backtrace through C++ exception regions and through functions marked throw(). Dynamic library unloading and destructor ordering. A bug that caused dynamic libraries loaded with dlopen to remain loaded after calling dlclose to unload them, and thus their destructors be called in the incorrect order has been fixed. Optimized memcpy. ARM targets. The GLIBC implementation of memcpy has been further optimized for
Thumb-2 multiply fix. A bug that caused an invalid muls instruction to be generated in certain circumstances has been fixed. This affected code compiled for Thumb-2, and resulted in an error from the assembler.
43
Thumb-2 internal compiler error fix. A bug that caused an internal compiler error when building the QT library for Thumb-2 has been fixed. Watchpoint fix. A bug in the Sourcery G++ Debug Sprite that sometimes prevented watchpoints on Cortex-M targets from functioning has been fixed. Debug Sprite multiple connections fix. When started with the -m option, the Sourcery G++ Debug Sprite no longer exits if the connection to GDB is lost when sending a response. Instead, it goes back to waiting for another connection.
Internal compiler error fix. A bug that caused an internal compiler error when using -fno-omit-frame-pointer to compile code for Thumb-2 has been fixed.
44
GDB crash fix. A GDB bug has been fixed that caused GDB to crash when unloading shared libraries or switching executables. @FILE fix. A bug has been fixed in the processing of @FILE command-line options by GCC, GDB, and other tools. The bug caused any options in FILE following a blank line to be ignored. Preprocessor error handling. #include as a fatal error. The preprocessor now treats failing to find a file referenced via
Multi-threaded debugging fix. A GDB bug has been fixed that caused the step command to hang when debugging a multi-threaded program. NEON improvements. The compiler now generates improved NEON vector code when copying memory or storing constants to memory using the NEON coprocessor. The compiler also generates better code for accessing data arrays that are not known to have 64-bit alignment. In addition, a bug that caused internal compiler errors when compiling for Thumb-2 with NEON enabled has been fixed, as has another bug that caused some vector shift NEON operations to be wrongly rejected. ELF file corruption with strip. been fixed. A bug that caused strip to corrupt unusual ELF files has A bug in GDB's translation of Cygwin pathnames has
Compiler errors with float32_t. A bug has been fixed that caused compiler errors when using the float32_t type from arm_neon.h. gdbserver multi-threaded debugging fix. A bug has been fixed that prevented gdbserver from exiting after debugging a multi-threaded program. Thumb-2 position-independent executables. A bug that caused position-independent executables to fail to run correctly has been fixed. The bug only affected code compiled for Thumb-2 mode. Support for ARM Cortex-A5 cores. Sourcery G++ now includes basic support for ARM CortexA5 cores. Use the -mcpu=cortex-a5 command-line option. Static variables and asm statements bug fix. A bug in GCC that caused functions containing static variables and asm statements to be miscompiled at -O2 or above has been fixed. The bug also occurred at other optimization levels when the -fremove-local-statics command-line option was used. Warnings for naked functions. A compiler bug that resulted in incorrect warnings about missing return statements in non-void functions declared with the naked attribute has been fixed. Optimizer bug fix. A bug in GCC that caused functions with complex loop nests to be miscompiled at -O2 or above has been fixed. The bug also occurred at other optimization levels when the -fpromote-loop-indices command-line option was used. VFPv4 support. Sourcery G++ now includes support for VFPv4, VFPv4-D16 and NEON-VFPv4 coprocessors. Use the -mfpu=vfpv4, -mfpu=vfpv4-d16 or -mfpu=neon-vfpv4 options, respectively. GCC internal compiler error. A bug has been fixed that caused the compiler to crash when optimizing code that casts between structure types and the type of the first field.
45
ELF Program Headers. The linker now better diagnoses errors in the usage of FILEHDR and PHDRS keywords in PHDRS command of linker scripts. Refer to the linker manual for more information.
ARM VFP assembler bug fix. The assembler now correctly assembles the vmls, vnmla and vnmls mnemonics. Previously these were incorrectly assembled to different instructions.
Optimizer improvements. When optimizing for speed, the compiler now uses improved heuristics to limit certain types of optimizations that may adversely affect both code size and speed. This change also makes it possible to produce better code when optimizing for space rather than speed. Improved optimization for Thumb-2. GCC now supports instruction scheduling for Thumb-2 code. This optimization is enabled when compiling with -O2, -O3, or -Os, and can improve performance substantially. Linking objects built without -fPIC into shared libraries. The linker now gives an error for attempts to link object files built without -fPIC or -fpic into shared libraries when those objects use the ARMv7 MOVW and MOVT instructions in ways that are unsafe in a shared library. Previously it built a shared library that behaved incorrectly when used. GDB update. The included version of GDB has been updated to 6.8.50.20090630. This update adds numerous bug fixes and new features, including support for multi-byte and wide character sets and improved C++ template support. New assembler directive .inst. The assembler now accepts the new .inst directive to generate an instruction from its integer encoding. GDB and third-party compilers. Some bugs that caused GDB to crash when debugging programs compiled with third-party tools have been fixed. These bugs did not affect programs built with Sourcery G++. Remote debugging hardware watchpoint bug fix. A GDB bug has been fixed that caused hardware watchpoint hits to be incorrectly reported in some cases. Internal error in assembler. An assembler bug that caused an internal error when .thumb or .arm appears after an invalid instruction has been fixed.
46
GDB internal warning fix. A GDB bug has been fixed that caused warnings of the form warning: (Internal error: pc address in read in psymtab, but not in symtab.). Improved bit counting operation. The __builtin_ctz built-in function, which returns the number of trailing zero bits in a value, has been improved to use a shorter instruction sequence for ARMv6T2 and later. Out-of-range branch errors. A Thumb-2 code generation defect in the compiler that caused branch out of range errors from the assembler has been eliminated. Binutils update. The binutils package has been updated to version 2.19.51.20090709 from the FSF trunk. This update includes numerous bug fixes. Linker fix. The linker now correctly processes references to undefined local symbols. Such references are treated the same as references to undefined global symbols. Usually object files contain no such references, as they can never be satisfied. Assembler validation improvements. The assembler now issues a warning when a section finishes with an unclosed IT instruction block at the end of the input file. It also now rejects unwinding directives that appear outside of a .fnstart/.fnend pair. Additionally, 32-bit Thumb instructions are now correctly rejected when assembling for cores that do not support these instructions. Assembler validations fix. A bug in the assembler that caused some addw and subw instructions with SP or PC as operand to be wrongly rejected has been fixed. -mauto-it assembler option replaced with -mimplicit-it . The -mauto-it commandline option to the assembler has been replaced with a more general -mimplicit-it option to control the behavior of the assembler when conditional instructions appear outside an IT instruction block. If you were previously using -mauto-it, you should now use -mimplicit-it=always. Other -mimplicit-it modes allow you to separately control implicit IT instruction insertion behavior in ARM and Thumb-2 code. For more information, refer to the assembler manual. In addition to renaming the option, a number of bugs in the implicit IT generation have been fixed. Linker failure with Cortex-A8 erratum fix. A bug in the --fix-cortex-a8 linker option has been fixed. The bug caused the linker either to produce a bad value error, or to silently generate an incorrect executable. Debug information for variadic functions. A compiler bug that resulted in incorrect debug information for functions with variable arguments has been fixed. Code generation improvements. The compiler has been changed to make better use of VFP registers in mixed integer and floating-point code, resulting in faster code. Register variable corruption. A compiler bug has been fixed that caused incorrect code to be generated when the frame pointer or other special-use registers are used as explicit local register variables, introduced via the asm keyword on their declarations. Startup code debugging fixes. Two GDB bugs have been fixed that caused errors when debugging startup code. One bug caused an internal error message; the other caused the error Cannot find bounds of current function. Assembler fix for mixed Thumb and ARM mode. A bug in the assembler has been fixed where mapping symbols were sometimes incorrectly placed at section boundaries. This could lead to incorrect disassembly in some cases.
47
C++ exception matching. A C++ conformance defect has been fixed. According to clause 15.3 of the standard, given a derived class D with base B, a thrown D * object is not caught by a handler with type B *& (that is, a reference to pointer B). The compiler formerly treated this case incorrectly as if the handler had type B *, which does catch D *. -fremove-local-statics optimization. The -fremove-local-statics optimization is now enabled by default at -O2 and higher optimization levels. Elimination of spurious warnings about NULL . The C++ compiler no longer issues spurious warnings about comparisons between pointers to members and NULL. Vectorizer improvements. The compiler now generates improved code for accesses to static nested array variables (e.g. static int foo[8][8];). EGLIBC version 2.10. Sourcery G++ Lite for ARM GNU/Linux now includes EGLIBC version 2.10 library which is based on GNU C Library version 2.10. For more information about changes, see http://www.eglibc.org/news#eglibc_2_10. Configuration file required for Debug Sprite. When invoking the Sourcery G++ Debug Sprite from the command line, it is now required to specify a board configuration file argument. This change eliminates a source of confusion and errors resulting from accidental omission of the configuration file argument, since recent improvements to debugger functionality depend on properties specified in the configuration file. Refer to Chapter 5, Sourcery G++ Debug Sprite for more details on invoking the Sourcery G++ Debug Sprite from the command line. Invalid relocations in startup code. A bug that caused invalid relocations to be present in the C library startup code has been fixed. This bug caused problems when using these objects with thirdparty tools. GCC version 4.4.1. Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.4.1. For more information about changes from GCC version 4.3 that was included in previous releases, see http://gcc.gnu.org/gcc-4.4/changes.html. Watchpoint support. The Sourcery G++ Debug Sprite now implements watchpoints on all currently-supported debugging devices. Linker map address sorting. sorted by address. The map generated by the linker -Map option now lists symbols
Assembler fix. The assembler now correctly diagnoses a missing operand to bl and blx instructions. Previously, incorrect code was silently generated.
48
49
Sourcery G++ Debug Sprite for ARM CodeSourcery License GNU C Library Linux Kernel Headers GNU Make GNU Core Utilities
The CodeSourcery License is available in Section B.2, Sourcery G++ Software License Agreement. Important Although some of the licenses that apply to Sourcery G++ Lite are free software or open source software licenses, none of these licenses impose any obligation on you to reveal the source code of applications you build with Sourcery G++ Lite. You can develop proprietary applications and libraries with Sourcery G++ Lite. Sourcery G++ Lite may include some third party example programs and libraries in the share/ sourceryg++-arm-none-linux-gnueabi-examples subdirectory. These examples are not covered by the Sourcery G++ Software License Agreement. To the extent permitted by law, these examples are provided by CodeSourcery as is with no warranty of any kind, including implied warranties of merchantability or fitness for a particular purpose. Your use of each example is governed by the license notice (if any) it contains.
50
2. 3.
3.2. 3.3.
3.4.
4.
License Grant to Proprietary Components of the Software. You are granted a non-exclusive, royalty-free license (a) to install and use the CodeSourcery Proprietary Components of the Software, (b) to transmit the CodeSourcery Proprietary Components over an internal computer network, (c) to copy the CodeSourcery Proprietary Components for Your internal use only, and (d) to distribute the Redistributable Component(s) in binary form only and only as part of Licensee object code developed with the Software that provides substantially different functionality than the Redistributable Component(s). Restrictions. You may not: (i) copy or permit others to use the CodeSourcery Proprietary Components of the Software, except as expressly provided above; (ii) distribute the CodeSourcery Proprietary Components of the Software to any third party, except as expressly provided above; or (iii) reverse engineer, decompile, or disassemble the CodeSourcery Proprietary Components of the Software, except to the extent this restriction is expressly prohibited by applicable law. Free Software or Open Source License to Certain Components of the Software. This Agreement does not limit Your rights under, or grant You rights that supersede, the license terms of any Open Source Software Component delivered to You by CodeSourcery. Sourcery G++ includes components provided under various different licenses. The Getting Started Guide provides an overview of which license applies to different components, and, for components subject to the Eclipse Public License, contains information on how to obtain the source code.
5.
6.
51
Definitive licensing information for each free software or open source component is available in the relevant source file. 7. CodeSourcery Trademarks. Notwithstanding any provision in a free software or open source license agreement applicable to a component of the Software that permits You to distribute such component to a third party in source or binary form, You may not use any CodeSourcery trademark, whether registered or unregistered, including without limitation, CodeSourcery, Sourcery G++, the CodeSourcery crystal ball logo, or the Sourcery G++ splash screen, or any confusingly similar mark, in connection with such distribution, and You may not recompile the Open Source Software Components with the --with-pkgversion or --with-bugurl configuration options that embed CodeSourcery trademarks in the resulting binary. Term and Termination. This Agreement shall remain in effect unless terminated pursuant to this provision. CodeSourcery may terminate this Agreement upon seven (7) days written notice of a material breach of this Agreement if such breach is not cured; provided that the unauthorized use, copying, or distribution of the CodeSourcery Proprietary Components of the Software will be deemed a material breach that cannot be cured. Transfers. You may not transfer any rights under this Agreement without the prior written consent of CodeSourcery, which consent shall not be unreasonably withheld. A condition to any transfer or assignment shall be that the recipient agrees to the terms of this Agreement. Any attempted transfer or assignment in violation of this provision shall be null and void.
8.
9.
10. Ownership. CodeSourcery owns and/or has licensed the CodeSourcery Proprietary Components of the Software and all intellectual property rights embodied therein, including copyrights and valuable trade secrets embodied in its design and coding methodology. The CodeSourcery Proprietary Components of the Software are protected by United States copyright laws and international treaty provisions. CodeSourcery also owns all rights, title and interest in and with respect to its trade names, domain names, trade dress, logos, trademarks, service marks, and other similar rights or interests in intellectual property. This Agreement provides You only a limited use license, and no ownership of any intellectual property. 11. Warranty Disclaimer; Limitation of Liability. CODESOURCERY AND ITS LICENSORS PROVIDE THE SOFTWARE AS-IS AND PROVIDED WITH ALL FAULTS. CODESOURCERY DOES NOT MAKE ANY WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. CODESOURCERY SPECIFICALLY DISCLAIMS THE IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, SYSTEM INTEGRATION, AND DATA ACCURACY. THERE IS NO WARRANTY OR GUARANTEE THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED, ERROR-FREE, OR VIRUS-FREE, OR THAT THE SOFTWARE WILL MEET ANY PARTICULAR CRITERIA OF PERFORMANCE, QUALITY, ACCURACY, PURPOSE, OR NEED. YOU ASSUME THE ENTIRE RISK OF SELECTION, INSTALLATION, AND USE OF THE SOFTWARE. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 12. Local Law. If implied warranties may not be disclaimed under applicable law, then ANY IMPLIED WARRANTIES ARE LIMITED IN DURATION TO THE PERIOD REQUIRED BY APPLICABLE LAW. 13. Limitation of Liability. INDEPENDENT OF THE FORGOING PROVISIONS, IN NO EVENT AND UNDER NO LEGAL THEORY, INCLUDING WITHOUT LIMITATION, TORT, CONTRACT, OR STRICT PRODUCTS LIABILITY, SHALL CODESOURCERY BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCID-
52
ENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER MALFUNCTION, OR ANY OTHER KIND OF COMMERCIAL DAMAGE, EVEN IF CODESOURCERY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT PROHIBITED BY APPLICABLE LAW. IN NO EVENT SHALL CODESOURCERY'S LIABILITY FOR ACTUAL DAMAGES FOR ANY CAUSE WHATSOEVER, AND REGARDLESS OF THE FORM OF ACTION, EXCEED THE AMOUNT PAID BY YOU IN FEES UNDER THIS AGREEMENT DURING THE PREVIOUS ONE YEAR PERIOD. 14. Export Controls. You agree to comply with all export laws and restrictions and regulations of the United States or foreign agencies or authorities, and not to export or re-export the Software or any direct product thereof in violation of any such restrictions, laws or regulations, or without all necessary approvals. As applicable, each party shall obtain and bear all expenses relating to any necessary licenses and/or exemptions with respect to its own export of the Software from the U.S. Neither the Software nor the underlying information or technology may be electronically transmitted or otherwise exported or re-exported (i) into Cuba, Iran, Iraq, Libya, North Korea, Sudan, Syria or any other country subject to U.S. trade sanctions covering the Software, to individuals or entities controlled by such countries, or to nationals or residents of such countries other than nationals who are lawfully admitted permanent residents of countries not subject to such sanctions; or (ii) to anyone on the U.S. Treasury Department's list of Specially Designated Nationals and Blocked Persons or the U.S. Commerce Department's Table of Denial Orders. By downloading or using the Software, Licensee agrees to the foregoing and represents and warrants that it complies with these conditions. 15. U.S. Government End-Users. The Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software and commercial computer software documentation, as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire the Software with only those rights set forth herein. 16. Licensee Outside The U.S. If You are located outside the U.S., then the following provisions shall apply: (i) Les parties aux presentes confirment leur volonte que cette convention de meme que tous les documents y compris tout avis qui siy rattache, soient rediges en langue anglaise (translation: The parties confirm that this Agreement and all related documentation is and will be in the English language.); and (ii) You are responsible for complying with any local laws in your jurisdiction which might impact your right to import, export or use the Software, and You represent that You have complied with any regulations or registration procedures required by applicable law to make this license enforceable. 17. Severability. If any provision of this Agreement is declared invalid or unenforceable, such provision shall be deemed modified to the extent necessary and possible to render it valid and enforceable. In any event, the unenforceability or invalidity of any provision shall not affect any other provision of this Agreement, and this Agreement shall continue in full force and effect, and be construed and enforced, as if such provision had not been included, or had been modified as above provided, as the case may be. 18. Arbitration. Except for actions to protect intellectual property rights and to enforce an arbitrator's decision hereunder, all disputes, controversies, or claims arising out of or relating to this Agreement or a breach thereof shall be submitted to and finally resolved by arbitration under the rules of the American Arbitration Association (AAA) then in effect. There shall be one arbitrator, and such arbitrator shall be chosen by mutual agreement of the parties in accordance with AAA rules. The arbitration shall take place in Granite Bay, California, and may be conducted
53
by telephone or online. The arbitrator shall apply the laws of the State of California, USA to all issues in dispute. The controversy or claim shall be arbitrated on an individual basis, and shall not be consolidated in any arbitration with any claim or controversy of any other party. The findings of the arbitrator shall be final and binding on the parties, and may be entered in any court of competent jurisdiction for enforcement. Enforcements of any award or judgment shall be governed by the United Nations Convention on the Recognition and Enforcement of Foreign Arbitral Awards. Should either party file an action contrary to this provision, the other party may recover attorney's fees and costs up to $1000.00. 19. Jurisdiction And Venue. The courts of Placer County in the State of California, USA and the nearest U.S. District Court shall be the exclusive jurisdiction and venue for all legal proceedings that are not arbitrated under this Agreement. 20. Independent Contractors. The relationship of the parties is that of independent contractor, and nothing herein shall be construed to create a partnership, joint venture, franchise, employment, or agency relationship between the parties. Licensee shall have no authority to enter into agreements of any kind on behalf of CodeSourcery and shall not have the power or authority to bind or obligate CodeSourcery in any manner to any third party. 21. Force Majeure. Neither CodeSourcery nor Licensee shall be liable for damages for any delay or failure of delivery arising out of causes beyond their reasonable control and without their fault or negligence, including, but not limited to, Acts of God, acts of civil or military authority, fires, riots, wars, embargoes, or communications failure. 22. Miscellaneous. This Agreement constitutes the entire understanding of the parties with respect to the subject matter of this Agreement and merges all prior communications, representations, and agreements. This Agreement may be modified only by a written agreement signed by the parties. If any provision of this Agreement is held to be unenforceable for any reason, such provision shall be reformed only to the extent necessary to make it enforceable. This Agreement shall be construed under the laws of the State of California, USA, excluding rules regarding conflicts of law. The application of the United Nations Convention of Contracts for the International Sale of Goods is expressly excluded. This license is written in English, and English is its controlling language.
B.3. Attribution
This version of Sourcery G++ Lite may include code based on work under the following copyright and permission notices:
54
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */
55