[CLASSES]: Save 12 bytes on struct class
With some tradeoff for the code size... [acme@newtoy pahole]$ codiff build/libclasses.so.orig build/libclasses.so /home/acme/pahole/classes.c: struct class | -12 1 struct changed class__array_nr_entries | +3 class_member__names | +3 parameter__names | +3 class__find_holes | -8 class__print_struct | -1 cu__create_new_array | +48 6 functions changed, 57 bytes added, 9 bytes removed [acme@newtoy pahole]$ Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
parent
43de2d269f
commit
594463f756
24
classes.c
24
classes.c
|
@ -540,8 +540,8 @@ static size_t class__array_nr_entries(const struct class *self)
|
|||
int i;
|
||||
size_t nr_entries = 1;
|
||||
|
||||
for (i = 0; i < self->array.dimensions; ++i)
|
||||
nr_entries *= self->array.nr_entries[i];
|
||||
for (i = 0; i < self->array_dimensions; ++i)
|
||||
nr_entries *= self->array_nr_entries[i];
|
||||
|
||||
return nr_entries;
|
||||
}
|
||||
|
@ -743,10 +743,10 @@ size_t class_member__names(const struct class *type,
|
|||
member_name += n;
|
||||
member_name_size -= n;
|
||||
|
||||
for (i = 0; i < type->array.dimensions; ++i) {
|
||||
for (i = 0; i < type->array_dimensions; ++i) {
|
||||
n = snprintf(member_name, member_name_size,
|
||||
"[%u]",
|
||||
type->array.nr_entries[i]);
|
||||
type->array_nr_entries[i]);
|
||||
member_name += n;
|
||||
member_name_size -= n;
|
||||
}
|
||||
|
@ -816,10 +816,10 @@ size_t parameter__names(const struct parameter *self,
|
|||
parameter_name += n;
|
||||
parameter_name_size -= n;
|
||||
|
||||
for (i = 0; i < class->array.dimensions; ++i) {
|
||||
for (i = 0; i < class->array_dimensions; ++i) {
|
||||
n = snprintf(parameter_name,
|
||||
parameter_name_size, "[%u]",
|
||||
class->array.nr_entries[i]);
|
||||
class->array_nr_entries[i]);
|
||||
parameter_name += n;
|
||||
parameter_name_size -= n;
|
||||
}
|
||||
|
@ -1755,13 +1755,13 @@ static void cu__create_new_array(Dwarf *dwarf, Dwarf_Die *die, struct cu *cu,
|
|||
}
|
||||
|
||||
die = &child;
|
||||
class->array.dimensions = 0;
|
||||
class->array_dimensions = 0;
|
||||
do {
|
||||
const uint16_t tag = dwarf_tag(die);
|
||||
|
||||
if (tag == DW_TAG_subrange_type) {
|
||||
nr_entries[class->array.dimensions++] = attr_upper_bound(die);
|
||||
if (class->array.dimensions == max_dimensions) {
|
||||
nr_entries[class->array_dimensions++] = attr_upper_bound(die);
|
||||
if (class->array_dimensions == max_dimensions) {
|
||||
fprintf(stderr, "%s: only %u dimensions are "
|
||||
"supported!\n",
|
||||
__FUNCTION__, max_dimensions);
|
||||
|
@ -1772,10 +1772,10 @@ static void cu__create_new_array(Dwarf *dwarf, Dwarf_Die *die, struct cu *cu,
|
|||
__FUNCTION__, dwarf_tag_name(tag));
|
||||
} while (dwarf_siblingof(die, die) == 0);
|
||||
|
||||
class->array.nr_entries = memdup(nr_entries,
|
||||
(class->array.dimensions *
|
||||
class->array_nr_entries = memdup(nr_entries,
|
||||
(class->array_dimensions *
|
||||
sizeof(uint32_t)));
|
||||
if (class->array.nr_entries == NULL)
|
||||
if (class->array_nr_entries == NULL)
|
||||
oom("memdup(array.nr_entries)");
|
||||
|
||||
cu__add_class(cu, class);
|
||||
|
|
18
classes.h
18
classes.h
|
@ -58,21 +58,19 @@ struct class {
|
|||
struct list_head node;
|
||||
const char *name;
|
||||
size_t size;
|
||||
struct {
|
||||
uint8_t dimensions;
|
||||
uint32_t *nr_entries;
|
||||
} array;
|
||||
uint16_t nr_members;
|
||||
uint16_t nr_holes;
|
||||
uint16_t nr_bit_holes;
|
||||
uint8_t nr_holes;
|
||||
uint8_t nr_bit_holes;
|
||||
uint16_t padding;
|
||||
uint16_t bit_padding;
|
||||
uint32_t refcnt;
|
||||
int32_t diff;
|
||||
struct class *class_to_diff;
|
||||
uint8_t bit_padding;
|
||||
uint8_t declaration:1;
|
||||
uint8_t visited:1;
|
||||
uint8_t fwd_decl_emitted:1;
|
||||
uint8_t array_dimensions:5;
|
||||
uint32_t refcnt;
|
||||
uint32_t *array_nr_entries;
|
||||
int32_t diff;
|
||||
struct class *class_to_diff;
|
||||
};
|
||||
|
||||
struct class_member {
|
||||
|
|
Loading…
Reference in New Issue