SPRUI03E
June 2015 – January 2023
Read This First
About This Manual
How to Use This Manual
Notational Conventions
Related Documentation From Texas Instruments
Trademarks
1
Introduction to the Software Development Tools
1.1
Software Development Tools Overview
1.2
Tools Descriptions
2
Introduction to Object Modules
2.1
Object File Format Specifications
2.2
Executable Object Files
2.3
Introduction to Sections
2.3.1
Special Section Names
2.4
How the Assembler Handles Sections
2.4.1
Uninitialized Sections
2.4.2
Initialized Sections
2.4.3
User-Named Sections
2.4.4
Current Section
2.4.5
Section Program Counters
2.4.6
Subsections
2.4.7
Using Sections Directives
2.5
How the Linker Handles Sections
2.5.1
Combining Input Sections
2.5.2
Placing Sections
2.6
Symbols
2.6.1
Global (External) Symbols
2.6.2
Local Symbols
2.6.3
Weak Symbols
2.6.4
The Symbol Table
2.7
Symbolic Relocations
2.8
Loading a Program
3
Program Loading and Running
3.1
Loading
3.1.1
Load and Run Addresses
3.1.2
Bootstrap Loading
3.1.2.1
Boot, Load, and Run Addresses
3.1.2.2
Primary Bootloader
3.2
Entry Point
3.3
Run-Time Initialization
3.3.1
The _c_int00 Function
3.3.2
RAM Model vs. ROM Model
3.3.2.1
Autoinitializing Variables at Run Time (--rom_model)
3.3.2.2
Initializing Variables at Load Time (--ram_model)
3.3.2.3
The --rom_model and --ram_model Linker Options
3.3.3
About Linker-Generated Copy Tables
3.3.3.1
BINIT
3.3.3.2
CINIT
3.4
Arguments to main
3.5
Run-Time Relocation
3.6
Additional Information
4
Assembler Description
4.1
Assembler Overview
4.2
The Assembler's Role in the Software Development Flow
4.3
Invoking the Assembler
4.4
The Application Binary Interface
4.5
Naming Alternate Directories for Assembler Input
4.5.1
Using the --include_path Assembler Option
4.5.2
Using the C6X_A_DIR Environment Variable
4.6
Source Statement Format
4.6.1
Label Field
4.6.2
Mnemonic Field
4.6.3
Unit Specifier Field
4.6.4
Operand Field
4.6.5
Comment Field
4.7
Literal Constants
4.7.1
Integer Literals
4.7.1.1
Binary Integer Literals
4.7.1.2
Octal Integer Literals
4.7.1.3
Decimal Integer Literals
4.7.1.4
Hexadecimal Integer Literals
4.7.1.5
Character Literals
4.7.2
Character String Literals
4.7.3
Floating-Point Literals
4.8
Assembler Symbols
4.8.1
Identifiers
4.8.2
Labels
4.8.3
Local Labels
4.8.3.1
Local Labels of the Form $n
80
4.8.3.2
Local Labels of the Form name?
82
4.8.4
Symbolic Constants
4.8.5
Defining Symbolic Constants (--asm_define Option)
4.8.6
Predefined Symbolic Constants
4.8.7
Registers
4.8.8
Register Pairs
4.8.9
Register Quads (C6600 Only)
4.8.10
Substitution Symbols
4.9
Expressions
4.9.1
Mathematical and Logical Operators
4.9.2
Relational Operators and Conditional Expressions
4.9.3
Well-Defined Expressions
4.9.4
Legal Expressions
4.9.5
Expression Examples
4.10
Built-in Functions and Operators
4.10.1
Built-In Math and Trigonometric Functions
4.10.2
C6x Built-In ELF Relocation Generating Operators
4.10.2.1
$DPR_BYTE(sym) / $DPR_HWORD(sym) / $DPR_WORD(sym)
4.10.2.2
$LABEL_DIFF(x,y) Operator
4.11
Source Listings
4.12
Debugging Assembly Source
4.13
Cross-Reference Listings
5
Assembler Directives
5.1
Directives Summary
5.2
Directives that Define Sections
5.3
Directives that Initialize Values
5.4
Directives that Perform Alignment and Reserve Space
5.5
Directives that Format the Output Listings
5.6
Directives that Reference Other Files
5.7
Directives that Enable Conditional Assembly
5.8
Directives that Define Union or Structure Types
5.9
Directives that Define Enumerated Types
5.10
Directives that Define Symbols at Assembly Time
5.11
Miscellaneous Directives
5.12
Directives Reference
.align
.asg/.define/.eval
.asmfunc/.endasmfunc
.bits
.bss
.byte/.ubyte/.char/.uchar
.cdecls
.common
.copy/.include
.cstruct/.cunion/.endstruct/.endunion/.tag
.data
.double
.drlist/.drnolist
.elfsym
.emsg/.mmsg/.wmsg
.end
.farcommon/.nearcommon
.fclist/.fcnolist
.field
.float
.global/.def/.ref
.group/.gmember/.endgroup
.half/.short/.uhalf/.ushort
.if/.elseif/.else/.endif
.int/.unint/.long/.ulong/.word/.uword
.label
.length/.width
.list/.nolist
.loop/.endloop/.break
.macro/.endm
.map/.clearmap
.mlib
.mlist/.mnolist
.newblock
.nocmp
.noremark/.remark
.option
.page
.retain / .retainrefs
.sect
.set/.equ
.space/.bes
.sslist/.ssnolist
.string/.cstring
.struct/.endstruct/.tag
.symdepend
.tab
.text
.title
.unasg/.undefine
.union/.endunion/.tag
.usect
.var
.weak
6
Macro Language Description
6.1
Using Macros
6.2
Defining Macros
6.3
Macro Parameters/Substitution Symbols
6.3.1
Directives That Define Substitution Symbols
6.3.2
Built-In Substitution Symbol Functions
6.3.3
Recursive Substitution Symbols
6.3.4
Forced Substitution
6.3.5
Accessing Individual Characters of Subscripted Substitution Symbols
6.3.6
Substitution Symbols as Local Variables in Macros
6.4
Macro Libraries
6.5
Using Conditional Assembly in Macros
6.6
Using Labels in Macros
6.7
Producing Messages in Macros
6.8
Using Directives to Format the Output Listing
6.9
Using Recursive and Nested Macros
6.10
Macro Directives Summary
7
Archiver Description
7.1
Archiver Overview
7.2
The Archiver's Role in the Software Development Flow
7.3
Invoking the Archiver
7.4
Archiver Examples
7.5
Library Information Archiver Description
7.5.1
Invoking the Library Information Archiver
7.5.2
Library Information Archiver Example
7.5.3
Listing the Contents of an Index Library
7.5.4
Requirements
8
Linker Description
8.1
Linker Overview
8.2
The Linker's Role in the Software Development Flow
8.3
Invoking the Linker
8.4
Linker Options
8.4.1
Wildcards in File, Section, and Symbol Patterns
8.4.2
Specifying C/C++ Symbols with Linker Options
8.4.3
Relocation Capabilities (--absolute_exe and --relocatable Options)
8.4.3.1
Producing an Absolute Output Module (--absolute_exe option)
8.4.3.2
Producing a Relocatable Output Module (--relocatable option)
8.4.4
Allocate Memory for Use by the Loader to Pass Arguments (--arg_size Option)
8.4.5
Compression (--cinit_compression and --copy_compression Option)
8.4.6
Compress DWARF Information (--compress_dwarf Option)
8.4.7
Control Linker Diagnostics
8.4.8
Automatic Library Selection (--disable_auto_rts and --multithread Options)
8.4.9
Do Not Remove Unused Sections (--unused_section_elimination Option)
8.4.10
Linker Command File Preprocessing (--disable_pp, --define and --undefine Options)
8.4.11
Error Correcting Code Testing (--ecc Options)
8.4.12
Define an Entry Point (--entry_point Option)
8.4.13
Set Default Fill Value (--fill_value Option)
8.4.14
Define Heap Size (--heap_size Option)
8.4.15
Hiding Symbols
8.4.16
Alter the Library Search Algorithm (--library, --search_path, and C6X_C_DIR )
8.4.16.1
Name an Alternate Library Directory (--search_path Option)
8.4.16.2
Name an Alternate Library Directory (C6X_C_DIR Environment Variable)
8.4.16.3
Exhaustively Read and Search Libraries (--reread_libs and --priority Options)
8.4.17
Change Symbol Localization
8.4.17.1
Make All Global Symbols Static (--make_static Option)
8.4.18
Create a Map File (--map_file Option)
8.4.19
Managing Map File Contents (--mapfile_contents Option)
8.4.20
Disable Name Demangling (--no_demangle)
8.4.21
Merging of Symbolic Debugging Information
8.4.22
Strip Symbolic Information (--no_symtable Option)
8.4.23
Name an Output Module (--output_file Option)
8.4.24
Prioritizing Function Placement (--preferred_order Option)
8.4.25
C Language Options (--ram_model and --rom_model Options)
8.4.26
Retain Discarded Sections (--retain Option)
8.4.27
Scan All Libraries for Duplicate Symbol Definitions (--scan_libraries)
8.4.28
Define Stack Size (--stack_size Option)
8.4.29
Mapping of Symbols (--symbol_map Option)
8.4.30
Generate Far Call Trampolines (--trampolines Option)
8.4.30.1
Advantages and Disadvantages of Using Trampolines
8.4.30.2
Minimizing the Number of Trampolines Required (--minimize_trampolines Option)
8.4.30.3
Making Trampoline Reservations Adjacent (--trampoline_min_spacing Option)
8.4.30.4
Carrying Trampolines From Load Space to Run Space
8.4.31
Introduce an Unresolved Symbol (--undef_sym Option)
8.4.32
Display a Message When an Undefined Output Section Is Created (--warn_sections)
8.4.33
Generate XML Link Information File (--xml_link_info Option)
8.4.34
Zero Initialization (--zero_init Option)
8.5
Linker Command Files
8.5.1
Reserved Names in Linker Command Files
8.5.2
Constants in Linker Command Files
8.5.3
Accessing Files and Libraries from a Linker Command File
8.5.4
The MEMORY Directive
8.5.4.1
Default Memory Model
8.5.4.2
MEMORY Directive Syntax
8.5.4.3
Expressions and Address Operators
8.5.5
The SECTIONS Directive
8.5.5.1
SECTIONS Directive Syntax
8.5.5.2
Section Allocation and Placement
8.5.5.2.1
Binding
8.5.5.2.2
Named Memory
8.5.5.2.3
Controlling Placement Using The HIGH Location Specifier
8.5.5.2.3.1
Linker Placement With the HIGH Specifier
262
8.5.5.2.3.2
Linker Placement Without HIGH Specifier
8.5.5.2.4
Alignment and Blocking
8.5.5.2.5
Alignment With Padding
8.5.5.3
Specifying Input Sections
8.5.5.3.1
The Most Common Method of Specifying Section Contents
268
8.5.5.4
Using Multi-Level Subsections
8.5.5.5
Specifying Library or Archive Members as Input to Output Sections
8.5.5.5.1
Archive Members to Output Sections
272
8.5.5.6
Allocation Using Multiple Memory Ranges
8.5.5.7
Automatic Splitting of Output Sections Among Non-Contiguous Memory Ranges
8.5.6
Placing a Section at Different Load and Run Addresses
8.5.6.1
Specifying Load and Run Addresses
277
8.5.6.2
Referring to the Load Address by Using the .label Directive
8.5.7
Using GROUP and UNION Statements
8.5.7.1
Grouping Output Sections Together
8.5.7.2
Overlaying Sections With the UNION Statement
8.5.7.3
Using Memory for Multiple Purposes
8.5.7.4
Nesting UNIONs and GROUPs
8.5.7.5
Checking the Consistency of Allocators
8.5.7.6
Naming UNIONs and GROUPs
8.5.8
Special Section Types (DSECT, COPY, NOLOAD, and NOINIT)
8.5.9
Configuring Error Correcting Code (ECC) with the Linker
8.5.9.1
Using the ECC Specifier in the Memory Map
8.5.9.2
Using the ECC Directive
8.5.9.3
Using the VFILL Specifier in the Memory Map
8.5.10
Assigning Symbols at Link Time
8.5.10.1
Syntax of Assignment Statements
8.5.10.2
Assigning the SPC to a Symbol
8.5.10.3
Assignment Expressions
8.5.10.4
Symbols Automatically Defined by the Linker
8.5.10.5
Assigning Exact Start, End, and Size Values of a Section to a Symbol
8.5.10.6
Why the Dot Operator Does Not Always Work
8.5.10.7
Address and Dimension Operators
8.5.10.7.1
Input Items
8.5.10.7.2
Output Section
8.5.10.7.3
GROUPs
8.5.10.7.4
UNIONs
8.5.11
Creating and Filling Holes
8.5.11.1
Initialized and Uninitialized Sections
8.5.11.2
Creating Holes
8.5.11.3
Filling Holes
8.5.11.4
Explicit Initialization of Uninitialized Sections
8.6
Linker Symbols
8.6.1
Using Linker Symbols in C/C++ Applications
8.6.2
Declaring Weak Symbols
8.6.3
Resolving Symbols with Object Libraries
8.7
Default Placement Algorithm
8.7.1
How the Allocation Algorithm Creates Output Sections
8.7.2
Reducing Memory Fragmentation
8.8
Using Linker-Generated Copy Tables
8.8.1
Using Copy Tables for Boot Loading
8.8.2
Using Built-in Link Operators in Copy Tables
8.8.3
Overlay Management Example
8.8.4
Generating Copy Tables With the table() Operator
8.8.4.1
The table() Operator
8.8.4.2
Boot-Time Copy Tables
8.8.4.3
Using the table() Operator to Manage Object Components
8.8.4.4
Linker-Generated Copy Table Sections and Symbols
8.8.4.5
Splitting Object Components and Overlay Management
8.8.5
Compression
8.8.5.1
Compressed Copy Table Format
8.8.5.2
Compressed Section Representation in the Object File
8.8.5.3
Compressed Data Layout
8.8.5.4
Run-Time Decompression
8.8.5.5
Compression Algorithms
331
8.8.6
Copy Table Contents
8.8.7
General Purpose Copy Routine
8.9
Partial (Incremental) Linking
8.10
Linking C/C++ Code
8.10.1
Run-Time Initialization
8.10.2
Object Libraries and Run-Time Support
8.10.3
Setting the Size of the Stack and Heap Sections
8.10.4
Initializing and AutoInitialzing Variables at Run Time
8.11
Linker Example
9
Object File Utilities
9.1
Invoking the Object File Display Utility
9.2
Invoking the Disassembler
9.3
Invoking the Name Utility
9.4
Invoking the Strip Utility
10
Hex Conversion Utility Description
10.1
The Hex Conversion Utility's Role in the Software Development Flow
10.2
Invoking the Hex Conversion Utility
10.2.1
Invoking the Hex Conversion Utility From the Command Line
10.2.2
Invoking the Hex Conversion Utility With a Command File
10.3
Understanding Memory Widths
10.3.1
Target Width
10.3.2
Specifying the Memory Width
10.3.3
Partitioning Data Into Output Files
10.3.4
Specifying Word Order for Output Words
10.4
The ROMS Directive
10.4.1
When to Use the ROMS Directive
10.4.2
An Example of the ROMS Directive
10.5
The SECTIONS Directive
10.6
The Load Image Format (--load_image Option)
10.6.1
Load Image Section Formation
10.6.2
Load Image Characteristics
10.7
Excluding a Specified Section
10.8
Assigning Output Filenames
10.9
Image Mode and the --fill Option
10.9.1
Generating a Memory Image
10.9.2
Specifying a Fill Value
10.9.3
Steps to Follow in Using Image Mode
10.10
Array Output Format
10.11
Controlling the ROM Device Address
10.12
Control Hex Conversion Utility Diagnostics
10.13
Description of the Object Formats
10.13.1
ASCII-Hex Object Format (--ascii Option)
10.13.2
Intel MCS-86 Object Format (--intel Option)
10.13.3
Motorola Exorciser Object Format (--motorola Option)
10.13.4
Extended Tektronix Object Format (--tektronix Option)
10.13.5
Texas Instruments SDSMAC (TI-Tagged) Object Format (--ti_tagged Option)
10.13.6
TI-TXT Hex Format (--ti_txt Option)
10.13.6.1
TI-TXT Object Format
11
Sharing C/C++ Header Files With Assembly Source
11.1
Overview of the .cdecls Directive
11.2
Notes on C/C++ Conversions
11.2.1
Comments
11.2.2
Conditional Compilation (#if/#else/#ifdef/etc.)
11.2.3
Pragmas
11.2.4
The #error and #warning Directives
11.2.5
Predefined symbol __ASM_HEADER__
11.2.6
Usage Within C/C++ asm( ) Statements
11.2.7
The #include Directive
11.2.8
Conversion of #define Macros
11.2.9
The #undef Directive
11.2.10
Enumerations
11.2.11
C Strings
11.2.12
C/C++ Built-In Functions
11.2.13
Structures and Unions
11.2.14
Function/Variable Prototypes
11.2.15
C Constant Suffixes
11.2.16
Basic C/C++ Types
11.3
Notes on C++ Specific Conversions
11.3.1
Name Mangling
11.3.2
Derived Classes
11.3.3
Templates
11.3.4
Virtual Functions
11.4
Special Assembler Support
11.4.1
Enumerations (.enum/.emember/.endenum)
11.4.2
The .define Directive
11.4.3
The .undefine/.unasg Directives
11.4.4
The $defined( ) Built-In Function
11.4.5
The $sizeof Built-In Function
11.4.6
Structure/Union Alignment and $alignof( )
11.4.7
The .cstring Directive
A Symbolic Debugging Directives
A.1 DWARF Debugging Format
A.2 Debug Directive Syntax
B XML Link Information File Description
B.1 XML Information File Element Types
B.2 Document Elements
B.2.1 Header Elements
B.2.2 Input File List
B.2.3 Object Component List
B.2.4 Logical Group List
B.2.5 Placement Map
B.2.6 Far Call Trampoline List
B.2.7 Symbol Table
C Glossary
C.1 Terminology
D Revision History
428
D Earlier Revisions
Read This First