Kaynağa Gözat

[debug] Allow debug messages to be initially disabled at runtime

Extend the DEBUG=... syntax to allow debug messages to be compiled in
but disabled by default.  For example:

  make bin/undionly.kpxe DEBUG=netdevice:3:1

would compile in the messages as for DEBUG=netdevice:3, but would set
the debug level mask so that only the DEBUG=netdevice:1 messages would
be displayed.

This allows for external code to selectively enable the additional
debug messages at runtime, without being overwhelmed by unwanted
initial noise.  For example, a developer of a new protocol may want to
temporarily enable tracing of all packets received: this can be done
by building with DEBUG=netdevice:3:1 and using

  // temporarily enable per-packet messages
  DBG_ENABLE_OBJECT ( netdevice, DBGLVL_EXTRA );
  ...
  // disable per-packet messages
  DBG_DISABLE_OBJECT ( netdevice, DBGLVL_EXTRA );

Note that unlike the usual DBG_ENABLE() and DBG_DISABLE() macros,
DBG_ENABLE_OBJECT() and DBG_DISABLE_OBJECT() will not be removed via
dead code elimination if debugging is disabled in the specified
object.  In particular, this means that using either of these macros
will always result in a symbol reference to the specified object.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 8 yıl önce
ebeveyn
işleme
6e1ce52d14
2 değiştirilmiş dosya ile 19 ekleme ve 7 silme
  1. 14
    6
      src/Makefile.housekeeping
  2. 5
    1
      src/include/compiler.h

+ 14
- 6
src/Makefile.housekeeping Dosyayı Görüntüle

@@ -523,19 +523,25 @@ POST_O		:=
523 523
 POST_O_DEPS	:=
524 524
 endif
525 525
 
526
+# Debug level calculations
527
+#
528
+DBGLVL_MAX	= -DDBGLVL_MAX=$(firstword $(subst ., ,$(1)))
529
+DBGLVL_DFLT	= -DDBGLVL_DFLT=$(lastword $(subst ., ,$(1)))
530
+DBGLVL		= $(call DBGLVL_MAX,$(1)) $(call DBGLVL_DFLT,$(1))
531
+
526 532
 # Rules for specific object types.
527 533
 #
528 534
 COMPILE_c	= $(CC) $(CFLAGS) $(CFLAGS_c) $(OBJ_CFLAGS)
529 535
 RULE_c		= $(Q)$(COMPILE_c) -c $< -o $@ $(POST_O)
530 536
 RULE_c_to_ids.o = $(Q)$(ECHO_E) '$(OBJ_IDS_ASM_NL)' | $(ASSEMBLE_S) -o $@
531
-RULE_c_to_dbg%.o = $(Q)$(COMPILE_c) -DDBGLVL_MAX=$* -c $< -o $@ $(POST_O)
537
+RULE_c_to_dbg%.o= $(Q)$(COMPILE_c) $(call DBGLVL,$*) -c $< -o $@ $(POST_O)
532 538
 RULE_c_to_c	= $(Q)$(COMPILE_c) -E -c $< > $@
533 539
 RULE_c_to_s	= $(Q)$(COMPILE_c) -S -g0 -c $< -o $@
534 540
 
535 541
 PREPROCESS_S	= $(CPP) $(CFLAGS) $(CFLAGS_S) $(OBJ_CFLAGS)
536 542
 ASSEMBLE_S	= $(AS) $(ASFLAGS)
537 543
 RULE_S		= $(Q)$(PREPROCESS_S) $< | $(ASSEMBLE_S) -o $@
538
-RULE_S_to_dbg%.o = $(Q)$(PREPROCESS_S) -DDBGLVL_MAX=$* $< | $(ASSEMBLE_S) -o $@
544
+RULE_S_to_dbg%.o= $(Q)$(PREPROCESS_S) $(call DBGLVL,$*) $< | $(ASSEMBLE_S) -o $@
539 545
 RULE_S_to_s	= $(Q)$(PREPROCESS_S) $< > $@
540 546
 
541 547
 GENERIC_TARGETS	+= ids.o dbg%.o c s
@@ -1019,10 +1025,12 @@ TGT_LD_FLAGS	= $(foreach SYM,$(TGT_LD_ENTRY) $(TGT_LD_DRIVERS) \
1019 1025
 # the target.
1020 1026
 #
1021 1027
 DEBUG_LIST	= $(subst $(COMMA), ,$(DEBUG))
1022
-DEBUG_OBJ_LEVEL	= $(firstword $(word 2,$(subst :, ,$(1))) 1)
1023
-DEBUG_OBJ_BASE	= $(word 1,$(subst :, ,$(1))).dbg$(call DEBUG_OBJ_LEVEL,$(1))
1024
-DEBUG_OBJ	= $(BIN)/$(call DEBUG_OBJ_BASE,$(1)).o
1025
-DEBUG_ORIG_OBJ	= $(BIN)/$(word 1,$(subst :, ,$(1))).o
1028
+DEBUG_MAX	= $(firstword $(word 2,$(subst :, ,$(1))) 1)
1029
+DEBUG_DFLT	= $(if $(word 3,$(subst :, ,$(1))),.$(word 3,$(subst :, ,$(1))))
1030
+DEBUG_LEVEL	= $(call DEBUG_MAX,$(1))$(call DEBUG_DFLT,$(1))
1031
+DEBUG_BASE	= $(firstword $(subst :, ,$(1))).dbg$(call DEBUG_LEVEL,$(1))
1032
+DEBUG_OBJ	= $(BIN)/$(call DEBUG_BASE,$(1)).o
1033
+DEBUG_ORIG_OBJ	= $(BIN)/$(firstword $(subst :, ,$(1))).o
1026 1034
 DEBUG_OBJS	= $(foreach D,$(DEBUG_LIST),$(call DEBUG_OBJ,$(D)))
1027 1035
 DEBUG_ORIG_OBJS	= $(foreach D,$(DEBUG_LIST),$(call DEBUG_ORIG_OBJ,$(D)))
1028 1036
 BLIB_OBJS	= $(DEBUG_OBJS) $(filter-out $(DEBUG_ORIG_OBJS),$(BOBJS))

+ 5
- 1
src/include/compiler.h Dosyayı Görüntüle

@@ -270,6 +270,10 @@ PROVIDE_SYMBOL ( OBJECT_SYMBOL );
270 270
 #define DBGLVL_MAX 0
271 271
 #endif
272 272
 
273
+#ifndef DBGLVL_DFLT
274
+#define DBGLVL_DFLT DBGLVL_MAX
275
+#endif
276
+
273 277
 #ifndef ASSEMBLY
274 278
 
275 279
 /** printf() for debugging */
@@ -286,7 +290,7 @@ extern void dbg_more ( void );
286 290
 
287 291
 /* Allow for selective disabling of enabled debug levels */
288 292
 #define __debug_disable( object ) _C2 ( __debug_disable_, object )
289
-char __debug_disable(OBJECT);
293
+char __debug_disable(OBJECT) = ( DBGLVL_MAX & ~DBGLVL_DFLT );
290 294
 #define DBG_DISABLE_OBJECT( object, level ) do {		\
291 295
 	extern char __debug_disable(object);			\
292 296
 	__debug_disable(object) |= (level);			\

Loading…
İptal
Kaydet