From 2969121014b150036551c93a09da7686ffcac817 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Sun, 17 Feb 2013 21:57:26 +0000 Subject: [PATCH] Remove bounded-pointers handling from x86_64 assembly sources. --- ChangeLog | 45 ++++++++++ sysdeps/unix/sysv/linux/x86_64/clone.S | 8 +- sysdeps/unix/sysv/linux/x86_64/sysdep.h | 2 - sysdeps/unix/x86_64/sysdep.S | 2 - sysdeps/x86_64/bp-asm.h | 140 -------------------------------- sysdeps/x86_64/bsd-_setjmp.S | 8 +- sysdeps/x86_64/bsd-setjmp.S | 8 +- sysdeps/x86_64/mempcpy.S | 4 +- sysdeps/x86_64/rtld-strchr.S | 8 +- sysdeps/x86_64/rtld-strlen.S | 2 - sysdeps/x86_64/setjmp.S | 6 +- sysdeps/x86_64/start.S | 9 +- sysdeps/x86_64/strcat.S | 6 +- sysdeps/x86_64/strcmp.S | 8 +- sysdeps/x86_64/strcpy.S | 6 +- sysdeps/x86_64/strcpy_chk.S | 2 - sysdeps/x86_64/strtok.S | 6 +- sysdeps/x86_64/strtok_r.S | 4 +- 18 files changed, 77 insertions(+), 197 deletions(-) delete mode 100644 sysdeps/x86_64/bp-asm.h diff --git a/ChangeLog b/ChangeLog index d9a97f0..c18b327 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,48 @@ +2013-02-17 Joseph Myers + + [BZ #13550] + * sysdeps/x86_64/bp-asm.h: Remove file. + * sysdeps/unix/sysv/linux/x86_64/clone.S: Do not include + and . + (__clone): Do not use BP_SYM. + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Do not include + and . + * 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 * time/Versions: Sort entries. 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 #include -#include -#include #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 -#include -#include #include #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 #define _ERRNO_H #include -#include -#include #include #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 - . */ - -#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 -#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 -#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 -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 #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 #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 -#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 #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 #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 #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 #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 #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 -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) -- 2.7.4