  PROCEDURE [INLINE] osp$establish_block_exit_hndlr
    (    condition_handler: pmt$condition_handler);

?? PUSH (LISTEXT := ON) ??

{ NOTE:
{   If this procedure or any of the types it uses changes, the procedure
{   pmp$intercept_call_procedure in pmm$intercept_procedures which establishes
{   its own block exit condition handler must also be changed.

    VAR
      stack_frame_word: pmt$os_stack_frame_word,
      os_stack_frame_word: ^pmt$os_stack_frame_word,
      osv$default_block_exit_desc: [XREF] pmt$established_handler,
      establish_descriptor: ^pmt$established_handler;

    PUSH establish_descriptor;

    os_stack_frame_word := #CURRENT_STACK_FRAME ();

    establish_descriptor^ := osv$default_block_exit_desc;
    establish_descriptor^.handler := condition_handler;
    stack_frame_word.established_handler := establish_descriptor;
    stack_frame_word.terminate_inhibit_frame := FALSE;
    stack_frame_word.ada_critical_frame := FALSE;
    stack_frame_word.block_exit_frame := TRUE;
    stack_frame_word.debug_cff_frame := FALSE;
    stack_frame_word.ada_critical_frame_count := 0;
    os_stack_frame_word^ := stack_frame_word;

    #WRITE_REGISTER (osc$pr_set_critical_frame, osc$pr_set_critical_frame);
    #WRITE_REGISTER (osc$pr_set_on_condition, osc$pr_set_on_condition);

  PROCEND osp$establish_block_exit_hndlr;

*copy osh$establish_block_exit_hndlr

*copyc pmt$condition
*copyc pmt$condition_handler
*copyc pmt$established_handler
*copyc pmt$os_stack_frame_word
*copyc osc$processor_defined_registers
*copyc ost$stack_frame_save_area
?? POP ??

