This section describes the stabs support for macro define and undefine information, supported on some systems. (e.g., with -g3 -gstabs when using GCC).
A #define
macro-name macro-body is represented with
an N_MAC_DEFINE
stab with a string field of
macro-name macro-body.
An #undef
macro-name is represented with an
N_MAC_UNDEF
stabs with a string field of simply
macro-name.
For both N_MAC_DEFINE
and N_MAC_UNDEF
, the desc field is
the line number within the file where the corresponding #define
or #undef
occurred.
For example, the following C code:
#define NONE 42 #define TWO(a, b) (a + (a) + 2 * b) #define ONE(c) (c + 19) main(int argc, char *argv[]) { func(NONE, TWO(10, 11)); func(NONE, ONE(23)); #undef ONE #define ONE(c) (c + 23) func(NONE, ONE(-23)); return (0); } int global; func(int arg1, int arg2) { global = arg1 + arg2; }
produces the following stabs (as well as many others):
.stabs "NONE 42",54,0,1,0 .stabs "TWO(a,b) (a + (a) + 2 * b)",54,0,2,0 .stabs "ONE(c) (c + 19)",54,0,3,0 .stabs "ONE",58,0,10,0 .stabs "ONE(c) (c + 23)",54,0,11,0
NOTE: In the above example, 54
is N_MAC_DEFINE
and
58
is N_MAC_UNDEF
.