about summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/ia64/pipe.S7
-rw-r--r--sysdeps/unix/sysv/linux/ia64/sysdep.h7
2 files changed, 10 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/pipe.S b/sysdeps/unix/sysv/linux/ia64/pipe.S
index d798fcda6b..60624df3cb 100644
--- a/sysdeps/unix/sysv/linux/ia64/pipe.S
+++ b/sysdeps/unix/sysv/linux/ia64/pipe.S
@@ -22,15 +22,14 @@
 #include <sysdep.h>
 
 ENTRY(__pipe)
-       st8 [sp]=r32		// save ptr across system call
+       .regstk 1,0,0,0
        DO_CALL (SYS_ify (pipe))
-       ld8 r2=[sp]
        cmp.ne p6,p0=-1,r10
        ;;
-(p6)   st4 [r2]=r8,4
+(p6)   st4 [in0]=r8,4
 (p6)   mov ret0=0
        ;;
-(p6)   st4 [r2]=r9
+(p6)   st4 [in0]=r9
 (p6)   ret
        br.cond.spnt.few __syscall_error
 PSEUDO_END(__pipe)
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h
index 1768bd0e3e..c298461cc2 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h
@@ -24,6 +24,13 @@
 #include <sysdeps/unix/sysdep.h>
 #include <sysdeps/ia64/sysdep.h>
 
+/* As of GAS v2.4.90.0.7, including a ".align" directive inside a
+   function will cause bad unwind info to be emitted (GAS doesn't know
+   how to account for the padding introduced by the .align directive).
+   Turning on this macro will work around this bug by introducing the
+   necessary padding explicitly. */
+#define GAS_ALIGN_BREAKS_UNWIND_INFO
+
 /* For Linux we can use the system call table in the header file
 	/usr/include/asm/unistd.h
    of the kernel.  But these symbols do not follow the SYS_* syntax