[review] Add static_asserts for the sizes of space-critical structs
Commit Message
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306
......................................................................
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-10-25 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
---
M gdb/psympriv.h
M gdb/symtab.h
2 files changed, 11 insertions(+), 0 deletions(-)
Comments
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306
......................................................................
Patch Set 2: Code-Review+1
(1 comment)
I think these spots should maybe come with a short comment explaining
that the assert is just to make sure you don't change the size by
accident. That way people changing the size on purpose will know
they can just update the assert. WDYT?
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306/2/gdb/symtab.h
File gdb/symtab.h:
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306/2/gdb/symtab.h@1189
PS2, Line 1189:
1180 | /* FIXME drow/2003-02-21: For the LOC_BLOCK case, it might be better
1181 | to add a magic symbol to the block containing this information,
1182 | or to have a generic debug info annotation slot for symbols. */
1183 |
1184 | void *aux_value;
1185 |
1186 | struct symbol *hash_next;
1187 | };
1188 |
1189 | gdb_static_assert ((sizeof (void *) == 8 && sizeof (symbol) == 72) ||
|| at the start of the next line.
Christian Biesinger has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306
......................................................................
Uploaded patch set 3: Patch Set 2 was rebased.
(1 comment)
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306/2/gdb/symtab.h
File gdb/symtab.h:
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306/2/gdb/symtab.h@1189
PS2, Line 1189:
1184 | void *aux_value;
1185 |
1186 | struct symbol *hash_next;
1187 | };
1188 |
1189 > gdb_static_assert ((sizeof (void *) == 8 && sizeof (symbol) == 72) ||
1190 | (sizeof (void *) == 4 && sizeof (symbol) == 40));
1191 |
1192 | /* Several lookup functions return both a symbol and the block in which the
1193 | symbol is found. This structure is used in these cases. */
1194 |
> || at the start of the next line.
Done
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/306
......................................................................
Patch Set 4: Code-Review+2
Thank you. This looks good to me.
@@ -81,6 +81,10 @@
ENUM_BITFIELD(address_class) aclass : SYMBOL_ACLASS_BITS;
};
+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. */
@@ -445,6 +445,10 @@
short section;
};
+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 *);
@@ -1182,6 +1186,9 @@
struct symbol *hash_next;
};
+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. */