STABS: Traditional Integer Types |
---|
Next: Traditional Other Types, Up: Traditional Builtin Types [Contents][Index]
Often types are defined as subranges of themselves. If the bounding values
fit within an int
, then they are given normally. For example:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0 # 128 is N_LSYM
.stabs "char:t2=r2;0;127;",128,0,0,0
Builtin types can also be described as subranges of int
:
.stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
If the lower bound of a subrange is 0 and the upper bound is -1,
the type is an unsigned integral type whose bounds are too
big to describe in an int
. Traditionally this is only used for
unsigned int
and unsigned long
:
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
For larger types, GCC 2.4.5 puts out bounds in octal, with one or more leading zeroes. In this case a negative bound consists of a number which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in the number (except the sign bit), and a positive bound is one which is a 1 bit for each bit in the number (except possibly the sign bit). All known versions of dbx and GDB version 4 accept this (at least in the sense of not refusing to process the file), but GDB 3.5 refuses to read the whole file containing such symbols. So GCC 2.3.3 did not output the proper size for these types. As an example of octal bounds, the string fields of the stabs for 64 bit integer types look like:
long int:t3=r1;001000000000000000000000;000777777777777777777777; long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
If the lower bound of a subrange is 0 and the upper bound is negative,
the type is an unsigned integral type whose size in bytes is the
absolute value of the upper bound. I believe this is a Convex
convention for unsigned long long
.
If the lower bound of a subrange is negative and the upper bound is 0,
the type is a signed integral type whose size in bytes is
the absolute value of the lower bound. I believe this is a Convex
convention for long long
. To distinguish this from a legitimate
subrange, the type should be a subrange of itself. I’m not sure whether
this is the case for Convex.
Next: Traditional Other Types, Up: Traditional Builtin Types [Contents][Index]