[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r5573 - in glibc-package/trunk/debian: . patches/kfreebsd



Author: ps-guest
Date: 2013-05-10 04:48:34 +0000 (Fri, 10 May 2013)
New Revision: 5573

Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff
Log:
update kfreebsd/local-sysdeps.diff


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2013-05-09 19:23:10 UTC (rev 5572)
+++ glibc-package/trunk/debian/changelog	2013-05-10 04:48:34 UTC (rev 5573)
@@ -31,7 +31,7 @@
   * patches/kfreebsd/local-linuxthreads-stackguard.diff: handle elf subdir
     removal
   * patches/kfreebsd/local-freopen.diff: support architecture without dup3()
-  * kfreebsd/local-sysdeps.diff: update to revision 4423 (from glibc-bsd).
+  * kfreebsd/local-sysdeps.diff: update to revision 4426 (from glibc-bsd).
 
  -- Adam Conrad <adconrad@0c3.net>  Tue, 07 May 2013 13:58:05 -0600
 

Modified: glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff
===================================================================
--- glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff	2013-05-09 19:23:10 UTC (rev 5572)
+++ glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff	2013-05-10 04:48:34 UTC (rev 5573)
@@ -307,109 +307,6 @@
 +  }
 +}
 --- /dev/null
-+++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/_G_config.h
-@@ -0,0 +1,100 @@
-+/* This file is needed by libio to define various configuration parameters.
-+   These are always the same in the GNU C library.  */
-+
-+#ifndef _G_config_h
-+#define _G_config_h 1
-+
-+/* Define types for libio in terms of the standard internal type names.  */
-+
-+#include <bits/types.h>
-+#define __need_size_t
-+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-+# define __need_wchar_t
-+#endif
-+#define __need_NULL
-+#include <stddef.h>
-+#define __need_mbstate_t
-+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-+# define __need_wint_t
-+#endif
-+#include <wchar.h>
-+#define _G_size_t	size_t
-+typedef struct
-+{
-+  __off_t __pos;
-+  __mbstate_t __state;
-+} _G_fpos_t;
-+typedef struct
-+{
-+  __off64_t __pos;
-+  __mbstate_t __state;
-+} _G_fpos64_t;
-+#define _G_ssize_t	__ssize_t
-+#define _G_off_t	__off_t
-+#define _G_off64_t	__off64_t
-+#define	_G_pid_t	__pid_t
-+#define	_G_uid_t	__uid_t
-+#define _G_wchar_t	wchar_t
-+#define _G_wint_t	wint_t
-+#define _G_stat64	stat64
-+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-+# include <gconv.h>
-+typedef union
-+{
-+  struct __gconv_info __cd;
-+  struct
-+  {
-+    struct __gconv_info __cd;
-+    struct __gconv_step_data __data;
-+  } __combined;
-+} _G_iconv_t;
-+#endif
-+
-+typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
-+typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
-+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
-+typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
-+
-+#define _G_HAVE_BOOL 1
-+
-+
-+/* These library features are always available in the GNU C library.  */
-+#define _G_HAVE_ATEXIT 1
-+#define _G_HAVE_SYS_CDEFS 1
-+#define _G_HAVE_SYS_WAIT 1
-+#define _G_NEED_STDARG_H 1
-+#define _G_va_list __gnuc_va_list
-+
-+#define _G_HAVE_PRINTF_FP 1
-+#define _G_HAVE_MMAP 1
-+#define _G_HAVE_LONG_DOUBLE_IO 1
-+#define _G_HAVE_IO_FILE_OPEN 1
-+#define _G_HAVE_IO_GETLINE_INFO 1
-+
-+#define _G_IO_IO_FILE_VERSION 0x20001
-+
-+#define _G_OPEN64	__open64
-+#define _G_LSEEK64	__lseek64
-+#define _G_MMAP64	__mmap64
-+#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
-+
-+/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
-+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
-+
-+#define _G_BUFSIZ 8192
-+
-+/* These are the vtbl details for ELF.  */
-+#define _G_NAMES_HAVE_UNDERSCORE 0
-+#define _G_VTABLE_LABEL_HAS_LENGTH 1
-+#define _G_USING_THUNKS	1
-+#define _G_VTABLE_LABEL_PREFIX "__vt_"
-+#define _G_VTABLE_LABEL_PREFIX_ID __vt_
-+
-+
-+#if defined __cplusplus || defined __STDC__
-+# define _G_ARGS(ARGLIST) ARGLIST
-+#else
-+# define _G_ARGS(ARGLIST) ()
-+#endif
-+
-+#endif	/* _G_config.h */
---- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/_exit.S
 @@ -0,0 +1,25 @@
 +/* Copyright (C) 1991,92,97,99,2002 Free Software Foundation, Inc.
@@ -5045,10 +4942,10 @@
 +extern int __syscall_obreak (void *addr);
 +libc_hidden_proto (__syscall_obreak)
 +
-+extern void _end;
++extern char _end[];
 +
 +/* sbrk.c expects this.  */
-+void *__curbrk = &_end;
++void *__curbrk = _end;
 +
 +/* Set the end of the process's data space to ADDR.
 +   Return 0 if successful, -1 if not.  */
@@ -5374,21 +5271,10 @@
 +weak_alias (__clone, clone)
 --- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/configure
-@@ -0,0 +1,353 @@
+@@ -0,0 +1,342 @@
 +# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
 + # Local configure fragment for sysdeps/unix/bsd/bsd4.4/kfreebsd.
 +
-+case "$machine" in
-+  x86_64*)
-+	echo "Adding extra sysnames for kfreebsd/x86_64/elf"
-+	sysnames="ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/elf $sysnames"
-+    ;;
-+  mips*)
-+	echo "Adding extra sysnames for kfreebsd/mips/elf"
-+	sysnames="ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/elf $sysnames"
-+    ;;
-+esac
-+
 +# The kFreeBSD headers can be found in
 +#   /usr/src/sys/
 +# Check whether this directory is available.
@@ -5730,21 +5616,10 @@
 +_ACEOF
 --- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/configure.in
-@@ -0,0 +1,277 @@
+@@ -0,0 +1,266 @@
 +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 +# Local configure fragment for sysdeps/unix/bsd/bsd4.4/kfreebsd.
 +
-+case "$machine" in
-+  x86_64*)
-+	echo "Adding extra sysnames for kfreebsd/x86_64/elf"
-+	sysnames="ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/elf $sysnames"
-+    ;;
-+  mips*)
-+	echo "Adding extra sysnames for kfreebsd/mips/elf"
-+	sysnames="ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/elf $sysnames"
-+    ;;
-+esac
-+
 +# The kFreeBSD headers can be found in
 +#   /usr/src/sys/
 +# Check whether this directory is available.
@@ -15592,130 +15467,6 @@
 +	".previous"\
 +);
 --- /dev/null
-+++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/elf/start.S
-@@ -0,0 +1,121 @@
-+/* Startup code compliant to the ELF Mips ABI.
-+   Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003, 2004, 2010
-+	Free Software Foundation, Inc.
-+   Port to kFreeBSD (kernel of FreeBSD) by Robert Millan.
-+
-+   This file is part of the GNU C Library.
-+
-+   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.
-+
-+   In addition to the permissions in the GNU Lesser General Public
-+   License, the Free Software Foundation gives you unlimited
-+   permission to link the compiled version of this file with other
-+   programs, and to distribute those programs without any restriction
-+   coming from the use of this file. (The GNU Lesser General Public
-+   License restrictions do apply in other respects; for example, they
-+   cover modification of the file, and distribution when not linked
-+   into another program.)
-+
-+   Note that people who make modified versions of this file are not
-+   obligated to grant this special exception for their modified
-+   versions; it is their choice whether to do so. The GNU Lesser
-+   General Public License gives permission to release a modified
-+   version without this exception; this exception also makes it
-+   possible to release a modified version which carries forward this
-+   exception.
-+
-+   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, write to the Free
-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+   02111-1307 USA.  */
-+
-+#define __ASSEMBLY__ 1
-+#include <entry.h>
-+#include <sgidefs.h>
-+#include <sys/asm.h>
-+
-+#ifndef ENTRY_POINT
-+#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
-+#endif
-+
-+/* This is the canonical entry point, usually the first thing in the text
-+   segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
-+   point runs, most registers' values are unspecified, except for:
-+
-+   v0 ($2)	Contains a function pointer to be registered with `atexit'.
-+		This is how the dynamic linker arranges to have DT_FINI
-+		functions called for shared libraries that have been loaded
-+		before this code runs.
-+
-+   a0 ($4)	Contains a pointer to the arguments and environment:
-+		0(a0)			argc
-+		4(a0)			argv[0]
-+		...
-+		(4*argc)(a0)		NULL
-+		(4*(argc+1))(a0)	envp[0]
-+		...
-+					NULL
-+   ra ($31)	The return address register is set to zero so that programs
-+		that search backword through stack frames recognize the last
-+		stack frame.
-+*/
-+
-+
-+/* We need to call:
-+   __libc_start_main (int (*main) (int, char **, char **), int argc,
-+		      char **argv, void (*init) (void), void (*fini) (void),
-+		      void (*rtld_fini) (void), void *stack_end)
-+*/
-+	
-+	.text
-+	.globl ENTRY_POINT
-+	.type ENTRY_POINT,@function
-+ENTRY_POINT:
-+#ifdef __PIC__
-+	SETUP_GPX($0)
-+	SETUP_GPX64($25,$0)
-+#else
-+	PTR_LA $28, _gp		/* Setup GP correctly if we're non-PIC.  */
-+	move $31, $0
-+#endif
-+
-+	PTR_L $5, 0($4)			/* argc */
-+	PTR_ADDIU $6, $4, PTRSIZE	/* argv  */
-+	PTR_LA $4, main		/* main */
-+	
-+	/* Allocate space on the stack for seven arguments (o32 only)
-+	   and make sure the stack is aligned to double words (8 bytes) 
-+	   on o32 and quad words (16 bytes) on n32 and n64.  */
-+	
-+	and $29, -2 * SZREG
-+#if _MIPS_SIM == _ABIO32
-+	PTR_SUBIU $29, 32
-+#endif
-+	PTR_LA $7, __libc_csu_init		/* init */
-+	PTR_LA $8, __libc_csu_fini
-+#if _MIPS_SIM == _ABIO32
-+	PTR_S $8, 16($29)		/* fini */
-+	PTR_S $2, 20($29)		/* rtld_fini */
-+	PTR_S $29, 24($29)		/* stack_end */
-+#else
-+	move $9, $2		/* rtld_fini */
-+	move $10, $29		/* stack_end */
-+#endif
-+	jal __libc_start_main
-+hlt:	b hlt			/* Crash if somehow it does return.  */
-+
-+/* Define a symbol for the first piece of initialized data.  */
-+	.data
-+	.globl __data_start
-+__data_start:
-+	.long 0
-+	.weak data_start
-+	data_start = __data_start
---- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/entry.h
 @@ -0,0 +1,7 @@
 +/* http://sources.redhat.com/bugzilla/show_bug.cgi?id=12297 */
@@ -16506,6 +16257,130 @@
 +#endif /* _BITS_SIGCONTEXT_H */
 +
 --- /dev/null
++++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/start.S
+@@ -0,0 +1,121 @@
++/* Startup code compliant to the ELF Mips ABI.
++   Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003, 2004, 2010
++	Free Software Foundation, Inc.
++   Port to kFreeBSD (kernel of FreeBSD) by Robert Millan.
++
++   This file is part of the GNU C Library.
++
++   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.
++
++   In addition to the permissions in the GNU Lesser General Public
++   License, the Free Software Foundation gives you unlimited
++   permission to link the compiled version of this file with other
++   programs, and to distribute those programs without any restriction
++   coming from the use of this file. (The GNU Lesser General Public
++   License restrictions do apply in other respects; for example, they
++   cover modification of the file, and distribution when not linked
++   into another program.)
++
++   Note that people who make modified versions of this file are not
++   obligated to grant this special exception for their modified
++   versions; it is their choice whether to do so. The GNU Lesser
++   General Public License gives permission to release a modified
++   version without this exception; this exception also makes it
++   possible to release a modified version which carries forward this
++   exception.
++
++   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, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#define __ASSEMBLY__ 1
++#include <entry.h>
++#include <sgidefs.h>
++#include <sys/asm.h>
++
++#ifndef ENTRY_POINT
++#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
++#endif
++
++/* This is the canonical entry point, usually the first thing in the text
++   segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
++   point runs, most registers' values are unspecified, except for:
++
++   v0 ($2)	Contains a function pointer to be registered with `atexit'.
++		This is how the dynamic linker arranges to have DT_FINI
++		functions called for shared libraries that have been loaded
++		before this code runs.
++
++   a0 ($4)	Contains a pointer to the arguments and environment:
++		0(a0)			argc
++		4(a0)			argv[0]
++		...
++		(4*argc)(a0)		NULL
++		(4*(argc+1))(a0)	envp[0]
++		...
++					NULL
++   ra ($31)	The return address register is set to zero so that programs
++		that search backword through stack frames recognize the last
++		stack frame.
++*/
++
++
++/* We need to call:
++   __libc_start_main (int (*main) (int, char **, char **), int argc,
++		      char **argv, void (*init) (void), void (*fini) (void),
++		      void (*rtld_fini) (void), void *stack_end)
++*/
++	
++	.text
++	.globl ENTRY_POINT
++	.type ENTRY_POINT,@function
++ENTRY_POINT:
++#ifdef __PIC__
++	SETUP_GPX($0)
++	SETUP_GPX64($25,$0)
++#else
++	PTR_LA $28, _gp		/* Setup GP correctly if we're non-PIC.  */
++	move $31, $0
++#endif
++
++	PTR_L $5, 0($4)			/* argc */
++	PTR_ADDIU $6, $4, PTRSIZE	/* argv  */
++	PTR_LA $4, main		/* main */
++	
++	/* Allocate space on the stack for seven arguments (o32 only)
++	   and make sure the stack is aligned to double words (8 bytes) 
++	   on o32 and quad words (16 bytes) on n32 and n64.  */
++	
++	and $29, -2 * SZREG
++#if _MIPS_SIM == _ABIO32
++	PTR_SUBIU $29, 32
++#endif
++	PTR_LA $7, __libc_csu_init		/* init */
++	PTR_LA $8, __libc_csu_fini
++#if _MIPS_SIM == _ABIO32
++	PTR_S $8, 16($29)		/* fini */
++	PTR_S $2, 20($29)		/* rtld_fini */
++	PTR_S $29, 24($29)		/* stack_end */
++#else
++	move $9, $2		/* rtld_fini */
++	move $10, $29		/* stack_end */
++#endif
++	jal __libc_start_main
++hlt:	b hlt			/* Crash if somehow it does return.  */
++
++/* Define a symbol for the first piece of initialized data.  */
++	.data
++	.globl __data_start
++__data_start:
++	.long 0
++	.weak data_start
++	data_start = __data_start
+--- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/mips/start_thread.S
 @@ -0,0 +1,56 @@
 +/* Copyright (C) 2002 Free Software Foundation, Inc.
@@ -27358,152 +27233,6 @@
 @@ -0,0 +1 @@
 +#include <sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h>
 --- /dev/null
-+++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/elf/start.S
-@@ -0,0 +1,143 @@
-+/* Startup code for FreeBSD/amd64 ABI.
-+   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+   Contributed by Andreas Jaeger <aj@suse.de>, 2001.
-+   FreeBSD modification by Petr Salinger, 2006.
-+
-+   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.
-+
-+   In addition to the permissions in the GNU Lesser General Public
-+   License, the Free Software Foundation gives you unlimited
-+   permission to link the compiled version of this file with other
-+   programs, and to distribute those programs without any restriction
-+   coming from the use of this file. (The GNU Lesser General Public
-+   License restrictions do apply in other respects; for example, they
-+   cover modification of the file, and distribution when not linked
-+   into another program.)
-+
-+   Note that people who make modified versions of this file are not
-+   obligated to grant this special exception for their modified
-+   versions; it is their choice whether to do so. The GNU Lesser
-+   General Public License gives permission to release a modified
-+   version without this exception; this exception also makes it
-+   possible to release a modified version which carries forward this
-+   exception.
-+
-+   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, write to the Free
-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+   02111-1307 USA.  */
-+
-+/* This is the canonical entry point, usually the first thing in the text
-+   segment.  The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry
-+   point runs, most registers' values are unspecified, except for a few.
-+   Blindly applied on amd64:
-+
-+   %rdx		Contains a function pointer to be registered with `atexit'.
-+		This is how the dynamic linker arranges to have DT_FINI
-+		functions called for shared libraries that have been loaded
-+		before this code runs.
-+
-+   %rsp		The stack contains the arguments and environment:
-+		0(%rsp)			argc
-+		8(%rsp)			argv[0]
-+		...
-+		(8*argc)(%rsp)		NULL
-+		(8*(argc+1))(%rsp)	envp[0]
-+		...
-+					NULL
-+
-+   But on amd64 %rsp also have to be 16-byte aligned,
-+   standard C calling convention already passes arguments in registers.
-+
-+   FreeBSD uses %edi as pointer to arguments and environment, %rsp is passed aligned.
-+   On entry from kernel, %rsp=%rdi or %rsp=%rdi-8,
-+   on entry from ld.so, glibc might set up it slightly differently.
-+
-+   On FreeBSD, we use %rsi for passing function pointer to rtld_fini().
-+   On entry from FreeBSD kernel, %rsi is cleared, %rdx is not cleared,
-+   on entry from ld.so, glibc sets both %rsi and %rdx to point to rtld_fini().
-+
-+   Used interface (via %rdi, %rsi) is equal to standard C calling interface for
-+
-+   void _start(void *arg, void *rtld_fini());
-+
-+*/
-+
-+#include "bp-sym.h"
-+
-+	.text
-+	.globl _start
-+	.type _start,@function
-+_start:
-+	/* Clear the frame pointer.  The ABI suggests this be done, to mark
-+	   the outermost frame obviously.  */
-+	xorl %ebp, %ebp		/* zero extending clears whole rbp */
-+
-+	/* Extract the arguments as encoded on the stack and set up
-+	   the arguments for __libc_start_main (int (*main) (int, char **, char **),
-+		   int argc, char *argv,
-+		   void (*init) (void), void (*fini) (void),
-+		   void (*rtld_fini) (void), void *stack_end).
-+	   The arguments are passed via registers and on the stack:
-+	main:		%rdi
-+	argc:		%rsi
-+	argv:		%rdx
-+	init:		%rcx
-+	fini:		%r8
-+	rtld_fini:	%r9
-+	stack_end:	stack.	*/
-+
-+	movq %rsi, %r9		/* Address of the shared library termination
-+				   function.  */
-+	movq 0(%rdi), %rsi	/* argument count.  */
-+	leaq 8(%rdi), %rdx      /* argv starts just at above argc.  */
-+
-+	/* Align the stack to a 16 byte boundary to follow the ABI.  */
-+	andq  $~15, %rsp
-+
-+	pushq %rax		/* Push garbage because we push 8 more bytes.  */
-+
-+	/* Provide the highest stack address to the user code (for stacks
-+	   which grow downwards).  */
-+	pushq %rsp
-+
-+#ifdef SHARED
-+	/* Pass address of our own entry points to .fini and .init.  */
-+	movq __libc_csu_fini@GOTPCREL(%rip), %r8
-+	movq __libc_csu_init@GOTPCREL(%rip), %rcx
-+
-+	movq BP_SYM (main)@GOTPCREL(%rip), %rdi
-+
-+	/* Call the user's main function, and exit with its value.
-+	   But let the libc call main.	  */
-+	call BP_SYM (__libc_start_main)@PLT
-+#else
-+	/* Pass address of our own entry points to .fini and .init.  */
-+	movq $__libc_csu_fini, %r8
-+	movq $__libc_csu_init, %rcx
-+
-+	movq $BP_SYM (main), %rdi
-+
-+	/* Call the user's main function, and exit with its value.
-+	   But let the libc call main.	  */
-+	call BP_SYM (__libc_start_main)
-+#endif
-+
-+	hlt			/* Crash if somehow `exit' does return.	 */
-+
-+/* Define a symbol for the first piece of initialized data.  */
-+	.data
-+	.globl __data_start
-+__data_start:
-+	.long 0
-+	.weak data_start
-+	data_start = __data_start
---- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/get_clockfreq.c
 @@ -0,0 +1 @@
 +#include "../i386/get_clockfreq.c"
@@ -28318,6 +28047,152 @@
 +#define CALL_SIGHANDLER(handler, signo, ctx) \
 +  (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
 --- /dev/null
++++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/start.S
+@@ -0,0 +1,143 @@
++/* Startup code for FreeBSD/amd64 ABI.
++   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Andreas Jaeger <aj@suse.de>, 2001.
++   FreeBSD modification by Petr Salinger, 2006.
++
++   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.
++
++   In addition to the permissions in the GNU Lesser General Public
++   License, the Free Software Foundation gives you unlimited
++   permission to link the compiled version of this file with other
++   programs, and to distribute those programs without any restriction
++   coming from the use of this file. (The GNU Lesser General Public
++   License restrictions do apply in other respects; for example, they
++   cover modification of the file, and distribution when not linked
++   into another program.)
++
++   Note that people who make modified versions of this file are not
++   obligated to grant this special exception for their modified
++   versions; it is their choice whether to do so. The GNU Lesser
++   General Public License gives permission to release a modified
++   version without this exception; this exception also makes it
++   possible to release a modified version which carries forward this
++   exception.
++
++   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, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++/* This is the canonical entry point, usually the first thing in the text
++   segment.  The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry
++   point runs, most registers' values are unspecified, except for a few.
++   Blindly applied on amd64:
++
++   %rdx		Contains a function pointer to be registered with `atexit'.
++		This is how the dynamic linker arranges to have DT_FINI
++		functions called for shared libraries that have been loaded
++		before this code runs.
++
++   %rsp		The stack contains the arguments and environment:
++		0(%rsp)			argc
++		8(%rsp)			argv[0]
++		...
++		(8*argc)(%rsp)		NULL
++		(8*(argc+1))(%rsp)	envp[0]
++		...
++					NULL
++
++   But on amd64 %rsp also have to be 16-byte aligned,
++   standard C calling convention already passes arguments in registers.
++
++   FreeBSD uses %edi as pointer to arguments and environment, %rsp is passed aligned.
++   On entry from kernel, %rsp=%rdi or %rsp=%rdi-8,
++   on entry from ld.so, glibc might set up it slightly differently.
++
++   On FreeBSD, we use %rsi for passing function pointer to rtld_fini().
++   On entry from FreeBSD kernel, %rsi is cleared, %rdx is not cleared,
++   on entry from ld.so, glibc sets both %rsi and %rdx to point to rtld_fini().
++
++   Used interface (via %rdi, %rsi) is equal to standard C calling interface for
++
++   void _start(void *arg, void *rtld_fini());
++
++*/
++
++#include "bp-sym.h"
++
++	.text
++	.globl _start
++	.type _start,@function
++_start:
++	/* Clear the frame pointer.  The ABI suggests this be done, to mark
++	   the outermost frame obviously.  */
++	xorl %ebp, %ebp		/* zero extending clears whole rbp */
++
++	/* Extract the arguments as encoded on the stack and set up
++	   the arguments for __libc_start_main (int (*main) (int, char **, char **),
++		   int argc, char *argv,
++		   void (*init) (void), void (*fini) (void),
++		   void (*rtld_fini) (void), void *stack_end).
++	   The arguments are passed via registers and on the stack:
++	main:		%rdi
++	argc:		%rsi
++	argv:		%rdx
++	init:		%rcx
++	fini:		%r8
++	rtld_fini:	%r9
++	stack_end:	stack.	*/
++
++	movq %rsi, %r9		/* Address of the shared library termination
++				   function.  */
++	movq 0(%rdi), %rsi	/* argument count.  */
++	leaq 8(%rdi), %rdx      /* argv starts just at above argc.  */
++
++	/* Align the stack to a 16 byte boundary to follow the ABI.  */
++	andq  $~15, %rsp
++
++	pushq %rax		/* Push garbage because we push 8 more bytes.  */
++
++	/* Provide the highest stack address to the user code (for stacks
++	   which grow downwards).  */
++	pushq %rsp
++
++#ifdef SHARED
++	/* Pass address of our own entry points to .fini and .init.  */
++	movq __libc_csu_fini@GOTPCREL(%rip), %r8
++	movq __libc_csu_init@GOTPCREL(%rip), %rcx
++
++	movq BP_SYM (main)@GOTPCREL(%rip), %rdi
++
++	/* Call the user's main function, and exit with its value.
++	   But let the libc call main.	  */
++	call BP_SYM (__libc_start_main)@PLT
++#else
++	/* Pass address of our own entry points to .fini and .init.  */
++	movq $__libc_csu_fini, %r8
++	movq $__libc_csu_init, %rcx
++
++	movq $BP_SYM (main), %rdi
++
++	/* Call the user's main function, and exit with its value.
++	   But let the libc call main.	  */
++	call BP_SYM (__libc_start_main)
++#endif
++
++	hlt			/* Crash if somehow `exit' does return.	 */
++
++/* Define a symbol for the first piece of initialized data.  */
++	.data
++	.globl __data_start
++__data_start:
++	.long 0
++	.weak data_start
++	data_start = __data_start
+--- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/start_thread.S
 @@ -0,0 +1,196 @@
 +/* Copyright (C) 2002 Free Software Foundation, Inc.


Reply to: