This is the mail archive of the mailing list for the GCC project.

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

Re: Patch to fix incorrect hard register life information

  In message <>you write:
  > The second patch tries to solve the problem more properly, by building a
  > correct flow graph for __throw.  However, this patch isn't entirely correct
  > either.  It hard codes information about libgcc2.c into flow.c, and can be
  > crashed by feeding it a program that uses __builtin_eh_stub in different
  > ways.
  > 	* except.h (current_function_eh_stub_label): Declare.
  > 	(current_function_eh_old_stub_label): Declare.
  > 	* function.h (struct function): New members eh_stub_label and
  > 	eh_old_stub_label.
  > 	* except.c (current_function_eh_stub_label): New variable.
  > 	(current_function_eh_old_stub_label): New variable.
  > 	(init_eh_for_function): Clear them.
  > 	(save_eh_status): Save them.
  > 	(restore_eh_status): Restore them.
  > 	(expand_builtin_eh_stub): Set current_function_eh_stub_label.
  > 	(expand_builtin_eh_stub_old): Set current_function_eh_old_stub_label.
  > 	* flow.c (find_basic_blocks_1): When handling a REG_LABEL note, don't
  > 	make an edge from the block that contains it to the block starting
  > 	with the label if this label is one of the eh stub labels.
  > 	If eh stub labels exist, show they are reachable from the last block
  > 	in the function.
Thanks.  I installed this patch.

Richard -- this may create some minor conflicts with your EH changes,
but I believe the patch is still needed since we still need the eh
stubs for targets which do not provide special epilogue support. 


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