This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Remove bounded-pointers handling from x86_64 assembly sources


Continuing the removal of the bitrotten bounded-pointers code, this
patch removes uses of bounded-pointers headers and macros from x86_64
assembly sources.  (Note that the macros in bp-asm.h weren't actually
used in any x86_64 sources, although some i386 and powerpc sources do
use such macros; only BP_SYM was actually being used for x86_64.)

Tested x86_64.

2013-02-16  Joseph Myers  <joseph@codesourcery.com>

	[BZ #13550]
	* sysdeps/x86_64/bp-asm.h: Remove file.
	* sysdeps/unix/sysv/linux/x86_64/clone.S: Do not include
	<bp-sym.h> and <bp-asm.h>.
	(__clone): Do not use BP_SYM.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Do not include
	<bp-sym.h> and <bp-asm.h>.
	* sysdeps/unix/x86_64/sysdep.S: Likewise.
	* sysdeps/x86_64/bsd-_setjmp.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(_setjmp): Do not use BP_SYM.
	* sysdeps/x86_64/bsd-setjmp.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(setjmp): Do not use BP_SYM.
	* sysdeps/x86_64/mempcpy.S (__mempcpy): Do not use BP_SYM in
	libc_hidden_def.
	(mempcpy): Do not use BP_SYM in weak_alias.
	* sysdeps/x86_64/rtld-strchr.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(strchr): Do not use BP_SYM.
	* sysdeps/x86_64/rtld-strlen.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	* sysdeps/x86_64/setjmp.S (__sigsetjmp): Do not use BP_SYM.
	* sysdeps/x86_64/start.S: Do not include "bp-sym.h".
	(_start): Do not use BP_SYM.
	* sysdeps/x86_64/strcat.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(strcat): Do not use BP_SYM.
	* sysdeps/x86_64/strcmp.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(STRCMP): Do not use BP_SYM.
	* sysdeps/x86_64/strcpy.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(STRCPY): Do not use BP_SYM.
	* sysdeps/x86_64/strcpy_chk.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	* sysdeps/x86_64/strtok.S: Do not include "bp-sym.h" and
	"bp-asm.h".
	(FUNCTION): Do not use BP_SYM.
	* sysdeps/x86_64/strtok_r.S (strtok_r): Do not use BP_SYM in
	weak_alias.
	(__GI___strtok_r): Do not use BP_SYM in strong_alias.

diff --git a/sysdeps/unix/sysv/linux/x86_64/clone.S b/sysdeps/unix/sysv/linux/x86_64/clone.S
index c131a40..144eaf7 100644
--- a/sysdeps/unix/sysv/linux/x86_64/clone.S
+++ b/sysdeps/unix/sysv/linux/x86_64/clone.S
@@ -22,8 +22,6 @@
 #define _ERRNO_H	1
 #include <bits/errno.h>
 #include <asm-syntax.h>
-#include <bp-sym.h>
-#include <bp-asm.h>
 
 #define CLONE_VM	0x00000100
 #define CLONE_THREAD	0x00010000
@@ -52,7 +50,7 @@
 
 
         .text
-ENTRY (BP_SYM (__clone))
+ENTRY (__clone)
 	/* Sanity check arguments.  */
 	movq	$-EINVAL,%rax
 	testq	%rdi,%rdi		/* no NULL function pointers */
@@ -117,6 +115,6 @@ L(thread_start):
 	cfi_endproc;
 
 	cfi_startproc;
-PSEUDO_END (BP_SYM (__clone))
+PSEUDO_END (__clone)
 
-weak_alias (BP_SYM (__clone), BP_SYM (clone))
+weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index 763a748..d68112a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -20,8 +20,6 @@
 
 /* There is some commonality.  */
 #include <sysdeps/unix/x86_64/sysdep.h>
-#include <bp-sym.h>
-#include <bp-asm.h>
 #include <tls.h>
 
 #ifdef IS_IN_rtld
diff --git a/sysdeps/unix/x86_64/sysdep.S b/sysdeps/unix/x86_64/sysdep.S
index 7f2daa6..4ac535e 100644
--- a/sysdeps/unix/x86_64/sysdep.S
+++ b/sysdeps/unix/x86_64/sysdep.S
@@ -18,8 +18,6 @@
 #include <sysdep.h>
 #define _ERRNO_H
 #include <bits/errno.h>
-#include <bp-asm.h>
-#include <bp-sym.h>
 #include <tls.h>
 
 #ifdef IS_IN_rtld
diff --git a/sysdeps/x86_64/bp-asm.h b/sysdeps/x86_64/bp-asm.h
deleted file mode 100644
index 10916fd..0000000
--- a/sysdeps/x86_64/bp-asm.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Bounded-pointer definitions for x86-64 assembler.
-   Copyright (C) 2001-2013 Free Software Foundation, Inc.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _bp_asm_h_
-# define _bp_asm_h_ 1
-
-# if __ASSEMBLER__
-
-#  if __BOUNDED_POINTERS__
-
-/* Bounded pointers occupy three words.  */
-#   define PTR_SIZE 24
-/* Bounded pointer return values are passed back through a hidden
-   argument that points to caller-allocate space.  The hidden arg
-   occupies one word on the stack.  */
-#   define RTN_SIZE 6
-/* Although the caller pushes the hidden arg, the callee is
-   responsible for popping it.  */
-#   define RET_PTR ret $RTN_SIZE
-/* Maintain frame pointer chain in leaf assembler functions for the benefit
-   of debugging stack traces when bounds violations occur.  */
-#   define ENTER pushq %rbp; movq %rsp, %rbp
-#   define LEAVE movq %rbp, %rsp; popq %rbp
-/* Stack space overhead of procedure-call linkage: return address and
-   frame pointer.  */
-#   define LINKAGE 16
-/* Stack offset of return address after calling ENTER.  */
-#   define PCOFF 8
-
-/* Int 5 is the "bound range" exception also raised by the "bound"
-   instruction.  */
-#   define BOUNDS_VIOLATED int $5
-
-#   define CHECK_BOUNDS_LOW(VAL_REG, BP_MEM)	\
-	cmpq 8+BP_MEM, VAL_REG;			\
-	jae 0f; /* continue if value >= low */	\
-	BOUNDS_VIOLATED;			\
-    0:
-
-#   define CHECK_BOUNDS_HIGH(VAL_REG, BP_MEM, Jcc)	\
-	cmpq 16+BP_MEM, VAL_REG;			\
-	Jcc 0f; /* continue if value < high */		\
-	BOUNDS_VIOLATED;				\
-    0:
-
-#   define CHECK_BOUNDS_BOTH(VAL_REG, BP_MEM)	\
-	cmpq 8+BP_MEM, VAL_REG;			\
-	jb 1f; /* die if value < low */		\
-	cmpq 16+BP_MEM, VAL_REG;		\
-	jb 0f; /* continue if value < high */	\
-    1:	BOUNDS_VIOLATED;			\
-    0:
-
-#   define CHECK_BOUNDS_BOTH_WIDE(VAL_REG, BP_MEM, LENGTH)	\
-	CHECK_BOUNDS_LOW(VAL_REG, BP_MEM);			\
-	addl LENGTH, VAL_REG;					\
-	cmpq 16+BP_MEM, VAL_REG;					\
-	jbe 0f; /* continue if value <= high */			\
-	BOUNDS_VIOLATED;					\
-    0:	subq LENGTH, VAL_REG /* restore value */
-
-/* Take bounds from BP_MEM and affix them to the pointer
-   value in %rax, stuffing all into memory at RTN(%esp).
-   Use %rdx as a scratch register.  */
-
-#   define RETURN_BOUNDED_POINTER(BP_MEM)	\
-	movq RTN(%rsp), %rdx;			\
-	movq %rax, 0(%rdx);			\
-	movq 8+BP_MEM, %rax;			\
-	movq %rax, 4(%rdx);			\
-	movq 16+BP_MEM, %rax;			\
-	movq %rax, 8(%rdx)
-
-#   define RETURN_NULL_BOUNDED_POINTER		\
-	movl RTN(%rsp), %rdx;			\
-	movl %rax, 0(%rdx);			\
-	movl %rax, 4(%rdx);			\
-	movl %rax, 8(%rdx)
-
-/* The caller of __errno_location is responsible for allocating space
-   for the three-word BP return-value and passing pushing its address
-   as an implicit first argument.  */
-#   define PUSH_ERRNO_LOCATION_RETURN		\
-	subl $16, %esp;				\
-	subl $8, %esp;				\
-	pushq %rsp
-
-/* __errno_location is responsible for popping the implicit first
-   argument, but we must pop the space for the BP itself.  We also
-   dereference the return value in order to dig out the pointer value.  */
-#   define POP_ERRNO_LOCATION_RETURN		\
-	popq %rax;				\
-	addq $16, %rsp
-
-#  else /* !__BOUNDED_POINTERS__ */
-
-/* Unbounded pointers occupy one word.  */
-#   define PTR_SIZE 8
-/* Unbounded pointer return values are passed back in the register %rax.  */
-#   define RTN_SIZE 0
-/* Use simple return instruction for unbounded pointer values.  */
-#   define RET_PTR ret
-/* Don't maintain frame pointer chain for leaf assembler functions.  */
-#   define ENTER
-#   define LEAVE
-/* Stack space overhead of procedure-call linkage: return address only.  */
-#   define LINKAGE 8
-/* Stack offset of return address after calling ENTER.  */
-#   define PCOFF 0
-
-#   define CHECK_BOUNDS_LOW(VAL_REG, BP_MEM)
-#   define CHECK_BOUNDS_HIGH(VAL_REG, BP_MEM, Jcc)
-#   define CHECK_BOUNDS_BOTH(VAL_REG, BP_MEM)
-#   define CHECK_BOUNDS_BOTH_WIDE(VAL_REG, BP_MEM, LENGTH)
-#   define RETURN_BOUNDED_POINTER(BP_MEM)
-
-#   define RETURN_NULL_BOUNDED_POINTER
-
-#   define PUSH_ERRNO_LOCATION_RETURN
-#   define POP_ERRNO_LOCATION_RETURN
-
-#  endif /* !__BOUNDED_POINTERS__ */
-
-# endif /* __ASSEMBLER__ */
-
-#endif /* _bp_asm_h_ */
diff --git a/sysdeps/x86_64/bsd-_setjmp.S b/sysdeps/x86_64/bsd-_setjmp.S
index 8769a80..4bb4978 100644
--- a/sysdeps/x86_64/bsd-_setjmp.S
+++ b/sysdeps/x86_64/bsd-_setjmp.S
@@ -24,16 +24,14 @@
 #define _ASM
 #define _SETJMP_H
 #include <bits/setjmp.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
 
-ENTRY (BP_SYM (_setjmp))
+ENTRY (_setjmp)
 	/* Set up arguments, we only need to set the second arg.  */
 	xorl %esi, %esi
 #ifdef PIC
 	jmp HIDDEN_JUMPTARGET (__sigsetjmp)
 #else
-	jmp BP_SYM (__sigsetjmp)
+	jmp __sigsetjmp
 #endif
-END (BP_SYM (_setjmp))
+END (_setjmp)
 libc_hidden_def (_setjmp)
diff --git a/sysdeps/x86_64/bsd-setjmp.S b/sysdeps/x86_64/bsd-setjmp.S
index 32fba70..6a5cfe2 100644
--- a/sysdeps/x86_64/bsd-setjmp.S
+++ b/sysdeps/x86_64/bsd-setjmp.S
@@ -24,15 +24,13 @@
 #define _ASM
 #define _SETJMP_H
 #include <bits/setjmp.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
 
-ENTRY (BP_SYM (setjmp))
+ENTRY (setjmp)
 	/* Set up arguments, we only need to set the 2nd arg.  */
 	movl $1, %esi
 #ifdef	PIC
 	jmp HIDDEN_JUMPTARGET (__sigsetjmp)
 #else
-	jmp BP_SYM (__sigsetjmp)
+	jmp __sigsetjmp
 #endif
-END (BP_SYM (setjmp))
+END (setjmp)
diff --git a/sysdeps/x86_64/mempcpy.S b/sysdeps/x86_64/mempcpy.S
index 5cb256e..acee5e5 100644
--- a/sysdeps/x86_64/mempcpy.S
+++ b/sysdeps/x86_64/mempcpy.S
@@ -3,6 +3,6 @@
 #define __memcpy_chk __mempcpy_chk
 #include <sysdeps/x86_64/memcpy.S>
 
-libc_hidden_def (BP_SYM (__mempcpy))
-weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy))
+libc_hidden_def (__mempcpy)
+weak_alias (__mempcpy, mempcpy)
 libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/x86_64/rtld-strchr.S b/sysdeps/x86_64/rtld-strchr.S
index 37858d1..323da67 100644
--- a/sysdeps/x86_64/rtld-strchr.S
+++ b/sysdeps/x86_64/rtld-strchr.S
@@ -19,12 +19,10 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 
 	.text
-ENTRY (BP_SYM (strchr))
+ENTRY (strchr)
 
 	/* Before we start with the main loop we process single bytes
 	   until the source pointer is aligned.  This has two reasons:
@@ -284,7 +282,7 @@ ENTRY (BP_SYM (strchr))
 6:
 	nop
 	retq
-END (BP_SYM (strchr))
+END (strchr)
 
-weak_alias (BP_SYM (strchr), BP_SYM (index))
+weak_alias (strchr, index)
 libc_hidden_builtin_def (strchr)
diff --git a/sysdeps/x86_64/rtld-strlen.S b/sysdeps/x86_64/rtld-strlen.S
index bb23b55..c459057 100644
--- a/sysdeps/x86_64/rtld-strlen.S
+++ b/sysdeps/x86_64/rtld-strlen.S
@@ -19,8 +19,6 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 
 	.text
diff --git a/sysdeps/x86_64/setjmp.S b/sysdeps/x86_64/setjmp.S
index ecb4cc5..71788d1 100644
--- a/sysdeps/x86_64/setjmp.S
+++ b/sysdeps/x86_64/setjmp.S
@@ -61,10 +61,10 @@ ENTRY (__sigsetjmp)
 #else
 	/* Make a tail call to __sigjmp_save; it takes the same args.  */
 # ifdef	PIC
-	jmp C_SYMBOL_NAME (BP_SYM (__sigjmp_save))@PLT
+	jmp C_SYMBOL_NAME (__sigjmp_save)@PLT
 # else
-	jmp BP_SYM (__sigjmp_save)
+	jmp __sigjmp_save
 # endif
 #endif
-END (BP_SYM (__sigsetjmp))
+END (__sigsetjmp)
 hidden_def (__sigsetjmp)
diff --git a/sysdeps/x86_64/start.S b/sysdeps/x86_64/start.S
index c4d25d0..7cbc157 100644
--- a/sysdeps/x86_64/start.S
+++ b/sysdeps/x86_64/start.S
@@ -54,7 +54,6 @@
 */
 
 #include <sysdep.h>
-#include "bp-sym.h"
 
 	.text
 	.globl _start
@@ -106,21 +105,21 @@ _start:
 	mov __libc_csu_fini@GOTPCREL(%rip), %R8_LP
 	mov __libc_csu_init@GOTPCREL(%rip), %RCX_LP
 
-	mov BP_SYM (main)@GOTPCREL(%rip), %RDI_LP
+	mov main@GOTPCREL(%rip), %RDI_LP
 
 	/* Call the user's main function, and exit with its value.
 	   But let the libc call main.	  */
-	call BP_SYM (__libc_start_main)@PLT
+	call __libc_start_main@PLT
 #else
 	/* Pass address of our own entry points to .fini and .init.  */
 	mov $__libc_csu_fini, %R8_LP
 	mov $__libc_csu_init, %RCX_LP
 
-	mov $BP_SYM (main), %RDI_LP
+	mov $main, %RDI_LP
 
 	/* Call the user's main function, and exit with its value.
 	   But let the libc call main.	  */
-	call BP_SYM (__libc_start_main)
+	call __libc_start_main
 #endif
 
 	hlt			/* Crash if somehow `exit' does return.	 */
diff --git a/sysdeps/x86_64/strcat.S b/sysdeps/x86_64/strcat.S
index d108750..287ffd2 100644
--- a/sysdeps/x86_64/strcat.S
+++ b/sysdeps/x86_64/strcat.S
@@ -20,12 +20,10 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 
 	.text
-ENTRY (BP_SYM (strcat))
+ENTRY (strcat)
 	movq %rdi, %rcx		/* Dest. register. */
 	andl $7, %ecx		/* mask alignment bits */
 	movq %rdi, %rax		/* Duplicate destination pointer.  */
@@ -255,5 +253,5 @@ ENTRY (BP_SYM (strcat))
 24:
 	movq	%rdi, %rax	/* Source is return value.  */
 	retq
-END (BP_SYM (strcat))
+END (strcat)
 libc_hidden_builtin_def (strcat)
diff --git a/sysdeps/x86_64/strcmp.S b/sysdeps/x86_64/strcmp.S
index 843c9e2..de9ecc9 100644
--- a/sysdeps/x86_64/strcmp.S
+++ b/sysdeps/x86_64/strcmp.S
@@ -21,8 +21,6 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 #undef UPDATE_STRNCMP_COUNTER
 
@@ -127,7 +125,7 @@ libc_hidden_def (__strncasecmp)
 	/* FALLTHROUGH to strncasecmp_l.  */
 #endif
 
-ENTRY (BP_SYM (STRCMP))
+ENTRY (STRCMP)
 #ifdef NOT_IN_libc
 /* Simple version since we can't use SSE registers in ld.so.  */
 L(oop):	movb	(%rdi), %al
@@ -145,7 +143,7 @@ L(neq):	movl	$1, %eax
 	movl	$-1, %ecx
 	cmovbl	%ecx, %eax
 	ret
-END (BP_SYM (STRCMP))
+END (STRCMP)
 #else	/* NOT_IN_libc */
 # ifdef USE_AS_STRCASECMP_L
 	/* We have to fall back on the C implementation for locales
@@ -2281,7 +2279,7 @@ LABEL(Byte0):
 
 	sub	%ecx, %eax
 	ret
-END (BP_SYM (STRCMP))
+END (STRCMP)
 
 	.section .rodata,"a",@progbits
 	.p2align 3
diff --git a/sysdeps/x86_64/strcpy.S b/sysdeps/x86_64/strcpy.S
index 812248c..6128247 100644
--- a/sysdeps/x86_64/strcpy.S
+++ b/sysdeps/x86_64/strcpy.S
@@ -19,15 +19,13 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 #ifndef USE_AS_STPCPY
 # define STRCPY strcpy
 #endif
 
 	.text
-ENTRY (BP_SYM (STRCPY))
+ENTRY (STRCPY)
 	movq %rsi, %rcx		/* Source register. */
 	andl $7, %ecx		/* mask alignment bits */
 	movq %rdi, %rdx		/* Duplicate destination pointer.  */
@@ -152,7 +150,7 @@ ENTRY (BP_SYM (STRCPY))
 	movq	%rdi, %rax	/* Source is return value.  */
 #endif
 	retq
-END (BP_SYM (STRCPY))
+END (STRCPY)
 #ifndef USE_AS_STPCPY
 libc_hidden_builtin_def (strcpy)
 #endif
diff --git a/sysdeps/x86_64/strcpy_chk.S b/sysdeps/x86_64/strcpy_chk.S
index a053c6b..7e171de 100644
--- a/sysdeps/x86_64/strcpy_chk.S
+++ b/sysdeps/x86_64/strcpy_chk.S
@@ -20,8 +20,6 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 #ifndef USE_AS_STPCPY_CHK
 # define STRCPY_CHK __strcpy_chk
diff --git a/sysdeps/x86_64/strtok.S b/sysdeps/x86_64/strtok.S
index 48c12cf..5636d9a 100644
--- a/sysdeps/x86_64/strtok.S
+++ b/sysdeps/x86_64/strtok.S
@@ -21,8 +21,6 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
 /* This file can be used for the strtok and strtok_r functions:
 
@@ -59,7 +57,7 @@ save_ptr:
 #endif
 
 	.text
-ENTRY (BP_SYM (FUNCTION))
+ENTRY (FUNCTION)
 	/* First we create a table with flags for all possible characters.
 	   For the ASCII (7bit/8bit) or ISO-8859-X character sets which are
 	   supported by the C string functions we have 256 characters.
@@ -207,4 +205,4 @@ L(returnNULL):
 	mov %RDX_LP, SAVE_PTR
 	jmp L(epilogue)
 
-END (BP_SYM (FUNCTION))
+END (FUNCTION)
diff --git a/sysdeps/x86_64/strtok_r.S b/sysdeps/x86_64/strtok_r.S
index 8ce0089..f0db78c 100644
--- a/sysdeps/x86_64/strtok_r.S
+++ b/sysdeps/x86_64/strtok_r.S
@@ -1,5 +1,5 @@
 #define FUNCTION __strtok_r
 #define USE_AS_STRTOK_R	1
 #include <sysdeps/x86_64/strtok.S>
-weak_alias (BP_SYM (__strtok_r), BP_SYM (strtok_r))
-strong_alias (BP_SYM (__strtok_r), BP_SYM (__GI___strtok_r))
+weak_alias (__strtok_r, strtok_r)
+strong_alias (__strtok_r, __GI___strtok_r)

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]