from i386 and x86_64.
*/
__asm__ (
" .text\n"
- " .align 16\n"
" .globl _start\n"
" .type _start,@function\n"
"_start:\n"
*/
.text
-.align 4
.globl _dl_linux_resolve
.type _dl_linux_resolve,@function
*/
__asm__ (
" .text\n"
- " .align 16\n"
" .global _start\n"
" .type _start,%function\n"
"_start:\n"
.global _dl_linux_resolve
.type _dl_linux_resolve,%function
-.align 16
_dl_linux_resolve:
subq $56,%rsp
#include <features.h>
#include <bits/wordsize.h>
+/* Is alignment really needed? */
+
#if __WORDSIZE == 32
# define ENTRY_ALIGN 4
#else
#include <features.h>
#include <bits/wordsize.h>
-#if __WORDSIZE == 32
-# define ENTRY_ALIGN 4
-#else
-# define ENTRY_ALIGN 2
-#endif
-
#define ENTRY(sym) \
.global sym; \
- .align ENTRY_ALIGN; \
.type sym,%function; \
sym:
jae 11f
.p2align 4
-3: /* Copy 64 bytes. */
+3: /* Fill 64 bytes. */
mov %r8,(%rcx)
mov %r8,0x8(%rcx)
mov %r8,0x10(%rcx)
dec %rax
jne 3b
-4: /* Copy final bytes. */
+4: /* Fill final bytes. */
and $0x3f,%edx
mov %rdx,%rax
shr $0x3,%rax
jne 8b
9:
#if BZERO_P
- nop
+ nop /* huh?? */
#else
/* Load result (only if used as memset). */
mov %rdi,%rax /* start address of destination is result */
retq
.p2align 4
-11: /* Copy 64 bytes without polluting the cache. */
+11: /* Fill 64 bytes without polluting the cache. */
/* We could use movntdq %xmm0,(%rcx) here to further
speed up for large cases but let's not use XMM registers. */
movnti %r8,(%rcx)
#include "_glibc_inc.h"
+/* Seems to be unrolled too much */
.text
ENTRY (BP_SYM (strcat))
#include "_glibc_inc.h"
+/* Seems to be unrolled too much */
.text
ENTRY (BP_SYM (strchr))
#include "_glibc_inc.h"
+/* Seems to be unrolled too much */
+
#ifndef USE_AS_STPCPY
# define STRCPY strcpy
#endif
#include "_glibc_inc.h"
+/* Seems to be unrolled too much */
+/* (and why testb $0xff, %cl, not testb %cl, %cl?) */
+
/* BEWARE: `#ifdef strcspn' means that strcspn is redefined as `strpbrk' */
#define STRPBRK_P (defined strcspn)
#include "_glibc_inc.h"
+/* Seems to be unrolled too much */
.text
ENTRY (strlen)
.global __longjmp
.type __longjmp,%function
-.align 4
__longjmp:
movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */
movl 8(%esp), %eax /* Second argument is return value. */
.global _setjmp
.type _setjmp,%function
-.align 4
_setjmp:
xorl %eax, %eax
movl 4 (%esp), %edx
.global setjmp
.type setjmp,%function
-.align 4
setjmp:
movl 4 (%esp), %eax
/* Save registers. */
.text
.global mmap64
.type mmap64,%function
-.align 1<<4
mmap64:
/* Save registers. */
.global __sigsetjmp
.type __sigsetjmp,%function
-.align 4
__sigsetjmp:
movl 4 (%esp), %eax
__asm__ \
( \
".text\n" \
- " .align 16\n" \
"__" #name ":\n" \
" movl $" #syscall ", %eax\n" \
" int $0x80" \
__asm__ \
( \
".text\n" \
- " .align 8\n" \
"__" #name ":\n" \
" popl %eax\n" \
" movl $" #syscall ", %eax\n" \
.text
.global syscall
.type syscall,%function
-.align 4
syscall:
pushl %ebp
pushl %edi
.global __vfork
.hidden __vfork
.type __vfork,%function
-.align 1<<4
__vfork:
popl %ecx
#define __ASSEMBLY__
#include <asm/traps.h>
+/* Is alignment really needed? */
+
#if __WORDSIZE == 32
# define ENTRY_ALIGN 4
#else
void __longjmp (__jmp_buf env, int val). */
.global __longjmp
.type __longjmp,%function
-.align 16
__longjmp:
/* Restore registers. */
movq (JB_RBX*8)(%rdi),%rbx
.global _setjmp
.type _setjmp,%function
-.align 16
_setjmp:
xorq %rsi, %rsi
jmp __sigsetjmp@PLT
.global setjmp
.type setjmp,%function
-.align 16
setjmp:
movq $1, %rsi
jmp __sigsetjmp@PLT
.text
.global clone
.type clone,%function
-.align 4
clone:
/* Sanity check arguments. */
movq $-EINVAL,%rax
.global __sigsetjmp
.type __sigsetjmp,%function
-.align 4
__sigsetjmp:
/* Save registers. */
movq %rbx, (JB_RBX*8)(%rdi)
asm \
( \
".text\n" \
- ".align 16\n" \
"__" #name ":\n" \
" movq $" #syscall ", %rax\n" \
" syscall\n" \
.text
.globl syscall
.type syscall,%function
-.align 16
syscall:
movq %rdi, %rax /* Syscall number -> rax. */
movq %rsi, %rdi /* shift arg1 - arg5. */
.global __vfork
.hidden __vfork
.type __vfork,%function
-.align 16
__vfork: