Sierra C™ Assembler Reference Manual, Beta Version .02
Important information
Texas Instruments makes no warranty, either expressed or implied, including but not limited to
any implied warranties of merchantability and fitness for a particular purpose, regarding any
programs or book materials and makes such materials available solely on an “as-is” basis.
In no event shall Texas Instruments be liable to anyone for special, collateral, incidental, or
consequential damages in connection with or arising out of the purchase or use of these
materials, and the sole and exclusive liability of Texas Instruments, regardless of the form of
action, shall not exceed the purchase price of this product. Moreover, Texas Instruments shall
not be liable for any claim of any kind whatsoever against the use of these materials by any
other party.
The latest version of this Guide, along with all other up-to-date information for developers, is
available at www.ti.com/calc/developers/.
Table 1.24: Type Entries by Storage Class ................................................................................30
Table 1.25: Auxiliary Symbol Table Entries................................................................................31
Table 1.26: Auxiliary Symbol Entry for Filenames......................................................................32
Table 1.27: Auxiliary Symbol Entry for Sections.........................................................................32
Table 1.28: Auxiliary Symbol Entry for Functions.......................................................................33
Table 1.29: Auxiliary Symbol Entry for Beginning of Blocks and Functions................................33
Table 1.30: Auxiliary Symbol Entry for End of Blocks and Functions .........................................33
Table 1.31: Auxiliary Symbol Entry for Arrays ............................................................................34
Table 1.32: Auxiliary Symbol Entry for Tag Names....................................................................34
Table 1.33: Auxiliary Symbol Entry for End of Structures...........................................................35
Table 1.34: Auxiliary Symbol Entry for Structures, Unions, Enumerations.................................35
Table 1.35: Example String Table...............................................................................................36
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
4Section 1: General Information
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
1. General Information
1.1. Introduction
This manual describes the Sierra tools, including the compiler, assembler, and
linker invoked by the TI
(apps) and Assembly Language Programs (ASMs) for the TI-89 / TI-92 Plus
calculators, and other Plusutilities that are available to the developer. They were
developed by Sierra Systems to support certain Motorola processors and
coprocessors and IEEE format floating-point numbers. Under license from Sierra
Systems, Texas Instruments has modified this software to support TI BCD
floating-point numbers, and support for coprocessors has been removed.
Although the software has not been modified to exclude support for processors
other than the 68000, the 68000 is the only processor supported by Texas
Instruments. The license from Texas Instruments to use these products is
restricted to development of software that is targeted to execute only on TI
calculators.
FLASH
Studio™ for development of Flash applications
5
Typically, the TI
assembler, and linker but information is included in the various sections to enable
developers to use them directly from the command line or create their own
makefile if they wish, although this is not encouraged.
Section 1 contains information that applies to all the tools and describes the
format of the object file generated.
Section 2 discusses features of the Sierra Systems C compiler,
include number formats, function calls, integer and floating-point arithmetic,
sections, register allocation, macros, possible error messages, and many others.
Section 3 describes both Sierra Systems assemblers:
the TI
wish to take advantage of the macro support it provides. Explanations of
assembler syntax, symbols, constants, expression evaluation, addressing
modes, and complete descriptions of assembler directives for both assemblers
and the
Section 4 is a brief discussion of the Sierra Systems linker,
its features including relocation hole compression.
Section 5 describes the Sierra Systems utilities
part of the TI-89 / TI-92 Plus SDK for use by developers.
FLASH
asm68k
FLASH
Studio, and
macros are in this section.
Studio will handle all invocations of the compiler,
. These
, and some of
, provided as
asm68k
com68
asm68
which is included for developers who may
and
nm68
which is invoked by
link68
size68
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
6
Section 1: General Information
Conventions used throughout this manual include:
text is used for names of functions, routines, files, keywords, directives,
Bold
•
macros, flags, and registers. It is also used occasionally for emphasis.
•
•
The
Courier
Italicized
font is used to distinguish assembly or C program text.
text indicates an input parameter that should be replaced by actual
data when used in code or entered on the command line.
Brackets ( [ ] ) enclose optional items.
•
The vertical bar ( | ) indicates that the separated items are alternatives.
•
1.2. Command Line Wildcard Expansion
A number of Sierra C™ utilities expand wildcards in command line filenames.
Wildcard characters are defined as follows:
*
?
[
char_set
Match zero or more characters, where characters matched may be any
character except the period (
string matches files with and without extensions.
Match any character except the period (.).
]
Match any character in the character set
listed individually or as members of a range. A range is denoted by a
hyphen (
and all characters lexically between them.
-
) separated pair of characters; it includes the two characters
.
). Dot-star (.*) at the end of a wildcard
char_set
. Characters can be
The following are examples of wildcard expansions:
*.*
*
*.?*
*.c *.s
*.[cs]
Match all filenames in the current directory.
Match all filenames without extensions in the current directory.
Match all filenames with extensions in the current directory.
Match all filenames with extensions of .c or .s in the current directory.
Same as
*.c *.s
c:\doc\version[0-9a-f].doc
Match all filenames in the subdirectory
version followed by a hexadecimal digit and a
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
with a base name of
c:\doc
extension.
.doc
Beta Version February 2, 2001
Section 1: General Information
The following Sierra C utilities support command line wildcard expansion:
7
nm68
size68
Symbol Table Name Utility
Object File Size Utility
1.3. Environment Variables
Some Sierra C utilities need to know the location of certain standard directories
to locate various files. For example, the compiler must know where to search for
files specified by the
#include
information varies depending on the installation, the utilities examine
environment variables to obtain information on the locations of these standard
directories.
Figure 1.1 shows the default standard include (
executable (
), and temporary (
bin
subdirectory names to the directory specified by the
variable. The
for the TI
FLASH
SIERRA
environment variable will be set when the setup program
Studio is executed. The
set before using any of the Sierra utilities.
sierra
filename
tmp
preprocessor directive. Since this
include
), standard library (
lib
),
) directories that are created by appending
environment
SIERRA
SIERRA
environment variable must be
include lib bin tmp
Figure 1.1: Partial Sierra C Directory Structure
Table 1.1 lists the environment variables referenced by Sierra C utilities together
with the utilities that reference the variables and the files that are referenced.
Variable Utility Files referenced
INCLUDE68 com68
LIB68 link68
link68
Table 1.1: Environment Variables
standard include files
standard libraries
default configuration file
Depending on which environment variables are set, the utilities that generate
temporary files will put their files in one of four places. The three environment
variables
TMP68, TMP
search terminating after the first defined variable is located. If either
is defined, the directory specified by that environment variable is used to
TMP
hold temporary files. If the
, and
SIERRA
SIERRA
environment variable is the only variable
are searched for in the order listed with the
TMP68
or
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
8
Section 1: General Information
defined, the
subdirectory located under the directory specified by
tmp
used to hold temporary files. If none of the three environment variables is
specified, the current directory is used to hold temporary files.
The C preprocessor searches for the two environment variables
SIERRA
directories. If
in the order listed to determine the locations of the standard include
INCLUDE68
is defined, the semicolon-separated list of one or more
directory paths defines the standard include directories. If the
environment variable is the only variable defined, the
located under the directory specified by
directory.
Utilities that search for files in standard include directories search for the two
environment variables
LIB68
locations of the standard include directories. If
semicolon-separated list of one or more directory paths defines the standard
library directories. If the
defined, the
subdirectory located under the directory specified by
lib
SIERRA
used as the standard library directory.
1.4. Object File Format
INCLUDE68
SIERRA
subdirectory
and
SIERRA
SIERRA
include
is used as the standard include
in the order listed to determine the
LIB68
is defined, the
environment variable is the only variable
SIERRA
SIERRA
is
and
is
This section describes the Common Object File Format (COFF) used by
TI
FLASH
assemblers and linker, and recognized by TI
Studio. COFF is the format of the object files created by the
FLASH
Studio and various object
file examination utilities. COFF is a standard file format and the Sierra Systems
implementation (with extensions disabled, -c assembler command line flag)
completely conforms to the format recognized by the AT&T UNIX System V
operating system.
COFF is ideally suited for developing embedded applications. Space is provided
for symbol and line number information used by debuggers and other
applications. Executable files can be divided into numerous independent sections
to allow support for systems with highly fragmented address spaces.
An object file contains the following:
A file header
•
Optional header information
•
A table of section headers
•
Data corresponding to the section header
•
Relocation information
¦
Line numbers
¦
A symbol table
¦
A string table
¦
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
Section 1: General Information
Table 1.2 shows the overall object file structure.
FILE HEADER
Optional Information
Section 1 Header
. . .
Section n Header
Raw Data for Section 1
. . .
Raw Data for Section n
Relocation Info. for Section 1
. . .
Relocation Info. for Section n
Line Numbers for Section 1
. . .
9
Line Numbers for Section n
SYMBOL TABLE
STRING TABLE
Table 1.2: Object File Layout
Some or all of the last four sections (relocation, line number, symbol table, and
string table) may be missing from the final executable file. If the program is linked
with the -s flag, all four of these sections will be absent. The line number
information does not appear unless the program is compiled with the -q or
debug flag or assembled with the -L line number flag. If there are no unresolved
external symbols after linking, the relocation information is no longer needed and
is thus absent. If there are no symbols with names longer than eight characters,
the string table is not needed and is thus absent.
-q1
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
10
1.4.1. Definitions and Conventions
Before continuing, you should become familiar with the following terms and
conventions.
1.4.1.1. Sections
A section is the smallest portion of an object file that is relocated and able to be
positioned at an independent location in memory. In the default case, there are
three named sections with the names
executable file, there is also usually a fourth section with the name
TI-89 / TI-92 Plus apps and ASMs also have a
section is unused. Additional named and unnamed sections, up to a total of 126,
can also be added.
1.4.1.2. Physical and Virtual Addresses
The address of a section or symbol is the offset of that section or symbol from
address zero of the address space. The
memory where a section is loaded. The
address from which the section's data will execute. When a section's data has to
be copied from ROM to RAM at program startup, the ROM copy (source) of the
section's data is considered to be at the physical address and the RAM copy
(destination) of the section's data is considered to be at the virtual address. The
section header contains two address fields: a physical address and a virtual
address. In the case where a section's data gets copied from ROM to RAM, the
physical and virtual address entries will be different; but in the case where a
program executes out of ROM, the physical and virtual address entries for the
section's data will be the same.
Section 1: General Information
.text, .data
physical address
virtual address
, and
.const
. In a Sierra Systems
.bss
.ld_tbl
section, and the
is the actual location in
of a section is the
.ld_tbl
.
1.4.1.3. C Language COFF File Structures
The C language COFF file structures and macro definitions used internally by the
various Sierra Systems utilities that operate on object files are defined in the file
file_fmt.txt
members of type (
defined as
structure members are represented as arrays of
generating identical object files on host machines with different internal byte
orderings. Machine-dependent macros for reading and writing the structures in
file_fmt.txt
TI-89 / TI-92 Plus SDK.
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
supplied with the TI-89 / TI-92 Plus SDK. Note that structure
unsigned) char
unsigned char
are defined in file
arrays of length 1, 2, and 4, respectively. The
, (
unsigned) short
com_fmt.txt
Not for Distribution
, and (
unsigned char
, also supplied with the
unsigned) long
Beta Version February 2, 2001
are
to facilitate
Section 1: General Information
1.4.2. File Header
The file header contains the 20 bytes of information shown in Table 1.3. The last
two bytes are flags that are used by the linker and other object file utilities.
Defined in
file_fmt.txt
file header structure and file header size, respectively.
BytesDeclaration Name Description
are
FILE_HDR
and
FILE_HDR_SIZE
, the typedefs for the
11
0-1
2-3
4-7
8-11
12-15
16-17
18-19
unsigned short fh_magic
unsigned short fh_nbr_sections
unsigned long fh_time_date
unsigned long fh_symtab_ptr
unsigned long fh_nbr_symtab_ents
unsigned short fh_size_opt_hdr
unsigned short fh_flags
1.4.2.1. Magic Number
The
magic number
executed. The number 0x150 identifies the object file as a 68000 family
executable file. The number 0x150 is the only number recognized by the various
Sierra Systems utilities; an error will be reported if a file that does not begin with
0x150 is encountered.
Magic number, 0x150
Number of section headers (equals the
number of sections)
Time and date stamp indicating when the
file was created (expressed as the
number of seconds since 00:00:00 GMT,
January 1, 1970)
File pointer containing the starting offset
of the symbol table
Number of entries in the symbol table
Number of bytes in the optional header
Flags (see Table 1.4)
Table 1.3: File Header Contents
specifies the target machine on which the object file can be
1.4.2.2. Optional Header Size
The optional header shown in Table 1.5 is system-dependent and not specified
by the COFF standard. The size of the optional header is specified in the file
header to allow system-independent object file utilities to skip past the optional
header.
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
12
1.4.2.3. Flags
The last two bytes of the file header are flags that describe the type of the object
file. The file header flags are described in Table 1.4.
The optional header contains information that varies among the systems that use
COFF. Applications place all system-dependent information in the optional
header. As previously stated, system-independent COFF utilities can skip past
the system-dependent optional header to perform tasks such as dumping the
symbol table.
Bytes Declaration Name Description
0-1
unsigned short magic
0x01 Relocation information stripped from file
0x02 File is executable (i.e., no unresolved references)
0x04 Line numbers stripped from file
0x08 Local symbols stripped from file
0x10 Global symbols stripped from file
0x80 Error in object file
unsigned short version
unsigned long tsize
unsigned long dsize
unsigned long bsize
unsigned long entry
unsigned long text_start
unsigned long data_start
Table 1.5: Sierra Systems Optional Header Contents
The Sierra Systems optional header is 28 bytes long, and the fields of the
optional header are described in Table 1.5. The optional header is present only
on linked executable files; it is not present on assembler-generated files or
partially linked files (-r flag). Defined in
A_OUT_HDR_SIZE
, the typedefs for the optional header structure and optional
header size, respectively.
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Version stamp
Size of text in bytes
Size of initialized data in bytes
Size of uninitialized data in bytes
Program entry point
Base address of text
Base address of data
file_fmt.txt
Not for Distribution
are
A_OUT_HDR
and
Beta Version February 2, 2001
Section 1: General Information
1.4.4. Section Headers
Every object file has one section header for each section in the file. The Sierra
Systems object file has at least three section headers. The section headers
describe the organization of data within the file. Table 1.6 describes the fields of
the section header. Defined in
SECTION_HDR_SIZE
, the typedefs for the section header structure and section
file_fmt.txt
header size, respectively.
The size of a section is always padded to a multiple of four bytes.
The file pointers are byte offsets from the beginning of the file, and can be used
to locate the start of the data, relocation, or line entries for the section.
char sh_name
unsigned long sh_phys_addr
unsigned long sh_virt_addr
unsigned long sh_size
unsigned long sh_data_ptr
unsigned long sh_reloc_ptr
unsigned long sh_line_nbr_ptr
unsigned short sh_nbr_reloc_ents
unsigned short sh_nbr_line_ents
unsigned long sh_flags
Table 1.6: Section Header Contents
8-character null-padded section name
Physical address of section
Virtual address of section
Section size in bytes
File pointer to raw data
File pointer to relocation entries
File pointer to line number entries
Number of relocation entries
Number of line number entries
Flags (see Table 1.7)
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
14
Section 1: General Information
The
field defines the type of the section. Table 1.7 lists the definitions of the
0x000 Regular section: alloc'd, not reloc'd, load'd
0x001 Dummy section: not alloc'd, reloc'd, not load'd
0x002 No load section: alloc'd, reloc'd, not load'd
0x002 Resident section: alloc'd, reloc'd, not load'd
0x004 Grouped section: formed from input sections
0x008 Padding section: not alloc'd, not reloc'd, load'd
0x008 Fill only section: filled at run-time
0x010 Copy section: copied at run-time from destination address to
virtual address
0x020 Section contains executable text
0x040 Section contains initialized data
0x080 Section contains only uninitialized data
0x100 Section contains
'd (absolute) data
ORG
SH_INFO
SH_OVERT
SH_LIB
0x200 Comment section: not alloc'd, not reloc'd, not load'd
0x400 Overlay section: not alloc'd, reloc'd, not load'd
0x800 Library section
Table 1.7: Section Header Flags
All sections, including sections with uninitialized data such as section
static storage), have an associated section header. Uninitialized sections have
symbols that refer to them and symbols that are defined in them, but they do not
have any relocation entries, line number entries, or data associated with them.
Therefore, uninitialized sections have a section header, but occupy no other
space in the object file. In the case of an uninitialized section, zeroes appear in
the fields for the number of relocation and line number entries, as well as in the
fields for all the file pointers.
1.4.5. Relocation Information
Object files have one relocation entry for each relocatable reference in a
text-type or data-type section. The relocation entries are automatically generated
by the assembler, and the information is used by the linker to resolve external
references. Table 1.8 describes the information carried in the object file for each
relocatable reference. Defined in
RELOC_INFO_SIZE
relocation entry size, respectively.
, the typedefs for the relocation entry structure and
file_fmt.txt
are
RELOC_INFO
and
.bss
(blank
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
Section 1: General Information
Bytes Declaration Name Description
15
0-3
4-7
8-9
unsigned long r_virt_addr
unsigned long r_sym_index
unsigned short r_type_info
Virtual address of reference
Symbol table index
Relocation type (see Table 1.9)
Table 1.8: Relocation Section Contents
The first field of the relocation entry is the virtual address of the text or data to
which the entry applies. The 1-, 2-, or 4-byte area referenced by this first field is
known as a hole since the assembler cannot resolve the reference. The address
or PC-relative offset is ultimately determined and written to the hole by the linker.
The second field is the index of the symbol table entry for the symbol that is
being referenced. The third field indicates the type of relocation that is to be
applied. Table 1.9 lists the relocation types supported by Sierra Systems.
Mnemonic Flag Meaning
RL_FIXED
RL_DIR_BYTE
RL_DIR_WORD
RL_DIR_LONG
0x00 Reference is absolute, no relocation is necessary, the entry
will be ignored
0x0F Direct 8-bit reference to symbol's virtual address
0x10 Direct 16-bit reference to symbol's virtual address
0x11 Direct 32-bit reference to symbol's virtual address
There are two types of relocation: absolute and PC-relative. The assembler
reduces an unresolved reference to an offset from a relocatable section or an
offset from an external symbol. The offset is saved in the hole and the index of
the symbol (external symbol or section name symbol) is saved in the relocation
entry. In addition, if the reference is PC-relative, the address or section-relative
offset of the hole is subtracted from the contents of the hole.
0x12 A PC-relative 8-bit reference to symbol's virtual address
0x13 A PC-relative 16-bit reference to symbol's virtual address
0x14 A PC-relative 32-bit reference to symbol's virtual address
0x40 Operator in a complex relocatable expression
0x50 Absolute operand in a complex relocatable expression
0x60 Relocatable operand in a complex relocatable expression
0x70 External operand in a complex relocatable expression
Table 1.9: Relocation Types
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
16
The linker, which knows the addresses of all symbols, adds the address of the
symbol referenced by the
addition, if the reference is PC-relative and the hole is in a relocatable section,
the base address of this section is subtracted from the contents of the hole.
In the case of byte or word references (1-byte or 2-byte holes, respectively), it is
possible that the final value determined by the linker will fit in the hole but the
intermediate value to be filled in by the assembler will not fit. Sierra Systems has
added an extension to the COFF standard to remove this deficiency. In the
relocation entry, the higher order byte of the
order byte of the
r_sym_index
are unused. In the case of a 1-byte or 2-byte hole, the overflow first goes into the
unused byte in
r_sym_index
effectively providing the assembler with a 24-bit or 32-bit hole, respectively.
1.4.5.2. Complex Relocation
A complex relocatable expression is an expression that cannot be reduced at
assembly time to either an absolute value or a section-relative reference. For
example, an expression that references multiple external symbols and/or
symbols from different relocatable sections would be classified complex
relocatable.
r_sym_index
field (assuming fewer than 16 million symbols)
and then into the unused byte in
field to the contents of the hole. In
Section 1: General Information
r_type_info
field and the highest
r_type_info
A complex relocatable expression is saved in a sequence of auxiliary relocation
entries that follow the primary entry for the relocation hole. A separate entry is
used for each operand and each operator in the expression. Table 1.10
describes the different types of complex relocation entries. The complex
expression contained in the auxiliary relocation entries is subsequently evaluated
by the linker, and the result is placed in the hole referenced by the primary entry.
set to designate the start of a complex relocatable expression.
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
Section 1: General Information
1.4.6. Line Number Information
The line number information in the object file is used for source-level debugging.
Line number information is present when C files are compiled with the -q or
debug flag or assembly language files are assembled with the -L line number
flag. When compiled or assembled with one of the above listed flags, a line
number entry is generated for every line of C or assembly language code. The
line number entries are grouped by section and within each section grouping the
entries are grouped by function as shown in Table 1.11.
symbol index 0
virtual address line number
virtual address line number
. . . . . .
symbol index 0
virtual address line number
-q1
17
virtual address line number
Table 1.11: Line Number Grouping
Table 1.12 describes the fields within a line number entry. Defined in
are
LINE_NBR
and
LINE_NBR_SIZE
structure and line number entry size, respectively.
Bytes Declaration Name Description
0-3
0-3
4-5
unsigned long l_sym_index
unsigned long l_phys_addr
unsigned short l_line_nbr
Table 1.12: Line Number Section Contents
The first line number entry within a function grouping specifies line number 0 and
has, in place of the virtual address, an index into the symbol table for the entry
containing the name of the function. The subsequent entries have the actual line
numbers relative to the open brace ' { ' that begins the function, and the address
of the text that corresponds to the line number. The line number entries are
ordered by increasing address.
file_fmt.txt
, the typedefs for the line number entry
Symbol table index of function
Address of source line
Source line number
The
(begin function) symbol entry immediately follows the auxiliary entry for
.bf
the function name symbol. The absolute C source line number of the function's
open brace is specified in the auxiliary entry for the
1.4.9.4 Beginning of Blocks and Functions
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
). Absolute C source line numbers
Not for Distribution
symbol (see section
.bf
Beta Version February 2, 2001
18
for all other lines in a function are computed by offsetting the relative line
numbers in the line number entries by the absolute line number in the
symbol's auxiliary entry.
1.4.7. Symbol Table
Because of symbolic debugging requirements, the order of the symbols within
the symbol table is very important. The symbols appear in the order shown in
Table 1.13.
filename 1
function 1
local symbols for function 1
function 2
local symbols for function 2
. . .
Section 1: General Information
.bf
statics for file 1
. . .
filename 2
local symbols for function 1
. . .
statics for file 2
. . .
all defined global symbols
all undefined global symbols
Table 1.13: COFF Symbol Table
Local symbols for a function are the symbols that are defined within a function
and accessible only within that function. The term statics as used in Table 1.13
identifies symbols that are C language variables of storage class
outside any function. The symbol table consists of at least one 18-byte entry per
symbol with some symbols followed by one or more auxiliary entries also 18
bytes each. A symbol table entry contains the name of the symbol (or file offset
to the name), the value, the type, and other information.
static
defined
TI-89 / TI-92 Plus Sierra C Assembler Reference Manual
Not for Distribution
Beta Version February 2, 2001
Loading...
+ 304 hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.