Download GU0111 Using the TSK3000 Embedded Tools

Transcript
Using the TSK3000 Embedded Tools
• Debug information: Other information about the object code that is used by a debugger. The
assembler optionally generates this information and can consist of line numbers, C source code,
local symbols and descriptions of data structures.
The linker resolves the external references between the supplied relocatable object files and/or libraries
and combines the files into a single relocatable linker object file.
The linker starts its task by scanning all specified relocatable object files and libraries. If the linker
encounters an unresolved symbol, it remembers its name and continues scanning. The symbol may be
defined elsewhere in the same file, or in one of the other files or libraries that you specified to the linker.
If the symbol is defined in a library, the linker extracts the object file with the symbol definition from the
library. This way the linker collects all definitions and references of all of the symbols.
Next, the linker combines sections with the same section name and attributes into single sections. The
linker also substitutes (external) symbol references by (relocatable) numerical addresses where
possible. At the end of the linking phase, the linker either writes the results to a file (a single relocatable
object file) or keeps the results in memory for further processing during the locating phase.
The resulting file of the linking phase is a single relocatable object file (.out). If this file contains
unresolved references, you can link this file with other relocatable object files (.obj) or libraries (.lib)
to resolve the remaining unresolved references.
With the linker command line option --link-only, you can tell the linker to only perform this linking
phase and skip the locating phase. The linker complains if any unresolved references are left.
7.2.2
Phase 2: Locating
In the locating phase, the linker assigns absolute addresses to the object code, placing each section in
a specific part of the target memory. The linker also replaces references to symbols by the actual
address of those symbols. The resulting file is an absolute object file which you can actually load into a
target memory. Optionally, when the resulting file should be loaded into a ROM device the linker
creates a so-called copy table section which is used by the startup code to initialize the data sections.
Code modification
When the linker assigns absolute addresses to the object code, it needs to modify this code according
to certain rules or relocation expressions to reflect the new addresses. These relocation expressions
are stored in the relocatable object file. Consider the following snippet of x86 code that moves the
contents of variable a to variable b via the eax register:
A1 3412 0000 mov a,%eax
A3 0000 0000 mov %eax,b
(a defined at 0x1234, byte reversed)
(b is imported so the instruction refers to
0x0000 since its location is unknown)
Now assume that the linker links this code so that the section in which a is located is relocated by
0x10000 bytes, and b turns out to be at 0x9A12. The linker modifies the code to be:
A1 3412 0100 mov a,%eax
A3 129A 0000 mov %eax,b
7-4
(0x10000 added to the address)
(0x9A12 patched in for b)