DONT_ACCESS_GBLS_AFTER_EPILOGUE

Jeffrey A Law law@cygnus.com
Sun Feb 13 11:32:00 GMT 2000


  In message < 200002120124.RAA32550@localhost.cygnus.com >you write:
  > 
  > Does anyone know what this macro does?
  > 
  > It's set on ppc to
  > 
  > /* See nonlocal_goto_receiver for when this must be set.  */
  > 
  > #define DONT_ACCESS_GBLS_AFTER_EPILOGUE (TARGET_TOC && TARGET_MINIMAL_TOC)
  > 
  > and since I'm just about to delete the nonlocal_goto_receiver pattern
  > (it turns out it should be builtin_setjmp_receiver instead),
  > I'm wondering whether the macro should be
  > 
  > (a) deleted;
  > (b) turned into the condition of nonlocal_goto_receiver, which will
  >     be something along the lines of 
  > 
  >    ((TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
  >       || ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) 
  > 	  && flag_pic == 1 && regs_ever_live[PIC_OFFSET_TABLE_REGNUM]))
  > 
  >     but with some terms missing;
  > 
  > (c) left alone;
  > (d) randomly mutated until someone complains :-).
  > 
  > I'm particularly confused because the epilogue is not exactly a fixed
  > target now that it is scheduled, and it is perfectly possible to end
  > up accessing globals in the middle of it without any special effort.
The macro should be deleted.

MRS didn't really understand the implications of trying to run the epilogue
multiple times to pop frames for exception handling.  That scheme was
fundamentally flawed and all remnants of it should disappear (though I must
admit, it's a pretty cool idea that was worth the time to try and make it
work).

If you wander the sources you'll find that DONT_ACCESS_GBLS_AFTER_EPILOGUE
is never actually used -- ie, a few ports define it, but no code uses its
value.

jeff



More information about the Gcc mailing list