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>
* 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;
};
/* 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
searching psymtabs. This is internal to psymtab and should not be
used elsewhere. */

View File

@ -446,6 +446,13 @@ struct general_symbol_info
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 *,
const char *,
struct obstack *);
@ -1187,6 +1194,12 @@ struct symbol
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
symbol is found. This structure is used in these cases. */