dwarves_fprintf: Print the bit_offset for inline enum bitfield class members
Before: $ pahole examples/myrb_dcdb.o struct myrb_dcdb { unsigned int target:4; /* 0:28 4 */ unsigned int channel:4; /* 0:24 4 */ /* Bitfield combined with next fields */ enum { MYRB_DCDB_XFER_NONE = 0, MYRB_DCDB_XFER_DEVICE_TO_SYSTEM = 1, MYRB_DCDB_XFER_SYSTEM_TO_DEVICE = 2, MYRB_DCDB_XFER_ILLEGAL = 3, } data_xfer:2; /* 1 1 */ <SNIP> After: $ pahole examples/myrb_dcdb.o struct myrb_dcdb { unsigned int target:4; /* 0:28 4 */ unsigned int channel:4; /* 0:24 4 */ /* Bitfield combined with next fields */ enum { MYRB_DCDB_XFER_NONE = 0, MYRB_DCDB_XFER_DEVICE_TO_SYSTEM = 1, MYRB_DCDB_XFER_SYSTEM_TO_DEVICE = 2, MYRB_DCDB_XFER_ILLEGAL = 3, } data_xfer:2; /* 1: 6 1 */ <SNIP> Look at data_xfer:2, it now shows the bit_offset (6) in addition to the byte offset (1) and the bit_size (2). Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
bb8350acf5
commit
fa963e1a86
|
@ -784,12 +784,26 @@ static size_t class_member__fprintf(struct class_member *member, bool union_memb
|
|||
if (!sconf.suppress_offset_comment) {
|
||||
/* Check if this is a anonymous union */
|
||||
const int slen = cm_name ? (int)strlen(cm_name) : -1;
|
||||
int size_spacing = 5;
|
||||
|
||||
printed += fprintf(fp, sconf.hex_fmt ?
|
||||
"%*s/* %#5x %#5x */" :
|
||||
"%*s/* %5u %5u */",
|
||||
"%*s/* %#5x" :
|
||||
"%*s/* %5u",
|
||||
(sconf.type_spacing +
|
||||
sconf.name_spacing - slen - 3),
|
||||
" ", offset, size);
|
||||
" ", offset);
|
||||
|
||||
if (member->bitfield_size != 0) {
|
||||
unsigned int bitfield_offset = member->bitfield_offset;
|
||||
|
||||
if (member->bitfield_offset < 0)
|
||||
bitfield_offset = member->byte_size * 8 + member->bitfield_offset;
|
||||
|
||||
printed += fprintf(fp, sconf.hex_fmt ? ":%#2x" : ":%2u", bitfield_offset);
|
||||
size_spacing -= 3;
|
||||
}
|
||||
|
||||
printed += fprintf(fp, sconf.hex_fmt ? " %#*x */" : " %*u */", size_spacing, size);
|
||||
}
|
||||
} else {
|
||||
int spacing = sconf.type_spacing + sconf.name_spacing - printed;
|
||||
|
|
Loading…
Reference in New Issue