On Sun, Apr 23, 2017 at 03:39:22AM -0400, Ian Sutton wrote: > I noticed some strange code in src/sys/arch/armv7/omap/ommmc.c > > This preprocessor define seems to map intr. state bit positions with > strings describing them: > > 149 #define MMCHS_STAT_FMT "\20" \ > 150 "\x09d_BADA" \ > 151 "\x09c_CERR" \ > 152 "\x098_ACE" \ > 153 "\x096_DEB" \ > 154 "\x095_DCRC" \ > 155 "\x094_DTO" \ > 156 "\x093_CIE" \ > 157 "\x092_CEB" \ > 158 "\x091_CCRC" \ > 159 "\x090_CTO" \ > 160 "\x08f_ERRI" \ > 161 "\x089_OBI" \ > 162 "\x088_CIRQ" \ > 163 "\x085_BRR" \ > 164 "\x084_BWR" \ > 165 "\x082_BGE" \ > 166 "\x081_TC" \ > 167 "\x080_CC" > > It's used later as an extra printf() argument (edited for clarity): > > 1174 printf("%s: interrupt status=%b\n", DEVNAME(sc), status, MMCHS_STAT_FMT); > > Whenever the above is called, the string counterpart to each interupt > bit set in 'status' is printed, for example: > > mmmc0: interrupt status=20008000<_BADA,_ERRI> > > Where BADA and ERRI are intr. status bits at positions 29 and 15 > respectively. > > So through some combination of: > * CPP multi-string define with unclear hex escapes prepended > * printf() call with one too many parameters > * undocumented %b printf() token
http://man.openbsd.org/printf.9