This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] gdb: Remove LANG_MAGIC
* Pedro Alves <palves@redhat.com> [2019-04-12 10:50:00 +0100]:
> On 4/12/19 12:23 AM, Andrew Burgess wrote:
> > The language_defn structure has an la_magic field, this used to be
> > used as a basic check that the language_defn structure had the
> > expected layout - at least the end of the structure was where we
> > expected it to be.
> >
> > This feature only really makes sense if we imagine GDB dynamically
> > loading language support from dynamic libraries, where a version
> > mismatch might cause problems.
>
> We used to have more magic fields like these in other structures,
> like target_ops, for example. IIRC, their intended purpose was to
> catch miscompilation, before we had Makefile auto-dependencies. Before
> that, it was common to change the structure's definition, rebuild, and
> then find out that gdb hit a "failed internal consistency check" assertion,
> because some of the .o files hadn't been rebuilt to reflect the new layout.
>
> For example, the target_ops magic said:
>
> /* Magic number for checking ops size. If a struct doesn't end with this
> number, somebody changed the declaration but didn't change all the
> places that initialize one. */
>
> #define OPS_MAGIC 3840
>
> With auto-dependencies, the problem this "solved" is largely a
> thing of the past.
Thanks for the explanation, that makes sense.
I assume you're happy that these days we should "assume a working
build system", and that if any errors like the above cropped up we
should fix those in the build dependencies, not by adding magic fields
to gdb.
Thanks,
Andrew