www.delorie.com/gnu/docs/gdb/stabs_44.html   search  
Buy the book!


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.10 Unions

union u_tag {
  int  u_int;
  float u_float;
  char* u_char;
} an_u;

This code generates a stab for a union tag and a stab for a union variable. Both use the N_LSYM stab type. If a union variable is scoped locally to the procedure in which it is defined, its stab is located immediately preceding the N_LBRAC for the procedure's block start.

The stab for the union tag, however, is located preceding the code for the procedure in which it is defined. The stab type is N_LSYM. This would seem to imply that the union type is file scope, like the struct type s_tag. This is not true. The contents and position of the stab for u_type do not convey any information about its procedure local scope.

# 128 is N_LSYM
.stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",

The symbol descriptor `T', following the `name:' means that the stab describes an enumeration, structure, or union tag. The type descriptor `u', following the `23=' of the type definition, narrows it down to a union type definition. Following the `u' is the number of bytes in the union. After that is a list of union element descriptions. Their format is name:type, bit offset into the union, number of bytes for the element;.

The stab for the union variable is:

.stabs "an_u:23",128,0,0,-20     # 128 is N_LSYM

`-20' specifies where the variable is stored (see section 4.1 Automatic Variables Allocated on the Stack).

  webmaster     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003