STABS: Questions

Next: Stab Sections, Previous: Expanded Reference, Up: Top   [Contents][Index]


Appendix E Questions and Anomalies

  • For GNU C stabs defining local and global variables (N_LSYM and N_GSYM), the desc field is supposed to contain the source line number on which the variable is defined. In reality the desc field is always 0. (This behavior is defined in dbxout.c and putting a line number in desc is controlled by ‘#ifdef WINNING_GDB’, which defaults to false). GDB supposedly uses this information if you say ‘list var ’. In reality, var can be a variable defined in the program and GDB says ‘function var not defined’.
  • In GNU C stabs, there seems to be no way to differentiate tag types: structures, unions, and enums (symbol descriptor ‘T’) and typedefs (symbol descriptor ‘t’) defined at file scope from types defined locally to a procedure or other more local scope. They all use the N_LSYM stab type. Types defined at procedure scope are emitted after the N_RBRAC of the preceding function and before the code of the procedure in which they are defined. This is exactly the same as types defined in the source file between the two procedure bodies. GDB over-compensates by placing all types in block #1, the block for symbols of file scope. This is true for default, ‘-ansi’ and ‘-traditional’ compiler options. (Bugs gcc/1063, gdb/1066.)
  • What ends the procedure scope? Is it the proc block’s N_RBRAC or the next N_FUN? (I believe its the first.)