This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]