Back to index

glibc  2.9
sigcontextinfo.h
Go to the documentation of this file.
00001 /* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #define SIGCONTEXT struct sigcontext
00021 #define SIGCONTEXT_EXTRA_ARGS
00022 #define GET_PC(ctx)  ((void *) ctx.eip)
00023 #define GET_FRAME(ctx)      ((void *) ctx.ebp)
00024 #define GET_STACK(ctx)      ((void *) ctx.esp_at_signal)
00025 #define CALL_SIGHANDLER(handler, signo, ctx) \
00026 do {                                                                 \
00027   int __tmp1, __tmp2, __tmp3, __tmp4;                                       \
00028   __asm __volatile ("movl\t%%esp, %%edi\n\t"                                \
00029                   "andl\t$-16, %%esp\n\t"                            \
00030                   "subl\t%8, %%esp\n\t"                              \
00031                   "movl\t%%edi, %c8-4(%%esp)\n\t"                           \
00032                   "movl\t%1, 0(%%esp)\n\t"                                  \
00033                   "leal\t4(%%esp), %%edi\n\t"                               \
00034                   "cld\n\t"                                          \
00035                   "rep\tmovsl\n\t"                                   \
00036                   "call\t*%0\n\t"                                    \
00037                   "cld\n\t"                                          \
00038                   "movl\t%9, %%ecx\n\t"                              \
00039                   "subl\t%%edi, %%esi\n\t"                                  \
00040                   "leal\t4(%%esp,%%esi,1), %%edi\n\t"                       \
00041                   "leal\t4(%%esp), %%esi\n\t"                               \
00042                   "rep\tmovsl\n\t"                                   \
00043                   "movl\t%c8-4(%%esp), %%esp\n\t"                           \
00044                   : "=a" (__tmp1), "=d" (__tmp2), "=S" (__tmp3),            \
00045                     "=c" (__tmp4)                                    \
00046                   : "0" (handler), "1" (signo), "2" (&ctx),                 \
00047                     "3" (sizeof (struct sigcontext) / 4),                   \
00048                     "n" ((sizeof (struct sigcontext) + 19) & ~15),          \
00049                     "i" (sizeof (struct sigcontext) / 4)                    \
00050                   : "cc", "edi");                                    \
00051 } while (0)