]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Adding FreeBSD on ARM64 support to open-vm-tools.
authorJohn Wolfe <jwolfe@vmware.com>
Mon, 22 Feb 2021 17:37:00 +0000 (09:37 -0800)
committerJohn Wolfe <jwolfe@vmware.com>
Mon, 22 Feb 2021 17:37:00 +0000 (09:37 -0800)
Updating the FreeBSD specific sections of open-vm-tools to adjust
where necessary for ARM64.   The FreeBSD vmballoon driver (vmmemctl.ko)
will use the backdoorGcc64_arm64.c when built for ARM64.

Pull request: https://github.com/vmware/open-vm-tools/pull/474

open-vm-tools/AUTHORS
open-vm-tools/hgfsclient/hgfsclient.c
open-vm-tools/lib/hgfsServer/hgfsServerLinux.c
open-vm-tools/lib/include/escBitvector.h [deleted file]
open-vm-tools/lib/include/sigPosixRegs.h
open-vm-tools/lib/include/vm_basic_asm.h
open-vm-tools/lib/misc/hostinfoPosix.c
open-vm-tools/modules/freebsd/vmmemctl/Makefile
open-vm-tools/modules/freebsd/vmmemctl/os.c
open-vm-tools/vmblockmounter/vmblockmounter.c

index c1c70c3614d870a50e2d50778eaf8f0f90487e42..57b06a124a4398ca13a0a478d7ae67bf9cd92cdd 100644 (file)
@@ -70,3 +70,6 @@ Alexey Shabalin Adding vmtools library dependency to deploypkg library.
 
 Christian Ehrhardt   Build: fix propagation of libtirpc flags
                 - https://github.com/vmware/open-vm-tools/pull/469
+
+Vincent Milum Jr  Adding FreeBSD on ARM64 support to open-vm-tools.
+                - https://github.com/vmware/open-vm-tools/pull/474
index 12b668253fd4dc8f33fbe5f4b505fbdcebeb616b..c311833342c49751d9f6f7beeceb563870250ced 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 2006-2019 VMware, Inc. All rights reserved.
+ * Copyright (C) 2006-2019,2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as published
@@ -28,7 +28,6 @@
 #include "vmware.h"
 #include "guestApp.h"
 #include "vmcheck.h"
-#include "escBitvector.h"
 #include "hgfsEscape.h"
 #include "hgfs.h"
 #include "hgfsBd.h"
index 84acc3ad2797fafeb73502e13b387dd903bf1045..63c4e65f0d4d6a97ba0bcab2ba4c7526492b0384 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 1998-2020 VMware, Inc. All rights reserved.
+ * Copyright (C) 1998-2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as published
@@ -2565,7 +2565,7 @@ HgfsStatToFileAttr(struct stat *stats,       // IN: stat information
        attr->specialPerms, attr->ownerPerms, attr->groupPerms,
        attr->otherPerms, attr->size);
 #ifdef __FreeBSD__
-#   if !defined(VM_X86_64) && __FreeBSD_version >= 500043
+#   if !defined(VM_X86_64) && !defined(VM_ARM_64) && __FreeBSD_version >= 500043
 #      define FMTTIMET ""
 #   else
 #      define FMTTIMET "l"
diff --git a/open-vm-tools/lib/include/escBitvector.h b/open-vm-tools/lib/include/escBitvector.h
deleted file mode 100644 (file)
index 7f41e20..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*********************************************************
- * Copyright (C) 1998-2016 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation version 2.1 and no later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the Lesser GNU General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA.
- *
- *********************************************************/
-
-/*********************************************************
- * The contents of this file are subject to the terms of the Common
- * Development and Distribution License (the "License") version 1.0
- * and no later version.  You may not use this file except in
- * compliance with the License.
- *
- * You can obtain a copy of the License at
- *         http://www.opensource.org/licenses/cddl1.php
- *
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- *********************************************************/
-
-
-
-#ifndef _ESC_BITVECTOR_H_
-#define _ESC_BITVECTOR_H_
-
-#define INCLUDE_ALLOW_USERLEVEL
-#define INCLUDE_ALLOW_MODULE
-#define INCLUDE_ALLOW_DISTRIBUTE  // XXX is this true?
-#include "includeCheck.h"
-
-
-#ifdef __KERNEL__
-#include "driver-config.h"
-#include <linux/string.h>
-/* Don't include these if compiling for the Solaris or Apple kernels. */
-#elif !defined _KERNEL && !defined KERNEL
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#if defined _KERNEL && defined __FreeBSD__
-# include <sys/libkern.h>
-#elif defined KERNEL && defined __APPLE__
-# include <string.h>
-#endif
-
-#include "vm_assert.h"
-
-
-
-#define ESC_BITVECTOR_INDEX(_x)     ((_x)>>5)
-#define ESC_BITVECTOR_MASK(_x)      (1<<((_x)&31))
-
-#define ESC_BITVECTOR_SIZE 256 // hardwired size of the bitvector
-
-/*
- *----------------------------------------------------------------------
- *
- * EscBitVector --
- *
- *      Taken from bitvector.h, but hard wired for use with the Escape
- *      routines, which always need a bitvector of 256 bits, are never
- *      used in the monitor, and need to work in the linux kernel. [bac]
- *
- *
- *----------------------------------------------------------------------
- */
-typedef struct EscBitVector {
-   uint32 vector[ESC_BITVECTOR_SIZE/32];
-} EscBitVector;
-
-
-/*
- *----------------------------------------------------------------------
- *
- * EscBitVector_Init --
- *
- *      Clear all the bits in this vector.
- *
- * Results:
- *      All bits are cleared
- *      
- *----------------------------------------------------------------------
- */
-static INLINE void EscBitVector_Init(EscBitVector *bv)
-{
-   memset(bv, 0, sizeof(EscBitVector));
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * EscBitVector_Set, EscBitVector_Clear, EscBitVector_Test --
- *
- *      basic operations
- *
- * Results:
- *      insertion/deletion/presence  to/from/in the set
- *      
- *      EscBitVector_Test returns non-zero if present, 0 otherwise
- *
- *
- *----------------------------------------------------------------------
- */
-static INLINE void EscBitVector_Set(EscBitVector *bv,int n)
-{
-   ASSERT(n>=0 && n<ESC_BITVECTOR_SIZE);
-#ifdef __GNUC__
-   __asm__ __volatile ( "btsl %1,%0" : "=m" (bv->vector[0]) :"Ir" (n));
-#else
-   bv->vector[ESC_BITVECTOR_INDEX(n)] |= ESC_BITVECTOR_MASK(n);
-#endif
-}
-
-static INLINE void EscBitVector_Clear(EscBitVector *bv,int n)
-{
-   ASSERT(n>=0 && n<ESC_BITVECTOR_SIZE);
-#ifdef __GNUC__
-   __asm__ __volatile ( "btrl %1,%0" : "=m" (bv->vector[0]) :"Ir" (n));
-#else
-   bv->vector[ESC_BITVECTOR_INDEX(n)] &= ~ESC_BITVECTOR_MASK(n);
-#endif
-}
-
-static INLINE int EscBitVector_Test(EscBitVector const *bv, int n)
-{
-   ASSERT(n>=0 && n<ESC_BITVECTOR_SIZE);
-#ifdef __GNUC__
-   {
-      uint32 tmp;
-   __asm__ __volatile ( "btl %2,%1\n\tsbbl %0,%0" : "=r" (tmp) : "m" (bv->vector[0]),"Ir" (n));
-      return tmp;
-   }
-#else
-   return ((bv->vector[ESC_BITVECTOR_INDEX(n)] & ESC_BITVECTOR_MASK(n)) != 0);
-#endif
-}
-
-
-
-
-#endif  /* _ESC_BITVECTOR_H_ */
-
-
index fe884a2bb0949d103c18e74c24187d4497265a5d..4ad6df28f87ca5e20db8ed2792c8a73214187ae4 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 2009-2017,2020 VMware, Inc. All rights reserved.
+ * Copyright (C) 2009-2017,2020-2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as published
@@ -189,6 +189,8 @@ extern "C" {
 #define SC_R13(uc) ((unsigned long) (uc)->uc_mcontext.mc_r13)
 #define SC_R14(uc) ((unsigned long) (uc)->uc_mcontext.mc_r14)
 #define SC_R15(uc) ((unsigned long) (uc)->uc_mcontext.mc_r15)
+#elif defined(__aarch64__)
+#define SC_X(uc,n) ((unsigned long) (uc)->uc_mcontext.mc_gpregs.gp_x[n])
 #else
 #define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.mc_eax)
 #define SC_EBX(uc) ((unsigned long) (uc)->uc_mcontext.mc_ebx)
index 97c170c0cc142e6f0edabf3795b47935781cdd06..635c9c16ada28e0fa892f335f382dd607cde5f04 100644 (file)
@@ -205,7 +205,7 @@ mssb64_0(const uint64 value)
 }
 #endif
 
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 
 #ifdef VM_X86_ANY
 #define USE_ARCH_X86_CUSTOM
index cf9d95b49d0f3fb762fc13a1cca069eabea0d9bb..fd1a0fd705eca9d8becdac08e8d16e5535e98a52 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 1998-2020 VMware, Inc. All rights reserved.
+ * Copyright (C) 1998-2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as published
 #define SYSTEM_BITNESS_64_SUN "amd64"
 #define SYSTEM_BITNESS_64_LINUX "x86_64"
 #define SYSTEM_BITNESS_64_ARM_LINUX "aarch64"
+#define SYSTEM_BITNESS_64_ARM_FREEBSD "arm64"
 #define SYSTEM_BITNESS_MAXLEN \
    MAX(sizeof SYSTEM_BITNESS_32, \
    MAX(sizeof SYSTEM_BITNESS_64_SUN, \
    MAX(sizeof SYSTEM_BITNESS_64_LINUX, \
-       sizeof SYSTEM_BITNESS_64_ARM_LINUX)))
+   MAX(sizeof SYSTEM_BITNESS_64_ARM_LINUX, \
+       sizeof SYSTEM_BITNESS_64_ARM_FREEBSD))))
 
 struct hostinfoOSVersion {
    int   hostinfoOSVersion[4];
@@ -496,7 +498,9 @@ Hostinfo_GetSystemBitness(void)
    if (strcmp(buf, SYSTEM_BITNESS_32) == 0) {
       return 32;
    } else if (strcmp(buf, SYSTEM_BITNESS_64_SUN) == 0 ||
-              strcmp(buf, SYSTEM_BITNESS_64_LINUX) == 0) {
+              strcmp(buf, SYSTEM_BITNESS_64_LINUX) == 0 ||
+              strcmp(buf, SYSTEM_BITNESS_64_ARM_LINUX) == 0 ||
+              strcmp(buf, SYSTEM_BITNESS_64_ARM_FREEBSD) == 0) {
       return 64;
    }
 
index ba3fd142cf275b1a4f2dfc030e7a41cd6a6cc1fd..18308928b4da7860817a67ad8919831e5aa467ee 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/make -f
 ##########################################################
-# Copyright (C) 2007-2018 VMware, Inc. All rights reserved.
+# Copyright (C) 2007-2018, 2021 VMware, Inc. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the
@@ -28,6 +28,8 @@ SRCS  += kernelStubsBSD.c
 
 .if $(MACHINE_ARCH) == "amd64"
 SRCS    += backdoorGcc64.c
+.elif $(MACHINE_ARCH) == "aarch64"
+SRCS    += backdoorGcc64_arm64.c
 .else
 SRCS    += backdoorGcc32.c
 .endif
index 20ec9d005dea8805a8470dd60c4b12553909419a..b5c16c470dede81a7c2abb3fbbde0b5410ced11e 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 2000,2014,2018-2020 VMware, Inc. All rights reserved.
+ * Copyright (C) 2000,2014,2018-2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -256,6 +256,10 @@ static __inline__ unsigned long os_ffz(unsigned long word)
    __asm__("bsfq %1,%0"
            :"=r" (word)
            :"r" (~word));
+#elif defined(__aarch64__)
+   __asm__("rbit %0, %1; clz %0,%0"
+           :"=r" (word)
+           :"r" (~word));
 #else
    __asm__("bsfl %1,%0"
            :"=r" (word)
index 382800c1262e25514f2b60f07c1c171315b15268..2735fd3340e38f6bf1d2052f5b0d436cda87c5c5 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************
- * Copyright (C) 2011-2016 VMware, Inc. All rights reserved.
+ * Copyright (C) 2011-2016, 2021 VMware, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as published
@@ -129,7 +129,7 @@ int
 main(int argc,          // IN
      char *argv[])      // IN
 {
-   char c;
+   int c;
    int i;
    int result = EXIT_FAILURE;
    int mntRes = -1;