about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-04-14 07:03:40 +0000
committerUlrich Drepper <drepper@redhat.com>2003-04-14 07:03:40 +0000
commit39a46c42f5d31566573fceb6691a547c3b3b1e74 (patch)
tree5361a517321769896142944b1ccd2e231cd1c5ed /nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
parent4ae7142df21b7f614f7b55e8c272ee19cc8ec2d4 (diff)
downloadglibc-39a46c42f5d31566573fceb6691a547c3b3b1e74.tar.gz
glibc-39a46c42f5d31566573fceb6691a547c3b3b1e74.tar.xz
glibc-39a46c42f5d31566573fceb6691a547c3b3b1e74.zip
Update.
2003-04-14  Ulrich Drepper  <drepper@redhat.com>

	* string/strxfrm.c (STRXFRM): Terminate rulearr at correct
	position.  Reported by jreiser@BitWagon.com.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h44
1 files changed, 33 insertions, 11 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index 2f80654b5b..22fdc9421b 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -59,19 +59,16 @@
     .long 0;								      \
     /* Version number.  */						      \
     .byte 1;								      \
-    /* NUL-terminated augmentation string.  Note "z" means there is an	      \
-       augmentation value later on.  */					      \
-    .string "zR";							      \
+    /* NUL-terminated augmentation string.  */				      \
+    AUGMENTATION_STRING;						      \
     /* Code alignment factor.  */					      \
     .uleb128 1;								      \
     /* Data alignment factor.  */					      \
     .sleb128 -4;							      \
     /* Return address register column.  */				      \
     .byte 8;								      \
-    /* Augmentation value length.  */					      \
-    .uleb128 1;								      \
-    /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4.  */			      \
-    .byte 0x1b;								      \
+    /* Optional augmentation parameter.  */				      \
+    AUGMENTATION_PARAM							      \
     /* Start of the table initialization.  */				      \
     .byte 0xc;			/* DW_CFA_def_cfa */			      \
     .uleb128 4;								      \
@@ -85,12 +82,12 @@
   L(STARTFDE):								      \
     /* CIE pointer.  */							      \
     .long L(STARTFDE)-L(STARTFRAME);					      \
-    /* PC-relative start address of the code.  */			      \
-    .long L(name##START)-.;						      \
+    /* Start address of the code.  */					      \
+    START_SYMBOL_REF (name);						      \
     /* Length of the code.  */						      \
     .long L(name##END)-L(name##START);					      \
-    /* No augmentation data.  */					      \
-    .uleb128 0;								      \
+    /* Augmentation data.  */						      \
+    AUGMENTATION_PARAM_FDE						      \
     /* The rest of the code depends on the number of parameters the syscall   \
        takes.  */							      \
     EH_FRAME_##args(name);						      \
@@ -98,6 +95,31 @@
   L(ENDFDE):								      \
   .previous
 
+#ifdef SHARED
+/* NUL-terminated augmentation string.  Note "z" means there is an
+   augmentation value later on.  */
+# define AUGMENTATION_STRING .string "zR"
+# define AUGMENTATION_PARAM \
+    /* Augmentation value length.  */					      \
+    .uleb128 1;								      \
+    /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4.  */			      \
+    .byte 0x1b;
+# define AUGMENTATION_PARAM_FDE \
+    /* No augmentation data.  */					      \
+    .uleb128 0;
+# define START_SYMBOL_REF(name) \
+    /* PC-relative start address of the code.  */			      \
+    .long L(name##START)-.
+#else
+/* No augmentation.  */
+# define AUGMENTATION_STRING .ascii "\0"
+# define AUGMENTATION_PARAM /* nothing */
+# define AUGMENTATION_PARAM_FDE /* nothing */
+# define START_SYMBOL_REF(name) \
+    /* Absolute start address of the code.  */				      \
+    .long L(name##START)
+#endif
+
 /* Callframe description for syscalls without parameters.  This is very
    simple.  The only place the stack pointer is changed is when the old
    cancellation state value is saved.  */