Add static_asserts for the sizes of space-critical structs

Specifically the three structs mentioned in symtab.h:
- general_symbol_info
- symbol
- partial_symbol

This ensures that those structs won't accidentally get bigger.

gdb/ChangeLog:

2019-11-04  Christian Biesinger  <cbiesinger@google.com>

	* psympriv.h: Add static_asserts for sizeof (general_symbol_info)
	and sizeof (symbol).
	* symtab.h: Add a static_assert for sizeof (partial_symbol).

Change-Id: Idd68320aa3e79ee7cc749019724636a58ce4b9c6
This commit is contained in:
Christian Biesinger 2019-10-25 13:40:27 -05:00
parent dae8b3eb23
commit 3573abe1de
3 changed files with 25 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2019-11-04 Christian Biesinger <cbiesinger@google.com>
* psympriv.h: Add static_asserts for sizeof (general_symbol_info)
and sizeof (symbol).
* symtab.h: Add a static_assert for sizeof (partial_symbol).
2019-11-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2019-11-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* NEWS (Changes since GDB 8.3): Document Solaris 10 removal. * NEWS (Changes since GDB 8.3): Document Solaris 10 removal.

View file

@ -82,6 +82,12 @@ struct partial_symbol
ENUM_BITFIELD(address_class) aclass : SYMBOL_ACLASS_BITS; ENUM_BITFIELD(address_class) aclass : SYMBOL_ACLASS_BITS;
}; };
/* This struct is size-critical (see comment at the to of symtab.h), so this
assert makes sure the size doesn't change accidentally. Be careful when
purposely increasing the size. */
gdb_static_assert ((sizeof (void *) == 8 && sizeof (partial_symbol) == 40)
|| (sizeof (void *) == 4 && sizeof (partial_symbol) == 24));
/* A convenience enum to give names to some constants used when /* A convenience enum to give names to some constants used when
searching psymtabs. This is internal to psymtab and should not be searching psymtabs. This is internal to psymtab and should not be
used elsewhere. */ used elsewhere. */

View file

@ -446,6 +446,13 @@ struct general_symbol_info
short section; short section;
}; };
/* This struct is size-critical (see comment at the top), so this assert
makes sure the size doesn't change accidentally. Be careful when
purposely increasing the size. */
gdb_static_assert ((sizeof (void *) == 8 && sizeof (general_symbol_info) == 32)
|| (sizeof (void *) == 4 &&
sizeof (general_symbol_info) == 20));
extern void symbol_set_demangled_name (struct general_symbol_info *, extern void symbol_set_demangled_name (struct general_symbol_info *,
const char *, const char *,
struct obstack *); struct obstack *);
@ -1187,6 +1194,12 @@ struct symbol
struct symbol *hash_next; struct symbol *hash_next;
}; };
/* This struct is size-critical (see comment at the top), so this assert
makes sure the size doesn't change accidentally. Be careful when
purposely increasing the size. */
gdb_static_assert ((sizeof (void *) == 8 && sizeof (symbol) == 72)
|| (sizeof (void *) == 4 && sizeof (symbol) == 40));
/* Several lookup functions return both a symbol and the block in which the /* Several lookup functions return both a symbol and the block in which the
symbol is found. This structure is used in these cases. */ symbol is found. This structure is used in these cases. */