mirror of
https://git.openafs.org/openafs.git
synced 2025-01-31 21:47:45 +00:00
fbsd-amd64-20050212
initial fbsd support for amd64
This commit is contained in:
parent
c92132eba3
commit
d164b1d311
@ -222,6 +222,8 @@
|
||||
#define SYS_NAME_ID_ppc64_linux24 2902
|
||||
#define SYS_NAME_ID_ppc64_linux26 2903
|
||||
|
||||
#define SYS_NAME_ID_amd64_fbsd_53 3008
|
||||
|
||||
/*
|
||||
* Placeholder to keep system-wide standard flags since this file is included by all
|
||||
* files (i.e in afs/param.h)
|
||||
|
202
src/config/param.amd64_fbsd_53.h
Normal file
202
src/config/param.amd64_fbsd_53.h
Normal file
@ -0,0 +1,202 @@
|
||||
#ifndef AFS_PARAM_H
|
||||
#define AFS_PARAM_H
|
||||
|
||||
#ifndef UKERNEL
|
||||
/* This section for kernel libafs compiles only */
|
||||
|
||||
#ifndef IGNORE_STDS_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#define AFS_XBSD_ENV 1 /* {Free,Open,Net}BSD */
|
||||
#define AFS_X86_XBSD_ENV 1
|
||||
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1 /* Needed for NAMEI */
|
||||
#define AFS_FBSD_ENV 1
|
||||
#define AFS_FBSD40_ENV 1
|
||||
#define AFS_FBSD42_ENV 1
|
||||
#define AFS_FBSD43_ENV 1
|
||||
#define AFS_FBSD44_ENV 1
|
||||
#define AFS_FBSD45_ENV 1
|
||||
#define AFS_FBSD46_ENV 1
|
||||
#define AFS_FBSD47_ENV 1
|
||||
#define AFS_FBSD50_ENV 1
|
||||
#define AFS_FBSD51_ENV 1
|
||||
#define AFS_FBSD52_ENV 1
|
||||
#define AFS_FBSD53_ENV 1
|
||||
#define AFS_X86_FBSD_ENV 1
|
||||
#define AFS_X86_FBSD40_ENV 1
|
||||
#define AFS_X86_FBSD42_ENV 1
|
||||
#define AFS_X86_FBSD43_ENV 1
|
||||
#define AFS_X86_FBSD46_ENV 1
|
||||
#define AFS_X86_FBSD47_ENV 1
|
||||
#define AFS_X86_FBSD50_ENV 1
|
||||
#define AFS_X86_ENV 1
|
||||
#define AFS_NONFSTRANS 1
|
||||
#define FTRUNC O_TRUNC
|
||||
|
||||
#define IUPD 0x0010
|
||||
#define IACC 0x0020
|
||||
#define ICHG 0x0040
|
||||
#define IMOD 0x0080
|
||||
|
||||
#define IN_LOCK(ip) lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
|
||||
NULL, curproc)
|
||||
#define IN_UNLOCK(ip) lockmgr(&ip->i_lock, LK_RELEASE, \
|
||||
NULL, curproc)
|
||||
|
||||
#include <afs/afs_sysnames.h>
|
||||
|
||||
#define AFS_VM_RDWR_ENV 1
|
||||
#define AFS_VFS_ENV 1
|
||||
#define AFS_VFSINCL_ENV 1
|
||||
#define AFS_GREEDY43_ENV 1
|
||||
#define AFS_ENV 1
|
||||
|
||||
#define AFS_SYSCALL 339
|
||||
#define AFS_MOUNT_AFS "afs"
|
||||
|
||||
#ifndef MOUNT_UFS
|
||||
#define MOUNT_UFS "ufs"
|
||||
#endif
|
||||
|
||||
#ifndef MOUNT_AFS
|
||||
#define MOUNT_AFS AFS_MOUNT_AFS
|
||||
#endif
|
||||
#define SYS_NAME "amd64_fbsd_53"
|
||||
#define SYS_NAME_ID SYS_NAME_ID_amd64_fbsd_53
|
||||
|
||||
#define AFS_HAVE_FFS 1 /* Use system's ffs. */
|
||||
#define AFS_HAVE_STATVFS 0 /* System doesn't supports statvfs */
|
||||
|
||||
#define RXK_LISTENER_ENV 1
|
||||
#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */
|
||||
#define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */
|
||||
|
||||
#define AFSLITTLE_ENDIAN 1
|
||||
|
||||
/* Extra kernel definitions (from kdefs file) */
|
||||
#ifdef _KERNEL
|
||||
#define AFS_GLOBAL_SUNLOCK 1
|
||||
#define AFS_VFS34 1 /* What is VFS34??? */
|
||||
#define AFS_SHORTGID 0 /* are group id's short? */
|
||||
#define afsio_iov uio_iov
|
||||
#define afsio_iovcnt uio_iovcnt
|
||||
#define afsio_offset uio_offset
|
||||
#define afsio_seg uio_segflg
|
||||
#define afsio_resid uio_resid
|
||||
#define AFS_UIOSYS UIO_SYSSPACE
|
||||
#define AFS_UIOUSER UIO_USERSPACE
|
||||
#define AFS_CLBYTES CLBYTES
|
||||
#define osi_GetTime(x) microtime(x)
|
||||
#define AFS_KALLOC(x) osi_fbsd_alloc((x), 1)
|
||||
#undef AFS_KALLOC_NOSLEEP
|
||||
#define AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
|
||||
#define AFS_KFREE(x,y) osi_fbsd_free((x))
|
||||
#define v_count v_usecount
|
||||
#define v_vfsp v_mount
|
||||
#define vfs_bsize mnt_stat.f_bsize
|
||||
#define vfs_fsid mnt_stat.f_fsid
|
||||
#define va_nodeid va_fileid
|
||||
#define vfs_vnodecovered mnt_vnodecovered
|
||||
#define direct dirent
|
||||
#define vnode_t struct vnode
|
||||
|
||||
#ifndef MUTEX_DEFAULT
|
||||
#define MUTEX_DEFAULT 0
|
||||
#endif /* MUTEX_DEFAULT */
|
||||
|
||||
#ifndef SSYS
|
||||
#define SSYS 0x00002
|
||||
#endif /* SSYS */
|
||||
|
||||
#define p_rcred p_ucred
|
||||
|
||||
#if !defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
|
||||
enum vcexcl { NONEXCL, EXCL };
|
||||
|
||||
#ifdef KERNEL
|
||||
#ifndef MIN
|
||||
#define MIN(A,B) ((A) < (B) ? (A) : (B))
|
||||
#endif
|
||||
#ifndef MAX
|
||||
#define MAX(A,B) ((A) > (B) ? (A) : (B))
|
||||
#endif
|
||||
#endif /* KERNEL */
|
||||
|
||||
#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#else /* !defined(UKERNEL) */
|
||||
|
||||
/* This section for user space compiles only */
|
||||
|
||||
#define UKERNEL 1 /* user space kernel */
|
||||
#define AFS_ENV 1
|
||||
#define AFS_VFSINCL_ENV 1
|
||||
#define AFS_USR_FBSD40_ENV 1
|
||||
#define AFS_USR_FBSD42_ENV 1
|
||||
#define AFS_USR_FBSD43_ENV 1
|
||||
#define AFS_USR_FBSD44_ENV 1
|
||||
#define AFS_USR_FBSD45_ENV 1
|
||||
#define AFS_USR_FBSD46_ENV 1
|
||||
#define AFS_USR_FBSD47_ENV 1
|
||||
#define AFS_USR_FBSD50_ENV 1
|
||||
#define AFS_USR_FBSD51_ENV 1
|
||||
#define AFS_USR_FBSD52_ENV 1
|
||||
#define AFS_USR_FBSD53_ENV 1
|
||||
#define AFS_USR_FBSD_ENV 1
|
||||
#define AFS_NONFSTRANS 1
|
||||
|
||||
#define AFS_MOUNT_AFS "afs" /* The name of the filesystem type. */
|
||||
#define AFS_SYSCALL 339
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BITPOINTER_ENV 1
|
||||
#define AFS_64BIT_IOPS_ENV 1 /* Needed for NAMEI */
|
||||
#define AFS_USERSPACE_IP_ADDR 1
|
||||
#define RXK_LISTENER_ENV 1
|
||||
#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */
|
||||
|
||||
/* Machine / Operating system information */
|
||||
#include <afs/afs_sysnames.h>
|
||||
#define SYS_NAME "i386_fbsd_53"
|
||||
#define SYS_NAME_ID SYS_NAME_ID_i386_fbsd_53
|
||||
|
||||
#define AFSLITTLE_ENDIAN 1
|
||||
#define AFS_HAVE_FFS 1 /* Use system's ffs. */
|
||||
#define AFS_HAVE_STATVFS 1 /* System doesn't support statvfs */
|
||||
#define AFS_VM_RDWR_ENV 1 /* read/write implemented via VM */
|
||||
|
||||
#define afsio_iov uio_iov
|
||||
#define afsio_iovcnt uio_iovcnt
|
||||
#define afsio_offset uio_offset
|
||||
#define afsio_seg uio_segflg
|
||||
#define afsio_fmode uio_fmode
|
||||
#define afsio_resid uio_resid
|
||||
#define AFS_UIOSYS 1
|
||||
#define AFS_UIOUSER UIO_USERSPACE
|
||||
#define AFS_CLBYTES MCLBYTES
|
||||
#define AFS_MINCHANGE 2
|
||||
#define VATTR_NULL usr_vattr_null
|
||||
|
||||
#define AFS_DIRENT
|
||||
#ifndef CMSERVERPREF
|
||||
#define CMSERVERPREF
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#endif /* !defined(UKERNEL) */
|
||||
|
||||
#endif /* AFS_PARAM_H */
|
@ -59,6 +59,11 @@ process.o : process.s process.i386.s process.c
|
||||
${CCOBJ} -DIGNORE_STDS_H -E -I${srcdir} -I${TOP_INCDIR} process.S > process.ss ; \
|
||||
${AS} process.ss -o process.o ; \
|
||||
$(RM) -f process.S ;;\
|
||||
amd64_*bsd*) \
|
||||
cp ${srcdir}/process.amd64.s process.S ; \
|
||||
${CCOBJ} -DIGNORE_STDS_H -E -I${srcdir} -I${TOP_INCDIR} process.S > process.ss ; \
|
||||
${AS} process.ss -o process.o ; \
|
||||
$(RM) -f process.S ;;\
|
||||
ncrx86_* | sunx86_*) \
|
||||
/usr/ccs/lib/cpp -P -D__sun -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \
|
||||
${AS} -o process.o process.ss; \
|
||||
|
161
src/lwp/process.amd64.s
Normal file
161
src/lwp/process.amd64.s
Normal file
@ -0,0 +1,161 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003,2005 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#undef RCSID
|
||||
|
||||
/* x86_64 Assembly
|
||||
*
|
||||
* By Harald Barth <haba@stacken.kth.se> after looking
|
||||
* at Derek Atkins' i386 routines and realizing that
|
||||
* there were some differences and it was not enough
|
||||
* just renaming the registers.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_MACHINE_ASM_H
|
||||
#include <machine/asm.h>
|
||||
#endif
|
||||
|
||||
#include <lwp_elf.h>
|
||||
|
||||
.file "process.s"
|
||||
.data
|
||||
.text
|
||||
|
||||
/*
|
||||
* struct savearea {
|
||||
* char *topstack;
|
||||
* }
|
||||
*/
|
||||
|
||||
.set topstack,0
|
||||
|
||||
/*
|
||||
* savecontext(int (*f)(), struct savearea *area1, char *newsp)
|
||||
*/
|
||||
|
||||
/*
|
||||
* In spite of passing arguments in registers, gcc first copies the content of the
|
||||
* registers onto the stack. I do not know why gcc does this, but for now I mimic
|
||||
* gcc's behaviour. Here are the offsets the arguments are copied to.
|
||||
*/
|
||||
.set f,-8
|
||||
.set area1,-16
|
||||
.set newsp,-24
|
||||
|
||||
.globl _C_LABEL(PRE_Block)
|
||||
.globl _C_LABEL(savecontext)
|
||||
|
||||
ENTRY(savecontext)
|
||||
pushq %rbp /* The frame setup is just like gcc */
|
||||
movq %rsp,%rbp
|
||||
subq $32, %rsp /* make room for args on the stack */
|
||||
movq %rdi, f(%rbp) /* (3*8=24 but increments seem to */
|
||||
movq %rsi, area1(%rbp) /* i multiples of 24, so 32 it is) */
|
||||
movq %rdx, newsp(%rbp) /* and copy them there. */
|
||||
|
||||
movl $1,_C_LABEL(PRE_Block) /* Do not allow any interrupts */
|
||||
|
||||
pushq %rsp /* Push all registers onto the stack */
|
||||
pushq %rax /* Probably not _all_ are necessary */
|
||||
pushq %rcx /* but better one too much than one */
|
||||
pushq %rdx /* forgotten */
|
||||
pushq %rbx
|
||||
pushq %rbp
|
||||
pushq %rsi
|
||||
pushq %rdi
|
||||
pushq %r8
|
||||
pushq %r9
|
||||
pushq %r10
|
||||
pushq %r11
|
||||
pushq %r12
|
||||
pushq %r13
|
||||
pushq %r14
|
||||
pushq %r15 /* Btw, the pusha instruction is no more */
|
||||
|
||||
movq area1(%rbp),%rax /* rax = base of savearea */
|
||||
movq %rsp,topstack(%rax) /* area->topstack = rsp */
|
||||
movq newsp(%rbp),%rax /* rax = new sp */
|
||||
cmpq $0,%rax
|
||||
je L1 /* if new sp is 0 then dont change rsp */
|
||||
movq %rax,%rsp /* Change rsp to the new sp */
|
||||
L1:
|
||||
jmp *f(%rbp) /* jump to function pointer passed in arg */
|
||||
|
||||
/* Shouldnt be here....*/
|
||||
call _C_LABEL(abort)
|
||||
|
||||
/*
|
||||
* returnto(struct savearea *area2)
|
||||
*/
|
||||
|
||||
/* Offset where we put arg - se savecontext */
|
||||
.set area2,-8
|
||||
|
||||
.globl _C_LABEL(returnto)
|
||||
|
||||
ENTRY(returnto)
|
||||
pushq %rbp /* New frame, gcc style */
|
||||
movq %rsp, %rbp /* See savecontext above */
|
||||
subq $16, %rsp /* Make room for 2 args */
|
||||
movq %rdi, area2(%rbp) /* use room to copy 1 arg */
|
||||
movq area2(%rbp),%rax /* rax = area2 */
|
||||
movq topstack(%rax),%rsp /* restore rsp from place relative rbp*/
|
||||
|
||||
popq %r15 /* Restore regs */
|
||||
popq %r14
|
||||
popq %r13
|
||||
popq %r12
|
||||
popq %r11
|
||||
popq %r10
|
||||
popq %r9
|
||||
popq %r8
|
||||
popq %rdi
|
||||
popq %rsi
|
||||
popq %rbp
|
||||
popq %rbx
|
||||
popq %rdx
|
||||
popq %rcx
|
||||
popq %rax
|
||||
popq %rsp /* See savecontext */
|
||||
|
||||
movl $0,_C_LABEL(PRE_Block) /* clear it up... */
|
||||
addq $32, %rsp /* We did rsp-32 above, correct that */
|
||||
popq %rbp
|
||||
ret
|
||||
|
||||
/* We never should get here, put in emergency brake as in i386 code */
|
||||
pushq $1234
|
||||
call _C_LABEL(abort)
|
||||
|
@ -57,7 +57,7 @@ syscall.o: syscall.s
|
||||
$(RM) -f syscall.ss syscall.i;; \
|
||||
hp_ux11? ) \
|
||||
touch syscall.o;; \
|
||||
i386_*bsd*|*nbsd*) \
|
||||
amd64_fbsd*|i386_*bsd*|*nbsd*) \
|
||||
touch syscall.o;; \
|
||||
*) \
|
||||
/lib/cpp ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
|
||||
|
Loading…
x
Reference in New Issue
Block a user