| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- Copyright (C) 1992-2015 Free Software Foundation, Inc. |
| Contributed by Cygnus Support. Written by Julia Menapace, Jim Kingdon, |
| and David MacKenzie. |
| |
| 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". --> |
| <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>STABS: Negative Type Numbers</title> |
| |
| <meta name="description" content="STABS: Negative Type Numbers"> |
| <meta name="keywords" content="STABS: Negative Type Numbers"> |
| <meta name="resource-type" content="document"> |
| <meta name="distribution" content="global"> |
| <meta name="Generator" content="makeinfo"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <link href="index.html#Top" rel="start" title="Top"> |
| <link href="Symbol-Types-Index.html#Symbol-Types-Index" rel="index" title="Symbol Types Index"> |
| <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> |
| <link href="Builtin-Types.html#Builtin-Types" rel="up" title="Builtin Types"> |
| <link href="Miscellaneous-Types.html#Miscellaneous-Types" rel="next" title="Miscellaneous Types"> |
| <link href="Builtin-Type-Descriptors.html#Builtin-Type-Descriptors" rel="prev" title="Builtin Type Descriptors"> |
| <style type="text/css"> |
| <!-- |
| a.summary-letter {text-decoration: none} |
| blockquote.smallquotation {font-size: smaller} |
| div.display {margin-left: 3.2em} |
| div.example {margin-left: 3.2em} |
| div.indentedblock {margin-left: 3.2em} |
| div.lisp {margin-left: 3.2em} |
| div.smalldisplay {margin-left: 3.2em} |
| div.smallexample {margin-left: 3.2em} |
| div.smallindentedblock {margin-left: 3.2em; font-size: smaller} |
| div.smalllisp {margin-left: 3.2em} |
| kbd {font-style:oblique} |
| pre.display {font-family: inherit} |
| pre.format {font-family: inherit} |
| pre.menu-comment {font-family: serif} |
| pre.menu-preformatted {font-family: serif} |
| pre.smalldisplay {font-family: inherit; font-size: smaller} |
| pre.smallexample {font-size: smaller} |
| pre.smallformat {font-family: inherit; font-size: smaller} |
| pre.smalllisp {font-size: smaller} |
| span.nocodebreak {white-space:nowrap} |
| span.nolinebreak {white-space:nowrap} |
| span.roman {font-family:serif; font-weight:normal} |
| span.sansserif {font-family:sans-serif; font-weight:normal} |
| ul.no-bullet {list-style: none} |
| --> |
| </style> |
| |
| |
| </head> |
| |
| <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> |
| <a name="Negative-Type-Numbers"></a> |
| <div class="header"> |
| <p> |
| Previous: <a href="Builtin-Type-Descriptors.html#Builtin-Type-Descriptors" accesskey="p" rel="prev">Builtin Type Descriptors</a>, Up: <a href="Builtin-Types.html#Builtin-Types" accesskey="u" rel="up">Builtin Types</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Types-Index.html#Symbol-Types-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| <hr> |
| <a name="Negative-Type-Numbers-1"></a> |
| <h4 class="subsection">5.1.3 Negative Type Numbers</h4> |
| |
| <p>This is the method used in XCOFF for defining builtin types. |
| Since the debugger knows about the builtin types anyway, the idea of |
| negative type numbers is simply to give a special type number which |
| indicates the builtin type. There is no stab defining these types. |
| </p> |
| <p>There are several subtle issues with negative type numbers. |
| </p> |
| <p>One is the size of the type. A builtin type (for example the C types |
| <code>int</code> or <code>long</code>) might have different sizes depending on |
| compiler options, the target architecture, the ABI, etc. This issue |
| doesn’t come up for IBM tools since (so far) they just target the |
| RS/6000; the sizes indicated below for each size are what the IBM |
| RS/6000 tools use. To deal with differing sizes, either define separate |
| negative type numbers for each size (which works but requires changing |
| the debugger, and, unless you get both AIX dbx and GDB to accept the |
| change, introduces an incompatibility), or use a type attribute |
| (see <a href="String-Field.html#String-Field">String Field</a>) to define a new type with the appropriate size |
| (which merely requires a debugger which understands type attributes, |
| like AIX dbx or GDB). For example, |
| </p> |
| <div class="example"> |
| <pre class="example">.stabs "boolean:t10=@s8;-16",128,0,0,0 |
| </pre></div> |
| |
| <p>defines an 8-bit boolean type, and |
| </p> |
| <div class="example"> |
| <pre class="example">.stabs "boolean:t10=@s64;-16",128,0,0,0 |
| </pre></div> |
| |
| <p>defines a 64-bit boolean type. |
| </p> |
| <p>A similar issue is the format of the type. This comes up most often for |
| floating-point types, which could have various formats (particularly |
| extended doubles, which vary quite a bit even among IEEE systems). |
| Again, it is best to define a new negative type number for each |
| different format; changing the format based on the target system has |
| various problems. One such problem is that the Alpha has both VAX and |
| IEEE floating types. One can easily imagine one library using the VAX |
| types and another library in the same executable using the IEEE types. |
| Another example is that the interpretation of whether a boolean is true |
| or false can be based on the least significant bit, most significant |
| bit, whether it is zero, etc., and different compilers (or different |
| options to the same compiler) might provide different kinds of boolean. |
| </p> |
| <p>The last major issue is the names of the types. The name of a given |
| type depends <em>only</em> on the negative type number given; these do not |
| vary depending on the language, the target system, or anything else. |
| One can always define separate type numbers—in the following list you |
| will see for example separate <code>int</code> and <code>integer*4</code> types |
| which are identical except for the name. But compatibility can be |
| maintained by not inventing new negative type numbers and instead just |
| defining a new type with a new name. For example: |
| </p> |
| <div class="example"> |
| <pre class="example">.stabs "CARDINAL:t10=-8",128,0,0,0 |
| </pre></div> |
| |
| <p>Here is the list of negative type numbers. The phrase <em>integral |
| type</em> is used to mean twos-complement (I strongly suspect that all |
| machines which use stabs use twos-complement; most machines use |
| twos-complement these days). |
| </p> |
| <dl compact="compact"> |
| <dt><code>-1</code></dt> |
| <dd><p><code>int</code>, 32 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-2</code></dt> |
| <dd><p><code>char</code>, 8 bit type holding a character. Both GDB and dbx on AIX |
| treat this as signed. GCC uses this type whether <code>char</code> is signed |
| or not, which seems like a bad idea. The AIX compiler (<code>xlc</code>) seems to |
| avoid this type; it uses -5 instead for <code>char</code>. |
| </p> |
| </dd> |
| <dt><code>-3</code></dt> |
| <dd><p><code>short</code>, 16 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-4</code></dt> |
| <dd><p><code>long</code>, 32 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-5</code></dt> |
| <dd><p><code>unsigned char</code>, 8 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-6</code></dt> |
| <dd><p><code>signed char</code>, 8 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-7</code></dt> |
| <dd><p><code>unsigned short</code>, 16 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-8</code></dt> |
| <dd><p><code>unsigned int</code>, 32 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-9</code></dt> |
| <dd><p><code>unsigned</code>, 32 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-10</code></dt> |
| <dd><p><code>unsigned long</code>, 32 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-11</code></dt> |
| <dd><p><code>void</code>, type indicating the lack of a value. |
| </p> |
| </dd> |
| <dt><code>-12</code></dt> |
| <dd><p><code>float</code>, IEEE single precision. |
| </p> |
| </dd> |
| <dt><code>-13</code></dt> |
| <dd><p><code>double</code>, IEEE double precision. |
| </p> |
| </dd> |
| <dt><code>-14</code></dt> |
| <dd><p><code>long double</code>, IEEE double precision. The compiler claims the size |
| will increase in a future release, and for binary compatibility you have |
| to avoid using <code>long double</code>. I hope when they increase it they |
| use a new negative type number. |
| </p> |
| </dd> |
| <dt><code>-15</code></dt> |
| <dd><p><code>integer</code>. 32 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-16</code></dt> |
| <dd><p><code>boolean</code>. 32 bit type. GDB and GCC assume that zero is false, |
| one is true, and other values have unspecified meaning. I hope this |
| agrees with how the IBM tools use the type. |
| </p> |
| </dd> |
| <dt><code>-17</code></dt> |
| <dd><p><code>short real</code>. IEEE single precision. |
| </p> |
| </dd> |
| <dt><code>-18</code></dt> |
| <dd><p><code>real</code>. IEEE double precision. |
| </p> |
| </dd> |
| <dt><code>-19</code></dt> |
| <dd><p><code>stringptr</code>. See <a href="Strings.html#Strings">Strings</a>. |
| </p> |
| </dd> |
| <dt><code>-20</code></dt> |
| <dd><p><code>character</code>, 8 bit unsigned character type. |
| </p> |
| </dd> |
| <dt><code>-21</code></dt> |
| <dd><p><code>logical*1</code>, 8 bit type. This Fortran type has a split |
| personality in that it is used for boolean variables, but can also be |
| used for unsigned integers. 0 is false, 1 is true, and other values are |
| non-boolean. |
| </p> |
| </dd> |
| <dt><code>-22</code></dt> |
| <dd><p><code>logical*2</code>, 16 bit type. This Fortran type has a split |
| personality in that it is used for boolean variables, but can also be |
| used for unsigned integers. 0 is false, 1 is true, and other values are |
| non-boolean. |
| </p> |
| </dd> |
| <dt><code>-23</code></dt> |
| <dd><p><code>logical*4</code>, 32 bit type. This Fortran type has a split |
| personality in that it is used for boolean variables, but can also be |
| used for unsigned integers. 0 is false, 1 is true, and other values are |
| non-boolean. |
| </p> |
| </dd> |
| <dt><code>-24</code></dt> |
| <dd><p><code>logical</code>, 32 bit type. This Fortran type has a split |
| personality in that it is used for boolean variables, but can also be |
| used for unsigned integers. 0 is false, 1 is true, and other values are |
| non-boolean. |
| </p> |
| </dd> |
| <dt><code>-25</code></dt> |
| <dd><p><code>complex</code>. A complex type consisting of two IEEE single-precision |
| floating point values. |
| </p> |
| </dd> |
| <dt><code>-26</code></dt> |
| <dd><p><code>complex</code>. A complex type consisting of two IEEE double-precision |
| floating point values. |
| </p> |
| </dd> |
| <dt><code>-27</code></dt> |
| <dd><p><code>integer*1</code>, 8 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-28</code></dt> |
| <dd><p><code>integer*2</code>, 16 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-29</code></dt> |
| <dd><p><code>integer*4</code>, 32 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-30</code></dt> |
| <dd><p><code>wchar</code>. Wide character, 16 bits wide, unsigned (what format? |
| Unicode?). |
| </p> |
| </dd> |
| <dt><code>-31</code></dt> |
| <dd><p><code>long long</code>, 64 bit signed integral type. |
| </p> |
| </dd> |
| <dt><code>-32</code></dt> |
| <dd><p><code>unsigned long long</code>, 64 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-33</code></dt> |
| <dd><p><code>logical*8</code>, 64 bit unsigned integral type. |
| </p> |
| </dd> |
| <dt><code>-34</code></dt> |
| <dd><p><code>integer*8</code>, 64 bit signed integral type. |
| </p></dd> |
| </dl> |
| |
| <hr> |
| <div class="header"> |
| <p> |
| Previous: <a href="Builtin-Type-Descriptors.html#Builtin-Type-Descriptors" accesskey="p" rel="prev">Builtin Type Descriptors</a>, Up: <a href="Builtin-Types.html#Builtin-Types" accesskey="u" rel="up">Builtin Types</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Types-Index.html#Symbol-Types-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| |
| |
| |
| </body> |
| </html> |