Back to index

glibc  2.9
Functions
__longjmp.c File Reference
#include <errno.h>
#include <sysdep.h>
#include <setjmp.h>
#include <bits/setjmp.h>
#include <stdlib.h>
#include <unistd.h>

Go to the source code of this file.

Functions

void __longjmp (__jmp_buf env, int val)

Function Documentation

void __longjmp ( __jmp_buf  env,
int  val 
)

Definition at line 30 of file __longjmp.c.

{
  register long int r2 __asm ("%r2") = val == 0 ? 1 : val;
#ifdef PTR_DEMANGLE
  register uintptr_t r3 __asm ("%r3") = THREAD_GET_POINTER_GUARD ();
  register void *r1 __asm ("%r1") = (void *) env;
#endif
  /* Restore registers and jump back.  */
  asm volatile ("ld   %%f7,104(%1)\n\t"
              "ld   %%f5,96(%1)\n\t"
              "ld   %%f3,88(%1)\n\t"
              "ld   %%f1,80(%1)\n\t"
#ifdef PTR_DEMANGLE
              "lmg  %%r6,%%r13,0(%1)\n\t"
              "lmg  %%r4,%%r5,64(%1)\n\t"
              "xgr  %%r4,%2\n\t"
              "xgr  %%r5,%2\n\t"
              "lgr  %%r15,%%r5\n\t"
              "br   %%r4"
#else
              "lmg  %%r6,%%r15,0(%1)\n\t"
              "br   %%r14"
#endif
              : : "r" (r2),
#ifdef PTR_DEMANGLE
                  "r" (r1), "r" (r3)
#else
                  "a" (env)
#endif
              );

  /* Avoid `volatile function does return' warnings.  */
  for (;;);
}

Here is the caller graph for this function: