]> sourceware.org Git - glibc.git/commitdiff
Add missing unwind info. Add comments.
authorUlrich Drepper <drepper@redhat.com>
Mon, 14 Apr 2003 02:52:46 +0000 (02:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 14 Apr 2003 02:52:46 +0000 (02:52 +0000)
nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

index 09a294b458ccc45e3769ccaf4c3d51387e3ce8f3..2f80654b5ba9cccaeb26b825916aff1d9767ad8e 100644 (file)
@@ -42,9 +42,7 @@
     PUSHCARGS_##args                                                         \
     DOCARGS_##args                                                           \
     movl $SYS_ify (syscall_name), %eax;                                              \
-    /* Until we can handle unwinding from the sysenter page the kernel       \
-       provides we cannot use ENTER_KERNEL here.  */                         \
-    int $0x80;                                                               \
+    ENTER_KERNEL;                                                            \
     POPCARGS_##args;                                                         \
     POPSTATE_##args                                                          \
     cmpl $-4095, %eax;                                                       \
     /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4.  */                       \
     .byte 0x1b;                                                                      \
     /* Start of the table initialization.  */                                \
-    .byte 0xc;                                                               \
+    .byte 0xc;                 /* DW_CFA_def_cfa */                          \
     .uleb128 4;                                                                      \
     .uleb128 4;                                                                      \
-    .byte 0x88;                                                                      \
+    .byte 0x88;                        /* DW_CFA_offset, column 0x8 */               \
     .uleb128 1;                                                                      \
     .align 4;                                                                \
   L(ENDCIE):                                                                 \
    simple.  The only place the stack pointer is changed is when the old
    cancellation state value is saved.  */
 # define EH_FRAME_0(name) \
-    .byte 4;                                                                 \
-    .long L(PUSHSTATE)-L(name##START);                                       \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHSTATE)-L(name##START);    /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPSTATE)-L(PUSHSTATE);                                          \
-    .byte 14;                                                                \
+    .byte 0x40+L(POPSTATE)-L(PUSHSTATE);       /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4
 
 /* For syscalls with one and two parameters the code is the same as for
    those which take no parameter.  */
-# define EH_FRAME_1(name) EH_FRAME_0 (name)
+# define EH_FRAME_1(name) \
+    .byte 0x40+L(SAVEBX1)-L(name##START);      /* DW_CFA_advance_loc+N */    \
+    .byte 9;                                   /* DW_CFA_register */         \
+    .uleb128 3;                                        /* %ebx */                    \
+    .uleb128 2;                                        /* %edx */                    \
+    .byte 0x40+L(RESTBX1)-L(SAVEBX1);          /* DW_CFA_advance_loc+N */    \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(PUSHSTATE)-L(RESTBX1);                /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
+    .uleb128 8;                                                                      \
+    .byte 0x40+L(SAVEBX2)-L(PUSHSTATE);                /* DW_CFA_advance_loc+N */    \
+    .byte 9;                                   /* DW_CFA_register */         \
+    .uleb128 3;                                        /* %ebx */                    \
+    .uleb128 2;                                        /* %edx */                    \
+    .byte 0x40+L(RESTBX2)-L(SAVEBX2);          /* DW_CFA_advance_loc+N */    \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSTATE)-L(RESTBX2);         /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
+    .uleb128 4
+
 # define EH_FRAME_2(name) EH_FRAME_1 (name)
 
 /* For syscalls with three parameters the stack pointer is changed
    also to save the content of the %ebx register.  */
 # define EH_FRAME_3(name) \
-    .byte 4;                                                                 \
-    .long L(PUSHBX1)-L(name##START);                                         \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHBX1)-L(name##START);      /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPBX1)-L(PUSHBX1);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 2;                                                                      \
+    .byte 0x40+L(POPBX1)-L(PUSHBX1);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHSTATE)-L(POPBX1);                                            \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(PUSHSTATE)-L(POPBX1);         /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHBX2)-L(PUSHSTATE);                                           \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHBX2)-L(PUSHSTATE);                /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPBX2)-L(PUSHBX2);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 3;                                                                      \
+    .byte 0x40+L(POPBX2)-L(PUSHBX2);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPSTATE)-L(POPBX2);                                             \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSTATE)-L(POPBX2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4
 
 /* With four parameters the syscall wrappers have to save %ebx and %esi.  */
 # define EH_FRAME_4(name) \
-    .byte 4;                                                                 \
-    .long L(PUSHSI1)-L(name##START);                                         \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHSI1)-L(name##START);      /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHBX1)-L(PUSHSI1);                                             \
-    .byte 14;                                                                \
+    .byte 0x86;                                        /* DW_CFA_offset %esi */      \
+    .uleb128 2;                                                                      \
+    .byte 0x40+L(PUSHBX1)-L(PUSHSI1);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPBX1)-L(PUSHBX1);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 3;                                                                      \
+    .byte 0x40+L(POPBX1)-L(PUSHBX1);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPSI1)-L(POPBX1);                                               \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSI1)-L(POPBX1);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHSTATE)-L(POPSI1);                                            \
-    .byte 14;                                                                \
+    .byte 0xc6;                                        /* DW_CFA_restore %esi */     \
+    .byte 0x40+L(PUSHSTATE)-L(POPSI1);         /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHSI2)-L(PUSHSTATE);                                           \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHSI2)-L(PUSHSTATE);                /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(PUSHBX2)-L(PUSHSI2);                                             \
-    .byte 14;                                                                \
+    .byte 0x86;                                        /* DW_CFA_offset %esi */      \
+    .uleb128 3;                                                                      \
+    .byte 0x40+L(PUSHBX2)-L(PUSHSI2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 16;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPBX2)-L(PUSHBX2);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 4;                                                                      \
+    .byte 0x40+L(POPBX2)-L(PUSHBX2);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPSI2)-L(POPBX2);                                               \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSI2)-L(POPBX2);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPSTATE)-L(POPSI2);                                             \
-    .byte 14;                                                                \
+    .byte 0xc6;                                        /* DW_CFA_restore %esi */     \
+    .byte 0x40+L(POPSTATE)-L(POPSI2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4
 
 /* With five parameters the syscall wrappers have to save %ebx, %esi,
    and %edi.  */
 # define EH_FRAME_5(name) \
-    .byte 4;                                                                 \
-    .long L(PUSHDI1)-L(name##START);                                         \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHDI1)-L(name##START);      /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHSI1)-L(PUSHDI1);                                             \
-    .byte 14;                                                                \
+    .byte 0x87;                                        /* DW_CFA_offset %edi */      \
+    .uleb128 2;                                                                      \
+    .byte 0x40+L(PUSHSI1)-L(PUSHDI1);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(PUSHBX1)-L(PUSHSI1);                                             \
-    .byte 14;                                                                \
+    .byte 0x86;                                        /* DW_CFA_offset %esi */      \
+    .uleb128 3;                                                                      \
+    .byte 0x40+L(PUSHBX1)-L(PUSHSI1);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 16;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPBX1)-L(PUSHBX1);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 4;                                                                      \
+    .byte 0x40+L(POPBX1)-L(PUSHBX1);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPSI1)-L(POPBX1);                                               \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSI1)-L(POPBX1);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPDI1)-L(POPSI1);                                               \
-    .byte 14;                                                                \
+    .byte 0xc6;                                        /* DW_CFA_restore %esi */     \
+    .byte 0x40+L(POPDI1)-L(POPSI1);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHSTATE)-L(POPDI1);                                            \
-    .byte 14;                                                                \
+    .byte 0xc7;                                        /* DW_CFA_restore %edi */     \
+    .byte 0x40+L(PUSHSTATE)-L(POPDI1);         /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(PUSHDI2)-L(PUSHSTATE);                                           \
-    .byte 14;                                                                \
+    .byte 0x40+L(PUSHDI2)-L(PUSHSTATE);                /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(PUSHSI2)-L(PUSHDI2);                                             \
-    .byte 14;                                                                \
+    .byte 0x87;                                        /* DW_CFA_offset %edi */      \
+    .uleb128 3;                                                                      \
+    .byte 0x40+L(PUSHSI2)-L(PUSHDI2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 16;                                                             \
-    .byte 4;                                                                 \
-    .long L(PUSHBX2)-L(PUSHSI2);                                             \
-    .byte 14;                                                                \
+    .byte 0x86;                                        /* DW_CFA_offset %esi */      \
+    .uleb128 4;                                                                      \
+    .byte 0x40+L(PUSHBX2)-L(PUSHSI2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 20;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPBX2)-L(PUSHBX2);                                                      \
-    .byte 14;                                                                \
+    .byte 0x83;                                        /* DW_CFA_offset %ebx */      \
+    .uleb128 5;                                                                      \
+    .byte 0x40+L(POPBX2)-L(PUSHBX2);           /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 16;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPSI2)-L(POPBX2);                                               \
-    .byte 14;                                                                \
+    .byte 0xc3;                                        /* DW_CFA_restore %ebx */     \
+    .byte 0x40+L(POPSI2)-L(POPBX2);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 12;                                                             \
-    .byte 4;                                                                 \
-    .long L(POPDI2)-L(POPSI2);                                               \
-    .byte 14;                                                                \
+    .byte 0xc6;                                        /* DW_CFA_restore %esi */     \
+    .byte 0x40+L(POPDI2)-L(POPSI2);            /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 8;                                                                      \
-    .byte 4;                                                                 \
-    .long L(POPSTATE)-L(POPDI2);                                             \
-    .byte 14;                                                                \
+    .byte 0xc7;                                        /* DW_CFA_restore %edi */     \
+    .byte 0x40+L(POPSTATE)-L(POPDI2);          /* DW_CFA_advance_loc+N */    \
+    .byte 14;                                  /* DW_CFA_def_cfa_offset */   \
     .uleb128 4
 
 
 # define _PUSHCARGS_0  /* No arguments to push.  */
 # define _POPCARGS_0   /* No arguments to pop.  */
 
-# define PUSHCARGS_1   movl %ebx, %edx; PUSHCARGS_0
+# define PUSHCARGS_1   movl %ebx, %edx; L(SAVEBX2): PUSHCARGS_0
 # define DOCARGS_1     _DOARGS_1 (4)
-# define POPCARGS_1    POPCARGS_0; movl %edx, %ebx
+# define POPCARGS_1    POPCARGS_0; movl %edx, %ebx; L(RESTBX2):
 # define _PUSHCARGS_1  pushl %ebx; L(PUSHBX2): _PUSHCARGS_0
 # define _POPCARGS_1   _POPCARGS_0; popl %ebx; L(POPBX2):
 
This page took 0.062341 seconds and 5 git commands to generate.