This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.15-910-g85736dc
- From: hjl at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 15 May 2012 23:43:30 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.15-910-g85736dc
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 85736dc78ba0a44d524961eef464e3690c67678a (commit)
from 048073995fc2cdc629e11516f883e0247a23a336 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=85736dc78ba0a44d524961eef464e3690c67678a
commit 85736dc78ba0a44d524961eef464e3690c67678a
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Tue May 15 16:43:11 2012 -0700
Use R*_LP, sizeSS, oSS_FLAGS, oSS_SP and oSS_SIZE
diff --git a/ChangeLog b/ChangeLog
index 167f869..6494693 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2012-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/Makefile (gen-as-const-headers):
+ Add sigaltstack-offsets.sym.
+ * sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S: Include
+ <sigaltstack-offsets.h>.
+ (CALL_FAIL): Use RSP_LP to operate on stack. Use RDI_LP on
+ longjmp_msg pointer.
+ (____longjmp_chk): Use R8_LP and RDX_LP on SP and PC. Use
+ R*_LP, sizeSS, oSS_FLAGS, oSS_SP and oSS_SIZE for alternate
+ signal stack.
+ * sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym: New.
+
2012-05-15 Joseph Myers <joseph@codesourcery.com>
* elf/stackguard-macros.h: Remove file.
diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile
index 9c9e615..59a6b0a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/Makefile
+++ b/sysdeps/unix/sysv/linux/x86_64/Makefile
@@ -17,6 +17,10 @@ ifeq ($(subdir),csu)
gen-as-const-headers += ucontext_i.sym
endif
+ifeq ($(subdir),misc)
+gen-as-const-headers += sigaltstack-offsets.sym
+endif
+
ifeq ($(subdir),elf)
sysdep_routines += dl-vdso
endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S
index 1de7e09..a0d1732 100644
--- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S
+++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S
@@ -19,6 +19,8 @@
#include <jmpbuf-offsets.h>
#include <asm-syntax.h>
+#include <sigaltstack-offsets.h>
+
.section .rodata.str1.1,"aMS",@progbits,1
.type longjmp_msg,@object
longjmp_msg:
@@ -29,18 +31,18 @@ longjmp_msg:
//#define __longjmp ____longjmp_chk
#ifdef PIC
-# define CALL_FAIL subq $8, %rsp; \
+# define CALL_FAIL sub $8, %RSP_LP; \
cfi_remember_state; \
cfi_def_cfa_offset(16); \
- leaq longjmp_msg(%rip), %rdi; \
+ lea longjmp_msg(%rip), %RDI_LP; \
call HIDDEN_JUMPTARGET(__fortify_fail); \
nop; \
cfi_restore_state
#else
-# define CALL_FAIL subq $8, %rsp; \
+# define CALL_FAIL sub $8, %RSP_LP; \
cfi_remember_state; \
cfi_def_cfa_offset(16); \
- movq $longjmp_msg, %rdi; \
+ mov $longjmp_msg, %RDI_LP; \
call HIDDEN_JUMPTARGET(__fortify_fail); \
nop; \
cfi_restore_state
@@ -52,16 +54,16 @@ longjmp_msg:
.text
ENTRY(____longjmp_chk)
/* Restore registers. */
- movq (JB_RSP*8)(%rdi), %r8
+ mov (JB_RSP*8)(%rdi), %R8_LP
movq (JB_RBP*8)(%rdi), %r9
- movq (JB_PC*8)(%rdi), %rdx
+ mov (JB_PC*8)(%rdi), %RDX_LP
#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (%r8)
+ PTR_DEMANGLE (%R8_LP)
PTR_DEMANGLE (%r9)
- PTR_DEMANGLE (%rdx)
+ PTR_DEMANGLE (%RDX_LP)
#endif
- cmpq %r8, %rsp
+ cmp %R8_LP, %RSP_LP
jbe .Lok
/* Save function parameters. */
@@ -71,19 +73,19 @@ ENTRY(____longjmp_chk)
cfi_register (%rsi, %rbx)
xorl %edi, %edi
- leaq -24(%rsp), %rsi
+ lea -sizeSS(%rsp), %RSI_LP
movl $__NR_sigaltstack, %eax
syscall
/* Without working sigaltstack we cannot perform the test. */
testl %eax, %eax
jne .Lok2
- testl $1, -16(%rsp)
+ testl $1, (-sizeSS + oSS_FLAGS)(%rsp)
jz .Lfail
- movq -24(%rsp), %rax
- addq -8(%rsp), %rax
- subq %r8, %rax
- cmpq -8(%rsp), %rax
+ mov (-sizeSS + oSS_SP)(%rsp), %RAX_LP
+ add (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP
+ sub %R8_LP, %RAX_LP
+ cmp (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP
jae .Lok2
.Lfail: CALL_FAIL
@@ -110,7 +112,7 @@ ENTRY(____longjmp_chk)
movq (JB_R15*8)(%rdi), %r15
/* Set return value for setjmp. */
movl %esi, %eax
- movq %r8,%rsp
+ mov %R8_LP, %RSP_LP
movq %r9,%rbp
jmpq *%rdx
END (____longjmp_chk)
diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym b/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym
new file mode 100644
index 0000000..5ff3af4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym
@@ -0,0 +1,15 @@
+#ifndef _XOPEN_EXTENDED
+# define _XOPEN_EXTENDED
+#endif
+
+#include <stddef.h>
+#include <signal.h>
+
+--
+
+#define sigaltstack(member) offsetof (stack_t, member)
+
+sizeSS sizeof (stack_t)
+oSS_SP sigaltstack (ss_sp)
+oSS_SIZE sigaltstack (ss_size)
+oSS_FLAGS sigaltstack (ss_flags)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 13 +++++++
sysdeps/unix/sysv/linux/x86_64/Makefile | 4 ++
sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S | 34 ++++++++++---------
.../unix/sysv/linux/x86_64/sigaltstack-offsets.sym | 15 +++++++++
4 files changed, 50 insertions(+), 16 deletions(-)
create mode 100644 sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym
hooks/post-receive
--
GNU C Library master sources