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: RFC for: "Re: Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.]"


> Just the MAINLINE exception is not enough, it still regresses GDB:

OK, I see what you mean, now.

> before your patches (and therefore matching GDB the inferior behavior):
> 11
> $1 = 1
> $2 = 1
> 22
> $1 = 2
> $2 = 2

On x86-windows, the two programs alway return the same value: 12,
which means that the global variables remain distinct, and localized
to each DLL.  It's not a surprise, it's the same test I've made before.
Just to be thorough, I defined a third instance of global variable v,
this time in 50.c (the main body), and change the return value to
also add the value of this global:

    $ cat 50.c
    int v = 100;

    extern int f (void);
    extern int g (void);

    int main (void) {
      return 10 * f () + g () + v;
    }

This time, the return value is always 112. Again, no surprise.

> But '"context" objfile first' is incompatible with SVR4.  The behavior
> apparently has to be target specific.

OK, I think we should be able to modify my patch to add a new
gdbarch attribute, unset by default, which we will set on all
Windows arches. Then, the iterator can query that gdbarch attribute
to decide whether to ignore the "context" objfile or not.

The following implementation for iterate_over_objfiles_in_search_order
should work; WDYT?

    void
    iterate_over_objfiles_in_search_order
      (iterate_over_objfiles_in_search_order_cb cb,
       void *cb_data,
       struct objfile *context_objfile)
    {
      int stop = 0;
      struct objfile *objfile;

      if (context_objfile
          && gdbarch_dso_global_vars_distinct_p
               (get_objfile_arch (context_objfile)))
        {
          /* Global variables defined with the same name in multiple
             object files get merged into one single entity.  Favouring
             the context objfile in this case would be wrong, as we might
             end up picking the wrong location.  */
          context_objfile = NULL;
        }

      if (context_objfile)
        {
          stop = cb (context_objfile, cb_data);
          if (stop)
            return;
        }

      ALL_OBJFILES (objfile)
        {
          if (objfile != context_objfile)
            {
              stop = cb (objfile, cb_data);
              if (stop)
                return;
            }
        }
    }

(untested)

The thing I am worried about is the design of the gdbarch part,
because I don't think I master all the elements across platforms.
But I suppose that this is only of relative importance, as we can
refine it as we go.

Thanks,
-- 
Joel


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