blob: 3b1df6808cfa8284385605a2025a8912b836566b [file] [log] [blame]
<html lang="en">
<head>
<title>HPPA Directives - Using as</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Using as">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="HPPA_002dDependent.html#HPPA_002dDependent" title="HPPA-Dependent">
<link rel="prev" href="HPPA-Floating-Point.html#HPPA-Floating-Point" title="HPPA Floating Point">
<link rel="next" href="HPPA-Opcodes.html#HPPA-Opcodes" title="HPPA Opcodes">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU Assembler "as".
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="HPPA-Directives"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="HPPA-Opcodes.html#HPPA-Opcodes">HPPA Opcodes</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="HPPA-Floating-Point.html#HPPA-Floating-Point">HPPA Floating Point</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="HPPA_002dDependent.html#HPPA_002dDependent">HPPA-Dependent</a>
<hr>
</div>
<h4 class="subsection">9.11.5 HPPA Assembler Directives</h4>
<p><code>as</code> for the HPPA supports many additional directives for
compatibility with the native assembler. This section describes them only
briefly. For detailed information on HPPA-specific assembler directives, see
<cite>HP9000 Series 800 Assembly Language Reference Manual</cite> (HP 92432-90001).
<p><a name="index-HPPA-directives-not-supported-831"></a><code>as</code> does <em>not</em> support the following assembler directives
described in the HP manual:
<pre class="example"> .endm .liston
.enter .locct
.leave .macro
.listoff
</pre>
<p><a name="index-g_t_0040code_007b_002eparam_007d-on-HPPA-832"></a>Beyond those implemented for compatibility, <code>as</code> supports one
additional assembler directive for the HPPA: <code>.param</code>. It conveys
register argument locations for static functions. Its syntax closely follows
the <code>.export</code> directive.
<p><a name="index-HPPA_002donly-directives-833"></a>These are the additional directives in <code>as</code> for the HPPA:
<dl>
<dt><code>.block </code><var>n</var><dt><code>.blockz </code><var>n</var><dd>Reserve <var>n</var> bytes of storage, and initialize them to zero.
<br><dt><code>.call</code><dd>Mark the beginning of a procedure call. Only the special case with <em>no
arguments</em> is allowed.
<br><dt><code>.callinfo [ </code><var>param</var><code>=</code><var>value</var><code>, ... ] [ </code><var>flag</var><code>, ... ]</code><dd>Specify a number of parameters and flags that define the environment for a
procedure.
<p><var>param</var> may be any of &lsquo;<samp><span class="samp">frame</span></samp>&rsquo; (frame size), &lsquo;<samp><span class="samp">entry_gr</span></samp>&rsquo; (end of
general register range), &lsquo;<samp><span class="samp">entry_fr</span></samp>&rsquo; (end of float register range),
&lsquo;<samp><span class="samp">entry_sr</span></samp>&rsquo; (end of space register range).
<p>The values for <var>flag</var> are &lsquo;<samp><span class="samp">calls</span></samp>&rsquo; or &lsquo;<samp><span class="samp">caller</span></samp>&rsquo; (proc has
subroutines), &lsquo;<samp><span class="samp">no_calls</span></samp>&rsquo; (proc does not call subroutines), &lsquo;<samp><span class="samp">save_rp</span></samp>&rsquo;
(preserve return pointer), &lsquo;<samp><span class="samp">save_sp</span></samp>&rsquo; (proc preserves stack pointer),
&lsquo;<samp><span class="samp">no_unwind</span></samp>&rsquo; (do not unwind this proc), &lsquo;<samp><span class="samp">hpux_int</span></samp>&rsquo; (proc is interrupt
routine).
<br><dt><code>.code</code><dd>Assemble into the standard section called &lsquo;<samp><span class="samp">$TEXT$</span></samp>&rsquo;, subsection
&lsquo;<samp><span class="samp">$CODE$</span></samp>&rsquo;.
<br><dt><code>.copyright "</code><var>string</var><code>"</code><dd>In the SOM object format, insert <var>string</var> into the object code, marked as a
copyright string.
<br><dt><code>.copyright "</code><var>string</var><code>"</code><dd>In the ELF object format, insert <var>string</var> into the object code, marked as a
version string.
<br><dt><code>.enter</code><dd>Not yet supported; the assembler rejects programs containing this directive.
<br><dt><code>.entry</code><dd>Mark the beginning of a procedure.
<br><dt><code>.exit</code><dd>Mark the end of a procedure.
<br><dt><code>.export </code><var>name</var><code> [ ,</code><var>typ</var><code> ] [ ,</code><var>param</var><code>=</code><var>r</var><code> ]</code><dd>Make a procedure <var>name</var> available to callers. <var>typ</var>, if present, must
be one of &lsquo;<samp><span class="samp">absolute</span></samp>&rsquo;, &lsquo;<samp><span class="samp">code</span></samp>&rsquo; (ELF only, not SOM), &lsquo;<samp><span class="samp">data</span></samp>&rsquo;,
&lsquo;<samp><span class="samp">entry</span></samp>&rsquo;, &lsquo;<samp><span class="samp">data</span></samp>&rsquo;, &lsquo;<samp><span class="samp">entry</span></samp>&rsquo;, &lsquo;<samp><span class="samp">millicode</span></samp>&rsquo;, &lsquo;<samp><span class="samp">plabel</span></samp>&rsquo;,
&lsquo;<samp><span class="samp">pri_prog</span></samp>&rsquo;, or &lsquo;<samp><span class="samp">sec_prog</span></samp>&rsquo;.
<p><var>param</var>, if present, provides either relocation information for the
procedure arguments and result, or a privilege level. <var>param</var> may be
&lsquo;<samp><span class="samp">argw</span><var>n</var></samp>&rsquo; (where <var>n</var> ranges from <code>0</code> to <code>3</code>, and
indicates one of four one-word arguments); &lsquo;<samp><span class="samp">rtnval</span></samp>&rsquo; (the procedure's
result); or &lsquo;<samp><span class="samp">priv_lev</span></samp>&rsquo; (privilege level). For arguments or the result,
<var>r</var> specifies how to relocate, and must be one of &lsquo;<samp><span class="samp">no</span></samp>&rsquo; (not
relocatable), &lsquo;<samp><span class="samp">gr</span></samp>&rsquo; (argument is in general register), &lsquo;<samp><span class="samp">fr</span></samp>&rsquo; (in
floating point register), or &lsquo;<samp><span class="samp">fu</span></samp>&rsquo; (upper half of float register).
For &lsquo;<samp><span class="samp">priv_lev</span></samp>&rsquo;, <var>r</var> is an integer.
<br><dt><code>.half </code><var>n</var><dd>Define a two-byte integer constant <var>n</var>; synonym for the portable
<code>as</code> directive <code>.short</code>.
<br><dt><code>.import </code><var>name</var><code> [ ,</code><var>typ</var><code> ]</code><dd>Converse of <code>.export</code>; make a procedure available to call. The arguments
use the same conventions as the first two arguments for <code>.export</code>.
<br><dt><code>.label </code><var>name</var><dd>Define <var>name</var> as a label for the current assembly location.
<br><dt><code>.leave</code><dd>Not yet supported; the assembler rejects programs containing this directive.
<br><dt><code>.origin </code><var>lc</var><dd>Advance location counter to <var>lc</var>. Synonym for the <code>as</code>
portable directive <code>.org</code>.
<br><dt><code>.param </code><var>name</var><code> [ ,</code><var>typ</var><code> ] [ ,</code><var>param</var><code>=</code><var>r</var><code> ]</code><dd><!-- Not in HP manual; @sc{gnu} HPPA extension -->
Similar to <code>.export</code>, but used for static procedures.
<br><dt><code>.proc</code><dd>Use preceding the first statement of a procedure.
<br><dt><code>.procend</code><dd>Use following the last statement of a procedure.
<br><dt><var>label</var><code> .reg </code><var>expr</var><dd><!-- ?? Not in HP manual (Jan 1988 vn) -->
Synonym for <code>.equ</code>; define <var>label</var> with the absolute expression
<var>expr</var> as its value.
<br><dt><code>.space </code><var>secname</var><code> [ ,</code><var>params</var><code> ]</code><dd>Switch to section <var>secname</var>, creating a new section by that name if
necessary. You may only use <var>params</var> when creating a new section, not
when switching to an existing one. <var>secname</var> may identify a section by
number rather than by name.
<p>If specified, the list <var>params</var> declares attributes of the section,
identified by keywords. The keywords recognized are &lsquo;<samp><span class="samp">spnum=</span><var>exp</var></samp>&rsquo;
(identify this section by the number <var>exp</var>, an absolute expression),
&lsquo;<samp><span class="samp">sort=</span><var>exp</var></samp>&rsquo; (order sections according to this sort key when linking;
<var>exp</var> is an absolute expression), &lsquo;<samp><span class="samp">unloadable</span></samp>&rsquo; (section contains no
loadable data), &lsquo;<samp><span class="samp">notdefined</span></samp>&rsquo; (this section defined elsewhere), and
&lsquo;<samp><span class="samp">private</span></samp>&rsquo; (data in this section not available to other programs).
<br><dt><code>.spnum </code><var>secnam</var><dd><!-- ?? Not in HP manual (Jan 1988) -->
Allocate four bytes of storage, and initialize them with the section number of
the section named <var>secnam</var>. (You can define the section number with the
HPPA <code>.space</code> directive.)
<p><a name="index-g_t_0040code_007bstring_007d-directive-on-HPPA-834"></a><br><dt><code>.string "</code><var>str</var><code>"</code><dd>Copy the characters in the string <var>str</var> to the object file.
See <a href="Strings.html#Strings">Strings</a>, for information on escape sequences you can use in
<code>as</code> strings.
<p><em>Warning!</em> The HPPA version of <code>.string</code> differs from the
usual <code>as</code> definition: it does <em>not</em> write a zero byte
after copying <var>str</var>.
<br><dt><code>.stringz "</code><var>str</var><code>"</code><dd>Like <code>.string</code>, but appends a zero byte after copying <var>str</var> to object
file.
<br><dt><code>.subspa </code><var>name</var><code> [ ,</code><var>params</var><code> ]</code><dt><code>.nsubspa </code><var>name</var><code> [ ,</code><var>params</var><code> ]</code><dd>Similar to <code>.space</code>, but selects a subsection <var>name</var> within the
current section. You may only specify <var>params</var> when you create a
subsection (in the first instance of <code>.subspa</code> for this <var>name</var>).
<p>If specified, the list <var>params</var> declares attributes of the subsection,
identified by keywords. The keywords recognized are &lsquo;<samp><span class="samp">quad=</span><var>expr</var></samp>&rsquo;
(&ldquo;quadrant&rdquo; for this subsection), &lsquo;<samp><span class="samp">align=</span><var>expr</var></samp>&rsquo; (alignment for
beginning of this subsection; a power of two), &lsquo;<samp><span class="samp">access=</span><var>expr</var></samp>&rsquo; (value
for &ldquo;access rights&rdquo; field), &lsquo;<samp><span class="samp">sort=</span><var>expr</var></samp>&rsquo; (sorting order for this
subspace in link), &lsquo;<samp><span class="samp">code_only</span></samp>&rsquo; (subsection contains only code),
&lsquo;<samp><span class="samp">unloadable</span></samp>&rsquo; (subsection cannot be loaded into memory), &lsquo;<samp><span class="samp">comdat</span></samp>&rsquo;
(subsection is comdat), &lsquo;<samp><span class="samp">common</span></samp>&rsquo; (subsection is common block),
&lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; (subsection may have duplicate names), or &lsquo;<samp><span class="samp">zero</span></samp>&rsquo;
(subsection is all zeros, do not write in object file).
<p><code>.nsubspa</code> always creates a new subspace with the given name, even
if one with the same name already exists.
<p>&lsquo;<samp><span class="samp">comdat</span></samp>&rsquo;, &lsquo;<samp><span class="samp">common</span></samp>&rsquo; and &lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; can be used to implement
various flavors of one-only support when using the SOM linker. The SOM
linker only supports specific combinations of these flags. The details
are not documented. A brief description is provided here.
<p>&lsquo;<samp><span class="samp">comdat</span></samp>&rsquo; provides a form of linkonce support. It is useful for
both code and data subspaces. A &lsquo;<samp><span class="samp">comdat</span></samp>&rsquo; subspace has a key symbol
marked by the &lsquo;<samp><span class="samp">is_comdat</span></samp>&rsquo; flag or &lsquo;<samp><span class="samp">ST_COMDAT</span></samp>&rsquo;. Only the first
subspace for any given key is selected. The key symbol becomes universal
in shared links. This is similar to the behavior of &lsquo;<samp><span class="samp">secondary_def</span></samp>&rsquo;
symbols.
<p>&lsquo;<samp><span class="samp">common</span></samp>&rsquo; provides Fortran named common support. It is only useful
for data subspaces. Symbols with the flag &lsquo;<samp><span class="samp">is_common</span></samp>&rsquo; retain this
flag in shared links. Referencing a &lsquo;<samp><span class="samp">is_common</span></samp>&rsquo; symbol in a shared
library from outside the library doesn't work. Thus, &lsquo;<samp><span class="samp">is_common</span></samp>&rsquo;
symbols must be output whenever they are needed.
<p>&lsquo;<samp><span class="samp">common</span></samp>&rsquo; and &lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; together provide Cobol common support.
The subspaces in this case must all be the same length. Otherwise, this
support is similar to the Fortran common support.
<p>&lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; by itself provides a type of one-only support for code.
Only the first &lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; subspace is selected. There is a rather
complex algorithm to compare subspaces. Code symbols marked with the
&lsquo;<samp><span class="samp">dup_common</span></samp>&rsquo; flag are hidden. This support was intended for "C++
duplicate inlines".
<p>A simplified technique is used to mark the flags of symbols based on
the flags of their subspace. A symbol with the scope SS_UNIVERSAL and
type ST_ENTRY, ST_CODE or ST_DATA is marked with the corresponding
settings of &lsquo;<samp><span class="samp">comdat</span></samp>&rsquo;, &lsquo;<samp><span class="samp">common</span></samp>&rsquo; and &lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo; from the
subspace, respectively. This avoids having to introduce additional
directives to mark these symbols. The HP assembler sets &lsquo;<samp><span class="samp">is_common</span></samp>&rsquo;
from &lsquo;<samp><span class="samp">common</span></samp>&rsquo;. However, it doesn't set the &lsquo;<samp><span class="samp">dup_common</span></samp>&rsquo; from
&lsquo;<samp><span class="samp">dup_comm</span></samp>&rsquo;. It doesn't have &lsquo;<samp><span class="samp">comdat</span></samp>&rsquo; support.
<br><dt><code>.version "</code><var>str</var><code>"</code><dd>Write <var>str</var> as version identifier in object code.
</dl>
</body></html>