Remove bounded-pointers handling from x86_64 assembly sources.

This commit is contained in:
Joseph Myers 2013-02-17 21:57:26 +00:00
parent f238fd190b
commit 2969121014
18 changed files with 77 additions and 197 deletions

View File

@ -1,3 +1,48 @@
2013-02-17 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.
2013-02-17 Andreas Jaeger <aj@suse.de>
* time/Versions: Sort entries.

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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_ */

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -19,8 +19,6 @@
#include <sysdep.h>
#include "asm-syntax.h"
#include "bp-sym.h"
#include "bp-asm.h"
.text

View File

@ -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)

View File

@ -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. */

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)