* doc/{all.texi,as.texinfo}: Add documentation for HPPA port.
This commit is contained in:
parent
5e351ee1bc
commit
9dcf805766
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Jan 25 15:53:11 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
|
* doc/{all.texi,as.texinfo}: Add documentation for HPPA port.
|
||||||
|
|
||||||
Mon Jan 24 19:18:23 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
Mon Jan 24 19:18:23 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||||
|
|
||||||
* ecoff.c (ecoff_frob_symbol): New function. Put undefined
|
* ecoff.c (ecoff_frob_symbol): New function. Put undefined
|
||||||
|
|
|
@ -21,15 +21,14 @@
|
||||||
@set BOUT
|
@set BOUT
|
||||||
@set COFF
|
@set COFF
|
||||||
@set ELF
|
@set ELF
|
||||||
|
@set SOM
|
||||||
|
|
||||||
@c CPUs of interest
|
@c CPUs of interest
|
||||||
@c ================
|
@c ================
|
||||||
@set A29K
|
@set A29K
|
||||||
@set H8/300
|
@set H8/300
|
||||||
@set H8/500
|
@set H8/500
|
||||||
@c start Hitachi-SH
|
|
||||||
@set SH
|
@set SH
|
||||||
@c end Hitachi-SH
|
|
||||||
@set I80386
|
@set I80386
|
||||||
@set I960
|
@set I960
|
||||||
@set M680X0
|
@set M680X0
|
||||||
|
@ -37,6 +36,7 @@
|
||||||
@set SPARC
|
@set SPARC
|
||||||
@set VAX
|
@set VAX
|
||||||
@set VXWORKS
|
@set VXWORKS
|
||||||
|
@set HPPA
|
||||||
|
|
||||||
@c Does this version of the assembler use the difference-table kluge?
|
@c Does this version of the assembler use the difference-table kluge?
|
||||||
@set DIFF-TBL-KLUGE
|
@set DIFF-TBL-KLUGE
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
@ifset SH
|
@ifset SH
|
||||||
@set H8
|
@set H8
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
@set abnormal-separator
|
||||||
|
@end ifset
|
||||||
@c ------------
|
@c ------------
|
||||||
@ifset GENERIC
|
@ifset GENERIC
|
||||||
@settitle Using @value{AS}
|
@settitle Using @value{AS}
|
||||||
|
@ -150,6 +153,8 @@ code for @value{TARGET} architectures.
|
||||||
* Copying:: GNU GENERAL PUBLIC LICENSE
|
* Copying:: GNU GENERAL PUBLIC LICENSE
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
* Acknowledgements:: Who Did What
|
||||||
|
|
||||||
* Index:: Index
|
* Index:: Index
|
||||||
@end menu
|
@end menu
|
||||||
@end ifinfo
|
@end ifinfo
|
||||||
|
@ -182,6 +187,9 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
|
||||||
@ifset H8
|
@ifset H8
|
||||||
@c Hitachi family chips have no machine-dependent assembler options
|
@c Hitachi family chips have no machine-dependent assembler options
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
@c HPPA has no machine-dependent assembler options (yet).
|
||||||
|
@end ifset
|
||||||
@ifset SPARC
|
@ifset SPARC
|
||||||
[ -Av6 | -Av7 | -Av8 | -Asparclite | -bump ]
|
[ -Av6 | -Av7 | -Av8 | -Asparclite | -bump ]
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ -219,7 +227,8 @@ This option is accepted only for script compatibility with calls to
|
||||||
other assemblers; it has no effect on @code{@value{AS}}.
|
other assemblers; it has no effect on @code{@value{AS}}.
|
||||||
|
|
||||||
@item -f
|
@item -f
|
||||||
``fast''---skip preprocessing (assume source is compiler output)
|
``fast''---skip whitespace and comment preprocessing (assume source is
|
||||||
|
compiler output)
|
||||||
|
|
||||||
@item -I @var{path}
|
@item -I @var{path}
|
||||||
Add @var{path} to the search list for @code{.include} directives
|
Add @var{path} to the search list for @code{.include} directives
|
||||||
|
@ -477,6 +486,10 @@ On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
|
||||||
On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
|
On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
|
||||||
@code{b.out} or COFF format object files.
|
@code{b.out} or COFF format object files.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
|
||||||
|
SOM or ELF format object files.
|
||||||
|
@end ifset
|
||||||
@end ifclear
|
@end ifclear
|
||||||
|
|
||||||
@node Command Line
|
@node Command Line
|
||||||
|
@ -752,7 +765,8 @@ likely that scripts written for other assemblers will also work with
|
||||||
@cindex trusted compiler
|
@cindex trusted compiler
|
||||||
@cindex faster processing (@code{-f})
|
@cindex faster processing (@code{-f})
|
||||||
@samp{-f} should only be used when assembling programs written by a
|
@samp{-f} should only be used when assembling programs written by a
|
||||||
(trusted) compiler. @samp{-f} stops the assembler from pre-processing
|
(trusted) compiler. @samp{-f} stops the assembler from doing whitespace
|
||||||
|
and comment pre-processing on
|
||||||
the input file(s) before assembling them. @xref{Pre-processing,
|
the input file(s) before assembling them. @xref{Pre-processing,
|
||||||
,Pre-processing}.
|
,Pre-processing}.
|
||||||
|
|
||||||
|
@ -815,6 +829,13 @@ This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols
|
||||||
in the object file. Usually if you do this you also tell the linker
|
in the object file. Usually if you do this you also tell the linker
|
||||||
@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
|
@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
|
||||||
|
|
||||||
|
By default, a local label is any label beginning with @samp{L}, but each
|
||||||
|
target is allowed to redefine the local label prefix.
|
||||||
|
@ifclear GENERIC
|
||||||
|
On some targets a local label begins with @samp{.L}; on the HPPA local labels
|
||||||
|
begin with @samp{L$}.
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
@node o
|
@node o
|
||||||
@section Name the Object File: @code{-o}
|
@section Name the Object File: @code{-o}
|
||||||
|
|
||||||
|
@ -871,6 +892,11 @@ this option is only useful if you use sections named @samp{.text} and
|
||||||
@samp{.data}.
|
@samp{.data}.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
@code{-R} is not supported for any of the HPPA targets . Using
|
||||||
|
@code{-R} will generate a warning from @code{@value{AS}}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node v
|
@node v
|
||||||
@section Announce Version: @code{-v}
|
@section Announce Version: @code{-v}
|
||||||
|
|
||||||
|
@ -925,7 +951,7 @@ assembler, except that @code{@value{AS}} does not assemble Vax bit-fields.
|
||||||
@section Pre-Processing
|
@section Pre-Processing
|
||||||
|
|
||||||
@cindex preprocessing
|
@cindex preprocessing
|
||||||
The pre-processor:
|
The @code{@value{AS}} internal pre-processor:
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@cindex whitespace, removed by preprocessor
|
@cindex whitespace, removed by preprocessor
|
||||||
@item
|
@item
|
||||||
|
@ -943,6 +969,13 @@ appropriate number of newlines.
|
||||||
converts character constants into the appropriate numeric values.
|
converts character constants into the appropriate numeric values.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
Note that it does not do macro processing, include file handling, or
|
||||||
|
anything else you may get from your C compiler's pre-processor. You can
|
||||||
|
do include file processing with the @code{.include} directive
|
||||||
|
(@pxref{Include,,@code{.include}}). Other ``CPP'' style pre-processing
|
||||||
|
can be done with the @sc{GNU} C compiler, by giving the input file a
|
||||||
|
@code{.S} suffix; see the compiler documentation for details.
|
||||||
|
|
||||||
Excess whitespace, comments, and character constants
|
Excess whitespace, comments, and character constants
|
||||||
cannot be used in the portions of the input text that are not
|
cannot be used in the portions of the input text that are not
|
||||||
pre-processed.
|
pre-processed.
|
||||||
|
@ -1012,6 +1045,9 @@ is considered a comment and is ignored. The line comment character is
|
||||||
@ifset H8/500
|
@ifset H8/500
|
||||||
@samp{!} for the H8/500 family;
|
@samp{!} for the H8/500 family;
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
@samp{;} for the HPPA;
|
||||||
|
@end ifset
|
||||||
@ifset SH
|
@ifset SH
|
||||||
@samp{!} for the Hitachi SH;
|
@samp{!} for the Hitachi SH;
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ -1097,6 +1133,12 @@ sign (@samp{@@}). The newline or at sign is considered part of the
|
||||||
preceding statement. Newlines and at signs within character constants
|
preceding statement. Newlines and at signs within character constants
|
||||||
are an exception: they don't end statements.
|
are an exception: they don't end statements.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation
|
||||||
|
point (@samp{!}). The newline or exclamation point is considered part of the
|
||||||
|
preceding statement. Newlines and exclamation points within character
|
||||||
|
constants are an exception: they don't end statements.
|
||||||
|
@end ifset
|
||||||
@ifset H8
|
@ifset H8
|
||||||
A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
|
A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
|
||||||
H8/300) a dollar sign (@samp{$}); or (for the
|
H8/300) a dollar sign (@samp{$}); or (for the
|
||||||
|
@ -1159,6 +1201,12 @@ A label is a symbol immediately followed by a colon (@code{:}).
|
||||||
Whitespace before a label or after a colon is permitted, but you may not
|
Whitespace before a label or after a colon is permitted, but you may not
|
||||||
have whitespace between a label's symbol and its colon. @xref{Labels}.
|
have whitespace between a label's symbol and its colon. @xref{Labels}.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
For HPPA targets, labels need not be immediately followed by a colon, but
|
||||||
|
the definition of a label must begin in column zero. This also implies that
|
||||||
|
only one label may be defined on each line.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
label: .directive followed by something
|
label: .directive followed by something
|
||||||
another_label: # This is an empty statement.
|
another_label: # This is an empty statement.
|
||||||
|
@ -1269,6 +1317,14 @@ An octal character code. The numeric code is 3 octal digits.
|
||||||
For compatibility with other Unix systems, 8 and 9 are accepted as digits:
|
For compatibility with other Unix systems, 8 and 9 are accepted as digits:
|
||||||
for example, @code{\008} has the value 010, and @code{\009} the value 011.
|
for example, @code{\008} has the value 010, and @code{\009} the value 011.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
@item \@code{x} @var{hex-digit} @var{hex-digit}
|
||||||
|
@cindex @code{\@var{xdd}} (hex character code)
|
||||||
|
@cindex hex character code (@code{\@var{xdd}})
|
||||||
|
A hex character code. The numeric code is 2 hexidecimal digits. Either
|
||||||
|
an upper or lower case @code{x} may be used.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@item \\
|
@item \\
|
||||||
@cindex @code{\\} (@samp{\} character)
|
@cindex @code{\\} (@samp{\} character)
|
||||||
@cindex backslash (@code{\\})
|
@cindex backslash (@code{\\})
|
||||||
|
@ -1413,6 +1469,9 @@ A flonum is written by writing (in order)
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
The digit @samp{0}.
|
The digit @samp{0}.
|
||||||
|
@ifset HPPA
|
||||||
|
@samp{0} is optional on the HPPA.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@item
|
@item
|
||||||
A letter, to tell @code{@value{AS}} the rest of the number is a flonum.
|
A letter, to tell @code{@value{AS}} the rest of the number is a flonum.
|
||||||
|
@ -1432,6 +1491,8 @@ one of the letters @samp{DFPRSX} (in upper or lower case).
|
||||||
|
|
||||||
On the Intel 960 architecture, the letter must be
|
On the Intel 960 architecture, the letter must be
|
||||||
one of the letters @samp{DFT} (in upper or lower case).
|
one of the letters @samp{DFT} (in upper or lower case).
|
||||||
|
|
||||||
|
On the HPPA architecture, the letter must be @samp{E} (upper case only).
|
||||||
@end ifset
|
@end ifset
|
||||||
@ifclear GENERIC
|
@ifclear GENERIC
|
||||||
@ifset A29K
|
@ifset A29K
|
||||||
|
@ -1443,6 +1504,9 @@ One of the letters @samp{DFPRSX} (in upper or lower case).
|
||||||
@ifset I960
|
@ifset I960
|
||||||
One of the letters @samp{DFT} (in upper or lower case).
|
One of the letters @samp{DFT} (in upper or lower case).
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
On the HPPA architecture, the letter must be @samp{E} (upper case only).
|
||||||
|
@end ifset
|
||||||
@end ifclear
|
@end ifclear
|
||||||
|
|
||||||
@item
|
@item
|
||||||
|
@ -1572,9 +1636,33 @@ If you don't use any directives that place output in the @samp{.text}
|
||||||
or @samp{.data} sections, these sections will still exist, but will be empty.
|
or @samp{.data} sections, these sections will still exist, but will be empty.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
@ifset GENERIC
|
||||||
|
When @code{@value{AS}} generates SOM or ELF output for the HPPA,
|
||||||
|
@end ifset
|
||||||
|
@code{@value{AS}} can also generate whatever other named sections you
|
||||||
|
specify using the @samp{.space} and @samp{.subspace} directives. See
|
||||||
|
@cite{HP9000 Series 800 Assembly Language Reference Manual}
|
||||||
|
(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
|
||||||
|
assembler directives.
|
||||||
|
|
||||||
|
@ifset SOM
|
||||||
|
Additionally, @code{@value{AS}} uses different names for the standard
|
||||||
|
text, data, and bss sections when generating SOM output. Program text
|
||||||
|
is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
|
||||||
|
BSS into @samp{$BSS$}.
|
||||||
|
@end ifset
|
||||||
|
@end ifset
|
||||||
|
|
||||||
Within the object file, the text section starts at address @code{0}, the
|
Within the object file, the text section starts at address @code{0}, the
|
||||||
data section follows, and the bss section follows the data section.
|
data section follows, and the bss section follows the data section.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
When generating either SOM or ELF output files on the HPPA, the text
|
||||||
|
section starts at address @code{0}, the data section at address
|
||||||
|
@code{0x4000000}, and the bss section follows the data section.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
To let @code{@value{LD}} know which data will change when the sections are
|
To let @code{@value{LD}} know which data will change when the sections are
|
||||||
relocated, and how to change that data, @code{@value{AS}} also writes to the
|
relocated, and how to change that data, @code{@value{AS}} also writes to the
|
||||||
object file details of the relocation needed. To perform relocation
|
object file details of the relocation needed. To perform relocation
|
||||||
|
@ -1651,7 +1739,7 @@ use of @code{@value{AS}} and have no meaning except during assembly.
|
||||||
@ifset aout-bout
|
@ifset aout-bout
|
||||||
@cindex text section
|
@cindex text section
|
||||||
@cindex data section
|
@cindex data section
|
||||||
@item text section
|
@itemx text section
|
||||||
@itemx data section
|
@itemx data section
|
||||||
@end ifset
|
@end ifset
|
||||||
These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as
|
These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as
|
||||||
|
@ -1756,58 +1844,16 @@ value of every expression in your assembly language program to be a
|
||||||
section-relative address.
|
section-relative address.
|
||||||
|
|
||||||
@table @b
|
@table @b
|
||||||
@item absent
|
|
||||||
@cindex absent (internal section)
|
|
||||||
An expression was expected and none was found.
|
|
||||||
|
|
||||||
@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
|
@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
|
||||||
@cindex assembler internal logic error
|
@cindex assembler internal logic error
|
||||||
An internal assembler logic error has been found. This means there is a
|
An internal assembler logic error has been found. This means there is a
|
||||||
bug in the assembler.
|
bug in the assembler.
|
||||||
|
|
||||||
@item bignum/flonum
|
@item expr section
|
||||||
@cindex bignum/flonum (internal section)
|
@cindex expr (internal section)
|
||||||
If a number can't be written as a C @code{int} constant (a bignum or a
|
The assembler stores complex expression internally as combinations of
|
||||||
flonum, but not an integer), it is recorded as belonging to this
|
symbols. When it needs to represent an expression as a symbol, it puts
|
||||||
``section''. @code{@value{AS}} has to remember that a flonum or a bignum
|
it in the expr section.
|
||||||
does not fit into 32 bits, and cannot be an argument (@pxref{Arguments})
|
|
||||||
in an expression: this is done by making a flonum or bignum be in a
|
|
||||||
separate internal section. This is purely for internal @code{@value{AS}}
|
|
||||||
convenience; bignum/flonum section behaves similarly to absolute
|
|
||||||
section.
|
|
||||||
|
|
||||||
@item pass1 section
|
|
||||||
@cindex pass1 (internal section)
|
|
||||||
The expression was impossible to evaluate in the first pass. The
|
|
||||||
assembler will attempt a second pass (second reading of the source) to
|
|
||||||
evaluate the expression. Your expression mentioned an undefined symbol
|
|
||||||
in a way that defies the one-pass (section + offset in section) assembly
|
|
||||||
process. No compiler need emit such an expression.
|
|
||||||
|
|
||||||
@quotation
|
|
||||||
@emph{Warning:} the second pass is currently not implemented. @code{@value{AS}}
|
|
||||||
will abort with an error message if one is required.
|
|
||||||
@end quotation
|
|
||||||
|
|
||||||
@item difference section
|
|
||||||
@cindex difference (internal section)
|
|
||||||
As an assist to the C compiler, expressions of the forms
|
|
||||||
@display
|
|
||||||
(@var{undefined symbol}) @minus{} (@var{expression})
|
|
||||||
@var{something} @minus{} (@var{undefined symbol})
|
|
||||||
(@var{undefined symbol}) @minus{} (@var{undefined symbol})
|
|
||||||
@end display
|
|
||||||
|
|
||||||
are permitted, and belong to the difference section. @code{@value{AS}}
|
|
||||||
re-evaluates such expressions after the source file has been read and
|
|
||||||
the symbol table built. If by that time there are no undefined symbols
|
|
||||||
in the expression then the expression assumes a new section. The
|
|
||||||
intention is to permit statements like
|
|
||||||
@samp{.word label - base_of_table}
|
|
||||||
to be assembled in one pass where both @code{label} and
|
|
||||||
@code{base_of_table} are undefined. This is useful for compiling C and
|
|
||||||
Algol switch statements, Pascal case statements, FORTRAN computed goto
|
|
||||||
statements and the like.
|
|
||||||
@c FIXME item debug
|
@c FIXME item debug
|
||||||
@c FIXME item transfer[t] vector preload
|
@c FIXME item transfer[t] vector preload
|
||||||
@c FIXME item transfer[t] vector postload
|
@c FIXME item transfer[t] vector postload
|
||||||
|
@ -1974,6 +2020,12 @@ operand. You are warned if you use the same symbol to represent two
|
||||||
different locations: the first definition overrides any other
|
different locations: the first definition overrides any other
|
||||||
definitions.
|
definitions.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
On the HPPA, a @dfn{label} need not be immediately followed by a colon,
|
||||||
|
but instead must start in column zero. Only one @dfn{label} may be
|
||||||
|
defined on a single line.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Setting Symbols
|
@node Setting Symbols
|
||||||
@section Giving Symbols Other Values
|
@section Giving Symbols Other Values
|
||||||
|
|
||||||
|
@ -2133,6 +2185,9 @@ would want.
|
||||||
@ifset COFF
|
@ifset COFF
|
||||||
* COFF Symbols:: Symbol Attributes for COFF
|
* COFF Symbols:: Symbol Attributes for COFF
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset SOM
|
||||||
|
* SOM Symbols:: Symbol Attributes for SOM
|
||||||
|
@end ifset
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Symbol Value
|
@node Symbol Value
|
||||||
|
@ -2246,6 +2301,21 @@ The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
|
||||||
information for COFF.
|
information for COFF.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ifset SOM
|
||||||
|
@node SOM Symbols
|
||||||
|
@subsection Symbol Attributes for SOM
|
||||||
|
|
||||||
|
@cindex SOM symbol attributes
|
||||||
|
@cindex symbol attributes, SOM
|
||||||
|
|
||||||
|
The SOM format supports a multitude of symbol attributes set with the
|
||||||
|
with the @code{.EXPORT} and @code{.IMPORT} directives.
|
||||||
|
|
||||||
|
The attributes are described in @cite{HP9000 Series 800 Assembly
|
||||||
|
Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
|
||||||
|
@code{EXPORT} assembler directive documentation.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Expressions
|
@node Expressions
|
||||||
@chapter Expressions
|
@chapter Expressions
|
||||||
|
|
||||||
|
@ -2595,6 +2665,13 @@ advancement. For example @samp{.align 3} will advance the location
|
||||||
counter until it a multiple of 8. If the location counter is already a
|
counter until it a multiple of 8. If the location counter is already a
|
||||||
multiple of 8, no change is needed.
|
multiple of 8, no change is needed.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
For the HPPA, the first expression (which must be absolute) is the
|
||||||
|
alignment request in bytes. For example @samp{.align 8} will advance
|
||||||
|
the location counter until it is a multiple of 8. If the location counter
|
||||||
|
is already a multiple of 8, no change is needed.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
The second expression (also absolute) gives the value to be stored in
|
The second expression (also absolute) gives the value to be stored in
|
||||||
the padding bytes. It (and the comma) may be omitted. If it is
|
the padding bytes. It (and the comma) may be omitted. If it is
|
||||||
omitted, the padding bytes are zero.
|
omitted, the padding bytes are zero.
|
||||||
|
@ -2656,6 +2733,11 @@ will allocate space for each @code{.comm} symbol that is at least as
|
||||||
long as the longest @code{.comm} request in any of the partial programs
|
long as the longest @code{.comm} request in any of the partial programs
|
||||||
linked. @var{length} is an absolute expression.
|
linked. @var{length} is an absolute expression.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
|
||||||
|
@code{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Data
|
@node Data
|
||||||
@section @code{.data @var{subsection}}
|
@section @code{.data @var{subsection}}
|
||||||
|
|
||||||
|
@ -2796,6 +2878,11 @@ conditionally. @xref{If,,@code{.if}}.
|
||||||
This directive sets the value of @var{symbol} to @var{expression}.
|
This directive sets the value of @var{symbol} to @var{expression}.
|
||||||
It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
|
It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
The syntax for @code{equ} on the HPPA is
|
||||||
|
@code{@var{symbol} .equ @var{expression}}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Extern
|
@node Extern
|
||||||
@section @code{.extern}
|
@section @code{.extern}
|
||||||
|
|
||||||
|
@ -2880,6 +2967,13 @@ from another partial program it is linked with.
|
||||||
Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
|
Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
|
||||||
compatibility with other assemblers.
|
compatibility with other assemblers.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
On the HPPA symbols are made visible to @code{@value{LD}} with the
|
||||||
|
@code{.EXPORT} directive. Using @code{.EXPORT} is necessary to provide
|
||||||
|
the linker with the correct symbol type information necessary for linking
|
||||||
|
in SOM
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node hword
|
@node hword
|
||||||
@section @code{.hword @var{expressions}}
|
@section @code{.hword @var{expressions}}
|
||||||
|
|
||||||
|
@ -3010,6 +3104,11 @@ section, so at run-time the bytes will start off zeroed. @var{Symbol}
|
||||||
is not declared global (@pxref{Global,,@code{.global}}), so is normally
|
is not declared global (@pxref{Global,,@code{.global}}), so is normally
|
||||||
not visible to @code{@value{LD}}.
|
not visible to @code{@value{LD}}.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is
|
||||||
|
@code{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Lflags
|
@node Lflags
|
||||||
@section @code{.lflags}
|
@section @code{.lflags}
|
||||||
|
|
||||||
|
@ -3290,6 +3389,11 @@ message if one is required.
|
||||||
If you @code{.set} a global symbol, the value stored in the object
|
If you @code{.set} a global symbol, the value stored in the object
|
||||||
file is the last value stored into it.
|
file is the last value stored into it.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
The syntax for @code{set} on the HPPA is
|
||||||
|
@code{@var{symbol} .set @var{expression}}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Short
|
@node Short
|
||||||
@section @code{.short @var{expressions}}
|
@section @code{.short @var{expressions}}
|
||||||
|
|
||||||
|
@ -3365,6 +3469,13 @@ and @var{fill} are omitted, @var{fill} is assumed to be zero.
|
||||||
On the AMD 29K, this directive is ignored; it is accepted for
|
On the AMD 29K, this directive is ignored; it is accepted for
|
||||||
compatibility with other AMD 29K assemblers.
|
compatibility with other AMD 29K assemblers.
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
@emph{Warning:} @code{.space} has a completely different meaning for HPPA
|
||||||
|
targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800
|
||||||
|
Assembly Language Reference Manual} (HP 92432-90001) for the meaning of
|
||||||
|
the @code{.space} directive.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@quotation
|
@quotation
|
||||||
@emph{Warning:} In most versions of the GNU assembler, the directive
|
@emph{Warning:} In most versions of the GNU assembler, the directive
|
||||||
@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
|
@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
|
||||||
|
@ -3619,6 +3730,9 @@ subject, see the hardware manufacturer's manual.
|
||||||
@ifset H8/500
|
@ifset H8/500
|
||||||
* H8/500-Dependent:: Hitachi H8/500 Dependent Features
|
* H8/500-Dependent:: Hitachi H8/500 Dependent Features
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset HPPA
|
||||||
|
* HPPA-Dependent:: HPPA Dependent Features
|
||||||
|
@end ifset
|
||||||
@ifset SH
|
@ifset SH
|
||||||
* SH-Dependent:: Hitachi SH Dependent Features
|
* SH-Dependent:: Hitachi SH Dependent Features
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ -3639,11 +3753,11 @@ subject, see the hardware manufacturer's manual.
|
||||||
@end ifset
|
@end ifset
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@down
|
@lowersections
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
@c The following major nodes are *sections* in the GENERIC version, *chapters*
|
@c The following major nodes are *sections* in the GENERIC version, *chapters*
|
||||||
@c in single-cpu versions. This is mainly achieved by @down. There is a
|
@c in single-cpu versions. This is mainly achieved by @lowersections. There is a
|
||||||
@c peculiarity: to preserve cross-references, there must be a node called
|
@c peculiarity: to preserve cross-references, there must be a node called
|
||||||
@c "Machine Dependencies". Hence the conditional nodenames in each
|
@c "Machine Dependencies". Hence the conditional nodenames in each
|
||||||
@c major node below. Node defaulting in makeinfo requires adjacency of
|
@c major node below. Node defaulting in makeinfo requires adjacency of
|
||||||
|
@ -4165,7 +4279,7 @@ family.
|
||||||
* H8/500-Dependent:: Hitachi H8/500 Dependent Features
|
* H8/500-Dependent:: Hitachi H8/500 Dependent Features
|
||||||
* SH-Dependent:: Hitachi SH Dependent Features
|
* SH-Dependent:: Hitachi SH Dependent Features
|
||||||
@end menu
|
@end menu
|
||||||
@down
|
@lowersections
|
||||||
@end ifclear
|
@end ifclear
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ -4770,6 +4884,108 @@ mov[:g] sz ea,rd
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ifset HPPA
|
||||||
|
@page
|
||||||
|
@node HPPA-Dependent
|
||||||
|
@chapter HPPA Dependent Features
|
||||||
|
|
||||||
|
@cindex support
|
||||||
|
@menu
|
||||||
|
* HPPA Notes:: Notes
|
||||||
|
* HPPA Options:: Options
|
||||||
|
* HPPA Syntax:: Syntax
|
||||||
|
* HPPA Floating Point:: Floating Point
|
||||||
|
* HPPA Directives:: HPPA Machine Directives
|
||||||
|
* HPPA Opcodes:: Opcodes
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node HPPA Notes
|
||||||
|
@section Notes
|
||||||
|
As a backend for GNU CC @code{@value{AS}} has been throughly tested and should
|
||||||
|
work extremely well. We have tested it only minimally on hand written assembly
|
||||||
|
code and no one has tested it much on the assembly output from the HP
|
||||||
|
compilers.
|
||||||
|
|
||||||
|
The format of the debugging sections has changed since the original
|
||||||
|
@code{@value{AS}} port (version 1.3X) was released; therefore,
|
||||||
|
you must rebuild all objects and libraries with the new
|
||||||
|
assembler so that you can debug the final executable.
|
||||||
|
|
||||||
|
The HPPA @code{@value{AS}} port generates a small subset of the relocations
|
||||||
|
available in the SOM and ELF object file formats. Additional relocation
|
||||||
|
support will be added as it becomes necessary.
|
||||||
|
|
||||||
|
@node HPPA Options
|
||||||
|
@section Options
|
||||||
|
@code{@value{AS}} has no machine-dependent directives for the HPPA.
|
||||||
|
|
||||||
|
@cindex HPPA Syntax
|
||||||
|
@section HPPA Syntax
|
||||||
|
@node HPPA Syntax
|
||||||
|
The assembler syntax closely follows the HPPA instruction set
|
||||||
|
reference manual; assembler directives and general syntax closely follow the
|
||||||
|
HPPA assembly language reference manual with a few noteworthy differences.
|
||||||
|
|
||||||
|
First a colon may immediately follow a label definition. This is
|
||||||
|
simply for compatability with how most assembly language programmers
|
||||||
|
write code.
|
||||||
|
|
||||||
|
Some obscure expression parsing problems may affect hand written code which
|
||||||
|
uses the @code{spop} instructions, or code which makes significant
|
||||||
|
use of the @code{!} line separator.
|
||||||
|
|
||||||
|
@code{@value{AS} is much less forgiving about missing arguments and other
|
||||||
|
similar oversights. @code{@value{AS}} will flag missing arguments as
|
||||||
|
syntax errors; this is regarded as a feature, not a bug.
|
||||||
|
|
||||||
|
Finally, @code{@value{AS}} allows you to use an external symbol without
|
||||||
|
explicitly importing the symbol. @emph{Warning:} in the future this will be
|
||||||
|
an error for HPPA targets.
|
||||||
|
|
||||||
|
Special characters for HPPA targets include:
|
||||||
|
|
||||||
|
@samp{;} is the line comment character.
|
||||||
|
|
||||||
|
@samp{!} can be used instead of a newline to separate statements.
|
||||||
|
|
||||||
|
Since @samp{$} has no special meaning, you may use it in symbol names.
|
||||||
|
|
||||||
|
@node HPPA Floating Point
|
||||||
|
@section Floating Point
|
||||||
|
@cindex floating point, HPPA (@sc{ieee})
|
||||||
|
@cindex HPPA floating point (@sc{ieee})
|
||||||
|
The HPPA family uses @sc{ieee} floating-point numbers.
|
||||||
|
|
||||||
|
@node HPPA Directives
|
||||||
|
@section HPPA Machine Directives
|
||||||
|
For detailed information on the HPPA machine instruction set, see
|
||||||
|
@cite{HP9000 Series 800 Assembly Language Reference Manual}
|
||||||
|
(HP 92432-90001).
|
||||||
|
|
||||||
|
@code{@value{AS}} does not support the following assembler directives
|
||||||
|
found in the HP manual:
|
||||||
|
@itemize @bullet
|
||||||
|
@item endm
|
||||||
|
@item enter
|
||||||
|
@item leave
|
||||||
|
@item listoff
|
||||||
|
@item liston
|
||||||
|
@item locct
|
||||||
|
@item macro
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@code{@value{AS}} supports one additional assembler directive for the
|
||||||
|
HPPA: @code{.PARAM}. It conveys register argument locations for
|
||||||
|
static functions. Its syntax closely follows the @code{.EXPORT} directive.
|
||||||
|
|
||||||
|
@node HPPA Opcodes
|
||||||
|
@section Opcodes
|
||||||
|
For detailed information on the HPPA machine instruction set, see
|
||||||
|
@cite{PA-RISC Architecture and Instruction Set Reference Manual}
|
||||||
|
(HP 09740-90039).
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@ifset SH
|
@ifset SH
|
||||||
@page
|
@page
|
||||||
@node SH-Dependent
|
@node SH-Dependent
|
||||||
|
@ -5022,7 +5238,7 @@ stc SR,Rn
|
||||||
|
|
||||||
@ifset Hitachi-all
|
@ifset Hitachi-all
|
||||||
@ifclear GENERIC
|
@ifclear GENERIC
|
||||||
@up
|
@raisesections
|
||||||
@end ifclear
|
@end ifclear
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ -5340,6 +5556,7 @@ and the instruction pairs they may expand into:
|
||||||
@menu
|
@menu
|
||||||
* M68K-Opts:: M680x0 Options
|
* M68K-Opts:: M680x0 Options
|
||||||
* M68K-Syntax:: Syntax
|
* M68K-Syntax:: Syntax
|
||||||
|
* M68K-Moto-Syntax:: Motorola Syntax
|
||||||
* M68K-Float:: Floating Point
|
* M68K-Float:: Floating Point
|
||||||
* M68K-Directives:: 680x0 Machine Directives
|
* M68K-Directives:: 680x0 Machine Directives
|
||||||
* M68K-opcodes:: Opcodes
|
* M68K-opcodes:: Opcodes
|
||||||
|
@ -5381,18 +5598,21 @@ target.
|
||||||
@node M68K-Syntax
|
@node M68K-Syntax
|
||||||
@section Syntax
|
@section Syntax
|
||||||
|
|
||||||
|
@cindex @sc{mit}
|
||||||
|
This syntax for the Motorola 680x0 was developed at @sc{mit}.
|
||||||
|
|
||||||
@cindex M680x0 syntax
|
@cindex M680x0 syntax
|
||||||
@cindex syntax, M680x0
|
@cindex syntax, M680x0
|
||||||
@cindex M680x0 size modifiers
|
@cindex M680x0 size modifiers
|
||||||
@cindex size modifiers, M680x0
|
@cindex size modifiers, M680x0
|
||||||
The 680x0 version of @code{@value{AS}} uses syntax similar to the Sun assembler.
|
The 680x0 version of @code{@value{AS}} uses syntax similar to the Sun
|
||||||
Size modifiers are appended directly to the end of the opcode without an
|
assembler. Intervening periods are now ignored; for example, @samp{movl}
|
||||||
intervening period. For example, write @samp{movl} rather than
|
is equivalent to @samp{move.l}.
|
||||||
@samp{move.l}.
|
|
||||||
|
|
||||||
@ifset INTERNALS
|
@ifset INTERNALS
|
||||||
If @code{@value{AS}} is compiled with SUN_ASM_SYNTAX defined, it will also allow
|
If @code{@value{AS}} is compiled with SUN_ASM_SYNTAX defined, it will
|
||||||
Sun-style local labels of the form @samp{1$} through @samp{$9}.
|
also allow Sun-style local labels of the form @samp{1$} through
|
||||||
|
@samp{$9}.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
In the following table @dfn{apc} stands for any of the address
|
In the following table @dfn{apc} stands for any of the address
|
||||||
|
@ -5414,7 +5634,9 @@ The following addressing modes are understood:
|
||||||
@samp{a0} through @samp{a7}
|
@samp{a0} through @samp{a7}
|
||||||
|
|
||||||
@item Address Register Indirect
|
@item Address Register Indirect
|
||||||
@samp{a0@@} through @samp{a7@@}
|
@samp{a0@@} through @samp{a7@@}@*
|
||||||
|
@samp{a7} is also known as @samp{sp}, i.e. the Stack Pointer. @code{a6}
|
||||||
|
is also known as @samp{fp}, the Frame Pointer.
|
||||||
|
|
||||||
@item Address Register Postincrement
|
@item Address Register Postincrement
|
||||||
@samp{a0@@+} through @samp{a7@@+}
|
@samp{a0@@+} through @samp{a7@@+}
|
||||||
|
@ -5461,6 +5683,57 @@ registers named @samp{a0} through @samp{a7}, et cetera. The @samp{%} is
|
||||||
always accepted, but is only required for some configurations, notably
|
always accepted, but is only required for some configurations, notably
|
||||||
@samp{m68k-coff}.
|
@samp{m68k-coff}.
|
||||||
|
|
||||||
|
@node M68K-Moto-Syntax
|
||||||
|
@section Motorola Syntax
|
||||||
|
|
||||||
|
@cindex Motorola syntax for the 680x0
|
||||||
|
@cindex alternate syntax for the 680x0
|
||||||
|
|
||||||
|
The standard Motorola syntax for this chip differs from the syntax
|
||||||
|
already discussed (@pxref{M68K-Syntax,,Syntax}). @code{@value{AS}} can
|
||||||
|
accept both kinds of syntax, even within a single instruction. The
|
||||||
|
syntaxes are fully compatible, because the Motorola syntax never uses
|
||||||
|
the @samp{@@} character and the @sc{mit} syntax always does, except in
|
||||||
|
cases where the syntaxes are identical.
|
||||||
|
|
||||||
|
@cindex M680x0 syntax
|
||||||
|
@cindex syntax, M680x0
|
||||||
|
In particular, you may write or generate M68K assembler with the
|
||||||
|
following conventions:
|
||||||
|
|
||||||
|
(In the following table @dfn{apc} stands for any of the address
|
||||||
|
registers (@samp{a0} through @samp{a7}), nothing, (@samp{}), the
|
||||||
|
Program Counter (@samp{pc}), or the zero-address relative to the
|
||||||
|
program counter (@samp{zpc}).)
|
||||||
|
|
||||||
|
@cindex M680x0 addressing modes
|
||||||
|
@cindex addressing modes, M680x0
|
||||||
|
The following additional addressing modes are understood:
|
||||||
|
@table @dfn
|
||||||
|
@item Address Register Indirect
|
||||||
|
@samp{a0} through @samp{a7}@*
|
||||||
|
@samp{a7} is also known as @samp{sp}, i.e. the Stack Pointer. @code{a6}
|
||||||
|
is also known as @samp{fp}, the Frame Pointer.
|
||||||
|
|
||||||
|
@item Address Register Postincrement
|
||||||
|
@samp{(a0)+} through @samp{(a7)+}
|
||||||
|
|
||||||
|
@item Address Register Predecrement
|
||||||
|
@samp{-(a0)} through @samp{-(a7)}
|
||||||
|
|
||||||
|
@item Indirect Plus Offset
|
||||||
|
@samp{@var{digits}(@var{apc})}
|
||||||
|
|
||||||
|
@item Index
|
||||||
|
@samp{@var{digits}(@var{apc},(@var{register}.@var{size}*@var{scale})}@*
|
||||||
|
or @samp{(@var{apc},@var{register}.@var{size}*@var{scale})}@*
|
||||||
|
In either case, @var{size} and @var{scale} are optional
|
||||||
|
(@var{scale} defaults to @samp{1}, @var{size} defaults to @samp{l}).
|
||||||
|
@var{scale} can be @samp{1}, @samp{2}, @samp{4}, or @samp{8}.
|
||||||
|
@var{size} can be @samp{w} or @samp{l}. @var{scale} is only supported
|
||||||
|
on the 68020 and greater.
|
||||||
|
@end table
|
||||||
|
|
||||||
@node M68K-Float
|
@node M68K-Float
|
||||||
@section Floating Point
|
@section Floating Point
|
||||||
|
|
||||||
|
@ -6646,7 +6919,7 @@ described elsewhere in the manual.
|
||||||
|
|
||||||
@ifset GENERIC
|
@ifset GENERIC
|
||||||
@c reverse effect of @down at top of generic Machine-Dep chapter
|
@c reverse effect of @down at top of generic Machine-Dep chapter
|
||||||
@up
|
@raisesections
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
@ifset INTERNALS
|
@ifset INTERNALS
|
||||||
|
@ -7384,17 +7657,16 @@ currently assembling into.
|
||||||
|
|
||||||
@section External functions will you need
|
@section External functions will you need
|
||||||
|
|
||||||
You will find the following external functions useful (or
|
You will find the following external functions useful (or indispensable) when
|
||||||
indispensable) when you're writing the machine-dependent part
|
you're writing the machine-dependent part of the assembler.
|
||||||
of the assembler.
|
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
|
|
||||||
@item char *frag_more(int bytes)
|
@item char *frag_more(int bytes)
|
||||||
This function allocates @var{bytes} more bytes in the current
|
This function allocates @var{bytes} more bytes in the current frag (or starts a
|
||||||
frag (or starts a new frag, if it can't expand the current frag
|
new frag, if it can't expand the current frag any more.) for you to store some
|
||||||
any more.) for you to store some object-file bytes in. It
|
object-file bytes in. It returns a pointer to the bytes, ready for you to
|
||||||
returns a pointer to the bytes, ready for you to store data in.
|
store data in.
|
||||||
|
|
||||||
@item void fix_new(fragS *frag, int where, short size, symbolS *add_symbol, symbolS *sub_symbol, long offset, int pcrel)
|
@item void fix_new(fragS *frag, int where, short size, symbolS *add_symbol, symbolS *sub_symbol, long offset, int pcrel)
|
||||||
This function stores a relocation fixup to be acted on later.
|
This function stores a relocation fixup to be acted on later.
|
||||||
|
@ -7423,70 +7695,61 @@ addressing mode used by this frag changes. It typically points into the
|
||||||
that @code{md_convert_frag()}, may have to change.@refill
|
that @code{md_convert_frag()}, may have to change.@refill
|
||||||
|
|
||||||
@item void frag_wane(fragS *fragPTR)
|
@item void frag_wane(fragS *fragPTR)
|
||||||
This function is useful from within @code{md_convert_frag}. It
|
This function is useful from within @code{md_convert_frag}. It changes a frag
|
||||||
changes a frag to type rs_fill, and sets the variable-sized
|
to type rs_fill, and sets the variable-sized piece of the frag to zero. The
|
||||||
piece of the frag to zero. The frag will never change in size
|
frag will never change in size again.
|
||||||
again.
|
|
||||||
|
|
||||||
@item segT expression(expressionS *retval)
|
@item segT expression(expressionS *retval)
|
||||||
(@var{segT} is defined in @file{as.h}; @var{expressionS} is defined in @file{expr.h})
|
(@var{segT} is defined in @file{as.h}; @var{expressionS} is defined in
|
||||||
This function parses the string pointed to by the external char
|
@file{expr.h}) This function parses the string pointed to by the external char
|
||||||
pointer @var{input_line_pointer}, and returns the section-type
|
pointer @var{input_line_pointer}, and returns the section-type of the symbol
|
||||||
of the expression. It also stores the results in the
|
used in the expression, if any. It stores the results in the @var{expressionS}
|
||||||
@var{expressionS} pointed to by @var{retval}.
|
pointed to by @var{retval}. @var{input_line_pointer} is advanced to point past
|
||||||
@var{input_line_pointer} is advanced to point past the end of
|
the end of the expression. (@var{input_line_pointer} is used by other parts of
|
||||||
the expression. (@var{input_line_pointer} is used by other
|
the assembler. If you modify it, be sure to restore it to its original value.)
|
||||||
parts of the assembler. If you modify it, be sure to restore
|
|
||||||
it to its original value.)
|
|
||||||
|
|
||||||
@item as_warn(char *message,@dots{})
|
@item as_warn(char *message,@dots{})
|
||||||
If warning messages are disabled, this function does nothing.
|
If warning messages are disabled, this function does nothing. Otherwise, it
|
||||||
Otherwise, it prints out the current file name, and the current
|
prints out the current file name, and the current line number, then uses
|
||||||
line number, then uses @code{fprintf} to print the
|
@code{fprintf} to print the @var{message} and any arguments it was passed.
|
||||||
@var{message} and any arguments it was passed.
|
|
||||||
|
|
||||||
@item as_bad(char *message,@dots{})
|
@item as_bad(char *message,@dots{})
|
||||||
This function should be called when @code{@value{AS}} encounters
|
This function should be called when @code{@value{AS}} encounters conditions
|
||||||
conditions that are bad enough that @code{@value{AS}} should not
|
that are bad enough that @code{@value{AS}} should not produce an object file,
|
||||||
produce an object file, but should continue reading input and
|
but should continue reading input and printing warning and bad error messages.
|
||||||
printing warning and bad error messages.
|
|
||||||
|
|
||||||
@item as_fatal(char *message,@dots{})
|
@item as_fatal(char *message,@dots{})
|
||||||
This function prints out the current file name and line number,
|
This function prints out the current file name and line number, prints the word
|
||||||
prints the word @samp{FATAL:}, then uses @code{fprintf} to
|
@samp{FATAL:}, then uses @code{fprintf} to print the @var{message} and any
|
||||||
print the @var{message} and any arguments it was passed. Then
|
arguments it was passed. Then the assembler exits. This function should only
|
||||||
the assembler exits. This function should only be used for
|
be used for serious, unrecoverable errors.
|
||||||
serious, unrecoverable errors.
|
|
||||||
|
|
||||||
@item void float_const(int float_type)
|
@item void float_const(int float_type)
|
||||||
This function reads floating-point constants from the current
|
This function reads floating-point constants from the current input line, and
|
||||||
input line, and calls @code{md_atof} to assemble them. It is
|
calls @code{md_atof} to assemble them. It is useful as the function to call
|
||||||
useful as the function to call for the directives
|
for the directives @samp{.single}, @samp{.double}, @samp{.float}, etc.
|
||||||
@samp{.single}, @samp{.double}, @samp{.float}, etc.
|
|
||||||
@var{float_type} must be a character from @var{FLT_CHARS}.
|
@var{float_type} must be a character from @var{FLT_CHARS}.
|
||||||
|
|
||||||
@item void demand_empty_rest_of_line(void);
|
@item void demand_empty_rest_of_line(void);
|
||||||
This function can be used by machine-dependent directives to
|
This function can be used by machine-dependent directives to make sure the rest
|
||||||
make sure the rest of the input line is empty. It prints a
|
of the input line is empty. It prints a warning message if there are
|
||||||
warning message if there are additional characters on the line.
|
additional characters on the line.
|
||||||
|
|
||||||
@item long int get_absolute_expression(void)
|
@item long int get_absolute_expression(void)
|
||||||
This function can be used by machine-dependent directives to
|
This function can be used by machine-dependent directives to read an absolute
|
||||||
read an absolute number from the current input line. It
|
number from the current input line. It returns the result. If it isn't given
|
||||||
returns the result. If it isn't given an absolute expression,
|
an absolute expression, it prints a warning message and returns zero.
|
||||||
it prints a warning message and returns zero.
|
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
@section The concept of Frags
|
@section The concept of Frags
|
||||||
|
|
||||||
This assembler works to optimize the size of certain addressing
|
This assembler works to optimize the size of certain addressing modes.
|
||||||
modes. (e.g. branch instructions) This means the size of many
|
(e.g. branch instructions) This means the size of many pieces of object code
|
||||||
pieces of object code cannot be determined until after assembly
|
cannot be determined until after assembly is finished. (This means that the
|
||||||
is finished. (This means that the addresses of symbols cannot be
|
addresses of symbols cannot be determined until assembly is finished.) In
|
||||||
determined until assembly is finished.) In order to do this,
|
order to do this, @code{@value{AS}} stores the output bytes as @dfn{frags}.
|
||||||
@code{@value{AS}} stores the output bytes as @dfn{frags}.
|
|
||||||
|
|
||||||
Here is the definition of a frag (from @file{as.h})
|
Here is the definition of a frag (from @file{as.h})
|
||||||
@smallexample
|
@smallexample
|
||||||
|
@ -7521,53 +7784,133 @@ rs_org
|
||||||
rs_machine_dependent
|
rs_machine_dependent
|
||||||
|
|
||||||
@item fr_substate
|
@item fr_substate
|
||||||
This stores the type of machine-dependent frag this is. (what
|
This stores the type of machine-dependent frag this is. (what kind of
|
||||||
kind of addressing mode is being used, and what size is being
|
addressing mode is being used, and what size is being tried/will fit/etc.
|
||||||
tried/will fit/etc.
|
|
||||||
|
|
||||||
@item fr_address
|
@item fr_address
|
||||||
@var{fr_address} is only valid after relaxation is finished.
|
@var{fr_address} is only valid after relaxation is finished. Before
|
||||||
Before relaxation, the only way to store an address is (pointer
|
relaxation, the only way to store an address is (pointer to frag containing the
|
||||||
to frag containing the address) plus (offset into the frag).
|
address) plus (offset into the frag).
|
||||||
|
|
||||||
@item fr_offset
|
@item fr_offset
|
||||||
This contains a number, whose meaning depends on the type of
|
This contains a number, whose meaning depends on the type of the frag. for
|
||||||
the frag.
|
machine_dependent frags, this contains the offset from fr_symbol that the frag
|
||||||
for machine_dependent frags, this contains the offset from
|
wants to go to. Thus, for branch instructions it is usually zero. (unless the
|
||||||
fr_symbol that the frag wants to go to. Thus, for branch
|
instruction was @samp{jba foo+12} or something like that.)
|
||||||
instructions it is usually zero. (unless the instruction was
|
|
||||||
@samp{jba foo+12} or something like that.)
|
|
||||||
|
|
||||||
@item fr_symbol
|
@item fr_symbol
|
||||||
for machine_dependent frags, this points to the symbol the frag
|
for machine_dependent frags, this points to the symbol the frag needs to reach.
|
||||||
needs to reach.
|
|
||||||
|
|
||||||
@item fr_opcode
|
@item fr_opcode
|
||||||
This points to the location in the frag (or in a previous frag)
|
This points to the location in the frag (or in a previous frag) of the opcode
|
||||||
of the opcode for the instruction that caused this to be a frag.
|
for the instruction that caused this to be a frag. @var{fr_opcode} is needed
|
||||||
@var{fr_opcode} is needed if the actual opcode must be changed
|
if the actual opcode must be changed in order to use a different form of the
|
||||||
in order to use a different form of the addressing mode.
|
addressing mode. (For example, if a conditional branch only comes in size
|
||||||
(For example, if a conditional branch only comes in size tiny,
|
tiny, a large-size branch could be implemented by reversing the sense of the
|
||||||
a large-size branch could be implemented by reversing the sense
|
test, and turning it into a tiny branch over a large jump. This would require
|
||||||
of the test, and turning it into a tiny branch over a large jump.
|
changing the opcode.)
|
||||||
This would require changing the opcode.)
|
|
||||||
|
|
||||||
@var{fr_literal} is a variable-size array that contains the
|
@var{fr_literal} is a variable-size array that contains the actual object
|
||||||
actual object bytes. A frag consists of a fixed size piece of
|
bytes. A frag consists of a fixed size piece of object data, (which may be
|
||||||
object data, (which may be zero bytes long), followed by a
|
zero bytes long), followed by a piece of object data whose size may not have
|
||||||
piece of object data whose size may not have been determined
|
been determined yet. Other information includes the type of the frag (which
|
||||||
yet. Other information includes the type of the frag (which
|
|
||||||
controls how it is relaxed),
|
controls how it is relaxed),
|
||||||
|
|
||||||
@item fr_next
|
@item fr_next
|
||||||
This is the next frag in the singly-linked list. This is
|
This is the next frag in the singly-linked list. This is usually only needed
|
||||||
usually only needed by the machine-independent part of
|
by the machine-independent part of @code{@value{AS}}.
|
||||||
@code{@value{AS}}.
|
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@node Acknowledgements
|
||||||
|
@chapter Acknowledgements
|
||||||
|
|
||||||
|
If you've contributed to @code{@value{AS}} and your name isn't listed here, it
|
||||||
|
is not meant as a slight. We just don't know about it. Send mail to the
|
||||||
|
maintainer, and we'll correct the situation. Currently (June 1993), the
|
||||||
|
maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).
|
||||||
|
|
||||||
|
Dean Elsner wrote the original GNU assembler for the VAX.@footnote{Any more
|
||||||
|
details?}
|
||||||
|
|
||||||
|
Jay Fenlason maintained GAS for a while, adding support for gdb-specific debug
|
||||||
|
information and the 68k series machines, most of the preprocessing pass, and
|
||||||
|
extensive changes in messages.c, input-file.c, write.c.
|
||||||
|
|
||||||
|
K. Richard Pixley maintained GAS for a while, adding various enhancements and
|
||||||
|
many bug fixes, including merging support for several processors, breaking GAS
|
||||||
|
up to handle multiple object file format backends (including heavy rewrite,
|
||||||
|
testing, an integration of the coff and b.out backends), adding configuration
|
||||||
|
including heavy testing and verification of cross assemblers and file splits
|
||||||
|
and renaming, converted GAS to strictly ansi C including full prototypes, added
|
||||||
|
support for m680[34]0 & cpu32, considerable work on i960 including a COFF port
|
||||||
|
(including considerable amounts of reverse engineering), a SPARC opcode file
|
||||||
|
rewrite, DECstation, rs6000, and hp300hpux host ports, updated "know"
|
||||||
|
assertions and made them work, much other reorganization, cleanup, and lint.
|
||||||
|
|
||||||
|
Ken Raeburn wrote the high-level BFD interface code to replace most of the code
|
||||||
|
in format-specific I/O modules.
|
||||||
|
|
||||||
|
The original VMS support was contributed by David L. Kashtan. Eric Youngdale
|
||||||
|
has done much work with it since.
|
||||||
|
|
||||||
|
The Intel 80386 machine description was written by Eliot Dresselhaus.
|
||||||
|
|
||||||
|
Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
|
||||||
|
|
||||||
|
The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
|
||||||
|
University and Torbjorn Granlund of the Swedish Institute of Computer Science.
|
||||||
|
|
||||||
|
Keith Knowles at the Open Software Foundation wrote the original MIPS back end
|
||||||
|
(tc-mips.c, tc-mips.h), and contributed Rose format support (which hasn't been
|
||||||
|
merged in yet). Ralph Campbell worked with the MIPS code to support a.out
|
||||||
|
format.
|
||||||
|
|
||||||
|
Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k,
|
||||||
|
tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
|
||||||
|
Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to
|
||||||
|
use BFD for some low-level operations, for use with the H8/300 and AMD 29k
|
||||||
|
targets.
|
||||||
|
|
||||||
|
John Gilmore built the AMD 29000 support, added .include support, and
|
||||||
|
simplified the configuration of which versions accept which pseudo-ops. He
|
||||||
|
updated the 68k machine description so that Motorola's opcodes always produced
|
||||||
|
fixed-size instructions (e.g. jsr), while synthetic instructions remained
|
||||||
|
shrinkable (jbsr). John fixed many bugs, including true tested
|
||||||
|
cross-compilation support, and one bug in relaxation that took a week and
|
||||||
|
required the apocryphal one-bit fix.
|
||||||
|
|
||||||
|
Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntaxes for the
|
||||||
|
68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
|
||||||
|
and made a few other minor patches.
|
||||||
|
|
||||||
|
Steve Chamberlain made @code{@value{AS}} able to generate listings.
|
||||||
|
|
||||||
|
Support for the HP9000/300 was contributed by Hewlett-Packard.
|
||||||
|
|
||||||
|
GAS and BFD support for the native HPPA object format (SOM) along with
|
||||||
|
a fairly extensive HPPA testsuite (for both SOM and ELF object formats)
|
||||||
|
was written by Jeff Law. This work was supported by both the Center for
|
||||||
|
Software Science at the University of Utah and Cygnus Support.
|
||||||
|
|
||||||
|
Support for ELF format files has been worked on by Mark Eichin of Cygnus
|
||||||
|
Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
|
||||||
|
Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
|
||||||
|
Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
|
||||||
|
and some initial 64-bit support).
|
||||||
|
|
||||||
|
Several engineers at Cygnus Support have also provided many small bug fixes and
|
||||||
|
configuration enhancements.
|
||||||
|
|
||||||
|
Many others have contributed large or small bugfixes and enhancements. If
|
||||||
|
you've contributed significant work and are not mentioned on this list, and
|
||||||
|
want to be, let us know. Some of the history has been lost; we aren't
|
||||||
|
intentionally leaving anyone out.
|
||||||
|
|
||||||
@ifset GENERIC
|
@ifset GENERIC
|
||||||
|
@node Copying
|
||||||
|
@unnumbered
|
||||||
@include gpl.texinfo
|
@include gpl.texinfo
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@ -7578,3 +7921,6 @@ usually only needed by the machine-independent part of
|
||||||
|
|
||||||
@contents
|
@contents
|
||||||
@bye
|
@bye
|
||||||
|
@c Local Variables:
|
||||||
|
@c fill-column: 79
|
||||||
|
@c End:
|
||||||
|
|
Loading…
Reference in New Issue