aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-10-21 09:54:36 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-10-21 10:14:08 -0700
commit95b097779a670dca5f06fbceede31de60046ed76 (patch)
tree3bed700a7fceab2490de024e944271c212348152
parent0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3 (diff)
downloadglibc-95b097779a670dca5f06fbceede31de60046ed76.tar
glibc-95b097779a670dca5f06fbceede31de60046ed76.tar.gz
glibc-95b097779a670dca5f06fbceede31de60046ed76.tar.bz2
glibc-95b097779a670dca5f06fbceede31de60046ed76.zip
Build i386 __libc_do_syscall when PROF is defined
Need to provide i386 __libc_do_syscall when PROF is defined. Define OPTIMIZE_FOR_GCC_5 for .S files so that it can be used in libc-do-syscall.S. * sysdeps/unix/sysv/linux/i386/libc-do-syscall.S: Replace __GNUC_PREREQ (5,0) with OPTIMIZE_FOR_GCC_5. * sysdeps/unix/sysv/linux/i386/sysdep.h (OPTIMIZE_FOR_GCC_5): Moved before "#ifdef __ASSEMBLER__".
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/unix/sysv/linux/i386/libc-do-syscall.S2
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h19
3 files changed, 17 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index bc95bda32e..1300047a76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-10-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/i386/libc-do-syscall.S: Replace
+ __GNUC_PREREQ (5,0) with OPTIMIZE_FOR_GCC_5.
+ * sysdeps/unix/sysv/linux/i386/sysdep.h (OPTIMIZE_FOR_GCC_5):
+ Moved before "#ifdef __ASSEMBLER__".
+
2015-10-21 Joseph Myers <joseph@codesourcery.com>
[BZ #19156]
diff --git a/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S b/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S
index cdef3d5de1..f748cf28f6 100644
--- a/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S
+++ b/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S
@@ -18,7 +18,7 @@
#include <sysdep.h>
-#if !__GNUC_PREREQ (5,0)
+#ifndef OPTIMIZE_FOR_GCC_5
/* %eax, %ecx, %edx and %esi contain the values expected by the kernel.
%edi points to a structure with the values of %ebx, %edi and %ebp. */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 58305447d4..dbe5654f58 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -41,6 +41,15 @@
# undef I386_USE_SYSENTER
#endif
+/* Since GCC 5 and above can properly spill %ebx with PIC when needed,
+ we can inline syscalls with 6 arguments if GCC 5 or above is used
+ to compile glibc. Disable GCC 5 optimization when compiling for
+ profiling since asm ("ebp") can't be used to put the 6th argument
+ in %ebp for syscall. */
+#if __GNUC_PREREQ (5,0) && !defined PROF
+# define OPTIMIZE_FOR_GCC_5
+#endif
+
#ifdef __ASSEMBLER__
/* Linux uses a negative return value to indicate syscall errors,
@@ -227,16 +236,6 @@
extern int __syscall_error (int)
attribute_hidden __attribute__ ((__regparm__ (1)));
-/* Since GCC 5 and above can properly spill %ebx with PIC when needed,
- we can inline syscalls with 6 arguments if GCC 5 or above is used
- to compile glibc. Disable GCC 5 optimization when compiling for
- profiling since asm ("ebp") can't be used to put the 6th argument
- in %ebp for syscall. */
-
-#if __GNUC_PREREQ (5,0) && !defined PROF
-# define OPTIMIZE_FOR_GCC_5
-#endif
-
#ifndef OPTIMIZE_FOR_GCC_5
/* We need some help from the assembler to generate optimal code. We
define some macros here which later will be used. */