mirror of
https://git.openafs.org/openafs.git
synced 2025-02-01 05:57:43 +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_linux24 2902
|
||||||
#define SYS_NAME_ID_ppc64_linux26 2903
|
#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
|
* Placeholder to keep system-wide standard flags since this file is included by all
|
||||||
* files (i.e in afs/param.h)
|
* 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 ; \
|
${CCOBJ} -DIGNORE_STDS_H -E -I${srcdir} -I${TOP_INCDIR} process.S > process.ss ; \
|
||||||
${AS} process.ss -o process.o ; \
|
${AS} process.ss -o process.o ; \
|
||||||
$(RM) -f process.S ;;\
|
$(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_*) \
|
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; \
|
/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; \
|
${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;; \
|
$(RM) -f syscall.ss syscall.i;; \
|
||||||
hp_ux11? ) \
|
hp_ux11? ) \
|
||||||
touch syscall.o;; \
|
touch syscall.o;; \
|
||||||
i386_*bsd*|*nbsd*) \
|
amd64_fbsd*|i386_*bsd*|*nbsd*) \
|
||||||
touch syscall.o;; \
|
touch syscall.o;; \
|
||||||
*) \
|
*) \
|
||||||
/lib/cpp ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
|
/lib/cpp ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user