]> git.saurik.com Git - apple/libc.git/commitdiff
Libc-391.5.18.tar.gz mac-os-x-1048x86 v391.5.18
authorApple <opensource@apple.com>
Fri, 6 Oct 2006 05:09:23 +0000 (05:09 +0000)
committerApple <opensource@apple.com>
Fri, 6 Oct 2006 05:09:23 +0000 (05:09 +0000)
290 files changed:
BSDmakefile [new file with mode: 0644]
GNUmakefile
Makefile
Makefile.xbs
darwin/copyfile.c
fbsdcompat/_fpmath.h
gdtoa/arith.h
gdtoa/gd_qnan.h
gen/FreeBSD/getcwd.c.patch
gen/FreeBSD/opendir.c.patch
gen/Makefile.inc
gen/stack_logging.c
i386/pthreads/pthread_set_self.s
i386/string/bcopy.s
i386/string/bzero.s
i386/string/memset.s
i386/string/strncpy.s
i386/sys/ATPgetreq.s
i386/sys/ATPgetrsp.s
i386/sys/ATPsndreq.s
i386/sys/ATPsndrsp.s
i386/sys/ATgetmsg.s
i386/sys/ATputmsg.s
i386/sys/ATsocket.s
i386/sys/Makefile.inc
i386/sys/OSAtomic.s
i386/sys/__mmap.s
i386/sys/__pthread_canceled.s
i386/sys/__pthread_markcancel.s
i386/sys/__semwait_signal.s
i386/sys/_exit.s
i386/sys/_getlogin.s
i386/sys/_pthread_kill.s
i386/sys/_setjmp.s
i386/sys/_setlogin.s
i386/sys/_sysctl.s
i386/sys/accept.s
i386/sys/access.s
i386/sys/acct.s
i386/sys/add_profil.s
i386/sys/adjtime.s
i386/sys/aio_cancel.s
i386/sys/aio_error.s
i386/sys/aio_fsync.s
i386/sys/aio_read.s
i386/sys/aio_return.s
i386/sys/aio_suspend.s
i386/sys/aio_write.s
i386/sys/audit.s
i386/sys/auditctl.s
i386/sys/auditon.s
i386/sys/auditsvc.s
i386/sys/bind.s
i386/sys/cerror.s
i386/sys/chdir.s
i386/sys/checkuseraccess.s
i386/sys/chflags.s
i386/sys/chmod.s
i386/sys/chown.s
i386/sys/chroot.s
i386/sys/close.s
i386/sys/connect.s
i386/sys/dup.s
i386/sys/dup2.s
i386/sys/exchangedata.s
i386/sys/execve.s
i386/sys/fchdir.s
i386/sys/fchflags.s
i386/sys/fchmod.s
i386/sys/fchown.s
i386/sys/fcntl.s
i386/sys/fgetxattr.s
i386/sys/fhopen.s
i386/sys/flistxattr.s
i386/sys/flock.s
i386/sys/fork.s
i386/sys/fpathconf.s
i386/sys/fremovexattr.s
i386/sys/fsctl.s
i386/sys/fsetxattr.s
i386/sys/fstat.s
i386/sys/fstatfs.s
i386/sys/fstatv.s
i386/sys/fsync.s
i386/sys/ftruncate.s
i386/sys/futimes.s
i386/sys/getattrlist.s
i386/sys/getaudit.s
i386/sys/getaudit_addr.s
i386/sys/getauid.s
i386/sys/getdirentries.s
i386/sys/getdirentriesattr.s
i386/sys/getdtablesize.s
i386/sys/getegid.s
i386/sys/geteuid.s
i386/sys/getfh.s
i386/sys/getfsstat.s
i386/sys/getgid.s
i386/sys/getgroups.s
i386/sys/getitimer.s
i386/sys/getpeername.s
i386/sys/getpgid.s
i386/sys/getpgrp.s
i386/sys/getpid.s
i386/sys/getppid.s
i386/sys/getpriority.s
i386/sys/getrlimit.s
i386/sys/getrusage.s
i386/sys/getsid.s
i386/sys/getsockname.s
i386/sys/getsockopt.s
i386/sys/getuid.s
i386/sys/getxattr.s
i386/sys/i386_gettimeofday.s
i386/sys/ioctl.s
i386/sys/issetugid.s
i386/sys/kevent.s
i386/sys/kill.s
i386/sys/kqueue.s
i386/sys/kqueue_from_portset_np.s
i386/sys/kqueue_portset_np.s
i386/sys/ktrace.s
i386/sys/lchown.s
i386/sys/link.s
i386/sys/lio_listio.s
i386/sys/listen.s
i386/sys/listxattr.s
i386/sys/load_shared_file.s
i386/sys/lseek.s
i386/sys/lstat.s
i386/sys/lstatv.s
i386/sys/madvise.s
i386/sys/mincore.s
i386/sys/minherit.s
i386/sys/mkcomplex.s
i386/sys/mkdir.s
i386/sys/mkfifo.s
i386/sys/mknod.s
i386/sys/mlock.s
i386/sys/mlockall.s
i386/sys/mount.s
i386/sys/msgget.s
i386/sys/msgrcv.s
i386/sys/msgsnd.s
i386/sys/msgsys.s
i386/sys/munlock.s
i386/sys/munlockall.s
i386/sys/new_system_shared_regions.s
i386/sys/nfsclnt.s
i386/sys/nfssvc.s
i386/sys/open.s
i386/sys/pathconf.s
i386/sys/pipe.s
i386/sys/poll.s
i386/sys/posix_madvise.s
i386/sys/pread.s
i386/sys/profil.s
i386/sys/pthread_sigmask.s
i386/sys/ptrace.s
i386/sys/pwrite.s
i386/sys/quota.s
i386/sys/quotactl.s
i386/sys/read.s
i386/sys/readlink.s
i386/sys/readv.s
i386/sys/reboot.s
i386/sys/recvfrom.s
i386/sys/recvmsg.s
i386/sys/removexattr.s
i386/sys/rename.s
i386/sys/reset_shared_file.s
i386/sys/revoke.s
i386/sys/rmdir.s
i386/sys/searchfs.s
i386/sys/select.s
i386/sys/sem_close.s
i386/sys/sem_destroy.s
i386/sys/sem_getvalue.s
i386/sys/sem_init.s
i386/sys/sem_post.s
i386/sys/sem_trywait.s
i386/sys/sem_wait.s
i386/sys/semget.s
i386/sys/semop.s
i386/sys/semsys.s
i386/sys/sendmsg.s
i386/sys/sendto.s
i386/sys/setattrlist.s
i386/sys/setaudit.s
i386/sys/setaudit_addr.s
i386/sys/setauid.s
i386/sys/setegid.s
i386/sys/seteuid.s
i386/sys/setgid.s
i386/sys/setgroups.s
i386/sys/setitimer.s
i386/sys/setjmp.s
i386/sys/setpgid.s
i386/sys/setpriority.s
i386/sys/setprivexec.s
i386/sys/setquota.s
i386/sys/setrlimit.s
i386/sys/setsid.s
i386/sys/setsockopt.s
i386/sys/settimeofday.s
i386/sys/setuid.s
i386/sys/setxattr.s
i386/sys/shmat.s
i386/sys/shmdt.s
i386/sys/shmget.s
i386/sys/shmsys.s
i386/sys/shutdown.s
i386/sys/sigaltstack.s
i386/sys/sigpending.s
i386/sys/sigprocmask.s
i386/sys/sigreturn.s
i386/sys/sigwait.s
i386/sys/socket.s
i386/sys/socketpair.s
i386/sys/stat.s
i386/sys/statfs.s
i386/sys/statv.s
i386/sys/swapon.s
i386/sys/symlink.s
i386/sys/sync.s
i386/sys/syscall.s
i386/sys/systable.s
i386/sys/truncate.s
i386/sys/umask.s
i386/sys/undelete.s
i386/sys/unlink.s
i386/sys/unmount.s
i386/sys/utimes.s
i386/sys/vfork.s
i386/sys/wait4.s
i386/sys/write.s
i386/sys/writev.s
include/libkern/OSAtomic.h
include/machine/limits.h
locale/Makefile.inc
mach/headers/task.h
mach/headers/thread_act.h
pthreads/Makefile.inc
pthreads/lock.s
pthreads/pthread.c
pthreads/pthread_internals.h
pthreads/stack.s
pthreads/thread_setup.c
sys/fcntl64.c
sys/sigtramp.c
x86_64/gen/Makefile.inc [new file with mode: 0644]
x86_64/gen/mcount.s [new file with mode: 0644]
x86_64/mach/Makefile.inc [new file with mode: 0644]
x86_64/pthreads/Makefile.inc [new file with mode: 0644]
x86_64/pthreads/get_cpu_capabilities.s [new file with mode: 0644]
x86_64/pthreads/pthread_getspecific.s [new file with mode: 0644]
x86_64/pthreads/pthread_self.s [new file with mode: 0644]
x86_64/pthreads/pthread_set_self.s [new file with mode: 0644]
x86_64/stdlib/gdtoa.mk [new file with mode: 0644]
x86_64/string/Makefile.inc [new file with mode: 0644]
x86_64/string/bcmp.s [new file with mode: 0644]
x86_64/string/bcopy.s [new file with mode: 0644]
x86_64/string/bzero.s [new file with mode: 0644]
x86_64/string/memcmp.s [new file with mode: 0644]
x86_64/string/memcpy.s [new file with mode: 0644]
x86_64/string/memmove.s [new file with mode: 0644]
x86_64/string/memset.s [new file with mode: 0644]
x86_64/string/strcmp.s [new file with mode: 0644]
x86_64/string/strcpy.s [new file with mode: 0644]
x86_64/string/strlen.s [new file with mode: 0644]
x86_64/string/strncmp.s [new file with mode: 0644]
x86_64/string/strncpy.s [new file with mode: 0644]
x86_64/sys/Makefile.inc [new file with mode: 0644]
x86_64/sys/OSAtomic.s [new file with mode: 0644]
x86_64/sys/SYS.h [new file with mode: 0644]
x86_64/sys/__fcntl.s [new file with mode: 0644]
x86_64/sys/__ioctl.s [new file with mode: 0644]
x86_64/sys/_setjmp.s [new file with mode: 0644]
x86_64/sys/cerror.s [new file with mode: 0644]
x86_64/sys/fork.s [new file with mode: 0644]
x86_64/sys/getpid.s [new file with mode: 0644]
x86_64/sys/i386_gettimeofday.s [new file with mode: 0644]
x86_64/sys/lseek.s [new file with mode: 0644]
x86_64/sys/pipe.s [new file with mode: 0644]
x86_64/sys/ptrace.s [new file with mode: 0644]
x86_64/sys/setjmp.s [new file with mode: 0644]
x86_64/sys/sigaltstack.s [new file with mode: 0644]
x86_64/sys/sigreturn.s [new file with mode: 0644]
x86_64/sys/syscall.s [new file with mode: 0644]
x86_64/sys/vfork.s [new file with mode: 0644]

diff --git a/BSDmakefile b/BSDmakefile
new file mode 100644 (file)
index 0000000..45d508d
--- /dev/null
@@ -0,0 +1,170 @@
+.ifndef OBJROOT
+OBJROOT != pwd
+.endif
+.ifndef SYMROOT
+SYMROOT != pwd
+.endif
+ARCH != arch
+.ifndef RC_ARCHS
+RC_ARCHS = $(ARCH)
+RC_$(RC_ARCHS) = 1
+.endif
+NARCHS != echo $(RC_ARCHS) | wc -w
+.ifdef ALTUSRLOCALLIBSYSTEM
+LIBSYS = $(ALTUSRLOCALLIBSYSTEM)
+.else
+LIBSYS = $(NEXT_ROOT)/usr/local/lib/system
+.endif
+NJOBS != perl -e '$$n = `/usr/sbin/sysctl -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)'
+BSDMAKE = bsdmake -f Makefile
+#BSDMAKEJ = $(BSDMAKE) -j $(NJOBS)
+BSDMAKEJ = $(BSDMAKE) -j $(NJOBS) -P
+
+# This variables are to guarantee that the left-hand side of an expression is
+# always a variable
+dynamic = dynamic
+static = static
+
+# Remove the arch stuff, since we know better here.
+LOCAL_CFLAGS != echo $(RC_CFLAGS) | sed 's/ *-arch [^ ][^ ]*//g'
+
+FORMS := dynamic debug profile static
+
+all: build
+
+# These are the non B&I defaults
+.ifndef RC_ProjectName
+installhdrs: installhdrs-real
+build: build-static build-profile build-debug build-dynamic
+install: installhdrs install-all
+
+.else # RC_ProjectName
+
+# And these are to deal with B&I building libc differently 
+# based on RC_ProjectName.
+.if $(RC_ProjectName) == Libc
+installhdrs:
+build: build-dynamic
+install: BI-install-dynamic
+.endif
+.if $(RC_ProjectName) == Libc_headers
+installhdrs: installhdrs-real
+build:
+install: installhdrs-real
+.endif
+.if $(RC_ProjectName) == Libc_man
+installhdrs:
+build:
+install: install-man
+.endif
+.if $(RC_ProjectName) == Libc_static
+installhdrs:
+build: build-static
+install: BI-install-static
+.endif
+.if $(RC_ProjectName) == Libc_debug
+installhdrs:
+build: build-debug
+install: BI-install-debug
+.endif
+.if $(RC_ProjectName) == Libc_profile
+installhdrs:
+build: build-profile
+install: BI-install-profile
+.endif
+.endif # RC_ProjectName
+
+# Because of 3780028, there are random failures on HFS because the
+# CC_PRINT_OPTIONS_FILE can't be created.  So we touch it first.
+.if !empty $(CC_PRINT_OPTIONS_FILE)
+$(CC_PRINT_OPTIONS_FILE):
+       touch $(CC_PRINT_OPTIONS_FILE)
+.endif # CC_PRINT_OPTIONS_FILE
+
+.for F in $(FORMS)
+.if $(dynamic) == $(F)
+SUFFIX$(F) =
+.else
+SUFFIX$(F) = _$(F)
+.endif
+LIPOARGS$(F) != perl -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libc$(SUFFIX$(F)).a\"), qw($(RC_ARCHS))))'
+
+build-$(F): autopatch $(CC_PRINT_OPTIONS_FILE)
+.for A in $(RC_ARCHS)
+build-$(F): build-$(A)-$(F)
+.endfor # RC_ARCHS
+build-$(F):
+.if $(NARCHS) == 1
+       cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc$(SUFFIX$(F)).a" "$(SYMROOT)"
+.else
+       lipo -create $(LIPOARGS$(F)) -output $(SYMROOT)/libc$(SUFFIX$(F)).a
+.endif
+
+.for A in $(RC_ARCHS)
+build-$(A)-$(F):
+       mkdir -p $(OBJROOT)/obj.$(A) && \
+       MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \
+               MAKEFLAGS="" CFLAGS="-arch $(A) $(LOCAL_CFLAGS)" $(BSDMAKEJ) libc$(SUFFIX$(F)).a
+.endfor # RC_ARCHS
+.endfor # FORMS
+
+# We have to separately call bsdmake to patch the FreeBSD files, because of
+# the way its cache works, it would otherwise pick A file in ${SYMROOT}, even
+# over A .s file.
+autopatch:
+.for A in $(RC_ARCHS)
+       MACHINE_ARCH="$(A)" $(BSDMAKEJ) autopatch
+.endfor # RC_ARCHS
+
+installsrc:
+       pax -rw . "$(SRCROOT)"
+
+installhdrs-real: $(CC_PRINT_OPTIONS_FILE)
+       MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \
+               $(BSDMAKEJ) installhdrs
+.for A in $(RC_ARCHS)
+       mkdir -p "$(OBJROOT)/obj.$(A)" && \
+       MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \
+               MAKEFLAGS="" $(BSDMAKEJ) installhdrs-md
+.endfor # RC_ARCHS
+
+.for F in $(FORMS)
+BI-install-$(F): build-$(F)
+       mkdir -p $(DSTROOT)/usr/local/lib/system
+       if [ -f "$(SYMROOT)/libc$(SUFFIX$(F)).a" ]; then \
+               echo "Installing libc$(SUFFIX$(F)).a" && \
+               install -c -m 444 "$(SYMROOT)/libc$(SUFFIX$(F)).a" \
+                       $(DSTROOT)/usr/local/lib/system && \
+               ranlib "$(DSTROOT)/usr/local/lib/system/libc$(SUFFIX$(F)).a"; \
+       fi
+.if !empty $(RC_ppc) && ($(static) != $(F))
+       if [ -f "$(OBJROOT)/obj.ppc/libc-ldbl128$(SUFFIX$(F)).a" ]; then \
+               echo "Installing libldbl128$(SUFFIX$(F)).a" ; \
+               $(SRCROOT)/make_libldbl128 "$(OBJROOT)/obj.ppc/libc-ldbl128$(SUFFIX$(F)).a" \
+                       "$(SUFFIX$(F))" "$(DSTROOT)/usr/local/lib/system" $(LIBSYS) ; \
+       fi
+.endif # RC_ppc && !static
+.endfor # FORMS
+
+# Don't use -j here; it may try to make links before the files are copied
+install-man:
+       mkdir -p $(DSTROOT)/usr/share/man/man2
+       mkdir -p $(DSTROOT)/usr/share/man/man3
+       mkdir -p $(DSTROOT)/usr/share/man/man4
+       mkdir -p $(DSTROOT)/usr/share/man/man5
+       mkdir -p $(DSTROOT)/usr/share/man/man7
+       MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" NOMANCOMPRESS=1 \
+               MACHINE_ARCH="$(ARCH)" MAKEFLAGS="" $(BSDMAKE) autopatchman maninstall
+
+install-all: build install-man
+.for F in $(FORMS)
+install-all: BI-install-$(F)
+.endfor # FORMS
+
+clean:
+.for F in $(FORMS)
+       rm -f $(OBJROOT)/libc$(SUFFIX$(F)).a
+.endfor # FORMS
+.for A in $(RC_ARCHS)
+       rm -rf $(OBJROOT)/obj.$(A)
+.endfor # RC_ARCHS
index 46b1c6616e4fd80e527ed3184752a36ccd6bee43..5b1746d7a30f8960d4355a144b2935f5e5bc70af 100644 (file)
@@ -1,304 +1,5 @@
-ifndef $(OBJROOT)
-OBJROOT = .
-endif
-ifndef $(SYMROOT)
-SYMROOT = .
-endif
-ARCH = $(shell arch)
-ifndef RC_ARCHS 
-RC_$(ARCH) = 1
-RC_ARCHS = $(ARCH)
-endif
-ifdef ALTUSRLOCALLIBSYSTEM
-LIBSYS = $(ALTUSRLOCALLIBSYSTEM)
-else
-LIBSYS = $(NEXT_ROOT)/usr/local/lib/system
-endif
-NJOBS = $(shell perl -e '$$n = `/usr/sbin/sysctl -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)')
-BSDMAKE = bsdmake -j $(NJOBS)
+all:
+       @bsdmake
 
-# Remove the arch stuff, since we know better here.  
-LOCAL_CFLAGS = $(filter-out -arch ppc -arch ppc64 -arch i386,$(RC_CFLAGS))
-
-all: build
-
-# These are the non B&I defaults
-ifndef RC_ProjectName
-installhdrs: installhdrs-real
-build: build-static build-profile build-debug build-dynamic
-install: installhdrs install-all
-endif
-
-# And these are to deal with B&I building libc differently 
-# based on RC_ProjectName.
-ifeq ($(RC_ProjectName),Libc)
-installhdrs:
-build: build-dynamic
-install: BI-install-dynamic
-endif
-ifeq ($(RC_ProjectName),Libc_headers)
-installhdrs: installhdrs-real
-build:
-install: installhdrs-real
-endif
-ifeq ($(RC_ProjectName),Libc_man)
-installhdrs:
-build:
-install: install-man
-endif
-ifeq ($(RC_ProjectName),Libc_static)
-installhdrs:
-build: build-static
-install: BI-install-static
-endif
-ifeq ($(RC_ProjectName),Libc_debug)
-installhdrs:
-build: build-debug
-install: BI-install-debug
-endif
-ifeq ($(RC_ProjectName),Libc_profile)
-installhdrs:
-build: build-profile
-install: BI-install-profile
-endif
-
-# Because of 3780028, there are random failures on HFS because the
-# CC_PRINT_OPTIONS_FILE can't be created.  So we touch it first.
-ifneq ($(CC_PRINT_OPTIONS_FILE),)
-$(CC_PRINT_OPTIONS_FILE):
-       touch $(CC_PRINT_OPTIONS_FILE)
-endif
-
-build-static: autopatch $(CC_PRINT_OPTIONS_FILE) build-ppc-static build-ppc64-static build-i386-static
-       @echo "Creating final libc_static.a"
-ifeq ($(words $(RC_ARCHS)),1)
-       cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc_static.a" "$(SYMROOT)"
-else
-       lipo -create \
-               $(foreach A,$(RC_ARCHS),-arch $(A) "$(OBJROOT)/obj.$(A)/libc_static.a") \
-               -output $(SYMROOT)/libc_static.a
-endif
-build-profile: autopatch $(CC_PRINT_OPTIONS_FILE) build-ppc-profile build-ppc64-profile build-i386-profile
-       @echo "Creating final libc_profile.a"
-ifeq ($(words $(RC_ARCHS)),1)
-       cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc_profile.a" "$(SYMROOT)"
-else
-       lipo -create \
-               $(foreach A,$(RC_ARCHS),-arch $(A) "$(OBJROOT)/obj.$(A)/libc_profile.a") \
-               -output $(SYMROOT)/libc_profile.a
-endif
-build-debug: autopatch $(CC_PRINT_OPTIONS_FILE) build-ppc-debug build-ppc64-debug build-i386-debug
-       @echo "Creating final libc_debug.a"
-ifeq ($(words $(RC_ARCHS)),1)
-       cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc_debug.a" "$(SYMROOT)"
-else
-       lipo -create \
-               $(foreach A,$(RC_ARCHS),-arch $(A) "$(OBJROOT)/obj.$(A)/libc_debug.a") \
-               -output $(SYMROOT)/libc_debug.a
-endif
-build-dynamic: autopatch $(CC_PRINT_OPTIONS_FILE) build-ppc-dynamic build-ppc64-dynamic build-i386-dynamic
-       @echo "Creating final libc.a"
-ifeq ($(words $(RC_ARCHS)),1)
-       cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc.a" "$(SYMROOT)"
-else
-       lipo -create \
-               $(foreach A,$(RC_ARCHS),-arch $(A) "$(OBJROOT)/obj.$(A)/libc.a") \
-               -output $(SYMROOT)/libc.a
-endif
-build-ppc-static:
-ifneq ($(RC_ppc),)
-       mkdir -p $(OBJROOT)/obj.ppc ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-               MAKEFLAGS="" CFLAGS="-arch ppc $(LOCAL_CFLAGS)" $(BSDMAKE) libc_static.a
-endif
-build-ppc64-static:
-ifneq ($(RC_ppc64),)
-       mkdir -p $(OBJROOT)/obj.ppc64 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-               MAKEFLAGS="" CFLAGS="-arch ppc64 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_static.a
-endif
-build-i386-static:
-ifneq ($(RC_i386),)
-       mkdir -p $(OBJROOT)/obj.i386 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-               MAKEFLAGS="" CFLAGS="-arch i386 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_static.a
-endif
-build-ppc-profile:
-ifneq ($(RC_ppc),)
-       mkdir -p $(OBJROOT)/obj.ppc ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-               MAKEFLAGS="" CFLAGS="-arch ppc $(LOCAL_CFLAGS)" $(BSDMAKE) libc_profile.a
-endif
-build-ppc64-profile:
-ifneq ($(RC_ppc64),)
-       mkdir -p $(OBJROOT)/obj.ppc64 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-               MAKEFLAGS="" CFLAGS="-arch ppc64 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_profile.a
-endif
-build-i386-profile:
-ifneq ($(RC_i386),)
-       mkdir -p $(OBJROOT)/obj.i386 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-               MAKEFLAGS="" CFLAGS="-arch i386 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_profile.a
-endif
-build-ppc-debug:
-ifneq ($(RC_ppc),)
-       mkdir -p $(OBJROOT)/obj.ppc ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-               MAKEFLAGS="" CFLAGS="-arch ppc $(LOCAL_CFLAGS)" $(BSDMAKE) libc_debug.a
-endif
-build-ppc64-debug:
-ifneq ($(RC_ppc64),)
-       mkdir -p $(OBJROOT)/obj.ppc64 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-               MAKEFLAGS="" CFLAGS="-arch ppc64 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_debug.a
-endif
-build-i386-debug:
-ifneq ($(RC_i386),)
-       mkdir -p $(OBJROOT)/obj.i386 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-               MAKEFLAGS="" CFLAGS="-arch i386 $(LOCAL_CFLAGS)" $(BSDMAKE) libc_debug.a
-endif
-build-ppc-dynamic:
-ifneq ($(RC_ppc),)
-       mkdir -p $(OBJROOT)/obj.ppc ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-               MAKEFLAGS="" CFLAGS="-arch ppc $(LOCAL_CFLAGS)" $(BSDMAKE) libc.a
-endif
-build-ppc64-dynamic:
-ifneq ($(RC_ppc64),)
-       mkdir -p $(OBJROOT)/obj.ppc64 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-               MAKEFLAGS="" CFLAGS="-arch ppc64 $(LOCAL_CFLAGS)" $(BSDMAKE) libc.a
-endif
-build-i386-dynamic:
-ifneq ($(RC_i386),)
-       mkdir -p $(OBJROOT)/obj.i386 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-               MAKEFLAGS="" CFLAGS="-arch i386 $(LOCAL_CFLAGS)" $(BSDMAKE) libc.a
-endif
-build-ppc:
-ifneq ($(RC_ppc),)
-       mkdir -p $(OBJROOT)/obj.ppc ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-               MAKEFLAGS="" CFLAGS="-arch ppc $(LOCAL_CFLAGS)" $(BSDMAKE) build
-endif
-build-ppc64:
-ifneq ($(RC_ppc64),)
-       mkdir -p $(OBJROOT)/obj.ppc64 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-               MAKEFLAGS="" CFLAGS="-arch ppc64 $(LOCAL_CFLAGS)" $(BSDMAKE) build
-endif
-build-i386:
-ifneq ($(RC_i386),)
-       mkdir -p $(OBJROOT)/obj.i386 ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-               MAKEFLAGS="" CFLAGS="-arch i386 $(LOCAL_CFLAGS)" $(BSDMAKE) build
-endif
-
-# We have to separately call bsdmake to patch the FreeBSD files, because of
-# the way its cache works, it would otherwise pick a file in ${SYMROOT}, even
-# over a .s file.
-autopatch:
-ifneq ($(RC_i386),)
-       MACHINE_ARCH="i386" $(BSDMAKE) autopatch
-endif
-ifneq ($(RC_ppc),)
-       MACHINE_ARCH="ppc" $(BSDMAKE) autopatch
-endif
-ifneq ($(RC_ppc64),)
-       MACHINE_ARCH="ppc64" $(BSDMAKE) autopatch
-endif
-
-installsrc:
-       $(_v) pax -rw . "$(SRCROOT)"
-
-installhdrs-real: $(CC_PRINT_OPTIONS_FILE)
-       MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \
-               $(BSDMAKE) installhdrs
-ifneq ($(RC_i386),)
-       mkdir -p "$(OBJROOT)/obj.i386" ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.i386" MACHINE_ARCH="i386" \
-           MAKEFLAGS="" $(BSDMAKE) installhdrs-md
-endif
-ifneq ($(RC_ppc),)
-       mkdir -p "$(OBJROOT)/obj.ppc" ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc" MACHINE_ARCH="ppc" \
-           MAKEFLAGS="" $(BSDMAKE) installhdrs-md
-endif
-ifneq ($(RC_ppc64),)
-       mkdir -p "$(OBJROOT)/obj.ppc64" ; \
-       MAKEOBJDIR="$(OBJROOT)/obj.ppc64" MACHINE_ARCH="ppc64" \
-           MAKEFLAGS="" $(BSDMAKE) installhdrs-md
-endif
-
-BI-install-static: build-static
-       mkdir -p $(DSTROOT)/usr/local/lib/system
-       if [ -f "$(SYMROOT)/libc_static.a" ]; then \
-               echo "Installing libc_static.a" ; \
-               install -c -m 444 "$(SYMROOT)/libc_static.a" \
-                       $(DSTROOT)/usr/local/lib/system; \
-               ranlib "$(DSTROOT)/usr/local/lib/system/libc_static.a"; \
-       fi
-BI-install-profile: build-profile
-       mkdir -p $(DSTROOT)/usr/local/lib/system
-       if [ -f "$(SYMROOT)/libc_profile.a" ]; then \
-               echo "Installing libc_profile.a" ; \
-               install -c -m 444 "$(SYMROOT)/libc_profile.a" \
-                       $(DSTROOT)/usr/local/lib/system; \
-               ranlib "$(DSTROOT)/usr/local/lib/system/libc_profile.a"; \
-       fi
-ifneq ($(RC_ppc),)
-       if [ -f "$(OBJROOT)/obj.ppc/libc-ldbl128_profile.a" ]; then \
-               echo "Installing libldbl128_profile.a" ; \
-               $(SRCROOT)/make_libldbl128 "$(OBJROOT)/obj.ppc/libc-ldbl128_profile.a" \
-                       "_profile" "$(DSTROOT)/usr/local/lib/system" $(LIBSYS) ; \
-       fi
-endif
-BI-install-debug: build-debug
-       mkdir -p $(DSTROOT)/usr/local/lib/system
-       if [ -f "$(SYMROOT)/libc_debug.a" ]; then \
-               echo "Installing libc_debug.a" ; \
-               install -c -m 444 "$(SYMROOT)/libc_debug.a" \
-                       $(DSTROOT)/usr/local/lib/system; \
-               ranlib "$(DSTROOT)/usr/local/lib/system/libc_debug.a"; \
-       fi
-ifneq ($(RC_ppc),)
-       if [ -f "$(OBJROOT)/obj.ppc/libc-ldbl128_debug.a" ]; then \
-               echo "Installing libldbl128_debug.a" ; \
-               $(SRCROOT)/make_libldbl128 "$(OBJROOT)/obj.ppc/libc-ldbl128_debug.a" \
-                       "_debug" "$(DSTROOT)/usr/local/lib/system" $(LIBSYS) ; \
-       fi
-endif
-BI-install-dynamic: build-dynamic
-       mkdir -p $(DSTROOT)/usr/local/lib/system
-       if [ -f "$(SYMROOT)/libc.a" ]; then \
-               echo "Installing libc.a" ; \
-               install -c -m 444 "$(SYMROOT)/libc.a" \
-                       $(DSTROOT)/usr/local/lib/system; \
-               ranlib "$(DSTROOT)/usr/local/lib/system/libc.a"; \
-       fi
-ifneq ($(RC_ppc),)
-       if [ -f "$(OBJROOT)/obj.ppc/libc-ldbl128.a" ]; then \
-               echo "Installing libldbl128.a" ; \
-               $(SRCROOT)/make_libldbl128 "$(OBJROOT)/obj.ppc/libc-ldbl128.a" \
-                       "" "$(DSTROOT)/usr/local/lib/system" $(LIBSYS) ; \
-       fi
-endif
-
-# Don't use -j here; it may try to make links before the files are copied
-install-man:
-       mkdir -p $(DSTROOT)/usr/share/man/man2
-       mkdir -p $(DSTROOT)/usr/share/man/man3
-       mkdir -p $(DSTROOT)/usr/share/man/man4
-       mkdir -p $(DSTROOT)/usr/share/man/man5
-       mkdir -p $(DSTROOT)/usr/share/man/man7
-       MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" NOMANCOMPRESS=1 \
-               MACHINE_ARCH="$(shell arch)" MAKEFLAGS="" bsdmake autopatchman maninstall
-
-install-all: build install-man BI-install-dynamic BI-install-static BI-install-profile BI-install-debug
-
-clean:
-       rm -rf $(OBJROOT)/obj.ppc $(OBJROOT)/obj.i386 $(OBJROOT)/libc.a \
-               $(OBJROOT)/libc_static.a $(OBJROOT)/libc_debug.a \
-               $(OBJROOT)/libc_profile.a
+.DEFAULT:
+       @bsdmake $@
index b190072561de04840b269a723b79587be23fd930..d8357bcfeafa5c023170cb5312f7562382c14498 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,16 +19,16 @@ SHLIB_MINOR= 0
 .if (${MACHINE_ARCH} == unknown)
 MACHINE_ARCH != /usr/bin/arch
 .endif 
+.if !empty $(MACHINE_ARCH:M*64)
+LP64 = 1
+.endif
 CC = gcc-4.0
 # always set __DARWIN_UNIX03 to zero (variant will set to one) except for ppc64
-.if (${MACHINE_ARCH} == ppc64)
+.ifdef LP64
 CFLAGS += -D__DARWIN_UNIX03=1
 .else
 CFLAGS += -D__DARWIN_UNIX03=0
 .endif
-.if (${MACHINE_ARCH} == i386)
-CFLAGS += -march=prescott -msse3
-.endif
 CFLAGS += -D__LIBC__ -DNOID -I${.CURDIR}/include
 .ifdef ALTLIBCHEADERS
 INCLUDEDIR = ${ALTLIBCHEADERS}
index c8deeb2d61c85b1741fdc3cff868b5ee24b663f6..efbfdac9519429bef525413ad69654da385e6286 100644 (file)
@@ -19,6 +19,8 @@
 # should only be installed once as well.  Both of these get done when
 # we're invoked as "Libc".
 
+BSDMAKE = bsdmake -f Makefile
+
 .PATH: .
 .MAIN: all
 all: libc.a libc_static.a libc_debug.a libc_profile.a
@@ -84,8 +86,8 @@ VARIANTS=
 VARIANTS+= LDBL
 MDSRCS += ldbl64.s
 .endif
-# build UNIX03 variant except on ppc64
-.if (${MACHINE_ARCH} != ppc64)
+# build UNIX03 variant except on LP64
+.ifndef LP64
 VARIANTS+= UNIX03
 .endif
 CFLAGS+= ${VARIANTCFLAGS}
@@ -103,29 +105,29 @@ VARIANTCOMBOCFLAGS != ${.CURDIR}/makeCombos ${COMBOARGS}
 .endif
 # For each of the variant combinations as target (and possibly suffixed with
 # _D, _P, and _S for the four kinds on compile styles, we create a subdirectory
-# to do the compiling in, and then call bsdmake with the new directory, and
+# to do the compiling in, and then call $(BSDMAKE) with the new directory, and
 # setting VARIANTCFLAGS, which are the extra flags to be added to CFLAGS.
 .for _v in ${VARIANTCOMBOCFLAGS}
 VARIANTCOMBOS+= ${_v:H:S,/,,}
 ${_v:H:S,/,,}:
 .ifdef ${_v:H:S,/,,}SRCS
        mkdir -p ${MAKEOBJDIR}/${_v:H:S,/,,}; \
-       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" bsdmake -C "${.CURDIR}" build_${_v:H:S,/,,}
+       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" $(BSDMAKE) -C "${.CURDIR}" build_${_v:H:S,/,,}
 .endif
 ${_v:H:S,/,,}_D:
 .ifdef ${_v:H:S,/,,}SRCS
        mkdir -p ${MAKEOBJDIR}/${_v:H:S,/,,}; \
-       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" bsdmake -C "${.CURDIR}" build_${_v:H:S,/,,}_D
+       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" $(BSDMAKE) -C "${.CURDIR}" build_${_v:H:S,/,,}_D
 .endif
 ${_v:H:S,/,,}_P:
 .ifdef ${_v:H:S,/,,}SRCS
        mkdir -p ${MAKEOBJDIR}/${_v:H:S,/,,}; \
-       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" bsdmake -C "${.CURDIR}" build_${_v:H:S,/,,}_P
+       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" $(BSDMAKE) -C "${.CURDIR}" build_${_v:H:S,/,,}_P
 .endif
 ${_v:H:S,/,,}_S:
 .ifdef ${_v:H:S,/,,}SRCS
        mkdir -p ${MAKEOBJDIR}/${_v:H:S,/,,}; \
-       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" bsdmake -C "${.CURDIR}" build_${_v:H:S,/,,}_S
+       MAKEOBJDIR="$(MAKEOBJDIR)/${_v:H:S,/,,}" VARIANTCFLAGS="-DBUILDING_VARIANT ${_v:T:S/@/ /g}" $(BSDMAKE) -C "${.CURDIR}" build_${_v:H:S,/,,}_S
 .endif
 .endfor
 
@@ -136,7 +138,7 @@ ${_v:H:S,/,,}_S:
 .o-${_v}.o .do-${_v}.do .po-${_v}.po .So-${_v}.So:
        mv ${.IMPSRC} ${.TARGET}
 
-# These are the build targets of the above bsdmake calls, which just builds
+# These are the build targets of the above $(BSDMAKE) calls, which just builds
 # using the standard rules, but with the additional flags.
 VARIANTOBJS+=  ${${_v}SRCS:N*.h:R:S/$/-${_v}.o/g:S,^,${_v}/,g}
 build_${_v}:   ${${_v}SRCS:N*.h:R:S/$/-${_v}.o/g}
index 69ffc7bbd1b126bb5d164b834e2e31b732ce0021..449f6ee1bd2f684a2b7523dc9f31a79b64562fe1 100644 (file)
@@ -34,6 +34,7 @@
 #include <fcntl.h>
 #include <sys/errno.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/xattr.h>
 #include <sys/syscall.h>
 #include <sys/param.h>
@@ -123,7 +124,6 @@ int copyfile(const char *src, const char *dst, copyfile_state_t state, copyfile_
        }
        copyfile_debug(1, "debug value set to: %d\n", s->debug);
     }
-
     if (COPYFILE_CHECK & flags)
        return copyfile_check(s);
 
@@ -951,12 +951,12 @@ swap_attrhdr(attr_header_t *ah)
 #endif
 }
 
-static u_int32_t emptyfinfo[8] = {0};
+static const u_int32_t emptyfinfo[8] = {0};
 
 static int copyfile_unpack(copyfile_state_t s)
 {
-    int bytes;
-    void * buffer;
+    ssize_t bytes;
+    void * buffer, * endptr;
     apple_double_header_t *adhdr;
     size_t hdrsize;
     int error = 0;
@@ -967,6 +967,13 @@ static int copyfile_unpack(copyfile_state_t s)
        hdrsize = ATTR_MAX_HDR_SIZE;
 
     buffer = calloc(1, hdrsize);
+    if (buffer == NULL) {
+       copyfile_debug(1, "copyfile_unpack: calloc(1, %u) returned NULL", hdrsize);
+       error = -1;
+       goto exit;
+    } else
+       endptr = (char*)buffer + hdrsize;
+
     bytes = pread(s->src_fd, buffer, hdrsize, 0);
 
     if (bytes < 0)
@@ -1016,6 +1023,12 @@ static int copyfile_unpack(copyfile_state_t s)
        int count;
        int i;
 
+       if (hdrsize < sizeof(attr_header_t)) {
+               copyfile_warn("bad attribute header:  %u < %u", hdrsize, sizeof(attr_header_t));
+               error = -1;
+               goto exit;
+       }
+
        attrhdr = (attr_header_t *)buffer;
        swap_attrhdr(attrhdr);
        if (attrhdr->magic != ATTR_HDR_MAGIC)
@@ -1027,10 +1040,91 @@ static int copyfile_unpack(copyfile_state_t s)
        }
        count = attrhdr->num_attrs;
        entry = (attr_entry_t *)&attrhdr[1];
+
        for (i = 0; i < count; i++)
        {
            void * dataptr;
 
+           /*
+            * First we do some simple sanity checking.
+            * +) See if entry is within the buffer's range;
+            *
+            * +) Check the attribute name length; if it's longer than the
+            * maximum, we truncate it down.  (We could error out as well;
+            * I'm not sure which is the better way to go here.)
+            *
+            * +) If, given the name length, it goes beyond the end of
+            * the buffer, error out.
+            *
+            * +) If the last byte isn't a NUL, make it a NUL.  (Since we
+            * truncated the name length above, we truncate the name here.)
+            *
+            * +) If entry->offset is so large that it causes dataptr to
+            * go beyond the end of the buffer -- or, worse, so large that
+            * it wraps around! -- we error out.
+            *
+            * +) If entry->length would cause the entry to go beyond the
+            * end of the buffer (or, worse, wrap around to before it),
+            * *or* if the length is larger than the hdrsize, we error out.
+            * (An explanation of that:  what we're checking for there is
+            * the small range of values such that offset+length would cause
+            * it to go beyond endptr, and then wrap around past buffer.  We
+            * care about this because we are passing entry->length down to
+            * fgetxattr() below, and an erroneously large value could cause
+            * problems there.  By making sure that it's less than hdrsize,
+            * which has already been sanity-checked above, we're safe.
+            * That may mean that the check against < buffer is unnecessary.)
+            */
+           if ((void*)entry >= endptr || (void*)entry < buffer) {
+               if (COPYFILE_VERBOSE & s->flags)
+                   copyfile_warn("Incomplete or corrupt attribute entry");
+               error = -1;
+               goto exit;
+           }
+
+           if (((void*)entry + sizeof(*entry)) > endptr) {
+               if (COPYFILE_VERBOSE & s->flags)
+                   copyfile_warn("Incomplete or corrupt attribute entry");
+               error = -1;
+               goto exit;
+           }
+
+           if (entry->namelen > ATTR_MAX_NAME_LEN) {
+               entry->namelen = ATTR_MAX_NAME_LEN;
+           }
+           if ((void*)(entry->name + entry->namelen) >= endptr) {
+               if (COPYFILE_VERBOSE & s->flags)
+                   copyfile_warn("Incomplete or corrupt attribute entry");
+               error = -1;
+               goto exit;
+           }
+
+           if (entry->name[entry->namelen] != 0) {
+               entry->name[entry->namelen] = 0;
+           }
+
+           copyfile_debug(3, "extracting \"%s\" (%d bytes) at offset %u",
+               entry->name, entry->length, entry->offset);
+
+           dataptr = (char *)attrhdr + entry->offset;
+
+           if (dataptr >= endptr || dataptr < buffer) {
+               copyfile_debug(1, "Entry %d overflows:  offset = %u", entry->offset);
+               error = -1;
+               goto exit;
+           }
+           if ((dataptr + entry->length) > endptr ||
+               ((dataptr + entry->length) < buffer) ||
+               (entry->length > hdrsize)) {
+               if (COPYFILE_VERBOSE & s->flags)
+                   copyfile_warn("Incomplete or corrupt attribute entry");
+               copyfile_debug(1, "Entry %d length overflows:  dataptr = %u, offset = %u, length = %u, buffer = %u, endptr = %u",
+                       i, dataptr, entry->offset, entry->length, buffer, endptr);
+               error = -1;
+               goto exit;
+           }
+
+           if (COPYFILE_ACL & s->flags && strcmp((char*)entry->name, XATTR_SECURITY_NAME) == 0)
            copyfile_debug(2, "extracting \"%s\" (%d bytes)",
                entry->name, entry->length);
            dataptr = (char *)attrhdr + entry->offset;
@@ -1053,8 +1147,7 @@ static int copyfile_unpack(copyfile_state_t s)
                                        copyfile_warn("setting security information");
                                acl_free(acl);
                            }
-                   } else
-                   if (COPYFILE_XATTR & s->flags && (fsetxattr(s->dst_fd, entry->name, dataptr, entry->length, 0, 0))) {
+                   } else if (COPYFILE_XATTR & s->flags && (fsetxattr(s->dst_fd, entry->name, dataptr, entry->length, 0, 0))) {
                            if (COPYFILE_VERBOSE & s->flags)
                                    copyfile_warn("error %d setting attribute %s", error, entry->name);
                            goto exit;
@@ -1076,6 +1169,11 @@ static int copyfile_unpack(copyfile_state_t s)
     /*
      * Extract the Finder Info.
      */
+    if (adhdr->entries[0].offset > (hdrsize - sizeof(emptyfinfo))) {
+       error = -1;
+       goto exit;
+    }
+
     if (bcmp((u_int8_t*)buffer + adhdr->entries[0].offset, emptyfinfo, sizeof(emptyfinfo)) != 0)
     {
        copyfile_debug(1, " extracting \"%s\" (32 bytes)", XATTR_FINDERINFO_NAME);
@@ -1090,7 +1188,7 @@ static int copyfile_unpack(copyfile_state_t s)
     if (adhdr->entries[1].type == AD_RESOURCE &&
        adhdr->entries[1].length > 0)
     {
-       void * rsrcforkdata;
+       void * rsrcforkdata = NULL;
        size_t length;
        off_t offset;
 
@@ -1098,6 +1196,13 @@ static int copyfile_unpack(copyfile_state_t s)
        offset = adhdr->entries[1].offset;
        rsrcforkdata = malloc(length);
 
+       if (rsrcforkdata == NULL) {
+               copyfile_debug(1, "could not allocate %u bytes for rsrcforkdata",
+                              length);
+               error = -1;
+               goto bad;
+       }
+
        bytes = pread(s->src_fd, rsrcforkdata, length, offset);
        if (bytes < length)
        {
@@ -1112,21 +1217,23 @@ static int copyfile_unpack(copyfile_state_t s)
                    (int)bytes, (int)length);
            }
            error = -1;
-           goto exit;
+           goto bad;
        }
        error = fsetxattr(s->dst_fd, XATTR_RESOURCEFORK_NAME, rsrcforkdata, bytes, 0, 0);
        if (error)
        {
            copyfile_debug(1, "error %d setting resource fork attribute", error);
            error = -1;
-           goto exit;
+           goto bad;
        }
            copyfile_debug(1, "extracting \"%s\" (%d bytes)",
                    XATTR_RESOURCEFORK_NAME, (int)length);
-       free(rsrcforkdata);
+bad:
+       if (rsrcforkdata)
+           free(rsrcforkdata);
     }
 exit:
-    free(buffer);
+    if (buffer) free(buffer);
     return error;
 }
 
@@ -1201,11 +1308,11 @@ static int copyfile_pack_rsrcfork(copyfile_state_t s, attr_header_t *filehdr)
 
 static int copyfile_pack(copyfile_state_t s)
 {
-    char *attrnamebuf;
-    void *databuf;
-    attr_header_t *filehdr;
+    char *attrnamebuf = NULL, *endnamebuf;
+    void *databuf = NULL;
+    attr_header_t *filehdr, *endfilehdr;
     attr_entry_t *entry;
-    ssize_t listsize;
+    ssize_t listsize = 0;
     char *nameptr;
     int namelen;
     int entrylen;
@@ -1215,7 +1322,20 @@ static int copyfile_pack(copyfile_state_t s)
     int error = 0;
 
     filehdr = (attr_header_t *) calloc(1, ATTR_MAX_SIZE);
+    if (filehdr == NULL) {
+       error = -1;
+       goto exit;
+    } else {
+           endfilehdr = ((void*)filehdr) + ATTR_MAX_SIZE;
+    }
+
     attrnamebuf = calloc(1, ATTR_MAX_HDR_SIZE);
+    if (attrnamebuf == NULL) {
+       error = -1;
+       goto exit;
+    } else {
+       endnamebuf = ((char*)attrnamebuf) + ATTR_MAX_HDR_SIZE;
+    }
 
     /*
      * Fill in the Apple Double Header defaults.
@@ -1260,26 +1380,36 @@ static int copyfile_pack(copyfile_state_t s)
 
     if (COPYFILE_XATTR & s->flags)
     {
-        if ((listsize = flistxattr(s->src_fd, attrnamebuf + offset, ATTR_MAX_HDR_SIZE, 0)) <= 0)
+       ssize_t left = ATTR_MAX_HDR_SIZE - offset;
+        if ((listsize = flistxattr(s->src_fd, attrnamebuf + offset, left, 0)) <= 0)
        {
            copyfile_debug(1, "no extended attributes found (%d)", errno);
        }
-       if (listsize > ATTR_MAX_HDR_SIZE)
+       if (listsize > left)
        {
            copyfile_debug(1, "extended attribute list too long");
            listsize = ATTR_MAX_HDR_SIZE;
        }
 
        listsize += offset;
+       endnamebuf = attrnamebuf + listsize;
+       if (endnamebuf > (attrnamebuf + ATTR_MAX_HDR_SIZE)) {
+           error = -1;
+           goto exit;
+       }
 
-       for (nameptr = attrnamebuf; nameptr < attrnamebuf + listsize; nameptr += namelen)
+       for (nameptr = attrnamebuf; nameptr <endnamebuf; nameptr += namelen)
        {
            namelen = strlen(nameptr) + 1;
            /* Skip over FinderInfo or Resource Fork names */
-           if (strncmp(nameptr, XATTR_FINDERINFO_NAME, strlen(XATTR_FINDERINFO_NAME)) == 0 ||
-               strncmp(nameptr, XATTR_RESOURCEFORK_NAME, strlen(XATTR_RESOURCEFORK_NAME)) == 0)
+           if (strcmp(nameptr, XATTR_FINDERINFO_NAME) == 0 ||
+               strcmp(nameptr, XATTR_RESOURCEFORK_NAME) == 0)
                    continue;
 
+           /* The system should prevent this from happening, but... */
+           if (namelen > XATTR_MAXNAMELEN + 1) {
+               namelen = XATTR_MAXNAMELEN + 1;
+           }
            entry->namelen = namelen;
            entry->flags = 0;
            bcopy(nameptr, &entry->name[0], namelen);
@@ -1287,7 +1417,12 @@ static int copyfile_pack(copyfile_state_t s)
 
            entrylen = ATTR_ENTRY_LENGTH(namelen);
            entry = (attr_entry_t *)(((char *)entry) + entrylen);
-           
+
+           if ((void*)entry > (void*)endfilehdr) {
+                   error = -1;
+                   goto exit;
+           }
+
            /* Update the attributes header. */
            filehdr->num_attrs++;
            filehdr->data_start += entrylen;
@@ -1301,14 +1436,13 @@ static int copyfile_pack(copyfile_state_t s)
 
     for (nameptr = attrnamebuf; nameptr < attrnamebuf + listsize; nameptr += namelen + 1)
     {
-       nameptr = nameptr;
        namelen = strlen(nameptr);
 
-       if (strncmp(nameptr, XATTR_SECURITY_NAME, strlen(XATTR_SECURITY_NAME)) == 0)
+       if (strcmp(nameptr, XATTR_SECURITY_NAME) == 0)
            copyfile_pack_acl(s, &databuf, &datasize);
        else
        /* Check for Finder Info. */
-       if (strncmp(nameptr, XATTR_FINDERINFO_NAME, strlen(XATTR_FINDERINFO_NAME)) == 0)
+       if (strcmp(nameptr, XATTR_FINDERINFO_NAME) == 0)
        {
            datasize = fgetxattr(s->src_fd, nameptr, (u_int8_t*)filehdr + filehdr->appledouble.entries[0].offset, 32, 0, 0);
            if (datasize < 0)
@@ -1328,7 +1462,7 @@ static int copyfile_pack(copyfile_state_t s)
            continue;  /* finder info doesn't have an attribute entry */
        } else
        /* Check for Resource Fork. */
-       if (strncmp(nameptr, XATTR_RESOURCEFORK_NAME, strlen(XATTR_RESOURCEFORK_NAME)) == 0)
+       if (strcmp(nameptr, XATTR_RESOURCEFORK_NAME) == 0)
        {
            hasrsrcfork = 1;
            continue;
@@ -1351,6 +1485,10 @@ static int copyfile_pack(copyfile_state_t s)
                goto next;
            }
            databuf = malloc(datasize);
+           if (databuf == NULL) {
+               error = -1;
+               continue;
+           }
            datasize = fgetxattr(s->src_fd, nameptr, databuf, datasize, 0, 0);
        }
 
@@ -1364,7 +1502,12 @@ static int copyfile_pack(copyfile_state_t s)
         * the case when there are lots of attributes or one of
         * the attributes is very large.
         */
-       bcopy(databuf, (char*)filehdr + entry->offset, datasize);
+       if (entry->offset > ATTR_MAX_SIZE ||
+               (entry->offset + datasize > ATTR_MAX_SIZE)) {
+               error = -1;
+       } else {
+               bcopy(databuf, (char*)filehdr + entry->offset, datasize);
+       }
        free(databuf);
 
        copyfile_debug(1, "copied %ld bytes of \"%s\" data @ offset 0x%08x", datasize, nameptr, entry->offset);
@@ -1404,8 +1547,8 @@ next:
        goto exit;
     }
 exit:
-    free(filehdr);
-    free(attrnamebuf);
+    if (filehdr) free(filehdr);
+    if (attrnamebuf) free(attrnamebuf);
 
     if (error)
        return error;
index fff55b478ba92b554f4a8427ab2f9ec2b9a24bb0..3871ec260aed6535422c62427a3b57e75bf02c23 100644 (file)
@@ -75,7 +75,7 @@ __private_extern__ void _ldbl2array32dd(union IEEEl2bits, uint32_t *);
 
 #define        LDBL_TO_ARRAY32(u, a) _ldbl2array32dd(u, a)
 
-#elif defined(__i386__)
+#elif defined(__i386__) || defined(__x86_64__)
 
 union IEEEl2bits {
        long double     e;
index 0885212b298f461eca161116339ca75e13be6c9d..f1c936efd832760080e03fc8ee96d83dd622fd5f 100644 (file)
 #elif defined(__i386__)
 #define IEEE_8087
 #define Arith_Kind_ASL 1
+#elif defined(__x86_64__)
+#define IEEE_8087
+#define Arith_Kind_ASL 1
+#define Long int
 #else
 #error Unsupported architecture
 #endif
index 7f432a3a6c85235aaaa7b7ffbfd7849488fc1ea5..ea5fd60bba87021440af15133ac2dd5d9a0fbd58 100644 (file)
@@ -13,7 +13,7 @@
 #define ldus_QNAN3 0x0
 #define ldus_QNAN4 0x0
 
-#elif defined(__i386__)
+#elif defined(__i386__) || defined(__x86_64__)
 
 #define f_QNAN 0xffc00000
 #define d_QNAN0 0x0
index 818ed56b85409b2ad0fa5b9b8c84ff3849818d77..ac2f9cd0798c89f00aba6aeef86a131850017903 100644 (file)
@@ -1,19 +1,98 @@
---- getcwd.c.orig      2003-10-29 02:45:01.000000000 -0800
-+++ getcwd.c   2004-10-24 17:19:39.000000000 -0700
-@@ -54,8 +54,6 @@
+--- getcwd.c.orig      2006-01-19 18:35:45.000000000 -0800
++++ getcwd.c   2006-02-08 17:53:41.000000000 -0800
+@@ -54,7 +54,81 @@
        (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
            (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
  
 -extern int __getcwd(char *, size_t);
--
++/*
++ * If __getcwd() ever becomes a syscall, we can remove this workaround.
++ * The problem here is that fcntl() assumes a buffer of size MAXPATHLEN,
++ * if size is less than MAXPATHLEN, we need to use a temporary buffer
++ * and see if it fits.  We also have to assume that open() or fcntl()
++ * don't fail with errno=ERANGE.
++ */
++static inline int
++__getcwd(char *buf, size_t size)
++{
++      int fd, err, save;
++      struct stat dot, pt;
++      char *b;
++
++      if ((fd = open(".", O_RDONLY)) < 0)
++              return -1;
++      if (fstat(fd, &dot) < 0) {
++              save = errno;
++              close(fd);
++              errno = save;
++              return -1;
++      }
++      /* check that the device and inode are non-zero, otherwise punt */
++      if (dot.st_dev == 0 || dot.st_ino == 0) {
++              close(fd);
++              errno = EINVAL;
++              return -1;
++      }
++      if (size < MAXPATHLEN) {
++              /* the hard case; allocate a buffer of size MAXPATHLEN to use */
++              b = (char *)alloca(MAXPATHLEN);
++              if (b == NULL) {
++                      close(fd);
++                      errno = ENOMEM; /* make sure it isn't ERANGE */
++                      return -1;
++              }
++      } else
++              b = buf;
++
++      err = fcntl(fd, F_GETPATH, b);
++      if (err) {
++              save = errno;
++              close(fd);
++              errno = save;
++              return err;
++      }
++      close(fd);
++      /*
++       * now double-check that the path returned by fcntl() has the same
++       * device and inode number as '.'.
++       */
++      if (stat(b, &pt) < 0)
++              return -1;
++      /*
++       * Since dot.st_dev and dot.st_ino are non-zero, we don't need to
++       * separately test for pt.st_dev and pt.st_ino being non-zero, because
++       * they have to match
++       */
++      if (dot.st_dev != pt.st_dev || dot.st_ino != pt.st_ino) {
++              errno = EINVAL;
++              return -1;
++      }
++      /*
++       * For the case where we allocated a buffer, check that it can fit
++       * in the real buffer, and copy it over.
++       */
++      if (size < MAXPATHLEN) {
++              if (strlen(b) >= size) {
++                      errno = ERANGE;
++                      return -1;
++              }
++              strcpy(buf, b);
++      }
++      return 0;
++}
  char *
  getcwd(pt, size)
-       char *pt;
-@@ -95,18 +93,6 @@
+@@ -91,31 +165,23 @@
+               }
+               ept = pt + size;
+       } else {
+-              if ((pt = malloc(ptsize = 1024 - 4)) == NULL)
++              if ((pt = malloc(ptsize = MAXPATHLEN)) == NULL)
                        return (NULL);
                ept = pt + ptsize;
        }
--      if (__getcwd(pt, ept - pt) == 0) {
+       if (__getcwd(pt, ept - pt) == 0) {
 -              if (*pt != '/') {
 -                      bpt = pt;
 -                      ept = pt + strlen(pt) - 1;
 -                              *ept-- = c;
 -                      }
 -              }
--              return (pt);
+               return (pt);
 -      }
++      } else if (errno == ERANGE) /* failed because buffer too small */
++              return NULL;
        bpt = ept - 1;
        *bpt = '\0';
  
+       /*
+-       * Allocate bytes (1024 - malloc space) for the string of "../"'s.
++       * Allocate bytes MAXPATHLEN) for the string of "../"'s.
+        * Should always be enough (it's 340 levels).  If it's not, allocate
+        * as necessary.  Special case the first stat, it's ".", not "..".
+        */
+-      if ((up = malloc(upsize = 1024 - 4)) == NULL)
++      if ((up = malloc(upsize = MAXPATHLEN)) == NULL)
+               goto err;
+       eup = up + MAXPATHLEN;
+       bup = up;
index a868618fba6422849b892f0c8857ac6238f13f42..d26bc3811c7192b8a9eb6ba288b67000022dcad9 100644 (file)
@@ -1,5 +1,5 @@
---- /Volumes/XDisk/tmp/Libc/gen/FreeBSD/opendir.c.orig 2004-08-14 10:46:10.000000000 -0700
-+++ /Volumes/XDisk/tmp/Libc/gen/FreeBSD/opendir.c      2004-10-24 17:08:28.000000000 -0700
+--- opendir.c.orig     2004-11-25 11:38:01.000000000 -0800
++++ opendir.c  2006-05-03 23:21:10.000000000 -0700
 @@ -48,6 +48,7 @@
  #include <stdlib.h>
  #include <string.h>
@@ -8,7 +8,39 @@
  #include "un-namespace.h"
  
  #include "telldir.h"
-@@ -269,7 +270,7 @@
+@@ -72,27 +73,15 @@
+       int incr;
+       int saved_errno;
+       int unionstack;
+-      struct stat statb;
+       /*
+-       * stat() before _open() because opening of special files may be
+-       * harmful.  _fstat() after open because the file may have changed.
++       * Use O_DIRECTORY to only open directories (because opening of
++       * special files may be harmful).  errno is set to ENOTDIR if
++       * not a directory.
+        */
+-      if (stat(name, &statb) != 0)
+-              return (NULL);
+-      if (!S_ISDIR(statb.st_mode)) {
+-              errno = ENOTDIR;
+-              return (NULL);
+-      }
+-      if ((fd = _open(name, O_RDONLY | O_NONBLOCK)) == -1)
++      if ((fd = _open(name, O_RDONLY | O_NONBLOCK | O_DIRECTORY)) == -1)
+               return (NULL);
+       dirp = NULL;
+-      if (_fstat(fd, &statb) != 0)
+-              goto fail;
+-      if (!S_ISDIR(statb.st_mode)) {
+-              errno = ENOTDIR;
+-              goto fail;
+-      }
+       if (_fcntl(fd, F_SETFD, FD_CLOEXEC) == -1 ||
+           (dirp = malloc(sizeof(DIR) + sizeof(struct _telldir))) == NULL)
+               goto fail;
+@@ -269,7 +258,7 @@
        dirp->dd_loc = 0;
        dirp->dd_fd = fd;
        dirp->dd_flags = flags;
index e1de6c350aa63b1318035009091ead042d22a5ca..a3b7f891d752e56955fa922fb25fff12e124f2e0 100644 (file)
@@ -42,7 +42,7 @@ FBSDMISRCS = _rand48.c alarm.c assert.c \
        telldir.c termios.c time.c times.c \
        ttyname.c ttyslot.c ualarm.c ulimit.c unvis.c usleep.c utime.c vis.c \
        wait.c wait3.c waitpid.c
-.if (${MACHINE_ARCH} != ppc64)
+.ifndef LP64
 FBSDMISRCS += timezone.c
 .endif
 FBSDHDRS = rand48.h telldir.h
index ff59ae47037899a42d49043a794fedf1443031b6..257d1180370670140dd9b221ee42a80af92a7e41 100644 (file)
@@ -66,7 +66,7 @@ static inline void copy_pages(const void *source, void *dest, unsigned bytes) {
 // called when MallocStackLogging is set anyway, so they won't affect normal usage.
 
 static __attribute__((noinline)) void *first_frame_address(void) {
-#if defined(__i386__)
+#if defined(__i386__) || defined(__x86_64__)
     return __builtin_frame_address(0);
 #elif defined(__ppc__) || defined(__ppc64__)
     void *addr;
@@ -81,8 +81,8 @@ static __attribute__((noinline)) void *first_frame_address(void) {
 
 static __attribute__((noinline)) void *next_frame_address(void *addr) {
     void *ret;
-#if defined(__MACH__) && defined(__i386__)
-    __asm__ volatile("movl (%1),%0" : "=r" (ret) : "r" (addr));
+#if defined(__MACH__) && (defined(__i386__) || defined(__x86_64__))
+    __asm__ volatile("mov (%1),%0" : "=r" (ret) : "r" (addr));
 #elif defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))
     __asm__ volatile("lwz %0,0x0(%1)" : "=r" (ret) : "b" (addr));
 #elif defined(__hpux__)
@@ -96,7 +96,7 @@ static __attribute__((noinline)) void *next_frame_address(void *addr) {
     return ret;
 }
 
-#if defined(__i386__) || defined (__m68k__)
+#if defined(__i386__) || defined(__x86_64__) || defined (__m68k__)
 #define FP_LINK_OFFSET 1
 #elif defined(__ppc__) || defined(__ppc64__)
 #define FP_LINK_OFFSET 2
index 82aab3a7a9fe572598bd55222ebef3ac102383f0..45ae447ab9ecd1e00600a8e3b1ffce21a2ec7b15 100644 (file)
@@ -32,5 +32,4 @@ ___pthread_set_self:
        movl    $3,%eax
        MACHDEP_SYSCALL_TRAP
        addl    $8,%esp     
-       movw    %ax,%gs
        ret
index d9c3bdf37b51ba097a161854080034d39f8f84e8..d5fa77afb08de19825a837a19ece923b066d8dd6 100644 (file)
 #if defined(MEMCOPY)
 LEAF(_memcpy,0)
        movl    $(_COMM_PAGE_MEMCPY), %eax
-       jmpl    %eax
+       jmpl    *%eax
 #elif defined(MEMMOVE)
 LEAF(_memmove,0)
        movl    $(_COMM_PAGE_MEMMOVE), %eax
-       jmpl    %eax
+       jmpl    *%eax
 #else
 LEAF(_bcopy,0)
        movl    $(_COMM_PAGE_BCOPY), %eax
-       jmpl    %eax
+       jmpl    *%eax
 #endif
index db162dda41f55a635a9827a1ad4b367535c5e924..3ab3083aaa994f05f4c3b588275125e04dddfef6 100644 (file)
@@ -35,4 +35,4 @@
 
 LEAF(_bzero,0)
        movl    $(_COMM_PAGE_BZERO), %eax
-       jmpl    %eax
+       jmpl    *%eax
index 0e0ae2a88e839e1d6098679e602715caa6eb2452..a0adaa2992de6c55848848da926950d213554a12 100644 (file)
@@ -56,7 +56,7 @@ _memset:                              // void *memset(void *b, int c, size_t len);
        
        movl    $(_COMM_PAGE_BZERO),%eax// map memset(p,0,n) into bzero(p,n)
        movl    %edx,8(%esp)            // put count where bzero() expects it
-       jmp     %eax                    // enter commpage
+       jmp     *%eax                   // enter commpage
 
 
        // Handle memset of a nonzero value.
@@ -136,7 +136,7 @@ LCallCommpage:
        jnz     1b
 2:                                     // ptr aligned, length long enough to justify
        movl    $(_COMM_PAGE_MEMSET_PATTERN),%eax
-       call    %eax                    // call commpage to do the heavy lifting
+       call    *%eax                   // call commpage to do the heavy lifting
        movl    12(%esp),%eax           // get return value (ie, original ptr)
        popl    %esi
        popl    %edi
@@ -235,7 +235,7 @@ LAlignPtr:                          // NB: can drop down to here!
 
 LReady:
        movl    $(_COMM_PAGE_MEMSET_PATTERN),%eax
-       call    %eax                    // call commpage to do the heavy lifting
+       call    *%eax                   // call commpage to do the heavy lifting
        popl    %esi
        popl    %edi
        ret
index dced178d3716f76274dc1bf9a85b199745ccf9da..ddc53b97b3e92b87e747268e9972da1f9e884fbe 100644 (file)
@@ -180,7 +180,7 @@ LZeroBuffer:
        pushl   %ecx                    // remaining buffer size
        pushl   %edi                    // ptr to 1st unstored byte
        movl    $(_COMM_PAGE_BZERO),%eax
-       call    %eax
+       call    *%eax
        addl    $8,%esp                 // pop off the arguments
 
 LDone:
index e74c2e1e533afd2cce2b883d6bcc0f86ea8d9cce..7208af1ab2bf44e14e77e5d35250649ed72e2016 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATPgetreq, 3)
        ret
index 0ef8629a994528d00274ee5c0458bb6ed1de50cd..c16193c4edb75dc1fe4e64ec9b54a59e0f297661 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATPgetrsp, 3)
        ret
index 28b7f3726477e84cbc3832d6f5d1fe7b1d20f8a5..8955faf7ebd2373248ff6024c89880bae9151f3e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATPsndreq, 3)
        ret
index b26029948383d4781c140325f3881931f2f008a6..eee1744739bb2b1a7cc057b2b5847da883422baf 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATPsndrsp, 3)
        ret
index 3d874d0829b2ca0342aece28aedee0850792459c..6d559298079d9eb6f8600a9d678cc5a275c3805b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATgetmsg, 3)
        ret
index 7f253827e96036e57fc4e3648458f89cbc8bc0e2..56344c88f21d917c4c86a05eeddaa15a7d5eedda 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATputmsg, 3)
        ret
index b503df9566be88b01785616a56c0fe7bf477368e..bdde188257594bfbf0c14b4d81deaeb68a4b7151 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ATsocket, 3)
        ret
index eee1da74c159b969785265779e749051ac5aacb7..b16c2484088a711e0eef171ee8568aeb5ebda82f 100644 (file)
@@ -1,4 +1,6 @@
 .PATH: ${.CURDIR}/i386/sys
+
+AINC+= -I${.CURDIR}/i386/sys
 MDSRCS+=  ATPgetreq.s \
        ATPgetrsp.s \
        ATPsndreq.s \
index c6dd1515fadf67978da8df56693e966e033f2dd0..23fd9f28cf94f535be570d8c981173104b75d626 100644 (file)
@@ -109,7 +109,7 @@ DECLARE(_OSAtomicAdd64)
        call    *_COMM_PAGE_COMPARE_AND_SWAP64
        jnz     1b
        movl    %ebx, %eax
-       movl    %ecx, %ebx
+       movl    %ecx, %edx
        popl    %esi
        popl    %ebx    
        ret
@@ -142,13 +142,13 @@ DECLARE(_OSAtomicTestAndClear)
 .globl _OSSpinLockTry
 _OSSpinLockTry:
        movl    $(_COMM_PAGE_SPINLOCK_TRY), %eax
-       jmpl    %eax
+       jmpl    *%eax
 
 .align 2, 0x90
 .globl _OSSpinLockLock
 _OSSpinLockLock:
        movl    $(_COMM_PAGE_SPINLOCK_LOCK), %eax
-       jmpl    %eax
+       jmpl    *%eax
 
 .align 2, 0x90
 .globl _OSSpinLockUnlock
index 689f15404272b16df90ba4b91a60921c946dd3ab..b22d9a33f31f122fc128616efcd5f2258fea6a0a 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 PSEUDO(__mmap, mmap, 6)
        ret
index 336ab2768a3ec81a72902aa60cd4624cb06292f2..0475e96717f9d5f91202e858dc8d9776b369280a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 2002 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(__pthread_canceled, 1)
        ret
index 5731ff5f9b669d26a70e191f30f036696843de41..bed8c1e817be496b7b046f01833bcb2f23fed2f8 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 2002 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(__pthread_markcancel, 1)
        ret
index 55b163eeaabd8b3bd2da0ef2d6628d0137c40d2e..370a5783f364696c3be299eff94c2bba4e1002a6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 2002 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(__semwait_signal, 6)
        ret
index ab99c5fe0e7e575188b43412baeb8a6c4e4279f5..2757478125d5879e77ca5f83340f6be75ddfe464 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 PSEUDO(_exit, exit, 1)
        ret
index fd865ea82936ce618cc3c9de9b156607650ce743..47107fe3225dc55a21d3bdbd29a8ea935824b5ce 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 PSEUDO(_getlogin, getlogin, 0)
        ret
index 04d70a49696b33e0ee237acb4c5f7b778dd11335..6d0f63062fd5ead9e6244ec83ba12d8f114b03f7 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(__pthread_kill, 2)
        ret
index 0a09c638700b268af75d1d9cff20ceb7438e3be9..0d355c73d5b9463f527db2a8be3449299833fc8f 100644 (file)
 
 #include <architecture/i386/asm_help.h>
 
-#define JB_ONSTACK      0
+// The FP control word is actually two bytes, but there's no harm in
+// using four bytes for it and keeping the struct aligned.
+#define JB_FPCW         0
 #define JB_MASK         4
-#define JB_EAX          8
+#define JB_MXCSR        8
 #define JB_EBX          12
 #define JB_ECX          16
 #define JB_EDX          20
@@ -66,7 +68,9 @@
 LEAF(__setjmp, 0)
         movl    4(%esp), %ecx           // jmp_buf (struct sigcontext *)
 
-        // now build sigcontext
+        // Build the jmp_buf
+        fnstcw  JB_FPCW(%ecx)                  // Save the FP control word
+        stmxcsr JB_MXCSR(%ecx)                 // Save the MXCSR
         movl    %ebx, JB_EBX(%ecx)
         movl    %edi, JB_EDI(%ecx)
         movl    %esi, JB_ESI(%ecx)
@@ -101,13 +105,9 @@ LEAF(__setjmp, 0)
 
 
 LEAF(__longjmp, 0)
-       subl    $2,%esp
-       fnstcw  (%esp)                  // save FP control word
        fninit                          // reset FP coprocessor
-       fldcw   (%esp)                  // restore FP control word
-       addl    $2,%esp
 
-        movl    4(%esp), %ecx           // jmp_buf (struct sigcontext *)
+       movl    4(%esp), %ecx           // jmp_buf (struct sigcontext *)
        movl    8(%esp), %eax           // return value
        testl   %eax, %eax
        jnz 1f
@@ -119,6 +119,8 @@ LEAF(__longjmp, 0)
        movl    JB_EDI(%ecx), %edi
        movl    JB_EBP(%ecx), %ebp
        movl    JB_ESP(%ecx), %esp
+       fldcw   JB_FPCW(%ecx)                   // Restore FP control word
+       ldmxcsr JB_MXCSR(%ecx)                  // Restore the MXCSR
 
 #if SAVE_SEG_REGS
        // segment registers
index f4a599fbff09a679c79c47d1acee6a1f5d7381c2..ca0d5b9a6a4e7eeffd18c35cff3cf9b7c3f189dd 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 PSEUDO(_setlogin, setlogin, 0)
        ret
index b9276e3deb966310b35ad6cc07b5952f5806404d..b1157d721224c860eb738d8056eb32a20bd77dea 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(__sysctl, 6)
        ret
index 1afca4e6e0b232a154b5dc2417576d24134a52cf..e0f3fcd76e99d283e3d46efc778daedcc8521e54 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(accept, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(accept$UNIX2003, accept, 3)
        ret
 
 UNIX_SYSCALL_ERR(accept, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 6d1916318c87f5390852c7fccac685291131584e..1f0cbfd2c9dccacb0c25862bb2fd787374202ee0 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(access, 2)
        ret
index cfae0238f89ef3ebbc3c298f58be194f6c9f5555..51133382eddbc5c078a8d55cd84533c600033655 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(acct, 1)
        ret
index 485a112c31be6f3bc8a75fc522f6f411cf8f2e63..f29f838a3d2a93d3ffaaceb53f79b4d4deb2cb16 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(add_profil, 4)
        ret
index 8aa59f894b70572552e5624c111e8f8a32f9ae7b..4c4f26ecf1d785e43c60b3e1d9946eb9d8c859a2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(adjtime, 2)
        ret
index 00d99424fb8b2ea1af89d51893efbe8f7343f0d7..2070cb84eaf995adb8f2ad515290f1ac0575c52f 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_cancel, 2)
        ret
index 3bc756b8b4df4ecf1c27a2ba4f36be33eb5f17ec..5a1f828fb892c2553b56cb18ca1e8e014f19e0b9 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_error, 1)
        ret
index 6c378f687e68041c2a31885d8b7e1e0ebf39c526..a8445baa7245d379ba2157402e23abd7adb60b38 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_fsync, 2)
        ret
index cb853242a50c51cfbd61e445aa18f83ab112fca8..4bafa164270bfa723c8231c65f10ecac80852cc6 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_read, 1)
        ret
index b5068127498aaf2962b96f5b8922b6826cafad54..67649580588033d2967a0f740f14c8c4ba3ac6bf 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_return, 1)
        ret
index 4137a274b108384700dc3da923dbdeded0574f32..d7d740ee906607bccb5989bc8316f4f96767573a 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_suspend, 3)
-       ret
\ No newline at end of file
+       ret
index a82151e93862e9b76c80dda00af92e6bf27e267d..4229f0ea90974b33bd690b022c9edf77bffcbd87 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(aio_write, 1)
-       ret
\ No newline at end of file
+       ret
index 04f7d6d648f7239a680760604a19753c58b56c41..2b308ac3d8a996ea336e1db01ff924e51532a4a4 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(audit, 2)
        ret
index b557464884b27a06c1608d1ba2595299e97c3829..559a29342413c44cdcf000447ea65ea8585930e7 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(auditctl, 1)
        ret
index 4cff057fcf2e0cfd4352a35753246cae0d5e2718..10d59d7762f40b4e79ebf4afb8a40d2abcd907ff 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(auditon, 3)
        ret
index 31f18640faa39e80026913e89a2a0da1055d2619..5efd5443135a63c980f022527ad5b08f2743b9d3 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(auditsvc, 2)
        ret
index cf645f10be3bc76b6b7a817a49615c803c1aae05..0fcb725973e671f2476630edd736897ff15ddebe 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(bind, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(bind$UNIX2003, bind, 3)
        ret
 
 UNIX_SYSCALL_ERR(bind, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index b071f0a74a36e22ab2ab0052dd3be206cf38a629..1e4428b74bc3872f16f44029917b8abea7ca72ba 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
        .globl  _errno
 
index 0a086d10875bce4ea09e049d9634a1cc1d731c43..7453e4b3f37e58b36906be909b7c52508ab55425 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(chdir, 1)
        ret
index e1d57dc7f80e75a7cab00e89807561d8d1f67b38..09c24d65f3f42c4c146ecc3bf64b7c19af96a6ed 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(checkuseraccess, 0)
        ret
index 3a19cfb04bb548ae76e8a3115a81ad4683be72eb..099d9b0d43f348f8f93f87a7383312d82cfa6363 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(chflags, 2)
        ret
index 912ffa5f09b0affced6707f3242ec4879aff8424..02c3f0de5eb433a8ebd8407344cfef75f49208b0 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(chmod, 2)
        ret
index 6683f31d9d13f7a5bfa7dafed2266d79b5f4a6fd..0fcafd761a0dc877ae14e4c2f29ce5466400804e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(chown, 3)
        ret
index 61676fdea0c4c6475ba13dc76ef0cabbf428b36d..d8a30f94132eb652d64def35671dc209c6babb5d 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(chroot, 1)
        ret
index e43df3983a6b75371647c9b1a99b6be0f3c6af51..2338bc4d7a4b837424c84a154dee6c90940dac67 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(close, 1)
        ret
index b3236697259f1cd37d1221ffe024cea28fee710d..51fa9d748d8df979deb31ed6d932f917035e9cf8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(connect, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(connect$UNIX2003, connect, 3)
        ret
 
 UNIX_SYSCALL_ERR(connect, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 62b58d4f6d9eb268289b41d25b9d741ab915dee5..60fcd92ebeebf2edf1ec8a660904cd53527b28e2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(dup, 2)
        ret
index 7e13b9b39b702de281f26eb16ff6596a7fe2a476..74ea4316e51c8b3a68dc7882a66e035565b14f6b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(dup2, 2)
        ret
index 45a732612a236dbde687dcca13766238539f073c..e6a4a56c07e97dc77e83bfcb8693529a1b8c3bef 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(exchangedata, 0)
        ret
index e6a6356fbd74717b9e58393fee9fdda2a7bc826b..6a6759b9a0f5027d070f57a2bb1402928dcb5651 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(execve, 3)
        ret                     // execve(file, argv, arge)
index fd86bd2b02ec10300e33de997237db7396520b86..fa458e2fc3fd24aa2c8fb57367dc8870b99b8e69 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fchdir, 1)
        ret
index 74c650a2ded2add1dc264be6fa14cc040bccfa92..f94f31ff214d6b78183198535942247592a9a963 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fchflags, 2)
        ret
index c7843883b5cbc5fb04c15d028722eb021428dfee..1f87d1f45b99b8d1970554848087ccbef0853092 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fchmod, 2)
        ret
index 2a5fa0c4745b207a577bfa488d910c1c96469d8e..7c1eb13fb75a41b18cd1558ff4c60996ae4c6c22 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fchown, 3)
        ret
index fcda4a577b78e0120fab676d5656e77104e67a6b..63dcabfb480d6c4116c0ae9cee91c3a61dba5fae 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fcntl, 3)
        ret
index 83d7c620077488b1ac759c20961d0dea7d1b07b8..14f1bd65647cfce40eefca3c71143bd8a98467a6 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fgetxattr, 5)
        ret
index d94e9c72f25c73f215ba69f9613300ee2d3271fb..a82c9af05e019f0ae7d686bbb583f1c948cc72d7 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fhopen, 2)
        ret
index f46ed4af0d7a3dc64ffc724ac01fd5e2e6e3b367..d953e2b976e9ce916db4d2e4d4ae04230c378a3b 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(flistxattr, 4)
        ret
index ee2c2a8422d30768bffe0c7554ca6da3b604bae4..097fe49bd4f2cca2d5ce307d8a33a44e21c7182b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(flock, 2)
        ret
index 8dc35d25c247613cfcfff17e5a3148b754dda51b..c78eb04d016355bad487e3a138941e32b46566c2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 LEAF(_fork, 0)
        subl  $28, %esp   // Align the stack, with 16 bytes of extra padding that we'll need
index 4d6824cb03147e8a72bd2c03c541cc680c168d8e..a233793e57a4f79c68caa05ab239d1a837ed47a7 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fpathconf, 2)
        ret
index 4b7e6b4ea55897f82c3f86f4d60ecab987f18420..63831a40c91f2ec9fc38fc5e841837505ab4acd3 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fremovexattr, 3)
        ret
index 763f145450c565ea33ca50514a2767b83255ac9b..dae5f1874de25b14268b40765ac9f4444e95768b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fsctl, 4)
        ret
index 1da2ebb51844b603ee490c2574022398e9c439c3..e97b96621ca9efcbf7621c541b30901c2a50de99 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fsetxattr, 5)
        ret
index 869c4b9689b08701d0322dd5e3ffa35ebd108e4b..820f99a495b717ed231e086371c93b97a29c4ff1 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fstat, 2)
        ret
index 0bf2239d510099414d78a6aca4e8311e5a7b08e6..917cc77e90cce256900ced8f9e1201abe8e1c0b8 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fstatfs, 2)
        ret
index d23315be0b7c793638c683f31727481a07ff5350..323c96ae903b84c58f795331240d6dd269cb4b1a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fstatv, 0)
        ret
index 0433dcdcf2335660a286d461326a54af902a9a59..1818d212a68e2c2a696328c1ce680c93e5f992fa 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(fsync, 1)
        ret
index 717be65928e9c4f2c4116d36b1dc706817382691..0d5a07dd25c163abfc1df6a47c7d88872e791dca 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ftruncate, 2)
        ret
index 6a01fae75f9094e330fe56f9738d2714ca5ddfe8..b93a6896e9d86c510ec590604179777362d7940d 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(futimes, 2)
        ret
index bf679b906fead2b81307023755aadc0fdb5e89f5..a35ff4d5dc95d677763eddf03b48329474d63bcf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(getattrlist, 0)
+       ret
+#else /* !__LP64__ */
 PSEUDO(getattrlist$UNIX2003, getattrlist, 0)
        ret
 
 UNIX_SYSCALL_ERR(getattrlist, 0, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 11e5a6e4af5348cb55d5fd2c30c02afd12bc77d2..ebf8a6f1aba1e94c1ec09f2dd002e398f3a28e9b 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getaudit, 1)
        ret
index cdc345f167d8dcff97874e24bfa46a15d8f2cc96..457923449e578595ad8492b2db2851aba747fd8f 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getaudit_addr, 2)
        ret
index 83a3590f30cc57df218bf7a87079dc0d2e0e14e5..a6a09fd223b0c33e9e383cfdd5ddd1285db35b9d 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getauid, 1)
        ret
index 95c032fccdc965b46bf610c164128b8e4d6c6c7b..2abc2bfc77159f1653dbbd9bfb3eb9a2512a2573 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getdirentries, 4)
        ret
index a0d321b10bf083859eef95b8163ba5f19e08eddc..b69947ed24d74dfc531383ce02986590103c6259 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getdirentriesattr, 0)
        ret
index d014cc584d1d7907ad0edb32b2c256b9c46e5cb1..27bd6ad1beb3e4e8d6b5fe505e3035c2ba93a65b 100644 (file)
@@ -21,7 +21,7 @@
  * @APPLE_LICENSE_HEADER_END@
  */
 
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getdtablesize, 0)
        ret             // i = getdtablesize();
index d8d3568b5b8e317b2125f18595464640c523be30..5b85e9cf6221aa8b767181c2b9908fb757142b3a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getegid, 0)
        ret
index d7b119b3b67edb3f1e746b2e353c448098a858a8..40c1fe48cc2c0241f7715bf8c593c22eb36f40f6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(geteuid, 0)
        ret
index 09c4dfedf5b8a48d503e083a8d5bff6043f3768a..8ce000a077a9bbd6f852d7fc2a7569ea693c14cf 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getfh, 2)
        ret
index b0f24a948f16f3a4510b4e5024f855bd075cd148..2622be2414b909e43391b92da34dd7866618ef4e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getfsstat, 3)
        ret
index 5c4d7a7fe183c612df7d64891fe4a88154236c65..58d6d416755cb1ed8f9bb1926651ff09acce64c2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getgid, 0)
        ret                     // gid = getgid();
index cc4322a2c6babd9a886729d44a4b32f81ed8c040..61eb82c8b6df8776c82783113a192fd89f045fa2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getgroups, 2)
        ret             // ngroups = getgroups(gidsetsize, gidset)
index 9328751dffce306f447cb9e242a0c084f6eae52a..e0d5c3b90b6f4773d0519ad9f7837a9c493ef6f6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getitimer, 2)
        ret
index 55cc55689b055ff1e58e2f7af75826f28e1d85b3..d7b3a0d96af5fcb0ea0f27c629472e47e4bb8a32 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(getpeername, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(getpeername$UNIX2003, getpeername, 3)
        ret
 
 UNIX_SYSCALL_ERR(getpeername, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index b0d52f79e03ea34d3da40a0b40d49305e7a4007e..a707ae85fce4eb832da6597b8e43d002f8f6e3e6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getpgid, 1)
        ret
index 6a64c7db7d32bbbdd413f2ef2bfcfb04cc8a7675..cbe43b5c717eaebc656a42c7c20ca11b56718e98 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getpgrp, 1)
        ret             // pgrp = getpgrp(pid);
index d08bd95236bd97ec4682ef9e785d4327b100dbe1..728bf49bfa1d5586aecdb0018a561093ea5d5e2a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
        .data
        .private_extern __current_pid
index b0a45556e137adcc11156b01b75b2e79fa81be09..0c27b8b6adbf1173d499eb73ff8d98d6ce69019b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getppid,0)
        ret
index af90ad9afb1cb7c636cfa48d1358554ef6e8ff43..4c532ad51a8e825ea14cadca98470ebb282e38a2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getpriority, 2)
        ret
index 57e56d1cc83c837ab1deb1f891eb133a6057449b..89595ddfa4443afaa2bbb2a5e40c6fd87c55813b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getrlimit, 2)
        ret
index e15e62827e8e3532003ad137db225d10f21e052c..eb1bb5e279cdc39b25f8d7d32780f9bfda3089fa 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getrusage, 2)
        ret
index 4afddff3955ffc5e3738c6019fbf6d4a50e32bbd..7388e99855a7be7535776db5c338b8a100e04bb6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getsid, 1)
        ret
index 135a37249afa2696d2496f252959df0900125a29..3cde7234556a2bc6a3ae1ac89e549567ec192828 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(getsockname, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(getsockname$UNIX2003, getsockname, 3)
        ret
 
 UNIX_SYSCALL_ERR(getsockname, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 269a3345da47f522de4c06d46d7704813bea3ff5..e0fb6d438c89b7bd03d981c46f0c9e4e0b0a06b0 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getsockopt, 5)
        ret
index 2b36b4f57b1e4fe39480aff731cbdaeadb8ac19a..91505baa84f8bd30f05475b8f7f4456a5c6789e2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getuid, 0)
        ret             // uid = getuid();
index d4e7a8e2675e86a163560be57d42606c66d61d6e..370d3d37e88e3948a92a96228f6a9dd1c475256d 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(getxattr, 5)
        ret
index 5de6ca773ef51934ffa652b2ff9c7fecf7ab3d15..e32587cc184769e8d1dae854d98609852ab08965 100644 (file)
@@ -22,7 +22,7 @@
  */
 /* Copyright 1998 Apple Computer, Inc. */
 
-#include "SYS.h"
+#include <SYS.h>
 
 #define        __APPLE_API_PRIVATE
 #include <machine/cpu_capabilities.h>
@@ -30,7 +30,7 @@
 
 LABEL(___commpage_gettimeofday)
        mov             $ _COMM_PAGE_GETTIMEOFDAY,%eax
-       jmp             %eax
+       jmp             *%eax
 
 /*
  *     This syscall is special cased: the timeval is returned in eax/edx.
index 528950a25a94543b2b782d096ffcced9aebbd1c5..128bc3b84f3e60da26687bed693ffa7bd57ec855 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ioctl, 3)
        ret
index d98604529328c303729dc18c96d4063df8cab441..b1e56f106fcd046d8a75c6453b47be4705a3b76c 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(issetugid, 0)
        ret             
index cedc7c0da3540d869545ee6e0b59e0b9bfc2064e..aee6db5920351e5c5f8c12439d7ce862d5babfaf 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(kevent, 6)
        ret
index 59e17ad208addb48183dc7a63b9b6e03ca17b1c2..7de3ab2fe423a12bcba0a8e2602c8101b1c9183e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(kill, 2)
        ret
index 398d766e66f39c4a47aed3ab3385ec263f6b4a2f..6b8a0d40a2189264858efc578ea0f2588a2871f3 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(kqueue, 0)
        ret
index b2e469773dc63a04647dcea4581ba7115cbafbdb..a92fb539da314fe7731b203a20c4fc880dd418d4 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(kqueue_from_portset_np, 1)
        ret
index 1e782eaea1d9d0395661a506a26a36769cdd2cbd..8e093e22baf8921feafc2624e8865f5a3975ba2f 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(kqueue_portset_np, 1)
        ret
index 77bd931370f10a2d28f339a56792df31e73e7942..93a27c909632570ac5e5b15efe58b4846c782625 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(ktrace, 4)
        ret
index 291236764db8920c33beed1ec2ddebd7afaf637b..7d7f72bb0d54bcbe4ce77d35a08361caedaac1dd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2004, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(lchown, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(lchown$UNIX2003, lchown, 3)
        ret
 
 UNIX_SYSCALL_ERR(lchown, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 820375a6db12e39621589314575ec2e86e650295..e26cf5903c41d29d89ac212286be747df8fba39f 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(link, 2)
        ret
index b5fc01f9394be4e9bf7c69f556740b40bd92c899..264202799d37236bbf6d2fad0b0e58e12eb96563 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(lio_listio, 4)
        ret
index 8bd567639f51f8839298c5850ce4b5f7d34f2877..3257f81d9e313b851367098c88527dd338e16538 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(listen, 2)
+       ret
+#else /* !__LP64__ */
 PSEUDO(listen$UNIX2003, listen, 2)
        ret
 
 UNIX_SYSCALL_ERR(listen, 2, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 990d4a97fde1503eb57cd20f35e9a1e1d51fb93a..dce76a1aeaa73974b4babf16ca651f6c3651ce5f 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(listxattr, 4)
        ret
index 900bdf810b185136342f7193def5ae0b9f48bffc..e994324b2cd4df68fdc8e57ebc842994693b5080 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(load_shared_file, 7)
        ret
index 8dfc808e194cf51622c664633cb0d9ac4e05e7dc..9f58dec3ba691bd6ed6ea12532889855507980ff 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL_INT(lseek, 3)
        ret
index b76854e4bb42778170a52850191f5715f09a5179..80abe5bab3c64eec81bf40a40ef1bc5cd2662070 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(lstat, 2)
        ret
index d3994d445ab7be318a042efbc47c900f3bd7044a..e06c5f5f40fddc69f60139bfef6832f8a99b9bd5 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(lstatv, 0)
        ret
index 849e7029dff00a2238900c789040500d51ab958a..b6e90eda9254486859f96baa5d9a2fb53f3de453 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(madvise, 3)
        ret
index 6b5871eb32d355291398d226f84bb295e8adf9b9..94b1412f2ff72c63f48a8870332cda9e2fcd82a1 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mincore, 3)
        ret
index 84a5190c90cccc57f0ee62176aed935ec21a55af..536c71f0d2186a5ffd1ecbff246e995824791dd2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(minherit, 3)
        ret
index 45285c6c4d7fafc1c8b52a005e4068d56d887187..69ee538d7ed91de44a255a23db64669f255f3afb 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mkcomplex, 0)
        ret
index df857a7886b4033f91a9a56f31ce42db1ba0fa0f..0dd87cffd6f1cb92befe92071494e2d3b478fbf3 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mkdir, 2)
        ret
index f7b74dfa3f31ee7fa05bcaa459a7fd768d814a3f..e21263e8fc38c70f56b5357412d142fe9c71b794 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mkfifo, 2)
        ret
index 91704038ef0e659359b36d52a20e9d4e89c30682..27df4519f85b78476eea2a63fe0da296ef8e1e49 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mknod, 3)
        ret
index 6f0b69430a944c7b1af6e3f324acd1fb03f33d2f..eccef85c403e052bfa09360e0ddfb10f9de9f200 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mlock, 3)
        ret
index e85392cff75c6696f55f7c780e30b0d23d541f08..0b077d9ce6e33fdc9ed801ae93f5f18e70b2ae2d 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mlockall, 3)
        ret
index 0dd8b59d392bb3fb53f37a46927d7fab6c63628c..5d2582437ee2255e1adf76b65a99f6532e399479 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(mount, 4)
        ret
index b7073931530f345219f40f7592eb8c15a3190469..bc5cbe21123f028c60a94193b5bb418bda7259bd 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(msgget, 3)
        ret
index 265f187d2f9567caec351dd283bacff26eeac59a..f0ba7735859974c697e22d11964c6af0f6814c2e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(msgrcv, 3)
        ret
index 7421a4c0f8fe212c636d0102a2f0189859179951..38772290d16939d9e345ce657e36af9c38252487 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(msgsnd, 3)
        ret
index 78a880935a2e0f7ac35cfecebed88697eee46c1e..8f7d12dca72424c0d91ce9ca987434224a3ee742 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(msgsys, 3)
        ret
index 2d0784bdd1009ebbab95bbe532f7a31025cf0579..d61cfe46bf0355f3a28a61c646d72f7646c2b96e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(munlock, 3)
        ret
index 42dcd115587e4c15dd2ddae05b40d065c5f39731..41f4a1dde9bdfd70194b0a3d6e20996cf040f3af 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(munlockall, 3)
        ret
index 38bb9514b44f34ce32bbcad77e5330ff9ac608d0..6c1db69d4b849000527c3f9b58853a99e7a88453 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(new_system_shared_regions, 0)
        ret
index ebfc230373a0ce82bc306c241c3fb3b0ccb8bdde..80dbcec021998ee3cb45c349c98c5ef9b21bcc74 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(nfsclnt, 2)
        ret
index 7c461e1b995e2439d152ba0e5982f03d3f5e9f72..ba92a9f6da57809ea39ba3d228a64de439e448f5 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(nfssvc, 1)
        ret
index 53748d112ec4cf6a7cffa41a69e0a79e0576b8a0..463fe2b15fa71c8850823e0d7a45cdf419444412 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(open, 3)
        ret
index dca4d89ea5d23b98338c7b1cc212f48071a6aa87..08a1e83d2cb1b67524e6be6156ab8d4542fe3e0a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(pathconf, 2)
        ret
index e68124038b3a4b06385bded8c1b411fdde3fb4ff..c49df431bfcc691984d84b29553d41a7f6779822 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL_INT(pipe, 0)
        movl    4(%esp),%ecx
index abe42c53304193e4afe3ec3f5ccd5158d0a46ad8..8d3d8bd4027980dd9ddd5ef083161fc3c19fbd44 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(poll, 3)
        ret
index 5c1535cdb27f303d74be21f702626fb676594b2f..d08a4b63ea187ac70ac0fbbd25b6526b91a26066 100644 (file)
@@ -22,7 +22,7 @@
  */
 /* Copyright 1998 Apple Computer, Inc. */
 
-#include "SYS.h"
+#include <SYS.h>
 
 PSEUDO(posix_madvise, madvise, 3)
        ret
index 55b145f56da90a9afc795c3ccb711e6ca57ad872..ea48c9cc09aebffcaddd93d818d6730e980d5fd3 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(pread, 4)
        ret
index dfcb2a7464ac4651676556457625375ef012b6b6..8610c9506c7bd980327b34840eeba38236932a9c 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(profil, 4)
        ret
index 6f44630eb7d3036bef95d88062b3bdfea0e05d28..510d2694e71b6f9a9fdc2ed8aed08aa45e7f5838 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(pthread_sigmask, 3)
        ret
index 720e96b1b8e8b8be2a9371935eb33e054694bf06..cccd81409bc8302a6ee868878a9b10763b5293f1 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
        .globl  _errno
 
index 26e7264a8062923fc5fe83fbbbaa8562bd0f5f2d..1ea681bdad49e228941237b7d772f308ed1e9acb 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(pwrite, 4)
        ret
index 254d961c8add69cc7fb894a900458679f89c6fbb..402b0afeaa412d91659b1d2b49640a48b311f211 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 #define SYS_quota 149
 
index 10de9cf9579f94d17a4958b30615188619623e0b..51d7c3e569d4496b4883eb96c2aca7387b7de69d 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(quotactl, 3)
        ret
index 1714748df6f5abba8fa4d9ba26a07838ee0b3630..6035086d0c62371ef66acb2678c4642fa30f3cbd 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(read, 3)
        ret
index aeaea491f43028741124aca30968b005efb2a127..bf690a3b15e1ff4d2dc7801ba76704d30b2f9d6b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(readlink, 3)
        ret
index eddb6afb45a52647f0b58cf3ddf883cc9e6fdf4c..d3b3583c2ec1beb8c57e45adcef24d9bbc7cb96a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(readv, 3)
        ret
index d020b9c854dfb9f3963c625d5766ebdc94a14ac5..12da1585c9ffec6651b987a0842a2a2c373a734d 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(reboot, 2)
        hlt
index be58a7f3dbf51f32b8aea4517fef3aba69549748..7fb485f874a85704b2d2aeec624913c7e4380ad9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(recvfrom, 6)
+       ret
+#else /* !__LP64__ */
 PSEUDO(recvfrom$UNIX2003, recvfrom, 6)
        ret
 
 UNIX_SYSCALL_ERR(recvfrom, 6, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 25e44ab879daad5f2efad5fd8d325c70215850f1..347e1e01c0cab38b579d7752a724ead4be1e5cf5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(recvmsg, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(recvmsg$UNIX2003, recvmsg, 3)
        ret
 
 UNIX_SYSCALL_ERR(recvmsg, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 0d4db9f856d5078cbc1b2bc41b11dba7036f658e..77fe41982a846f077a6abb99687945c022d33a0e 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(removexattr, 3)
        ret
index 43e59c257438c4434c3dc3d59b60c13c15e75443..9e2278f80f4b30e558d8c9bb07784c6edae6f914 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(rename, 2)
        ret
index 264188a6cea0ac1d19cbb3c920b871018f603e83..9dd0d42f0c87fa15122624e9dafe48d257662179 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(reset_shared_file, 3)
        ret
index bba49143894c61542e4f7334d3f6997e5953f014..8e92a8c37d6f6f0ace4cc7f0d0ec5b2c4ed20d42 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(revoke, 1)
        ret
index a03b1f68a76471af4dd7b9508d62d9ddbf43e558..657635501b73fc9bd17e4c3ae167271308fe1bfa 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(rmdir, 1)
        ret
index 990308b7e66dc8e3017bd9064d5746f80a58ca81..1b343f80086b47e8a259ab8af941d6d0a679d705 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(searchfs, 0)
        ret
index ed61157def90bff03a9416ee4388e6040b0ba643..68af42edb991c46d1ffad803d10903ed2bec28a8 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(select, 5)
        ret
index fc67d242e37db9416cd54b115eeb67ba69f15c19..25cafa729f107b694f382a482ac876231f413cda 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_close, 1)
        ret
index a4f9542b08c0ae4951aa2902ac88e82b9e25a9dd..dc0cdd1e055ae049d11af83ce87757bb4e79999d 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_destroy, 1)
        ret
index 2dff0356dd8a4a3ea23012e271b00a257c313d98..5812fe7cea1f5510f778793df29d697704624b1e 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_getvalue, 2)
        ret
index 2e5fc530f9e6e35fe3999d6c625e66ae674c3a26..c7027c22811ccad754818285b727461f0e33b07a 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_init, 3)
        ret
index 6586aae3269ccb906109cde3cb848612a42b9c98..561034240a1a1916fd5fe3a802f2718dffec455a 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_post, 1)
        ret
index cf741447147738f9b1987b4d4c792dc805fa6ca9..f2efe65c010981cb347619b8b8935dcdaa1fd1f5 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_trywait, 1)
        ret
index 2f4e8e821109d36acc019d38d60e63a31d41da3d..5a656e5920e569a1b4a25bd6192086f83241f7b8 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sem_wait, 1)
        ret
index 32d8c33514dab6a6c56091ae90bf68151578cdd4..cab8501025a8706d1bf3d270b593c4070deb3101 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(semget, 3)
        ret
index 8b1c2ee350e7c38cc465301c42c0ee35afc2fa24..5d0ff12ddb8bdee838dbe91641b3e6770f9d1d4a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(semop, 3)
        ret
index f2321ed5a4f77c9c45fbb779118b0adeb0aeab0d..5813c69c325c356d17fff3aa133938115d43cbfa 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(semsys, 3)
        ret
index 31f0109c46e66b571448dffaabdd9e7410fcdf34..e30ee3bffb22a28016fa4ad7509b01187b6e8ea7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(sendmsg, 3)
+       ret
+#else /* !__LP64__ */
 PSEUDO(sendmsg$UNIX2003, sendmsg, 3)
        ret
 
 UNIX_SYSCALL_ERR(sendmsg, 3, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index db01bd1f667587c27f3fe61530791a73938a2bf9..14ba2bbff6f0ab407de2a97d1019b19a68cd8322 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(sendto, 6)
+       ret
+#else /* !__LP64__ */
 PSEUDO(sendto$UNIX2003, sendto, 6)
        ret
 
 UNIX_SYSCALL_ERR(sendto, 6, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 6f33adc360659d69adb775c4f17b187fe0e2f547..801bde90198bed411f77636c6dc5de2e9e967b19 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(setattrlist, 0)
+       ret
+#else /* !__LP64__ */
 PSEUDO(setattrlist$UNIX2003, setattrlist, 0)
        ret
 
 UNIX_SYSCALL_ERR(setattrlist, 0, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 253d5a8ebb0b962ab7309d03f765f743b86ef9cd..77b4ec451bd3ea0962019c4b51bf5bb602bdffc2 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setaudit, 1)
        ret
index 4ead3a9e278f70fda37860a68ce2375488192fab..5857301eb44e7a757e0de5894d6b2f2366723567 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setaudit_addr, 2)
        ret
index ff5cc60dcf267539d7bc794ce06a9df13b046886..ac94ab2bb1aa98a44a62e9b37041b20cc3ad85d4 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setauid, 1)
        ret
index bdbad7148bfbae8e31d7a3d7f9bb65dc5c74642b..1d0596332c23d205f93bed11ae10be235025de1b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setegid, 1)
        ret
index c3302e25a9df71050ec03c2c25bcdf34a9c0cdda..38744f2df598a9f364281bdd216748f7f8070d8e 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(seteuid, 1)
        ret
index df995dbbfebd09d984f7329e6ab38b8aebcde4f2..142c4b0fa550982d0ceac592b7100222ac03119a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setgid, 1)
        ret
index 217f57f4def586435df6cb34646cd05fc91dc8fe..bf8f0edaa3d12604e587445646c2a82876dab570 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setgroups, 2)
        ret             // setgroups(gidsetsize, gidset)
index 47232da12f328476800988eb4300006b4a985c18..52333d99f846b376eed47723aeb75e4ed681d4cb 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setitimer, 3)
        ret
index ac7b28b0211116d9a4d55ac86977dcc5cd8af32c..0dba96ffd811aae7eec9e321d7e67d2e5fee49f2 100644 (file)
  */
 
 #include <architecture/i386/asm_help.h>
-#include "SYS.h"
+#include <SYS.h>
 
-#define JB_ONSTACK     0
+// The FP control word is actually two bytes, but there's no harm in
+// using four bytes for it and keeping the struct aligned.
+#define JB_FPCW                0
 #define JB_MASK                4
-#define JB_EAX         8
+#define JB_MXCSR       8
 #define JB_EBX         12
 #define JB_ECX         16
 #define JB_EDX         20
index b3c8af9cb2fec6377f5fbe1953d2c04a6efc5ad4..f0f516049f558381c67e99fc9461e6c3186ab210 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setpgid, 2)
        ret
index e9546e1acc4b154d82444f1137c4a6d5ac4bc616..b39137505c963c433f9df9d051edeb195587bcd0 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setpriority, 3)
        ret
index f104e6c0ea1615731788dfee15f4be163762ddd2..4260a7fc19bc2d4102ab9878952087a0cbb86648 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setprivexec, 3)
        ret
index 330973b0266a927fe06de60ce2703f0333af937a..fa7ad1052efa19873de53f5127ba23367afb3810 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 #define SYS_setquota 148
 
index ae3e3cfad2b2ffb47201d541fe3fcc330f863592..adac73cecab32d23b8e3b3814834b44ce462e1a6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setrlimit, 2)
        ret
index 42d3cbd265410698d5071fd97fee0e0388d35014..e0741585c861e824884b499772bc6183ba850fbd 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setsid, 0)
        ret
index 0c5ffa83da3619e6b33e09acee04345978b35539..4f4afd72577273202669b7b73a0fe0fbbd18c1fa 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setsockopt, 5)
        ret
index 87a0b2fd18215142c87d55174011ce2c41459ce1..8191332314ec1d10c610dc6e8a84ab0387977fde 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(settimeofday, 2)
        ret
index 25c6245784be1a6e6ce93280103903b8e247895f..798dc029dd153034a936977102f0d369f8177a40 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setuid, 1)
        ret
index 8460c0808801ef96fb40a49ff7579299763f04ba..176a795407595bf6af0d3ac2629ed6453fa7c889 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(setxattr, 5)
        ret
index 41b50de0f44751bf4f3c7fcbca37e6559460dbd8..ae594174a97d95d27795559b947e902d87e73089 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(shmat, 3)
        ret
index 9cfe18a68beb4091b36b0fa11c8bf56456ef150a..0d728205a464f7055c5820ebf8d6f9d52cf788a2 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(shmdt, 3)
        ret
index b7441ee9f91b8ea84a4ee8333ecb30e05cad21f5..69a6e3793e43e1da556dd4a7485ececa5badb599 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(shmget, 3)
        ret
index a0736e793d89558539ecb0c79ebce99d2eaaf0e8..6120f95407b710a2b79db7ae2461aad6585f7e22 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(shmsys, 3)
        ret
index fe07517e981de1ec4299248736c7cd21c43644f7..6f7d7c3bc862dcb16917d52be8d6f302892f320a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(shutdown, 2)
        ret
index 724180a1c886c765f45a475303daab24de80899c..cb42ea32d7c450509df3c90845a16686b97d0b16 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL_INT(sigaltstack, 3)
        ret
index b8acf3f99c19d08f2c48de59e03d43a3e1c91a72..08557e9432293cf4bf5059364c9015620ec5cdb3 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sigpending, 1)
        ret
index 52ce5939d2ff1bb70be51044e0e6887d2e67db68..15e53c9006176d3cdba0e9a81f19d422166a942b 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sigprocmask, 3)
        ret
index 76560ee9f1326e5f40149b281b0669b4070c7d83..781005d13925fbad57b717652b15ce6944779ace 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL_INT(sigreturn, 2)
        ret
index 1952b31c3079487e7eaa4722a7fe341214d928ac..f42d465dc82c4a4b09842837aa2e31983b086847 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sigwait, 2)
        ret
index e28a635453622a129421501c28070e66094613b9..ecb5df06a28819abf4104892d819a2f5c2989dcf 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(socket, 3)
        ret
index eaa293178ef5c455feddf33c3cb94474753669ed..feae5610530f957f3e568ac55d51fd2f4083ed24 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999, 2006 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
+#ifdef __LP64__
+UNIX_SYSCALL(socketpair, 5)
+       ret
+#else /* !__LP64__ */
 PSEUDO(socketpair$UNIX2003, socketpair, 5)
        ret
 
 UNIX_SYSCALL_ERR(socketpair, 5, cerror_cvt)
        ret
+#endif /* !__LP64__ */
index 9a6feb21734d128fe29b9a73e846e1e65603e778..8ab986e62af6162f57a6fcf9b6a8a0385714d093 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(stat, 2)
        ret
index 6c84dbe86f0f2fcddbf3c8f62d786aa0fe61e2a2..50163bca9bba635e4fc6c4a670c596a46e90b677 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(statfs, 2);
        ret
index 64730097c4f8bda1e5f84f7e2763711ac8fd6974..7ea96601fb4f1cfe7d1a93233e19751495cdc227 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1998 Apple Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(statv, 0)
        ret
index fe95cb0ddc1b127c6a9d09d2eb25011fce1359f4..783249973e88792516661b2ce5baabedddd528e5 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(swapon, 1)
        ret
index 28a88bc821cd2af109639582f0e1223c8c1438ba..ddc031a6a99fcae9a8f1dc2196aec971a667acf6 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(symlink, 2)
        ret
index 1b3d72d92618832122dfc64a4b602fdcc2f6d1b1..12863d8acaef7cc8585867ddac1f9e7124ac8260 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(sync, 0)
        ret
index 9b28f68fa276fc5566a92949eb39435c4af41e91..0e91b688ca06f94b048e51cbcd653260c8cca5c1 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 LEAF(_syscall, 0)
        popl    %ecx            // ret addr
index a2a1b28a692298b4b204089af8a346e8403e1689..0a7a6cb80cc56e898318f6c5808775aa07cf956c 100644 (file)
@@ -20,7 +20,7 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(table, 5)
        ret
index 522e0f9bebf6eee38e5e5dbe87089cb93a9d8004..7a81e56e32e25486fd982adfd3d3e76f87f146f7 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(truncate, 2)
        ret
index 55ff2bd4b3732f1408aaf533041edac820837034..bf306263a1f414b0feb69fdd9d8d346b673078e5 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(umask, 1)
        ret
index 1b55879858ca8bb21939cb4f44a1e8fa6b325acc..36776c69d2a3042c53eef6a0d96f7c904e83cec1 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(undelete, 1)
        ret
index d0af96bbfd6c36f12e9dc8c8a020c116a2080435..cd77691f88854ca062b63c1c595430a58c8e29f9 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(unlink, 1)
        ret
index f10804a9c2d2245a09afdbc3d657971eeb5935c0..1e2467397e319e78b3c3c6fb01c85fa0a94641c3 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(unmount, 1)
        ret
index e83b03894dcf6f7b5c361313d99619c6364852ec..824926f8f1a8ff990cc85b4431e8020e82860274 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(utimes, 2)
        ret
index 1a4933a90937d7b67ef4f8851dfdba4d160c44d2..b3e35ab55c0937b5eca7ab0672e9b0d8fc4ebf96 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 #if defined(__DYNAMIC__)
 #define GET_CURRENT_PID        PICIFY(__current_pid)
index 5a11f3b21120c4c17d0e5af94f317fa8a3e39d93..0d229b2c6661d784b6db57e764469c3806bc0ed4 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(wait4, 4)
        ret
index 6fca232d4cf289f33210e1b8b622f98229f2dfd5..a3a0959ade5b98163f69bb49cb36cb988672314a 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(write, 3)
        ret
index 538f68e5fc488cdd83b63cdf40e22cf6b7283e08..ff944967510a833bc37b0c02fc13b1b4fbd1d793 100644 (file)
@@ -23,7 +23,7 @@
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
  */
-#include "SYS.h"
+#include <SYS.h>
 
 UNIX_SYSCALL(writev, 3)
        ret
index 83be1e32da60643952ad532a51f4b1fac0681435..1d42a8e71b22d8014701fecbefb650331af149f0 100644 (file)
@@ -91,7 +91,7 @@ int32_t       OSAtomicAnd32Barrier( uint32_t theMask, uint32_t *theValue );
 int32_t        OSAtomicXor32( uint32_t theMask, uint32_t *theValue );
 int32_t        OSAtomicXor32Barrier( uint32_t theMask, uint32_t *theValue );
 
-#if defined(__ppc64__) || defined(__i386__)
+#if defined(__ppc64__) || defined(__i386__) || defined(__x86_64__)
 
 int64_t        OSAtomicAdd64( int64_t theAmount, int64_t *theValue );
 int64_t        OSAtomicAdd64Barrier( int64_t theAmount, int64_t *theValue );
@@ -110,7 +110,7 @@ inline static
 int64_t        OSAtomicDecrement64Barrier( int64_t *theValue )
             { return OSAtomicAdd64Barrier( -1, theValue); }
 
-#endif  /* defined(__ppc64__) || defined(__i386__) */
+#endif  /* defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) */
 
 
 /* Compare and swap.  They return true if the swap occured.
@@ -118,12 +118,12 @@ int64_t   OSAtomicDecrement64Barrier( int64_t *theValue )
 bool    OSAtomicCompareAndSwap32( int32_t oldValue, int32_t newValue, int32_t *theValue );
 bool    OSAtomicCompareAndSwap32Barrier( int32_t oldValue, int32_t newValue, int32_t *theValue );
 
-#if defined(__ppc64__) || defined(__i386__)
+#if defined(__ppc64__) || defined(__i386__) || defined(__x86_64__)
 
 bool    OSAtomicCompareAndSwap64( int64_t oldValue, int64_t newValue, int64_t *theValue );
 bool    OSAtomicCompareAndSwap64Barrier( int64_t oldValue, int64_t newValue, int64_t *theValue );
 
-#endif  /* defined(__ppc64__) || defined(__i386__) */
+#endif  /* defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) */
 
 
 /* Test and set.  They return the original value of the bit, and operate on bit (0x80>>(n&7))
index a669a7465f57394f37e28fb67cdc2da440dd4595..0f40842f9723e817445e4288e9bd81f4fb76af3b 100644 (file)
@@ -4,7 +4,7 @@
    This file is public domain.  */
 #if defined (__ppc__) || defined (__ppc64__)
 #include <ppc/limits.h>
-#elif defined (__i386__)
+#elif defined (__i386__) || defined(__x86_64__)
 #include <i386/limits.h>
 #else
 #error architecture not supported
index fa29da53816c67f2ca630827e3cb4d998a09a210..82d344bd6f919ff5450918817a4ccf38aa30f282 100644 (file)
@@ -44,10 +44,15 @@ CFLAGS-lconv.c += -D__APPLE_PR_3333969_HACK__
 
 # End hack for 3333969
 
-# for ppc64, we need to create rune32.h
-.if (${MACHINE_ARCH} == ppc64)
-# the following is good enough for ppc, ppc64 and i386
-ARCH32 != arch | sed 's/64//'
+# for LP64, we need to create rune32.h
+.ifdef LP64
+# the following is good enough for ppc, ppc64, i386 and x86_64
+_ARCH != arch
+.if $(_ARCH) == x86_64
+ARCH32 = i386
+.else
+ARCH32 = $(_ARCH:C/64$//)
+.endif
 rune.So rune.do rune.po rune.o: ${SYMROOT}/rune32.h
 ${SYMROOT}/rune32.h: ${SYMROOT}/rune-fbsd.c
        ${CC} -arch ${ARCH32} -DRUNEOFF32 -o ${SYMROOT}/rune32 ${.ALLSRC}
index ba1fd719985d81732be51d69c811be849cc397bc..84799c26fdf1bdbc1c9d1238c5070959d079399e 100644 (file)
@@ -22,6 +22,8 @@
  */
 #if defined(__i386__)
 #include <mach/i386/task.h>
+#elif defined(__x86_64__)
+#include <mach/x86_64/task.h>
 #elif defined(__ppc__)
 #include <mach/ppc/task.h>
 #elif defined(__ppc64__)
index da011bc7ec83ad4f6a824a4e31813e7946be0592..843b9d53bb0044b21493d73cafdb3d3a00869a33 100644 (file)
@@ -22,6 +22,8 @@
  */
 #if defined(__i386__)
 #include <mach/i386/thread_act.h>
+#elif defined(__x86_64__)
+#include <mach/x86_64/thread_act.h>
 #elif defined(__ppc__)
 #include <mach/ppc/thread_act.h>
 #elif defined(__ppc64__)
index 1b0ef2af5f14da3df1c968553169faa464a0fad7..2c38fa95583faac64530b6b31f7808e0ff8b01f5 100644 (file)
@@ -5,7 +5,8 @@
 .PATH: ${.CURDIR}/pthreads
 
 MISRCS +=                  pthread_cond.c pthread_tsd.c pthread.c \
-        pthread_mutex.c    thread_setup.c lock.s   stack.s pthread_rwlock.c
+        pthread_mutex.c    thread_setup.c stack.s pthread_rwlock.c \
+               lock.s
 
 PTHREADS_INSTHDRS += pthread.h pthread_impl.h sched.h
 PTHREADS_INSTHDRS := ${PTHREADS_INSTHDRS:S/^/${.CURDIR}\/pthreads\//}
index 6ff476f8d4c206b46c0ac39c746a9d1345ef2c56..18c05b106b09635481befc2fc45825685b8ae980 100644 (file)
@@ -97,7 +97,7 @@ END(__spin_unlock)
 
 LEAF(__spin_lock_try, 0)
        movl    $(_COMM_PAGE_SPINLOCK_TRY), %eax
-       jmpl    %eax
+       jmpl    *%eax
 
        ALIGN
 
@@ -105,7 +105,7 @@ LEAF(__spin_lock_try, 0)
 LEAF(__spin_lock, 0)
 _spin_lock:
        movl    $(_COMM_PAGE_SPINLOCK_LOCK), %eax
-       jmpl    %eax
+       jmpl    *%eax
 
 /*
  * void
@@ -120,7 +120,49 @@ _spin_lock:
 LEAF(__spin_unlock, 0)
 _spin_unlock:
        movl    $(_COMM_PAGE_SPINLOCK_UNLOCK), %eax
-       jmpl    %eax
+       jmpl    *%eax
+
+#elif defined(__x86_64__)
+
+#include <architecture/i386/asm_help.h>  
+
+/*    
+ * void
+ * _spin_lock(p)
+ *      int *p;
+ *
+ * Lock the lock pointed to by p.  Spin (possibly forever) until the next
+ * lock is available.
+ */
+        TEXT
+       ALIGN
+
+LEAF(__spin_lock_try, 0)
+       movq    $(_COMM_PAGE_SPINLOCK_TRY), %rax
+       jmp             *%rax
+
+       ALIGN
+
+.globl _spin_lock
+LEAF(__spin_lock, 0)
+_spin_lock:
+       movq    $(_COMM_PAGE_SPINLOCK_LOCK), %rax
+       jmp             *%rax
+
+/*
+ * void
+ * _spin_unlock(p)
+ *      int *p;
+ *
+ * Unlock the lock pointed to by p.
+ */
+       ALIGN
+
+.globl _spin_unlock
+LEAF(__spin_unlock, 0)
+_spin_unlock:
+       movl    $0, (%rdi)
+       ret
 
 #else
 #error spin_locks not defined for this architecture
index b2cc91528e5787b513c8d926d0417b3766c67ccd..cc79c42a630bc7578bc36aff1c8d1f7f0df835e3 100644 (file)
@@ -156,7 +156,7 @@ size_t _pthread_stack_size = 0;
 
 #if defined(__ppc__) || defined(__ppc64__)
 static const vm_address_t PTHREAD_STACK_HINT = 0xF0000000;
-#elif defined(__i386__)
+#elif defined(__i386__) || defined(__x86_64__)
 static const vm_address_t PTHREAD_STACK_HINT = 0xB0000000;
 #else
 #error Need to define a stack address hint for this architecture
index b1a947e9f8c38da4a59b25d496d8c3d1dc2bbc5a..795f38ed6c3fb4cc684093a9f7f422c2ebbe81e3 100644 (file)
@@ -246,7 +246,7 @@ typedef struct {
 
 #include "pthread.h"
 
-#if defined(__i386__) || defined(__ppc64__)
+#if defined(__i386__) || defined(__ppc64__) || defined(__x86_64__)
 /*
  * Inside libSystem, we can use r13 or %gs directly to get access to the
  * thread-specific data area. The current thread is in the first slot.
@@ -255,8 +255,8 @@ inline static pthread_t __attribute__((__pure__))
 _pthread_self_direct(void)
 {
        pthread_t ret;
-#if defined(__i386__)
-       asm("movl %%gs:%P1, %0" : "=r" (ret) : "i" (offsetof(struct _pthread, tsd[0])));
+#if defined(__i386__) || defined(__x86_64__)
+       asm("mov %%gs:%P1, %0" : "=r" (ret) : "i" (offsetof(struct _pthread, tsd[0])));
 #elif defined(__ppc64__)
        register const pthread_t __pthread_self asm ("r13");
        ret = __pthread_self;
index 9ede930d80b82c4c28c319966765395bb39ffec1..5be1689d0d5805a7750fbaf47c344954fd3da2d8 100644 (file)
@@ -85,6 +85,25 @@ LEAF(__adjust_sp,0)
        subl    $0x100,%eax
        ret
 
+#elif defined(__x86_64__)
+
+#import        <architecture/i386/asm_help.h>
+/*     
+ * void *_sp(void)
+ */
+
+LEAF(__sp,0)
+       movq    %rsp,%rax
+       ret
+
+/*
+ * void *_adjust_sp(void *sp)
+ */
+LEAF(__adjust_sp,0)
+       movq    %rdi,%rax
+       subq    $0x100,%rax
+       ret
+
 #else
 #error sp functions not defined for this architecture
 #endif
index 5d0bfb967f03b3e9e61c61e5cda542d285be5364..dab07508c8b1d077b98f8176786f6abf28f0c9b4 100644 (file)
@@ -156,6 +156,53 @@ _pthread_setup(pthread_t thread,
                        r);
        }
 
+#elif defined(__x86_64__)
+        x86_thread_state64_t state = {0};
+        x86_thread_state64_t *ts = &state;
+        uintptr_t *sp = vsp;
+
+        /*
+         * Set up x86-64 registers & function call.
+         */
+        count = x86_THREAD_STATE64_COUNT;
+       if (suspended) {
+               PTHREAD_MACH_CALL(thread_get_state(thread->kernel_thread,
+                                          x86_THREAD_STATE64,
+                                          (thread_state_t) &state,
+                                          &count),
+                         r);
+       }
+        ts->rip = (uintptr_t) routine;
+
+        /*
+        ** We need to simulate a 16-byte aligned stack frame as if we had
+        ** executed a call instruction. The stack should already be aligned
+               ** before it comes to us and we don't need to push any arguments,
+               ** so we shouldn't need to change it.
+        */
+
+               ts->rdi = (uintptr_t) thread;   /* argument to function */
+        *--sp = 0;            /* fake return address */
+        ts->rsp = (uintptr_t) sp;   /* set stack pointer */
+       /* Incase of needresume, suspend is always set */
+        if (suspended) {
+               PTHREAD_MACH_CALL(thread_set_state(thread->kernel_thread,
+                                          x86_THREAD_STATE64,
+                                          (thread_state_t) &state,
+                                          x86_THREAD_STATE64_COUNT),
+                         r);
+               if (needresume)
+                       PTHREAD_MACH_CALL(thread_resume(thread->kernel_thread),
+                               r);
+       } else {
+               PTHREAD_MACH_CALL(thread_create_running(mach_task_self(),
+                                       x86_THREAD_STATE64,
+                                       (thread_state_t) ts,
+                                       x86_THREAD_STATE64_COUNT,
+                                       &thread->kernel_thread),
+                       r);
+       }
+
 #else
 #error _pthread_setup not defined for this architecture
 #endif
index c59c5c53c79fd06f90745972c42590db314aaa0d..e791a63b93459a777b3bf62d1f1ed3b30c3b75a4 100644 (file)
@@ -40,10 +40,13 @@ fcntl(int fd, int cmd, ...)
         case F_SETLK:
         case F_SETLKW:
         case F_PREALLOCATE:
+        case F_SETSIZE:
         case F_RDADVISE:
         case F_READBOOTSTRAP:
         case F_WRITEBOOTSTRAP:
         case F_LOG2PHYS:
+        case F_GETPATH:
+        case F_PATHPKG_CHECK:
                arg = va_arg(ap, void *);
                break;
         default:
index e9604912ac98f958e502f5e62192cc5362adef23..da72b83e8a7a33e9555c4ed33579d4b78911a9ea 100644 (file)
@@ -173,7 +173,7 @@ _sigtramp(
 #if defined(__DYNAMIC__)
         __in_sigtramp++;
 #endif
-#ifdef __i386__
+#if defined(__i386__) || defined(__x86_64__)
        if (sigstyle == UC_TRAD)
                sa_handler(sig);
        else {
diff --git a/x86_64/gen/Makefile.inc b/x86_64/gen/Makefile.inc
new file mode 100644 (file)
index 0000000..698fd5c
--- /dev/null
@@ -0,0 +1,6 @@
+# searching i386 directory as a fallback to avoid unnecessary code duplication
+.PATH: ${.CURDIR}/x86_64/gen ${.CURDIR}/i386/gen
+
+MDSRCS+= icacheinval.s \
+       mcount.s \
+       setjmperr.c
diff --git a/x86_64/gen/mcount.s b/x86_64/gen/mcount.s
new file mode 100644 (file)
index 0000000..2311cbb
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+#import <architecture/i386/asm_help.h>
+
+.text
+        .globl mcount
+mcount:
+        pushq   %rbp            // setup mcount's frame
+        movq    %rsp,%rbp
+
+        // The compiler doesn't preserve registers when calling mcount
+        // so we have to ensure that we don't trash any.
+        subq   $8, %rsp                // maintain 16-byte alignment
+        pushq  %rdi
+        pushq  %rsi
+        pushq  %rax
+        
+        movq    (%rbp),%rax     // load the frame pointer of mcount's caller
+        movq    8(%rax),%rax    // load mcount's caller's return address
+        movq    8(%rbp),%rdi    // set up the selfpc parameter for moncount()
+        movq    %rax,%rsi       // set up the frompc parameter for moncount()
+        CALL_EXTERN(_moncount)  // call moncount()
+        
+        popq   %rax
+        popq   %rsi
+        popq   %rdi
+        // No need for an addq because we're restoring %rsp in the
+        // next instruction.
+
+        movq    %rbp,%rsp       // tear down mcount's frame
+        popq    %rbp
+        ret
diff --git a/x86_64/mach/Makefile.inc b/x86_64/mach/Makefile.inc
new file mode 100644 (file)
index 0000000..980ba6b
--- /dev/null
@@ -0,0 +1,3 @@
+# searching i386 directory as a fallback to avoid unnecessary code duplication
+.PATH: ${.CURDIR}/i386/mach
+MDSRCS += mach_absolute_time.c
diff --git a/x86_64/pthreads/Makefile.inc b/x86_64/pthreads/Makefile.inc
new file mode 100644 (file)
index 0000000..cfe58fd
--- /dev/null
@@ -0,0 +1,9 @@
+# searching i386 directory as a fallback to avoid unnecessary code duplication
+.PATH: ${.CURDIR}/x86_64/pthreads ${.CURDIR}/i386/pthreads
+
+MDSRCS += \
+       init_cpu_capabilities.c \
+       get_cpu_capabilities.s \
+       pthread_set_self.s \
+       pthread_self.s \
+       pthread_getspecific.s
diff --git a/x86_64/pthreads/get_cpu_capabilities.s b/x86_64/pthreads/get_cpu_capabilities.s
new file mode 100644 (file)
index 0000000..15f37ff
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/* Get the cpu_capabilities bit vector out of the comm page */
+
+#define        __APPLE_API_PRIVATE
+#include <machine/cpu_capabilities.h>
+#undef __APPLE_API_PRIVATE
+
+.text
+.align 2, 0x90
+.private_extern __get_cpu_capabilities
+__get_cpu_capabilities:
+       movq    $(_COMM_PAGE_CPU_CAPABILITIES), %rax
+       movl    (%rax), %eax
+       ret
diff --git a/x86_64/pthreads/pthread_getspecific.s b/x86_64/pthreads/pthread_getspecific.s
new file mode 100644 (file)
index 0000000..67c00f3
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include "pthread_machdep.h"
+
+.text
+.align 2, 0x90
+.globl _pthread_getspecific
+_pthread_getspecific:
+       movq    %gs:_PTHREAD_TSD_OFFSET(,%rdi,8),%rax
+       ret
diff --git a/x86_64/pthreads/pthread_self.s b/x86_64/pthreads/pthread_self.s
new file mode 100644 (file)
index 0000000..c040841
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include "pthread_machdep.h"
+
+.text
+.align 2, 0x90
+.globl _pthread_self
+_pthread_self:
+       movq    %gs:_PTHREAD_TSD_OFFSET,%rax
+       ret
diff --git a/x86_64/pthreads/pthread_set_self.s b/x86_64/pthreads/pthread_set_self.s
new file mode 100644 (file)
index 0000000..999c0bf
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <mach/i386/syscall_sw.h>
+
+.text
+.align 2, 0x90
+.globl ___pthread_set_self
+___pthread_set_self:
+       movl    $0, %esi        // 0 as the second argument
+       movl    $ SYSCALL_CONSTRUCT_MDEP(3), %eax       // Machine-dependent syscall number 3
+       MACHDEP_SYSCALL_TRAP
+       ret
diff --git a/x86_64/stdlib/gdtoa.mk b/x86_64/stdlib/gdtoa.mk
new file mode 100644 (file)
index 0000000..6a6a67d
--- /dev/null
@@ -0,0 +1,2 @@
+# Long double is 80 bits
+FBSDSRCS+=gdtoa_strtopx.c machdep_ldisx.c
diff --git a/x86_64/string/Makefile.inc b/x86_64/string/Makefile.inc
new file mode 100644 (file)
index 0000000..80c0b9d
--- /dev/null
@@ -0,0 +1,20 @@
+# $Version$
+#
+# x86-64-optimised string functions.
+#
+#
+#
+.PATH: ${.CURDIR}/x86_64/string
+
+MDSRCS += bcopy.s \
+       bzero.s \
+       memcpy.s \
+       memmove.s \
+       strlen.s \
+       strcpy.s \
+       strcmp.s \
+       strncpy.s \
+       strncmp.s \
+       memcmp.s \
+       bcmp.s \
+       memset.s
diff --git a/x86_64/string/bcmp.s b/x86_64/string/bcmp.s
new file mode 100644 (file)
index 0000000..8f2cd80
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * bcmp() is implemented in memcmp.s, as it is equivalent to memcmp() in OSX.
+ * (The two symbols, bcmp and memcmp, have the same value.)
+ * This empty file is here to prevent the Free BSD machine independent version
+ * from building.
+ */
diff --git a/x86_64/string/bcopy.s b/x86_64/string/bcopy.s
new file mode 100644 (file)
index 0000000..d06652d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Call the comm page routines
+ */
+
+#define __APPLE_API_PRIVATE
+#include <machine/cpu_capabilities.h>
+
+#include <architecture/i386/asm_help.h>
+
+       TEXT
+       ALIGN
+
+#if defined(MEMCOPY)
+LEAF(_memcpy,0)
+       movq    $(_COMM_PAGE_MEMCPY), %rax
+       jmp             *%rax
+#elif defined(MEMMOVE)
+LEAF(_memmove,0)
+       movq    $(_COMM_PAGE_MEMMOVE), %rax
+       jmp             *%rax
+#else
+LEAF(_bcopy,0)
+       movq    $(_COMM_PAGE_BCOPY), %rax
+       jmp             *%rax
+#endif
diff --git a/x86_64/string/bzero.s b/x86_64/string/bzero.s
new file mode 100644 (file)
index 0000000..ef27202
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Call the comm page routine
+ */
+
+#define __APPLE_API_PRIVATE
+#include <machine/cpu_capabilities.h>
+
+#include <architecture/i386/asm_help.h>
+
+       TEXT
+       ALIGN
+
+LEAF(_bzero,0)
+       movq    $(_COMM_PAGE_BZERO), %rax
+       jmp             *%rax
diff --git a/x86_64/string/memcmp.s b/x86_64/string/memcmp.s
new file mode 100644 (file)
index 0000000..640ffb6
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+
+// ***************     ***********
+// * M E M C M P * and * B C M P *
+// ***************     ***********
+//
+// int memcmp(const char *s1, const char *s2, size_t len);
+// int   bcmp(const char *s1, const char *s2, size_t len);
+//
+// Bcmp returns (+,0,-), whereas memcmp returns the true difference
+// between the first differing bytes, but we treat them identically.
+//
+// We optimize the compare by doing it with SSE.  This introduces
+// a complication: if we blindly did vector loads from both sides until
+// finding a difference, we might get a spurious page fault by
+// reading bytes past the difference.  To avoid this, we never do a load
+// that crosses a page boundary.
+
+#define        kShort  18                      // too short for vectors (must be >16)
+
+        .text
+        .align         4
+
+        .globl _memcmp
+        .globl _bcmp
+
+_memcmp:                               // int memcmp(const char *s1,const char *s2,size_t len);
+_bcmp:                                 // int   bcmp(const char *s1,const char *s2,size_t len);
+       cmpq    $(kShort),%rdx          // worth accelerating?
+       ja      LNotShort               // yes
+       
+
+// Too short to bother with parallel compares.  Loop over bytes.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %edx = length (<= kShort)
+
+LShort:
+       testl   %edx,%edx       // 0-length?
+       jnz     LShortLoop              // no
+       xorq    %rax,%rax               // return 0
+       jmp     LExit
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LShortLoop:                            // loop over bytes
+       movzb   (%rdi),%eax             // get LHS byte
+       movzb   (%rsi),%ecx             // get RHS byte
+       addq    $1,%rdi
+       addq    $1,%rsi
+       subl    %ecx,%eax               // compare them
+       jnz     LExit                   // done if not equal
+       subq    $1,%rdx                 // decrement length
+       jnz     LShortLoop
+LExit:                                 // return value is in %eax
+       ret
+       
+LNotEqual:                             // here from LLoopOverBytes with LHS in eax
+       movzb   (%rsi),%ecx             // get RHS byte
+       subl    %ecx,%eax               // generate return value (nonzero)
+       ret
+
+       
+// Loop over bytes until we reach end of a page.
+//     %rdi = LHS ptr
+//     %edi = RHS ptr
+//     %rdx = length remaining after end of loop (i.e., already adjusted)
+//     %ecx = #bytes until next page (1..15)
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverBytes:
+       movzb   (%rdi),%eax             // get LHS byte
+       addq    $1,%rdi
+       cmpb    (%rsi),%al              // compare to RHS byte
+       jnz     LNotEqual                       // done if not equal
+       addq    $1,%rsi
+       subl    $1,%ecx                 // more to go?
+       jnz     LLoopOverBytes
+       
+
+// Long enough to justify overhead of setting up vector compares.  In order to
+// avoid spurious page faults, we loop over:
+//
+//     min( length, bytes_in_LHS_page, bytes_in_RHS_page) >> 4
+//
+// 16-byte chunks.  When we near a page end, we have to revert to a byte-by-byte
+// comparison until reaching the next page, then resume the vector comparison.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %rdx = length (> kShort)
+
+LNotShort:
+       movq    %rdi,%rax               // copy ptrs
+       movq    %rsi,%rcx
+       andq    $4095,%rax              // mask down to page offsets
+       andq    $4095,%rcx
+       cmpq    %rax,%rcx               // which is bigger?
+       cmova   %rcx,%rax               // %eax = max(LHS offset, RHS offset);
+       movl    $4096,%ecx
+       subl    %eax,%ecx               // get #bytes to next page crossing
+       cmpl    %edx,%ecx               // will operand run out first?
+       cmova   %edx,%ecx               // get min(length remaining, bytes to page end)
+       movl    %ecx,%eax
+       shrl    $4,%ecx                 // get #chunks till end of operand or page
+       jnz     LLoopOverChunks         // enter vector loop
+       
+// Too near page end for vectors.
+
+       subq    %rax,%rdx               // adjust length remaining
+       movl    %eax,%ecx               // %ecx <- #bytes to page end
+       cmpq    $(kShort),%rdx          // will there be enough after we cross page for vectors?
+       ja      LLoopOverBytes          // yes
+       addq    %rax,%rdx               // no, restore total length remaining
+       jmp     LShortLoop              // compare rest byte-by-byte (%ecx != 0)
+
+
+// Loop over 16-byte chunks.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %rdx = length remaining
+//     %ecx = chunk count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverChunks:
+       movdqu  (%rdi),%xmm0            // get LHS
+       movdqu  (%rsi),%xmm1            // get RHS
+       addq    $16,%rdi
+       pcmpeqb %xmm1,%xmm0             // compare LHS to RHS
+       addq    $16,%rsi
+       pmovmskb %xmm0,%eax             // collect comparison result bits (1 if equal)
+       subq    $16,%rdx                // adjust length remaining
+       xorl    $0xFFFF,%eax            // all equal?
+       jne     LDifferent              // no, we found differing bytes
+       subl    $1,%ecx                 // more to go?
+       jnz     LLoopOverChunks
+       
+       cmpq    $(kShort),%rdx          // a lot more to compare?
+       jbe     LShort                  // no
+       jmp     LNotShort               // compute distance to next page crossing etc
+
+
+// Found a difference.  
+//     %rdi = LHS ptr, already advanced by 16
+//     %rsi = RHS ptr, already advanced by 16
+//     %eax = complemented compare vector (ie, 0 == equal)
+
+LDifferent:
+       bsf     %eax,%edx               // which byte differed?
+       subq    $16,%rdi                // point to byte 0 while we wait for bit scan
+       subq    $16,%rsi
+       movzb   (%rdi,%rdx),%eax        // get LHS byte
+       movzb   (%rsi,%rdx),%ecx        // get RHS byte
+       subl    %ecx,%eax               // compute difference (ie, return value)
+       ret
diff --git a/x86_64/string/memcpy.s b/x86_64/string/memcpy.s
new file mode 100644 (file)
index 0000000..8160b02
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved.
+ *
+ *      File:   libc/i386/ansi/memcpy.c
+ *      Author: Bruce Martin, NeXT Computer, Inc.
+ *
+ * HISTORY
+ * 24-Nov-92  Derek B Clegg (dclegg@next.com)
+ *     Created for m98k.
+ */
+#define MEMCOPY
+#include "bcopy.s"
diff --git a/x86_64/string/memmove.s b/x86_64/string/memmove.s
new file mode 100644 (file)
index 0000000..50fd4e2
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved.
+ *
+ *      File:   libc/i386/ansi/memmove.c
+ *      Author: Bruce Martin, NeXT Computer, Inc.
+ *
+ * HISTORY
+ * 24-Nov-92  Derek B Clegg (dclegg@next.com)
+ *     Created for m98k.
+ */
+#define MEMMOVE
+#include "bcopy.s"
diff --git a/x86_64/string/memset.s b/x86_64/string/memset.s
new file mode 100644 (file)
index 0000000..423db2f
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ *
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <machine/cpu_capabilities.h>
+
+/* This file contains the following functions:
+ *
+ *     void *memset(void *b, int c, size_t len);
+ *     void memset_pattern4(void *b, const void *c4, size_t len);
+ *     void memset_pattern8(void *b, const void *c8, size_t len);
+ *     void memset_pattern16(void *b, const void *c16, size_t len);
+ *
+ * Calls of memset() with c==0 are routed to the bzero() routine.  Most of the
+ * others go to _COMM_PAGE_MEMSET_PATTERN, which is entered as follows:
+ *     %rdi = ptr to memory to set (aligned)
+ *     %edx = length (which can be short, though we bias in favor of long operands)
+ *     %xmm0 = the pattern to store
+ * Return conditions:
+ *     %eax, %edi, %esi, %ecx, and %edx all trashed
+ *
+ * NB: we avoid "stos" family of instructions (stosl, stosb), as they are very slow
+ * on P4s and probably other processors.
+ */
+ #define kShort        255                     // for nonzero memset(), too short for commpage
+       .text
+       .globl  _memset
+       .align  2
+_memset:                               // void *memset(void *b, int c, size_t len);
+       andl    $0xFF,%esi              // (c==0) ?
+       jnz             LNonzero                // not a bzero
+       
+       movq    $(_COMM_PAGE_BZERO),%rax// map memset(p,0,n) into bzero(p,n)
+       movq    %rdx,%rsi               // put count where bzero() expects it
+       jmp             *%rax                   // enter commpage
+
+
+       // Handle memset of a nonzero value.
+       
+LNonzero:
+       movq    %rdi,%r8                // preserve the original pointer so we can return it
+       movl    %esi,%eax               // replicate byte in %esi into all four bytes
+       shll    $8,%esi
+       orl             %esi,%eax
+       movl    %eax,%esi
+       shll    $16,%esi
+       orl             %esi,%eax               // now %eax has "c" in all 4 bytes
+       cmpq    $(kShort),%rdx          // is operand too short for SSE?
+       ja              LCallCommpage           // no
+       
+// Nonzero memset() too short to call commpage.
+//     %eax = replicated 4-byte pattern
+//     %rdi = ptr
+//     %edx = length (<= kShort)
+       
+       cmpl    $16,%edx                // long enough to word align?
+       jge     3f                      // yes
+       test    %edx,%edx               // length==0?
+       jz      6f
+1:
+       movb    %al,(%rdi)              // pack in a byte
+       addq    $1,%rdi
+       subl    $1,%edx
+       jnz     1b
+       jmp     6f
+2:
+       movb    %al,(%rdi)              // pack in a byte
+       addq    $1,%rdi
+       subl    $1,%edx
+3:
+       test    $3,%edi                 // is ptr doubleword aligned?
+       jnz     2b                      // no
+       movl    %edx,%ecx               // copy length
+       shrl    $2,%edx                 // #doublewords to store
+4:      
+       movl    %eax,(%rdi)             // store aligned doubleword
+       addq    $4,%rdi
+       subl    $1,%edx
+       jnz     4b
+       andl    $3,%ecx                 // any leftover bytes?
+       jz      6f                      // no
+5:
+       movb    %al,(%rdi)              // pack in a byte
+       addq    $1,%rdi
+       subl    $1,%ecx
+       jnz     5b
+6:
+       movq    %r8,%rax                // get return value (ie, original ptr)
+       ret
+       
+// Nonzero memset() is long enough to call commpage.
+//     %eax = replicated 4-byte pattern
+//     %rdi = ptr
+//     %rdx = length (> kShort)
+       
+LCallCommpage:
+       movd    %eax,%xmm0              // move %eax to low 4 bytes of %xmm0
+       pshufd  $(0x00),%xmm0,%xmm0     // replicate across the vector
+       movq    %rdi,%rcx               // copy dest ptr
+       negl    %ecx
+       andl    $15,%ecx                // get #bytes to align ptr
+       jz      2f                      // skip if already aligned
+       subq    %rcx,%rdx               // decrement length
+1:
+       movb    %al,(%rdi)              // pack in a byte
+       addq    $1,%rdi
+       subl    $1,%ecx
+       jnz     1b
+2:                                     // ptr aligned, length long enough to justify
+       movq    $(_COMM_PAGE_MEMSET_PATTERN),%rax
+       call    *%rax                   // call commpage to do the heavy lifting
+       movq    %r8,%rax                // get return value (ie, original ptr)
+       ret
+
+
+// Handle memset of a 16-byte pattern.
+       
+       .globl  _memset_pattern16
+       .align  2, 0x90
+_memset_pattern16:                     // void memset_pattern16(void *b, const void *c16, size_t len);
+       movdqu  (%rsi),%xmm0            // load the pattern
+       jmp     LAlignPtr
+
+
+// Handle memset of an 8-byte pattern.
+       
+       .globl  _memset_pattern8
+       .align  2, 0x90
+_memset_pattern8:                      // void memset_pattern8(void *b, const void *c8, size_t len);
+       movq    (%rsi),%xmm0            // load pattern into low 8 bytes
+       punpcklqdq %xmm0,%xmm0          // replicate into all 16
+       jmp     LAlignPtr
+
+// Handle memset of a 4-byte pattern.
+       
+       .globl  _memset_pattern4
+       .align  2, 0x90
+_memset_pattern4:                      // void memset_pattern4(void *b, const void *c4, size_t len);
+       movd    (%rsi),%xmm0            // load pattern into low 4 bytes
+       pshufd  $(0x00),%xmm0,%xmm0     // replicate the 4 bytes across the vector
+
+
+// Align ptr if necessary.  We must rotate the pattern right for each byte we
+// store while aligning the ptr.  Since there is no rotate instruction in SSE3,
+// we have to synthesize the rotates.
+//     %rdi = ptr
+//     %rdx = length
+//     %xmm0 = pattern
+       
+LAlignPtr:                             // NB: can drop down to here!
+       cmpq    $100,%rdx               // long enough to bother aligning ptr?
+       movq    %rdi,%rcx               // copy ptr
+       jb      LReady                  // not long enough
+       negl    %ecx
+       andl    $15,%ecx                // get #bytes to align ptr
+       jz      LReady                  // already aligned
+       subq    %rcx,%rdx               // adjust length
+       
+       test    $1,%cl                  // 1-byte store required?
+       movd    %xmm0,%eax              // get 4 low bytes in %eax
+       jz      2f                      // no
+       movdqa  %xmm0,%xmm1             // copy pattern so we can shift in both directions
+       movb    %al,(%rdi)              // pack in the low-order byte
+       psrldq  $1,%xmm0                // shift pattern right 1 byte
+       addq    $1,%rdi
+       pslldq  $15,%xmm1               // shift pattern left 15 bytes
+       shrl    $8,%eax                 // in case 2-byte store is required
+       por     %xmm1,%xmm0             // complete right rotate of pattern by 1 byte
+2:
+       test    $2,%cl                  // 2-byte store required?
+       jz      4f                      // no
+       psrldq  $2,%xmm0                // shift pattern down 2 bytes
+       movw    %ax,(%rdi)              // pack in next two bytes
+       pinsrw  $7,%eax,%xmm0           // insert low word of %eax into high word of %xmm0
+       addq    $2,%rdi                 // adjust ptr
+4:
+       test    $4,%cl                  // 4-byte store required?
+       jz      8f                      // no
+       movd    %xmm0,(%rdi)            // store low 4 bytes of %xmm0
+       pshufd  $(0x39),%xmm0,%xmm0     // rotate %xmm0 right 4 bytes (mask == 00 11 10 01)
+       addq    $4,%rdi                 // adjust ptr
+8:
+       test    $8,%cl                  // 8-byte store required?
+       jz      LReady                  // no
+       movq    %xmm0,(%rdi)            // store low 8 bytes of %xmm0
+       pshufd  $(0x4e),%xmm0,%xmm0     // rotate %xmm0 right 8 bytes (mask == 01 00 11 10)
+       addq    $8,%rdi                 // adjust ptr
+       
+// Ptr is aligned if practical, we're ready to call commpage to do the heavy lifting.
+
+LReady:
+       movq    $(_COMM_PAGE_MEMSET_PATTERN),%rax
+       call    *%rax                   // call commpage to do the heavy lifting
+       ret
diff --git a/x86_64/string/strcmp.s b/x86_64/string/strcmp.s
new file mode 100644 (file)
index 0000000..6a069c0
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+
+// ***************
+// * S T R C M P *
+// ***************
+//
+// int strcmp(const char *s1, const char *s2);
+//
+// We optimize the compare by doing it in parallel, using SSE.  This introduces
+// a complication: if we blindly did vector loads from both sides until
+// finding a difference (or 0), we might get a spurious page fault by
+// reading bytes past the difference.  To avoid this, we never do a load
+// that crosses a page boundary.
+
+        .text
+        .globl _strcmp
+
+        .align         4
+_strcmp:                               // int strcmp(const char *s1,const char *s2);
+
+// In order to avoid spurious page faults, we loop over:
+//
+//     min( bytes_in_LHS_page, bytes_in_RHS_page) >> 4
+//
+// 16-byte chunks.  When we near a page end, we have to revert to a byte-by-byte
+// comparison until reaching the next page, then resume the vector comparison.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+
+LNextChunk:
+       movl    %edi,%eax               // copy low 4 bytes of each ptr
+       movl    %esi,%edx
+       andl    $4095,%eax              // mask down to page offsets
+       andl    $4095,%edx
+       cmpl    %eax,%edx               // which is bigger?
+       cmova   %edx,%eax               // %eax = max(LHS offset, RHS offset);
+       movl    $4096,%edx
+       subl    %eax,%edx               // get #bytes to next page crossing
+       movl    %edx,%eax
+       shrl    $4,%edx                 // get #chunks till end of operand or page
+       jnz     LLoopOverChunks         // enter vector loop
+       movl    %eax,%edx               // no chunks...
+       jmp     LLoopOverBytes          // ...so loop over bytes until page end
+
+
+// Loop over bytes.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %edx = byte count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverBytes:
+       movzb   (%rdi),%eax             // get LHS byte
+       movzb   (%rsi),%ecx             // get RHS byte
+       addq    $1,%rdi
+       addq    $1,%rsi
+       testl   %eax,%eax               // 0?
+       jz      LExit0                  // yes, we're done
+       subl    %ecx,%eax               // compare them
+       jnz     LExit                   // done if not equal
+       subl    $1,%edx                 // more to go?
+       jnz     LLoopOverBytes
+       
+       jmp     LNextChunk              // we've come to end of page
+
+
+// Loop over 16-byte chunks.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %edx = chunk count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverChunks:
+       movdqu  (%rdi),%xmm1            // get LHS
+       movdqu  (%rsi),%xmm2            // get RHS
+       pxor    %xmm0,%xmm0             // get some 0s in the shadow of the loads
+       addq    $16,%rdi
+       pcmpeqb %xmm1,%xmm2             // compare LHS to RHS
+       pcmpeqb %xmm1,%xmm0             // compare LHS to 0s
+       addq    $16,%rsi
+       pmovmskb %xmm2,%eax             // get result mask for comparison of LHS and RHS
+       pmovmskb %xmm0,%ecx             // get result mask for 0 check
+       xorl    $0xFFFF,%eax            // complement compare mask so 1 means "not equal"
+       orl     %ecx,%eax               // combine the masks and check for 1-bits
+       jnz     LFoundDiffOr0           // we found differing bytes or a 0-byte
+       subl    $1,%edx                 // more to go?
+       jnz     LLoopOverChunks
+       
+       jmp     LNextChunk              // compare up to next page boundary
+       
+
+// Found a zero and/or a difference in vector compare.
+//     %rdi = LHS ptr, already advanced by 16
+//     %rsi = RHS ptr, already advanced by 16
+//     %eax = bit n set if bytes n differed or were 0
+
+LFoundDiffOr0:
+       bsf     %eax,%edx               // which byte differed or was 0?
+       subq    $16,%rdi                // point to start of vectors while we wait for bit scan
+       subq    $16,%rsi
+       movzb   (%rdi,%rdx),%eax        // get LHS byte
+       movzb   (%rsi,%rdx),%ecx        // get RHS byte
+       subl    %ecx,%eax               // compute difference (ie, return value)
+       ret
+
+
+// Found a zero and/or difference in byte loop.
+//     %eax = LHS byte
+//     %ecx = RHS byte
+
+LExit0:
+       subl    %ecx,%eax               // compute difference (ie, return value)
+LExit:                                 // here with difference already in %eax
+       ret
diff --git a/x86_64/string/strcpy.s b/x86_64/string/strcpy.s
new file mode 100644 (file)
index 0000000..d667b05
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+
+// ***************
+// * S T R C P Y *
+// ***************
+//
+// char  *strcpy(const char *dst, const char *src);
+//
+// We optimize the move by doing it vector parallel.  This introduces
+// a complication: if we blindly did vector load/stores until finding
+// a 0, we might get a spurious page fault by touching bytes past it.
+// To avoid this, we never do a load that crosses a page boundary,
+// and never store a byte we don't have to.
+//
+// We align the destination, because unaligned vector stores are slow.
+
+        .text
+        .globl _strcpy
+
+        .align         4
+_strcpy:                               // char *strcpy(const char *dst, const char *src);
+       movq    %rdi,%rcx       // preserve dest ptr so we can return it
+       movl    %edi,%edx               // copy low 4 bytes of dest ptr
+       negl    %edx
+       andl    $15,%edx                // how many bytes to align dest ptr?
+       jnz     LLoopOverBytes          // not aligned, so go do so
+       
+       
+// In order to avoid spurious page faults, we loop until nearing the source page
+// end.  Then we revert to a byte-by-byte loop for 16 bytes until the page is crossed,
+// then resume the vector loop. 
+//     %rsi = source ptr (unaligned)
+//     %rdi = dest ptr (aligned)
+
+LNextChunk:
+       movl    %esi,%eax               // copy low 4 bytes of source ptr
+       movl    $4096,%edx
+       andl    $4095,%eax              // get offset into source page
+       subl    %eax,%edx               // get #bytes remaining in source page
+       shrl    $4,%edx                 // get #chunks till end of page
+       jnz     LLoopOverChunks         // enter vector loop
+       movl    $16,%edx                // move 16 bytes to cross page but keep dest aligned
+       jmp     LLoopOverBytes
+
+
+// Loop over bytes.
+//     %rsi = source ptr
+//     %rdi = dest ptr
+//     %edx = byte count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverBytes:
+       movzb   (%rsi),%eax             // get source byte
+       addq    $1,%rsi
+       movb    %al,(%rdi)              // pack into dest
+       addq    $1,%rdi
+       testl   %eax,%eax               // 0?
+       jz      LDone                   // yes, we're done
+       subl    $1,%edx                 // more to go?
+       jnz     LLoopOverBytes
+       
+       jmp     LNextChunk              // we've come to end of page
+
+
+// Loop over 16-byte chunks.
+//     %rsi = source ptr (unaligned)
+//     %rdi = dest ptr (aligned)
+//     %edx = chunk count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverChunks:
+       movdqu  (%rsi),%xmm1            // get source
+       pxor    %xmm0,%xmm0             // get some 0s
+       addq    $16,%rsi
+       pcmpeqb %xmm1,%xmm0             // compare source to 0s
+       pmovmskb %xmm0,%eax             // get result mask for 0 check
+       testl   %eax,%eax               // any 0s?
+       jnz     LFound0                 // yes, exit loop
+       movdqa  %xmm1,(%rdi)            // no 0s so do aligned store into destination
+       addq    $16,%rdi
+       subl    $1,%edx                 // more to go?
+       jnz     LLoopOverChunks
+       
+       movl    $16,%edx                // move 16 bytes
+       jmp     LLoopOverBytes          // cross page but keep dest aligned
+       
+
+// Found a zero in the vector.  Figure out where it is, and store the bytes
+// up to it.
+//     %rdi = dest ptr (aligned)
+//     %eax = result mask
+//     %xmm1 = source vector
+
+LFound0:
+       bsf     %eax,%edx               // find first 0
+       addl    $1,%edx                 // we need to store the 0 too
+       test    $16,%dl                 // was 0 last byte?
+       jz      8f                      // no
+       movdqa  %xmm1,(%rdi)            // yes, store entire vector
+       jmp     LDone
+8:     
+       test    $8,%dl                  // 8-byte store required?
+       jz      4f                      // no
+       movq    %xmm1,(%rdi)            // pack in 8 low bytes
+       psrldq  $8,%xmm1                // then shift vector down 8 bytes
+       addq    $8,%rdi
+4:
+       test    $4,%dl                  // 4-byte store required?
+       jz      3f                      // no
+       movd    %xmm1,(%rdi)            // pack in 4 low bytes
+       psrldq  $4,%xmm1                // then shift vector down 4 bytes
+       addq    $4,%rdi
+3:
+       andl    $3,%edx                 // more to go?
+       jz      LDone                   // no
+       movd    %xmm1,%eax              // move remainders out of vector into %eax
+1:                                     // loop on up to three bytes
+       movb    %al,(%rdi)              // pack in next byte
+       shrl    $8,%eax                 // shift next byte into position
+       addq    $1,%rdi
+       dec     %edx
+       jnz     1b
+       
+LDone:
+       movq    %rcx,%rax               // original dest ptr is return value
+       ret
diff --git a/x86_64/string/strlen.s b/x86_64/string/strlen.s
new file mode 100644 (file)
index 0000000..51def0c
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ *
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Strlen, for processors with SSE3.
+ *
+ * Note that all memory references must be aligned, in order to avoid spurious
+ * page faults.  Thus we have to load the aligned 16-byte chunk containing the
+ * first byte of the operand, then mask out false 0s that may occur before the
+ * first byte.
+ *
+ * We favor the fall-through (ie, short operand) path.
+ */
+
+        .text
+        .globl  _strlen
+        .align  4, 0x90
+_strlen:                               // size_t strlen(char *b);
+       pxor    %xmm0,%xmm0             // zero %xmm0
+       movq    %rdi,%rcx               // copy ptr
+       movq    %rdi,%rdx               // make another copy
+       andq    $(-16),%rdi             // 16-byte align ptr
+       orl     $(-1),%eax
+       pcmpeqb (%rdi),%xmm0            // check whole qw for 0s
+       andl    $15,%ecx                // get #bytes in aligned dq before operand
+       shl     %cl,%eax                // create mask for the bytes of aligned dq in operand
+       pmovmskb %xmm0,%ecx             // collect mask of 0-bytes
+       andl    %eax,%ecx               // mask out any 0s that occur before 1st byte
+       jz      LEnterLoop              // no 0-bytes (ie, 1-bits), so enter by-16 loop
+       
+// We've found a 0-byte.
+//     %rdi = aligned address of 16-byte block containing the terminating 0-byte
+//     %ecx = compare bit vector
+
+LFoundIt:
+       bsf     %ecx,%eax               // find first 1-bit (ie, first 0-byte)
+       movq    %rdx,%rcx               // recover ptr to 1st byte in string
+       addq    %rdi,%rax               // get address of the 0-byte
+       subq    %rcx,%rax               // subtract address of 1st byte to get string length
+       ret
+       
+// Loop over aligned 16-byte blocks:
+//     %rdi = address of previous block
+
+LEnterLoop:
+       pxor    %xmm0,%xmm0             // get some 0-bytes
+       addq    $16,%rdi                // advance ptr
+LLoop:
+       movdqa  (%rdi),%xmm1            // get next chunk
+       addq    $16,%rdi
+       pcmpeqb %xmm0,%xmm1             // check for 0s
+       pmovmskb %xmm1,%ecx             // collect mask of 0-bytes
+       test    %ecx,%ecx               // any 0-bytes?
+       jz      LLoop                   // no 0-bytes, so get next dq
+
+       subq    $16,%rdi                // back up ptr
+       jmp     LFoundIt
diff --git a/x86_64/string/strncmp.s b/x86_64/string/strncmp.s
new file mode 100644 (file)
index 0000000..8608e70
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2005-2006 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+
+// *****************
+// * S T R N C M P *
+// *****************
+//
+// int strncmp(const char *s1, const char *s2, size_t len);
+//
+// We optimize the compare by doing it vector parallel.  This introduces
+// a complication: if we blindly did vector loads from both sides until
+// finding a difference (or 0), we might get a spurious page fault by
+// reading bytes past the difference.  To avoid this, we never do a load
+// that crosses a page boundary.
+
+#define        kShort  20                      // too short for vectors (must be >16)
+
+        .text
+        .globl _strncmp
+
+        .align         4
+_strncmp:                              // int strncmp(const char *s1, const char *s2, size_t len);
+       cmpq    $(kShort),%rdx          // worth accelerating?
+       ja      LNotShort               // yes
+       
+
+// Too short to bother with parallel compares.  Loop over bytes.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %edx = length (<= kShort)
+
+LShort:
+       testl   %edx,%edx               // 0-length?
+       jnz     LShortLoop              // no
+       jmp     LReturn0                // yes, return 0
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LShortLoop:                            // loop over bytes
+       movzb   (%rdi),%eax             // get LHS byte
+       movzb   (%rsi),%ecx             // get RHS byte
+       incq    %rdi
+       incq    %rsi
+       testl   %eax,%eax               // LHS==0 ?
+       jz      LNotEqual               // yes, this terminates comparison
+       cmpl    %ecx,%eax               // compare them (sub won't fuse, but cmp will)
+       jnz     LNotEqual               // done if not equal
+       decl    %edx                    // decrement length
+       jnz     LShortLoop
+LReturn0:
+       xorl    %eax,%eax               // all bytes equal, so return 0
+       ret
+       
+LNotEqual:                             // LHS in eax, RHS in ecx
+       subl    %ecx,%eax               // generate return value (nonzero)
+       ret
+
+       
+// Loop over bytes until we reach end of a page.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %rdx = length remaining after end of loop (ie, already adjusted)
+//     %r8d = #bytes until next page (1..15)
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverBytes:
+       movzb   (%rdi),%eax             // get LHS byte
+       movzb   (%rsi),%ecx             // get RHS byte
+       incq    %rdi
+       incq    %rsi
+       testl   %eax,%eax               // LHS==0 ?
+       jz      LNotEqual               // yes, this terminates comparison
+       cmpl    %ecx,%eax               // compare them (sub won't fuse, but cmp will)
+       jnz     LNotEqual               // done if not equal
+       decl    %r8d                    // more to go?
+       jnz     LLoopOverBytes
+       
+
+// Long enough to justify overhead of setting up vector compares.  In order to
+// avoid spurious page faults, we loop over:
+//
+//     min( length, bytes_in_LHS_page, bytes_in_RHS_page) >> 4
+//
+// 16-byte chunks.  When we near a page end, we have to revert to a byte-by-byte
+// comparison until reaching the next page, then resume the vector comparison.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %rdx = length (> kShort)
+
+LNotShort:
+       movl    %edi,%eax               // copy ptrs
+       movl    %esi,%r8d
+       andl    $4095,%eax              // mask down to page offsets
+       andl    $4095,%r8d
+       cmpl    %eax,%r8d               // which is bigger?
+       cmova   %r8d,%eax               // %eax = max(LHS offset, RHS offset);
+       movl    $4096,%r8d
+       subl    %eax,%r8d               // get #bytes to next page crossing
+       cmpq    %rdx,%r8                // will operand run out first?
+       cmova   %rdx,%r8                // get min(length remaining, bytes to page end)
+       movl    %r8d,%eax               // copy #bytes
+       shrl    $4,%r8d                 // get #chunks till end of operand or page
+       testl   %r8d,%r8d               // test %r8d for 0 without partial flag update stall
+       jnz     LLoopOverChunks         // enter vector loop
+       
+// Too near page end for vectors.
+
+       subq    %rax,%rdx               // adjust length remaining
+       movl    %eax,%r8d               // %r8d <- #bytes to page end
+       cmpq    $(kShort),%rdx          // will there be enough after we cross page for vectors?
+       ja      LLoopOverBytes          // yes
+       addq    %rax,%rdx               // no, restore total length remaining
+       jmp     LShortLoop              // compare rest byte-by-byte (%rdx != 0)
+
+
+// Loop over 16-byte chunks.
+//     %rdi = LHS ptr
+//     %rsi = RHS ptr
+//     %rdx = length remaining
+//     %r8d = chunk count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverChunks:
+       movdqu  (%rdi),%xmm1            // get LHS
+       movdqu  (%rsi),%xmm2            // get RHS
+       pxor    %xmm0,%xmm0             // get some 0s in the shadow of the loads
+       addq    $16,%rdi
+       pcmpeqb %xmm1,%xmm2             // compare LHS to RHS
+       pcmpeqb %xmm1,%xmm0             // compare LHS to 0s
+       addq    $16,%rsi
+       pmovmskb %xmm2,%eax             // get result mask for comparison of LHS and RHS
+       pmovmskb %xmm0,%ecx             // get result mask for 0 check
+       subq    $16,%rdx                // decrement length remaining
+       xorl    $0xFFFF,%eax            // complement compare mask so 1 means "not equal"
+       orl     %ecx,%eax               // combine the masks and check for 1-bits
+       jnz     LFoundDiffOr0           // we found differing bytes or a 0-byte
+       decl    %r8d                    // more to go?
+       jnz     LLoopOverChunks         // yes
+       
+       cmpq    $(kShort),%rdx          // a lot more to compare?
+       jbe     LShort                  // no
+       jmp     LNotShort               // compute distance to next page crossing etc
+
+
+// Found a zero and/or a difference in vector compare.
+//     %rdi = LHS ptr, already advanced by 16
+//     %rsi = RHS ptr, already advanced by 16
+//     %eax = bit n set if bytes n differed or were 0
+
+LFoundDiffOr0:
+       bsf     %eax,%edx               // which byte differed or was 0?
+       movzb   -16(%rdi,%rdx),%eax     // get LHS byte
+       movzb   -16(%rsi,%rdx),%edx     // get RHS byte
+       subl    %edx,%eax               // compute difference (ie, return value)
+       ret
diff --git a/x86_64/string/strncpy.s b/x86_64/string/strncpy.s
new file mode 100644 (file)
index 0000000..7159cf1
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <machine/cpu_capabilities.h>
+
+
+// *****************
+// * S T R N C P Y *
+// *****************
+//
+// char  *strncpy(const char *dst, const char *src, size_t n);
+//
+// We optimize the move by doing it vector parallel.  This introduces
+// a complication: if we blindly did vector load/stores until finding
+// a 0, we might get a spurious page fault by touching bytes past it.
+// To avoid this, we never do a load that crosses a page boundary,
+// and never store a byte we don't have to.
+//
+// We align the destination, because unaligned vector stores are slow.
+//
+// Recall that strncpy() zero fills the remainder of the dest buffer,
+// and does not terminate the string if its length is greater than or
+// equal to n.
+
+#define        kShort  31                      // too short to bother with vector loop
+
+        .text
+        .globl _strncpy
+
+        .align         4
+_strncpy:                              // char  *strncpy(const char *dst, const char *src, size_t n);
+       movq    %rdi,%r8        // preserve destination pointer so we can return it
+       movl    %edi,%ecx               // copy low 4 bytes of dest ptr
+       negl    %ecx
+       andl    $15,%ecx                // how many bytes to align dest ptr?
+       jnz     LCheckShortCopy         // align destination first
+       
+       
+// In order to avoid spurious page faults, we loop until nearing the source page
+// end.  Then we revert to a byte-by-byte loop for 16 bytes until the page is crossed,
+// then resume the vector loop. 
+//     %rsi = source ptr (unaligned)
+//     %rdi = dest ptr (aligned)
+//     %rdx = buffer length remaining
+
+LNextChunk:                            // NB: can drop down to here
+       movl    %esi,%eax               // copy the low 4 bytes of the source ptr
+       movl    $4096,%ecx
+       andl    $4095,%eax              // get offset into source page
+       subl    %eax,%ecx               // get #bytes remaining in source page
+       cmpq    %rdx,%rcx               // will buffer run out before the page end?
+       cmova   %rdx,%rcx               // get min(length remaining, bytes to page end)
+       shrl    $4,%ecx                 // get #chunks till end of page
+       jnz     LLoopOverChunks         // enter vector loop
+       
+// We can't use the chunk loop yet.  Check for short and empty buffers, then use byte loop.
+
+LCrossPage:                            // if buffer is large enough, cross source page
+       movl    $16,%ecx                // move 16 bytes to cross page but keep dest aligned
+LCheckShortCopy:                       // we propose to copy %ecx bytes in byte loop
+       cmpq    $(kShort),%rdx          // much left?
+       ja      LLoopOverBytes          // yes, loop over bytes then more chunks
+       movl    %edx,%ecx               // no, use the byte loop for everything
+       testl   %edx,%edx               // have we filled buffer?
+       jnz     LLoopOverBytes          // no
+       jmp     LDone
+
+
+// Loop over bytes.
+//     %rsi = source ptr
+//     %rdi = dest ptr
+//     %rdx = buffer length remaining
+//     %rcx = count of bytes to loop over (<= buffer length)
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverBytes:
+       movzb   (%rsi),%eax             // get source byte
+       addq    $1,%rsi
+       subq    $1,%rdx                 // decrement length
+       movb    %al,(%rdi)              // pack into dest
+       addq    $1,%rdi
+       testl   %eax,%eax               // 0?
+       jz      LZeroBuffer             // yes, we're done copying string
+       subq    $1,%rcx                 // more to go?
+       jnz     LLoopOverBytes
+       
+       testq   %rdx,%rdx               // at end of buffer?
+       jnz     LNextChunk              // no, xfer chunks
+       jmp     LDone                   // yes
+
+
+// Loop over 16-byte chunks.
+//     %rsi = source ptr (unaligned)
+//     %rdi = dest ptr (aligned)
+//     %rdx = buffer length remaining
+//     %ecx = chunk count
+
+       .align  4,0x90                  // align inner loops to optimize I-fetch
+LLoopOverChunks:
+       movdqu  (%rsi),%xmm1            // get source
+       pxor    %xmm0,%xmm0             // get some 0s
+       addq    $16,%rsi
+       pcmpeqb %xmm1,%xmm0             // compare source to 0s
+       pmovmskb %xmm0,%eax             // get result mask for 0 check
+       testl   %eax,%eax               // any 0s?
+       jnz     LFound0                 // yes, exit loop
+       movdqa  %xmm1,(%rdi)            // no 0s so do aligned store into destination
+       addq    $16,%rdi
+       subq    $16,%rdx                // decrement length remaining
+       subl    $1,%ecx                 // more to go?
+       jnz     LLoopOverChunks
+       
+       jmp     LCrossPage              // cross page but keep dest aligned
+       
+
+// Found a zero in the vector.  Figure out where it is, and store the bytes
+// up to it.  It is possible that we should check to be sure (%rdx >= 16), and
+// just do an aligned store of %xmm1 if so.  But if we did, we'd be doing byte
+// stores into the same double quadword in bzero(), which might hit a hazard.
+// Experimentation needed.
+//     %rdi = dest ptr (aligned)
+//     %eax = result mask
+//     %rdx = buffer length remaining
+//     %xmm1 = source vector
+
+LFound0:
+       bsf     %eax,%ecx               // find first 0
+       subq    %rcx,%rdx               // decrement remaining buffer length
+       test    $8,%cl                  // 8-byte store required?
+       jz      4f                      // no
+       movq    %xmm1,(%rdi)            // pack in 8 low bytes
+       psrldq  $8,%xmm1                // then shift vector down 8 bytes
+       addq    $8,%rdi
+4:
+       test    $4,%cl                  // 4-byte store required?
+       jz      3f                      // no
+       movd    %xmm1,(%rdi)            // pack in 4 low bytes
+       psrldq  $4,%xmm1                // then shift vector down 4 bytes
+       addq    $4,%rdi
+3:
+       andl    $3,%ecx                 // more to go?
+       jz      LZeroBuffer             // no
+       movd    %xmm1,%eax              // move remainders out of vector into %eax
+1:                                     // loop on up to three bytes
+       movb    %al,(%rdi)              // pack in next byte
+       shrl    $8,%eax                 // shift next byte into position
+       addq    $1,%rdi
+       subl    $1,%ecx
+       jnz     1b
+
+// We've copied the string.  Now zero the rest of the buffer, using commpage bzero().
+//     %rdi = dest ptr
+//     %rcx = buffer length remaining
+
+LZeroBuffer:
+       movq    %rdx,%rsi               // remaining buffer size (2nd argument)
+       movq    $(_COMM_PAGE_BZERO),%rax
+       call    *%rax
+
+LDone:
+       movq    %r8,%rax                // original dest ptr is return value
+       ret
diff --git a/x86_64/sys/Makefile.inc b/x86_64/sys/Makefile.inc
new file mode 100644 (file)
index 0000000..792418f
--- /dev/null
@@ -0,0 +1,232 @@
+.PATH: ${.CURDIR}/x86_64/sys ${.CURDIR}/i386/sys
+
+AINC+= -I${.CURDIR}/x86_64/sys
+MDSRCS+=  ATPgetreq.s \
+       ATPgetrsp.s \
+       ATPsndreq.s \
+       ATPsndrsp.s \
+       ATgetmsg.s \
+       ATputmsg.s \
+       ATsocket.s \
+       _exit.s \
+       __fcntl.s \
+       _getlogin.s \
+       __ioctl.s \
+       __mmap.s \
+       _pthread_kill.s \
+       __pthread_canceled.s \
+       __pthread_markcancel.s \
+       __semwait_signal.s \
+       _setjmp.s \
+       _setlogin.s \
+       _sysctl.s \
+       accept.s \
+       access.s \
+       acct.s \
+       add_profil.s \
+       adjtime.s \
+       aio_cancel.s \
+       aio_error.s \
+       aio_fsync.s \
+       aio_read.s \
+       aio_return.s \
+       aio_suspend.s \
+       aio_write.s \
+       audit.s \
+       auditctl.s \
+       auditon.s \
+       bind.s \
+       cerror.s \
+       chdir.s \
+       checkuseraccess.s \
+       chflags.s \
+       chmod.s \
+       chown.s \
+       commpage.c \
+       chroot.s \
+       close.s \
+       connect.s \
+       dup.s \
+       dup2.s \
+       exchangedata.s \
+       execve.s \
+       fchdir.s \
+       fchflags.s \
+       fchmod.s \
+       fchown.s \
+       fgetxattr.s  \
+       fhopen.s \
+       flistxattr.s  \
+       flock.s \
+       fork.s \
+       fpathconf.s \
+       fremovexattr.s  \
+       fsctl.s \
+       fsetxattr.s  \
+       fstat.s \
+       fstatfs.s \
+       fstatv.s \
+       fsync.s \
+       ftruncate.s \
+       futimes.s \
+       getattrlist.s \
+       getaudit.s \
+       getaudit_addr.s \
+       getauid.s \
+       getdirentries.s \
+       getdirentriesattr.s \
+       getdtablesize.s \
+       getegid.s \
+       geteuid.s \
+       getfh.s \
+       getfsstat.s \
+       getgid.s \
+       getgroups.s \
+       getitimer.s \
+       getpeername.s \
+       getpgid.s \
+       getpgrp.s \
+       getpid.s \
+       getppid.s \
+       getpriority.s \
+       getrlimit.s \
+       getrusage.s \
+       getsid.s \
+       getsockname.s \
+       getsockopt.s \
+       getuid.s \
+       getxattr.s  \
+       i386_gettimeofday.s \
+       i386_get_ldt.s \
+       i386_set_ldt.s \
+       issetugid.s \
+       kevent.s \
+       kill.s \
+       kqueue.s \
+       kqueue_from_portset_np.s \
+       kqueue_portset_np.s \
+       ktrace.s \
+       lchown.s \
+       link.s \
+       lio_listio.s \
+       listen.s \
+       listxattr.s  \
+       load_shared_file.s \
+       lseek.s \
+       lstat.s \
+       lstatv.s \
+       madvise.s \
+       mincore.s \
+       minherit.s \
+       mkcomplex.s \
+       mkdir.s \
+       mkfifo.s \
+       mknod.s \
+       mlock.s \
+       mlockall.s \
+       mount.s \
+       msgget.s \
+       msgrcv.s \
+       msgsnd.s \
+       msgsys.s \
+       munlock.s \
+       munlockall.s \
+       new_system_shared_regions.s \
+       nfsclnt.s \
+       nfssvc.s \
+       open.s \
+       OSAtomic.s \
+       pathconf.s \
+       pipe.s \
+       poll.s \
+       posix_madvise.s \
+       pread.s \
+       profil.s \
+       pthread_sigmask.s \
+       ptrace.s \
+       pwrite.s \
+       quota.s \
+       quotactl.s \
+       read.s \
+       readlink.s \
+       readv.s \
+       reboot.s \
+       recvfrom.s \
+       recvmsg.s \
+       removexattr.s  \
+       rename.s \
+       reset_shared_file.s \
+       revoke.s \
+       rmdir.s \
+       searchfs.s \
+       select.s \
+       sem_close.s \
+       sem_destroy.s \
+       sem_getvalue.s \
+       sem_init.s \
+       sem_post.s \
+       sem_trywait.s \
+       sem_wait.s \
+       semget.s \
+       semop.s \
+       semsys.s \
+       sendmsg.s \
+       sendto.s \
+       setattrlist.s \
+       setaudit.s \
+       setaudit_addr.s \
+       setauid.s \
+       setegid.s \
+       seteuid.s \
+       setgid.s \
+       setgroups.s \
+       setitimer.s \
+       setjmp.s \
+       setpgid.s \
+       setpriority.s \
+       setprivexec.s \
+       setquota.s \
+       setrlimit.s \
+       setsid.s \
+       setsockopt.s \
+       settimeofday.s \
+       setuid.s \
+       setxattr.s  \
+       shmat.s \
+       shmdt.s \
+       shmget.s \
+       shmsys.s \
+       shutdown.s \
+       sigaltstack.s \
+       sigpending.s \
+       sigprocmask.s \
+       sigreturn.s \
+       sigwait.s \
+       socket.s \
+       socketpair.s \
+       stat.s \
+       statfs.s \
+       statv.s \
+       swapon.s \
+       symlink.s \
+       sync.s \
+       syscall.s \
+       systable.s \
+       truncate.s \
+       umask.s \
+       undelete.s \
+       unlink.s \
+       unmount.s \
+       utimes.s \
+       vfork.s \
+       wait4.s \
+       write.s \
+       writev.s 
+
+MISRCS+= fcntl64.c ioctl64.c
+
+.for _src in fhopen.s getfh.s nfsclnt.s
+CFLAGS-${_src} += -DNFSCLIENT
+.endfor
+
+CFLAGS-nfssvc.s += -DNFSSERVER
diff --git a/x86_64/sys/OSAtomic.s b/x86_64/sys/OSAtomic.s
new file mode 100644 (file)
index 0000000..1d3f778
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2004-2006 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <machine/cpu_capabilities.h>
+
+#define DECLARE(x)   \
+.align 2, 0x90      ; \
+.globl x            ; \
+.globl x ## Barrier ; \
+x:                  ; \
+x ## Barrier:
+
+.text
+
+
+// uint32_t OSAtomicAnd32( uint32_t mask, uint32_t *value);
+DECLARE(_OSAtomicAnd32)
+       movq    $(_COMM_PAGE_COMPARE_AND_SWAP32), %rcx
+       movl    %edi, %r11d     // save mask
+       movl    (%rsi), %eax    // get value
+       movq    %rsi, %rdx      // put ptr where compare-and-swap expects it
+1:
+       movl    %r11d, %esi     // original mask
+       movl    %eax, %edi      // old value
+       andl    %eax, %esi      // new value
+       call    *%rcx           // %edi=old value,  %esi=new value. %rdx=ptr
+       jnz     1b
+       movl    %esi, %eax
+       ret
+
+
+// uint32_t OSAtomicOr32( uint32_t mask, uint32_t *value);
+DECLARE(_OSAtomicOr32)
+       movq    $(_COMM_PAGE_COMPARE_AND_SWAP32), %rcx
+       movl    %edi, %r11d     // save mask
+       movl    (%rsi), %eax    // get value
+       movq    %rsi, %rdx      // put ptr where compare-and-swap expects it
+1:
+       movl    %r11d, %esi     // original mask
+       movl    %eax, %edi      // old value
+       orl     %eax, %esi      // new value
+       call    *%rcx           // %edi=old value,  %esi=new value. %rdx=ptr
+       jnz     1b
+       movl    %esi, %eax
+       ret
+       
+
+// uint32_t OSAtomicXor32( uint32_t mask, uint32_t *value);
+DECLARE(_OSAtomicXor32)
+       movq    $(_COMM_PAGE_COMPARE_AND_SWAP32), %rcx
+       movl    %edi, %r11d     // save mask
+       movl    (%rsi), %eax    // get value
+       movq    %rsi, %rdx      // put ptr where compare-and-swap expects it
+1:
+       movl    %r11d, %esi     // original mask
+       movl    %eax, %edi      // old value
+       xorl    %eax, %esi      // new value
+       call    *%rcx           // %edi=old value,  %esi=new value. %rdx=ptr
+       jnz     1b
+       movl    %esi, %eax
+       ret
+
+
+// bool OSAtomicCompareAndSwap32( int32_t old, int32_t new, int32_t *value);
+DECLARE(_OSAtomicCompareAndSwap32)
+       movq    $(_COMM_PAGE_COMPARE_AND_SWAP32), %rcx
+       call    *%rcx           // %edi=old value,  %esi=new value. %rdx=ptr
+       sete    %al
+       ret
+
+
+// bool OSAtomicCompareAndSwap64( int64_t old, int64_t new, int64_t *value);
+DECLARE(_OSAtomicCompareAndSwap64)
+       movq    $(_COMM_PAGE_COMPARE_AND_SWAP64), %rcx
+       call    *%rcx           // %rdi=old value,  %rsi=new value. %rdx=ptr
+       sete    %al
+       ret
+
+
+// int32_t OSAtomicAdd32( int32_t amt, int32_t *value );
+DECLARE(_OSAtomicAdd32)
+       movq    $(_COMM_PAGE_ATOMIC_ADD32), %rcx
+       movl    %edi, %eax      // save amt to add
+       call    *%rcx
+       addl    %edi,%eax       // new value
+       ret
+
+
+// int64_t OSAtomicAdd64( int64_t amt, int64_t *value );
+DECLARE(_OSAtomicAdd64)
+       movq    $(_COMM_PAGE_ATOMIC_ADD64), %rcx
+       movq    %rdi, %rax      // save amt to add
+       call    *%rcx
+       addq    %rdi, %rax      // new value
+       ret
+
+
+// bool OSAtomicTestAndSet( uint32_t n, void *value );
+DECLARE(_OSAtomicTestAndSet)
+       movq    $(_COMM_PAGE_BTS), %rax
+       xorl    $7, %edi        // bit position is numbered big endian
+       call    *%rax
+       setc    %al
+       ret
+
+
+// bool OSAtomicTestAndClear( uint32_t n, void *value );
+DECLARE(_OSAtomicTestAndClear)
+       movq    $(_COMM_PAGE_BTC), %rax
+       xorl    $7, %edi        // bit position is numbered big endian
+       call    *%rax
+       setc    %al
+       ret
+
+// bool OSSpinLockTry( OSSpinLock *lock );
+       .align  2, 0x90
+       .globl  _OSSpinLockTry
+_OSSpinLockTry:
+       movq    $(_COMM_PAGE_SPINLOCK_TRY), %rax
+       jmp     *%rax
+
+
+// void OSSpinLockLock( OSSpinLock *lock );
+       .align  2, 0x90
+       .globl  _OSSpinLockLock
+_OSSpinLockLock:
+       movq    $(_COMM_PAGE_SPINLOCK_LOCK), %rax
+       jmp     *%rax
+
+
+// void OSSpinLockUnlock( OSSpinLock *lock );
+       .align  2, 0x90
+       .globl  _OSSpinLockUnlock
+_OSSpinLockUnlock:
+       movl    $0, (%rdi)
+       ret
+
+
+// void OSMemoryBarrier( void );
+       .align  2, 0x90
+       .globl  _OSMemoryBarrier
+_OSMemoryBarrier:
+       ret
diff --git a/x86_64/sys/SYS.h b/x86_64/sys/SYS.h
new file mode 100644 (file)
index 0000000..dbe69be
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 1999-2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ *
+ *     File:   SYS.h
+ *
+ *     Definition of the user side of the UNIX system call interface
+ *     for x86-64.
+ *
+ * HISTORY
+ *  12-3-92    Bruce Martin (Bruce_Martin@next.com)
+ *     Created.
+ */
+/*
+ * Headers
+ */
+#include <sys/syscall.h>
+#include <architecture/i386/asm_help.h>
+#include <mach/i386/syscall_sw.h>
+
+#define UNIX_SYSCALL_SYSCALL   \
+       movq    %rcx, %r10              ;\
+       syscall
+
+/*
+ * This is the same as UNIX_SYSCALL, but it can call an alternate error
+ * return function.  It's generic to support potential future callers.
+ */
+#define UNIX_SYSCALL_ERR(name, nargs,error_ret)                \
+       .globl  error_ret                               ;\
+LEAF(_##name, 0)                                       ;\
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax      ;\
+       UNIX_SYSCALL_SYSCALL                            ;\
+       jnb     2f                                      ;\
+       BRANCH_EXTERN(error_ret)                        ;\
+2:
+
+#define UNIX_SYSCALL(name, nargs)                      \
+       .globl  cerror                                  ;\
+LEAF(_##name, 0)                                       ;\
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax      ;\
+       UNIX_SYSCALL_SYSCALL                            ;\
+       jnb     2f                                      ;\
+       BRANCH_EXTERN(cerror)                           ;\
+2:
+
+#define UNIX_SYSCALL_NONAME(name, nargs)               \
+       .globl  cerror                                  ;\
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax      ;\
+       UNIX_SYSCALL_SYSCALL                            ;\
+       jnb     2f                                      ;\
+       BRANCH_EXTERN(cerror)                           ;\
+2:
+
+#define PSEUDO(pseudo, name, nargs)                    \
+LEAF(_##pseudo, 0)                                     ;\
+       UNIX_SYSCALL_NONAME(name, nargs)
+
+#if !defined(SYS_getdirentriesattr)
+#define SYS_getdirentriesattr 222
+#endif
+
+#if !defined(SYS_semsys)
+#define SYS_semsys      251
+#define SYS_msgsys      252
+#define SYS_shmsys      253
+#define SYS_semctl      254
+#define SYS_semget      255
+#define SYS_semop       256
+/*#define SYS_semconfig   257*/
+#define SYS_msgctl      258
+#define SYS_msgget      259
+#define SYS_msgsnd      260
+#define SYS_msgrcv      261
+#define SYS_shmat       262
+#define SYS_shmctl      263
+#define SYS_shmdt       264
+#define SYS_shmget      265
+#endif
+
+#if !defined(SYS___pthread_canceled)
+#define SYS___pthread_markcancel       332
+#define SYS___pthread_canceled         333
+#define SYS___semwait_signal           334
+#endif
+
diff --git a/x86_64/sys/__fcntl.s b/x86_64/sys/__fcntl.s
new file mode 100644 (file)
index 0000000..aaedd45
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+PSEUDO(__fcntl, fcntl, 3)
+       ret
diff --git a/x86_64/sys/__ioctl.s b/x86_64/sys/__ioctl.s
new file mode 100644 (file)
index 0000000..5256103
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+PSEUDO(__ioctl, ioctl, 3)
+       ret
diff --git a/x86_64/sys/_setjmp.s b/x86_64/sys/_setjmp.s
new file mode 100644 (file)
index 0000000..7ebf81c
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ *
+ * HISTORY
+ *  20-Apr-92    Bruce Martin (bmartin@next.com)
+ *      Created from M68K sources.
+ */
+
+/*
+ * C library -- _setjmp, _longjmp
+ *
+ *     _longjmp(a,v)
+ * will generate a "return(v)" from
+ * the last call to
+ *     _setjmp(a)
+ * by restoring registers from the stack,
+ * The previous signal state is NOT restored.
+ *
+ */
+
+#include <architecture/i386/asm_help.h>
+
+#define JB_RBX                 0
+#define JB_RBP                 8
+#define JB_RSP                 16
+#define JB_R12                 24
+#define JB_R13                 32
+#define JB_R14                 40
+#define JB_R15                 48
+#define JB_RIP                 56
+#define JB_RFLAGS              64
+#define JB_MXCSR               72
+#define JB_FPCONTROL   76
+#define JB_MASK                        80
+
+LEAF(__setjmp, 0)
+       // %rdi is a jmp_buf (struct sigcontext *)
+
+       // now build sigcontext
+       movq    %rbx, JB_RBX(%rdi)
+       movq    %rbp, JB_RBP(%rdi)
+       movq    %r12, JB_R12(%rdi)
+       movq    %r13, JB_R13(%rdi)
+       movq    %r14, JB_R14(%rdi)
+       movq    %r15, JB_R15(%rdi)
+
+       // RIP is set to the frame return address value
+       movq    (%rsp), %rax
+       movq    %rax, JB_RIP(%rdi)
+       // RSP is set to the frame return address plus 8
+       movq    %rsp, %rax
+       addq    $8, %rax
+       movq    %rax, JB_RSP(%rdi)
+
+       // save rflags - you can't use movq
+       pushfq
+       popq    %rax
+       movq    %rax, JB_RFLAGS(%rdi)
+
+       // save fp control word
+       fnstcw  JB_FPCONTROL(%rdi)
+
+       // save MXCSR
+       stmxcsr JB_MXCSR(%rdi)
+
+       // return 0
+       xorq    %rax, %rax
+       ret
+
+
+LEAF(__longjmp, 0)
+       fninit                  // reset FP coprocessor
+
+       // %rdi is a jmp_buf (struct sigcontext *)
+       // %rsi is the return value
+       movq    %rsi, %rax
+       testq   %rax, %rax
+       jnz     1f
+       addq    $1, %rax
+
+       // general registers
+1:
+       movq    JB_RBX(%rdi), %rbx
+       movq    JB_RBP(%rdi), %rbp
+       movq    JB_RSP(%rdi), %rsp
+       movq    JB_R12(%rdi), %r12
+       movq    JB_R13(%rdi), %r13
+       movq    JB_R14(%rdi), %r14
+       movq    JB_R15(%rdi), %r15
+
+       // restore FP control word
+       fldcw   JB_FPCONTROL(%rdi)
+
+       // restore MXCSR
+       ldmxcsr JB_MXCSR(%rdi)
+
+       // rflags
+       pushq   JB_RFLAGS(%rdi)
+       popfq
+
+       jmp             *JB_RIP(%rdi)
diff --git a/x86_64/sys/cerror.s b/x86_64/sys/cerror.s
new file mode 100644 (file)
index 0000000..1f7d10d
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+       .globl  _errno
+
+LABEL(cerror_cvt)
+       cmpq    $102, %rax      /* EOPNOTSUPP? */
+       jnz     cerror
+       movl    $45, %eax       /* Yes; make ENOTSUP for compatibility */
+LABEL(cerror)
+       REG_TO_EXTERN(%rax, _errno)
+       mov             %rsp,%rdx
+       andq    $-16,%rsp
+       subq    $16,%rsp
+       // Preserve the original stack
+       movq    %rdx,(%rsp)
+       movq    %rax,%rdi
+       CALL_EXTERN(_cthread_set_errno_self)
+       // Restore the original stack
+       movq    (%rsp),%rsp
+       movq    $-1,%rax
+       movq    $-1,%rdx /* in case a 128-bit value is returned */
+       ret
diff --git a/x86_64/sys/fork.s b/x86_64/sys/fork.s
new file mode 100644 (file)
index 0000000..3fe1c1e
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+LEAF(_fork, 0)
+       subq  $24, %rsp   // Align the stack, plus room for local storage
+       CALL_EXTERN(__cthread_fork_prepare)
+#if defined(__DYNAMIC__)
+// Just like __cthread_fork_prepare we need to prevent threads on the child's
+// side from doing a mach call in the dynamic linker until __dyld_fork_child
+// is run (see below).  So we call __dyld_fork_prepare which takes out the dyld
+// lock to prevent all other threads but this one from entering dyld.
+.cstring
+LC1:
+       .ascii "__dyld_fork_prepare\0"
+.text
+       // Give a pointer to 8(%rsp) to _dyld_func_lookup for it to fill in.
+       leaq    8(%rsp),%rsi    // get the address where we're going to store the pointer
+       leaq    LC1(%rip), %rdi // copy the name of the function to look up
+       call    __dyld_func_lookup
+       movq    8(%rsp),%rax    // move the value returned in address parameter
+       call    *%rax           // call __dyld_fork_prepare
+#endif
+
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_fork),%eax; // code for fork -> rax
+       UNIX_SYSCALL_TRAP               // do the system call
+       jnc     L1                      // jump if CF==0
+
+#if defined(__DYNAMIC__)
+// __dyld_fork_parent() is called by the parent process after a fork syscall.
+// This releases the dyld lock acquired by __dyld_fork_prepare().  In this case
+// we just use it to clean up after a fork error so the parent process can 
+// dyld after fork() errors without deadlocking.
+.cstring
+LC2:
+       .ascii "__dyld_fork_parent\0"
+.text
+       movq    %rax, 16(%rsp)          // save the return value (errno)
+       leaq    8(%rsp),%rsi            // get the address where we're going to store the pointer
+       leaq    LC2(%rip), %rdi         // copy the name of the function to look up
+       call    __dyld_func_lookup
+       call    *8(%rsp)                        // call __dyld_fork_parent indirectly
+       movq    16(%rsp), %rax          // restore the return value (errno)
+#endif
+       CALL_EXTERN(cerror)
+       CALL_EXTERN(__cthread_fork_parent)
+       movq    $-1, %rax
+       addq    $24, %rsp   // restore the stack
+       ret
+       
+L1:
+       orl     %edx,%edx       // CF=OF=0,  ZF set if zero result      
+       jz      L2              // parent, since r1 == 0 in parent, 1 in child
+       
+       //child here...
+#if defined(__DYNAMIC__)
+// Here on the child side of the fork we need to tell the dynamic linker that
+// we have forked.  To do this we call __dyld_fork_child in the dyanmic
+// linker.  But since we can't dynamically bind anything until this is done we
+// do this by using the private extern __dyld_func_lookup() function to get the
+// address of __dyld_fork_child (the 'C' code equivlent):
+//
+//     _dyld_func_lookup("__dyld_fork_child", &address);
+//     address();
+//
+.cstring
+LC0:
+       .ascii "__dyld_fork_child\0"
+
+.text
+       leaq    8(%rsp),%rsi            // get the address where we're going to store the pointer
+       leaq    LC0(%rip), %rdi         // copy the name of the function to look up
+       call    __dyld_func_lookup
+       call    *8(%rsp)                // call __dyld_fork_child indirectly
+#endif
+       xorq    %rax, %rax
+       REG_TO_EXTERN(%rax, __current_pid)
+       CALL_EXTERN(__cthread_fork_child)
+#if    defined(__DYNAMIC__)
+.cstring
+LC10:
+       .ascii "__dyld_fork_child_final\0"
+
+.text
+       leaq    8(%rsp),%rsi            // get the address where we're going to store the pointer
+       leaq    LC10(%rip), %rdi                // copy the name of the function to look up
+       call    __dyld_func_lookup
+       call    *8(%rsp)                // call __dyld_fork_child_final indirectly
+#endif
+       xorq    %rax,%rax       // zero rax
+       addq    $24, %rsp   // restore the stack
+       ret
+
+       //parent here...
+L2:
+       movl    %eax, 16(%rsp)          // save pid
+#if    defined(__DYNAMIC__)
+// __dyld_fork_parent() is called by the parent process after a fork syscall.
+// This releases the dyld lock acquired by __dyld_fork_prepare().
+       leaq    8(%rsp),%rsi            // get the address where we're going to store the pointer
+       leaq    LC2(%rip), %rdi         // copy the name of the function to look up
+       call    __dyld_func_lookup
+       call    *8(%rsp)                // call __dyld_fork_parent indirectly
+#endif
+       CALL_EXTERN_AGAIN(__cthread_fork_parent)
+       movl    16(%rsp), %eax          // return pid
+       addq    $24, %rsp   // restore the stack
+       ret
diff --git a/x86_64/sys/getpid.s b/x86_64/sys/getpid.s
new file mode 100644 (file)
index 0000000..f3a738a
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+       .data
+       .private_extern __current_pid
+__current_pid:
+       .long 0
+
+/*
+ * If __current_pid is > 0, return it, else make syscall.
+ * If __current_pid is 0, cache result of syscall.
+ */
+TEXT
+LEAF(_getpid, 0)
+       movl    __current_pid(%rip), %eax
+       testl   %eax, %eax
+       jle             1f
+       ret
+1:
+       UNIX_SYSCALL_NONAME(getpid, 0)
+       movl            %eax, %edx
+       xorl            %eax, %eax
+       leaq            __current_pid(%rip), %rcx
+       lock
+       cmpxchgl        %edx, (%rcx)
+       movl            %edx, %eax
+       ret
diff --git a/x86_64/sys/i386_gettimeofday.s b/x86_64/sys/i386_gettimeofday.s
new file mode 100644 (file)
index 0000000..678ebf9
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 1999-2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* Copyright 1998 Apple Computer, Inc. */
+
+#include <SYS.h>
+
+#define        __APPLE_API_PRIVATE
+#include <machine/cpu_capabilities.h>
+#undef __APPLE_API_PRIVATE
+
+LABEL(___commpage_gettimeofday)
+       movq    $(_COMM_PAGE_GETTIMEOFDAY),%rax
+       jmp             *%rax
+
+/*
+ *     This syscall is special cased: the timeval is returned in rax:rdx.
+ */
+LABEL(___gettimeofday)
+    UNIX_SYSCALL_NONAME(gettimeofday,0)
+    movq       %rax, (%rdi)
+    movl       %edx, 8(%rdi)
+    xorl       %eax, %eax
+       ret
diff --git a/x86_64/sys/lseek.s b/x86_64/sys/lseek.s
new file mode 100644 (file)
index 0000000..f99bab2
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+UNIX_SYSCALL(lseek, 3)
+       ret
diff --git a/x86_64/sys/pipe.s b/x86_64/sys/pipe.s
new file mode 100644 (file)
index 0000000..5864575
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+UNIX_SYSCALL(pipe, 0)
+       movl    %eax, (%rdi)
+       movl    %edx, 4(%rdi)
+       xorl    %eax, %eax
+       ret
diff --git a/x86_64/sys/ptrace.s b/x86_64/sys/ptrace.s
new file mode 100644 (file)
index 0000000..6119772
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+       .globl  _errno
+
+LEAF(_ptrace, 0)
+       xorq    %rax,%rax
+       REG_TO_EXTERN(%rax,_errno)
+UNIX_SYSCALL_NONAME(ptrace, 4)
+       ret
diff --git a/x86_64/sys/setjmp.s b/x86_64/sys/setjmp.s
new file mode 100644 (file)
index 0000000..05ca533
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+/*
+ * NeXT 386 setjmp/longjmp
+ *
+ * Written by Bruce Martin, NeXT Inc. 4/9/92
+ */
+
+/*
+ * C library -- setjmp, longjmp
+ *
+ *     longjmp(a,v)
+ * will generate a "return(v)" from
+ * the last call to
+ *     setjmp(a)
+ * by restoring registers from the stack,
+ * The previous value of the signal mask is
+ * restored.
+ *
+ */
+
+#include <architecture/i386/asm_help.h>
+#include <SYS.h>
+
+#define JB_RBX                 0
+#define JB_RBP                 8
+#define JB_RSP                 16
+#define JB_R12                 24
+#define JB_R13                 32
+#define JB_R14                 40
+#define JB_R15                 48
+#define JB_RIP                 56
+#define JB_RFLAGS              64
+#define JB_MXCSR               72
+#define JB_FPCONTROL   76
+#define JB_MASK                        80
+#define JB_SAVEMASK            84              // sigsetjmp/siglongjmp only
+
+
+LEAF(_sigsetjmp, 0)
+       // %rdi is sigjmp_buf * jmpbuf;
+       // %esi is int savemask
+       movl    %esi, JB_SAVEMASK(%rdi) // jmpbuf[_JBLEN] = savemask;
+       cmpl    $0, %esi                // if savemask != 0
+       jne     _setjmp                  // setjmp(jmpbuf);
+       jmp     L_do__setjmp            // else _setjmp(jmpbuf);
+
+LEAF(_setjmp, 0)
+       pushq   %rdi                    // Preserve the jmp_buf across the call
+       movl    $1, %edi                // how = SIG_BLOCK
+       xorq    %rsi, %rsi            // set = NULL
+       subq    $8, %rsp                // Allocate space for the return from sigprocmask
+       movq    %rsp, %rdx
+       CALL_EXTERN(_sigprocmask)
+       popq    %rax                    // Save the mask
+       popq    %rdi                    // jmp_buf (struct sigcontext *)
+       movq    %rax, JB_MASK(%rdi)
+L_do__setjmp:
+       BRANCH_EXTERN(__setjmp)
+
+LEAF(_siglongjmp, 0)
+       // %rdi is sigjmp_buf * jmpbuf;
+       cmpl    $0, JB_SAVEMASK(%rdi)      // if jmpbuf[_JBLEN] != 0
+       jne     _longjmp                //     longjmp(jmpbuf, var);
+       jmp     L_do__longjmp          // else _longjmp(jmpbuf, var);
+
+LEAF(_longjmp, 0)
+       // %rdi is address of jmp_buf (saved context)
+       pushq   %rdi                            // Preserve the jmp_buf across the call
+       pushq   %rsi                            // Preserve the value across the call
+       pushq   JB_MASK(%rdi)           // Put the mask on the stack
+       movq    $3, %rdi                        // how = SIG_SETMASK
+       movq    %rsp, %rsi        // set = address where we stored the mask
+       xorq    %rdx, %rdx                    // oset = NULL
+       CALL_EXTERN_AGAIN(_sigprocmask)
+       addq    $8, %rsp
+       popq    %rsi                            // Restore the value
+       popq    %rdi                            // Restore the jmp_buf
+L_do__longjmp:
+       BRANCH_EXTERN(__longjmp)        // else
+END(_longjmp)
diff --git a/x86_64/sys/sigaltstack.s b/x86_64/sys/sigaltstack.s
new file mode 100644 (file)
index 0000000..819bb61
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+UNIX_SYSCALL(sigaltstack, 3)
+       ret
diff --git a/x86_64/sys/sigreturn.s b/x86_64/sys/sigreturn.s
new file mode 100644 (file)
index 0000000..2c140b5
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+UNIX_SYSCALL(sigreturn, 2)
+       ret
diff --git a/x86_64/sys/syscall.s b/x86_64/sys/syscall.s
new file mode 100644 (file)
index 0000000..cc34346
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+// For x86-64, the kernel slides the argument list for us.
+// The number of arguments here is variable, but our macros ignore
+// that value anyway.
+UNIX_SYSCALL(syscall, 0);
+       ret
diff --git a/x86_64/sys/vfork.s b/x86_64/sys/vfork.s
new file mode 100644 (file)
index 0000000..05229ef
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
+ */
+#include <SYS.h>
+
+/*
+ * If __current_pid >= 0, we want to put a -1 in there
+ * otherwise we just decrement it
+ */
+
+LEAF(_vfork, 0)
+       movq            __current_pid@GOTPCREL(%rip), %rax
+       movl            (%rax), %eax
+0:
+       xorl            %ecx, %ecx
+       testl           %eax, %eax
+       cmovs           %eax, %ecx
+       subl            $1, %ecx
+       movq            __current_pid@GOTPCREL(%rip), %rdx
+       lock
+       cmpxchgl        %ecx, (%rdx)
+       jne             0b
+       popq            %rdi                    // return address in %rdi
+       movq            $ SYSCALL_CONSTRUCT_UNIX(SYS_vfork), %rax       // code for vfork -> rax
+       UNIX_SYSCALL_TRAP                       // do the system call
+       jnb             L1                                      // jump if CF==0
+       movq            __current_pid@GOTPCREL(%rip), %rcx
+       lock
+       addq            $1, (%rcx)
+       movq            (%rcx), %rdi
+       BRANCH_EXTERN(cerror)
+
+L1:
+       testl           %edx, %edx              // CF=OF=0,  ZF set if zero result
+       jz              L2                      // parent, since r1 == 0 in parent, 1 in child
+       xorq            %rax, %rax              // zero rax
+       jmp             *%rdi
+
+L2:
+       movq            __current_pid@GOTPCREL(%rip), %rdx
+       lock
+       addq            $1, (%rdx)
+       jmp             *%rdi