* Re: [rfc] Swap out current when creating a new architecture [not found] <3BB16441.30805@cygnus.com> @ 2001-09-26 22:56 ` Kevin Buettner 2001-09-26 23:06 ` Andrew Cagney 2001-09-30 12:25 ` Andrew Cagney 1 sibling, 1 reply; 7+ messages in thread From: Kevin Buettner @ 2001-09-26 22:56 UTC (permalink / raw) To: Andrew Cagney, gdb-patches On Sep 26, 1:14am, Andrew Cagney wrote: > The attached changes the run-time environment within which a new > architectures are created. Briefly the simplified sequence: > > - call XXX_gdbarch_init() > - swap out old architecture > - install new architecture > > is changed to: > > - swap out old architecture > - call XX_gdbarch_init() > - install new architecture > > This has the effect of making current_gdbarch invalid for the lifetime > of the XXX_gdbarch_init() call. > > The motivation behind this change is to stop XXXX_gdbarch_init() > functions refering (unintentionally I suspect) to the previous > architecture. I think it is proving effective since it has so far > flushed out two bugs. > > I can think of one additional tweek: add a ``gdb_assert (gdbarch != > NULL)'' to each architecture method. Without it a XXX_gdbarch_init() > function that tries to use current_gdbarch will dump core :-/ > > thoughts? I've read your patch and it looks okay to me. I'm wondering though if it might be possible to set current_gdbarch to the architecture currently getting defined. This way, it would be possible to do things like: gdbarch->target_long_bit = 8; gdbarch->target_long_long_bit = 2*TARGET_LONG_BIT; It seems to me that the trick is to figure out a clean way to set it. It occurred to me that it could be set in gdbarch_alloc(), but that doesn't really seem too clean... The only other thing I can think of is to have (the various) <arch>_gdbarch_init() make an explicit call which'd cause current_gdbarch to be set. After that, the <arch>_gdbarch_init() could refer to TARGET_LONG_BIT, etc. if they wanted to. Such a call would be optional; if this call isn't made, then it's not permissible to refer to the macros... My other thought on this matter is that all of what I just said is complete nonsense and that we're better off with current_gdbarch being NULL to avoid referring to a partially defined architecture... if that's the case, then adding a NULL check to each architecture method would indeed be a good thing. Kevin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture 2001-09-26 22:56 ` [rfc] Swap out current when creating a new architecture Kevin Buettner @ 2001-09-26 23:06 ` Andrew Cagney 0 siblings, 0 replies; 7+ messages in thread From: Andrew Cagney @ 2001-09-26 23:06 UTC (permalink / raw) To: Kevin Buettner; +Cc: gdb-patches > I'm wondering though if it might be possible to set current_gdbarch > to the architecture currently getting defined. This way, it would > be possible to do things like: > > gdbarch->target_long_bit = 8; > gdbarch->target_long_long_bit = 2*TARGET_LONG_BIT; > Another option other is to rename the local variable ``gdbarch'' to ``current_gdbarch''. Check my other patch to gdbarch_alloc() which was forced to do just that. Personally, though, I'd prefer to be doing none of the above. Instead just eliminate that global current_gdbarch and parameterize everthing .... :-) enjoy, Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture [not found] <3BB16441.30805@cygnus.com> 2001-09-26 22:56 ` [rfc] Swap out current when creating a new architecture Kevin Buettner @ 2001-09-30 12:25 ` Andrew Cagney 2001-10-01 4:34 ` Orjan Friberg 1 sibling, 1 reply; 7+ messages in thread From: Andrew Cagney @ 2001-09-30 12:25 UTC (permalink / raw) To: gdb-patches > The attached changes the run-time environment within which a new architectures are created. Briefly the simplified sequence: > > - call XXX_gdbarch_init() > - swap out old architecture > - install new architecture > > is changed to: > > - swap out old architecture > - call XX_gdbarch_init() > - install new architecture > > This has the effect of making current_gdbarch invalid for the lifetime of the XXX_gdbarch_init() call. > This patch is evi^D^D^D nasty. The CRIS target also dumps core with it applied. Like rs6000 was, it is refering to the previous (current_gdbarch) architecture. I'll sit on this for a bit longer. Could I encourage target maintainers to check their XXX_gdbarch_init() function for references to current_gdbarch. Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture 2001-09-30 12:25 ` Andrew Cagney @ 2001-10-01 4:34 ` Orjan Friberg 2001-10-14 17:07 ` Andrew Cagney 0 siblings, 1 reply; 7+ messages in thread From: Orjan Friberg @ 2001-10-01 4:34 UTC (permalink / raw) To: Andrew Cagney; +Cc: gdb-patches Andrew Cagney wrote: > > The CRIS target also dumps core with it applied. Like rs6000 was, it is > refering to the previous (current_gdbarch) architecture. > > I'll sit on this for a bit longer. Could I encourage target maintainers > to check their XXX_gdbarch_init() function for references to > current_gdbarch. Just a quick recap: what the old code was doing by referring to current_gdbarch was to avoid changing the ABI (which I infer from the bfd) if one of the other target specific commands were being used. The patch below sets the abfd field in the info struct to exec_bfd before calling gdbarch_update_p, so that information on the current bfd is passed along, just as it is when gdbarch_update_p is called from set_gdbarch_from_file. Is this an acceptable way of doing it? I know I'm in the risky business of dealing with global pointers. (I'm assuming a commit could go on both trunk and branch.) 2001-10-01 Orjan Friberg <orjanf@axis.com> * cris-tdep.c (cris_gdbarch_init): Remove reference to current_gdbarch. (cris_version_update, cris_mode_update, cris_abi_update): Set abfd in info struct to exec_bfd. Index: cris-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/cris-tdep.c,v retrieving revision 1.4 diff -c -3 -p -r1.4 cris-tdep.c *** cris-tdep.c 2001/09/24 08:04:10 1.4 --- cris-tdep.c 2001/10/01 10:58:11 *************** cris_version_update (char *ignore_args, *** 3596,3601 **** --- 3596,3605 ---- /* Update the current architecture, if needed. */ memset (&info, 0, sizeof info); + + /* Supply the current bfd (if any). */ + info.abfd = exec_bfd; + if (!gdbarch_update_p (info)) internal_error (__FILE__, __LINE__, "cris_gdbarch_update: failed to update architecture."); } *************** cris_mode_update (char *ignore_args, int *** 3614,3619 **** --- 3618,3627 ---- /* Update the current architecture, if needed. */ memset (&info, 0, sizeof info); + + /* Supply the current bfd (if any). */ + info.abfd = exec_bfd; + if (!gdbarch_update_p (info)) internal_error (__FILE__, __LINE__, "cris_gdbarch_update: failed to update architecture."); } *************** cris_abi_update (char *ignore_args, int *** 3632,3637 **** --- 3640,3649 ---- /* Update the current architecture, if needed. */ memset (&info, 0, sizeof info); + + /* Supply the current bfd (if any). */ + info.abfd = exec_bfd; + if (!gdbarch_update_p (info)) internal_error (__FILE__, __LINE__, "cris_gdbarch_update: failed to update architecture."); } *************** cris_gdbarch_init (struct gdbarch_info i *** 3736,3748 **** /* Unknown bfd flavour. Assume it's the new ABI. */ cris_abi = CRIS_ABI_V2; } - } - else if (gdbarch_tdep (current_gdbarch)) - { - /* No bfd available. Stick with whatever ABI we're currently using. - (This is to avoid changing the ABI when the user updates the - architecture with the 'set cris-version' command.) */ - cris_abi = gdbarch_tdep (current_gdbarch)->cris_abi; } else { --- 3748,3753 ---- -- Orjan Friberg E-mail: orjan.friberg@axis.com Axis Communications AB Phone: +46 46 272 17 68 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture 2001-10-01 4:34 ` Orjan Friberg @ 2001-10-14 17:07 ` Andrew Cagney 2001-10-15 18:41 ` Andrew Cagney 0 siblings, 1 reply; 7+ messages in thread From: Andrew Cagney @ 2001-10-14 17:07 UTC (permalink / raw) To: Orjan Friberg; +Cc: gdb-patches > > Just a quick recap: what the old code was doing by referring to > current_gdbarch was to avoid changing the ABI (which I infer from the > bfd) if one of the other target specific commands were being used. The > patch below sets the abfd field in the info struct to exec_bfd before > calling gdbarch_update_p, so that information on the current bfd is > passed along, just as it is when gdbarch_update_p is called from > set_gdbarch_from_file. > > Is this an acceptable way of doing it? I know I'm in the risky business > of dealing with global pointers. (I'm assuming a commit could go on > both trunk and branch.) Nice bug! I need to think about this some more though. As for the branch, no need as I'm not committing my change to that. Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture 2001-10-14 17:07 ` Andrew Cagney @ 2001-10-15 18:41 ` Andrew Cagney 2001-10-16 1:59 ` Orjan Friberg 0 siblings, 1 reply; 7+ messages in thread From: Andrew Cagney @ 2001-10-15 18:41 UTC (permalink / raw) To: Orjan Friberg; +Cc: gdb-patches > Just a quick recap: what the old code was doing by referring to > current_gdbarch was to avoid changing the ABI (which I infer from the > bfd) if one of the other target specific commands were being used. The > patch below sets the abfd field in the info struct to exec_bfd before > calling gdbarch_update_p, so that information on the current bfd is > passed along, just as it is when gdbarch_update_p is called from > set_gdbarch_from_file. > > Is this an acceptable way of doing it? I know I'm in the risky business > of dealing with global pointers. (I'm assuming a commit could go on > both trunk and branch.) > > Nice bug! I need to think about this some more though. Really nice bug! The proposed change unfortunatly isn't right for reasons similar to the original current_gdbarch problem. The exec file might belong to a completely different architecture. Consider a sequence like: (gdb) file hello.d10v (gdb) info architecture The current architecture is d10v (gdb) set cris-mode CRIS_MODE_USER For MIPS, the problem has so far been avoided by coding functions as: if (set by user) return user value; else return value from architecture; I should note though, that even this will eventually have problems - it affects all MIPS architectures - but at least it gets over the immediate hurdle. enjoy, Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [rfc] Swap out current when creating a new architecture 2001-10-15 18:41 ` Andrew Cagney @ 2001-10-16 1:59 ` Orjan Friberg 0 siblings, 0 replies; 7+ messages in thread From: Orjan Friberg @ 2001-10-16 1:59 UTC (permalink / raw) To: Andrew Cagney; +Cc: gdb-patches Andrew Cagney wrote: > > Really nice bug! > > The proposed change unfortunatly isn't right for reasons similar to the > original current_gdbarch problem. The exec file might belong to a > completely different architecture. Consider a sequence like: > > (gdb) file hello.d10v > (gdb) info architecture > The current architecture is d10v > (gdb) set cris-mode CRIS_MODE_USER Hm, I had a feeling I was just moving the problem elsewhere, though I didn't think of the case of having gdb configured for two architectures. But with multi-arch I guess this is not just a remote possibility. > For MIPS, the problem has so far been avoided by coding functions as: > > if (set by user) > return user value; > else > return value from architecture; > From looking at the MIPS target just now I thought it would suffer from the same problem when it comes to guessing the ABI (since info.abfd is used if present). But then I saw that the functions tied to the MIPS specific user-commands don't call gdbarch_update, they change current_gdbarch directly. I'm going to try something similar. Thanks, Orjan -- Orjan Friberg E-mail: orjan.friberg@axis.com Axis Communications AB Phone: +46 46 272 17 68 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2001-10-16 1:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <3BB16441.30805@cygnus.com>
2001-09-26 22:56 ` [rfc] Swap out current when creating a new architecture Kevin Buettner
2001-09-26 23:06 ` Andrew Cagney
2001-09-30 12:25 ` Andrew Cagney
2001-10-01 4:34 ` Orjan Friberg
2001-10-14 17:07 ` Andrew Cagney
2001-10-15 18:41 ` Andrew Cagney
2001-10-16 1:59 ` Orjan Friberg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox