bug-hurd
[Top][All Lists]
Advanced

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

[PATCH 2/9] aarch64: Add the basics


From: Sergey Bugaev
Subject: [PATCH 2/9] aarch64: Add the basics
Date: Mon, 15 Apr 2024 12:01:42 +0300

This adds "aarch64" host support to the build system, along with some
uninteresting installed headers. The empty aarch64/aarch64/ast.h header
is also added to create the aarch64/aarch64/ directory (due to Git
peculiarity).

With this, it should be possible to run 'configure --host=aarch64-gnu'
and 'make install-data' successfully.
---
 Makefrag.am                                   |   3 +
 aarch64/Makefrag.am                           |  35 +++++
 aarch64/aarch64/ast.h                         |  19 +++
 aarch64/configfrag.ac                         |  31 ++++
 aarch64/include/mach/aarch64/boolean.h        |  24 +++
 aarch64/include/mach/aarch64/kern_return.h    |  25 +++
 .../include/mach/aarch64/machine_types.defs   | 102 ++++++++++++
 aarch64/include/mach/aarch64/vm_types.h       | 147 ++++++++++++++++++
 configure.ac                                  |   5 +
 9 files changed, 391 insertions(+)
 create mode 100644 aarch64/Makefrag.am
 create mode 100644 aarch64/aarch64/ast.h
 create mode 100644 aarch64/configfrag.ac
 create mode 100644 aarch64/include/mach/aarch64/boolean.h
 create mode 100644 aarch64/include/mach/aarch64/kern_return.h
 create mode 100644 aarch64/include/mach/aarch64/machine_types.defs
 create mode 100644 aarch64/include/mach/aarch64/vm_types.h

diff --git a/Makefrag.am b/Makefrag.am
index 1674317e..2cc75bcf 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -611,3 +611,6 @@ include i386/Makefrag.am
 
 # x86_64.
 include x86_64/Makefrag.am
+
+# aarch64.
+include aarch64/Makefrag.am
diff --git a/aarch64/Makefrag.am b/aarch64/Makefrag.am
new file mode 100644
index 00000000..15ce3f49
--- /dev/null
+++ b/aarch64/Makefrag.am
@@ -0,0 +1,35 @@
+# Makefile fragment for aarch64.
+
+# Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+# Permission to use, copy, modify and distribute this software and its
+# documentation is hereby granted, provided that both the copyright
+# notice and this permission notice appear in all copies of the
+# software, derivative works or modified versions, and any portions
+# thereof, and that both notices appear in supporting documentation.
+#
+# THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+# "AS IS" CONDITION.  THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
+# LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
+# USE OF THIS SOFTWARE.
+
+#
+# Building a distribution.
+#
+EXTRA_DIST += \
+       aarch64/include/mach/aarch64
+
+if HOST_aarch64
+
+#
+# Installation.
+#
+
+include_mach_aarch64dir = $(includedir)/mach/aarch64
+include_mach_aarch64_HEADERS = \
+       aarch64/include/mach/aarch64/boolean.h \
+       aarch64/include/mach/aarch64/kern_return.h \
+       aarch64/include/mach/aarch64/machine_types.defs \
+       aarch64/include/mach/aarch64/vm_types.h
+
+endif # HOST_aarch64
diff --git a/aarch64/aarch64/ast.h b/aarch64/aarch64/ast.h
new file mode 100644
index 00000000..91e5c568
--- /dev/null
+++ b/aarch64/aarch64/ast.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2024 Free Software Foundation.
+ *
+ * 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 Free Software Foundation; either version 2 of the License, or
+ * (at your option) any 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Nothing here.  */
diff --git a/aarch64/configfrag.ac b/aarch64/configfrag.ac
new file mode 100644
index 00000000..03f980bf
--- /dev/null
+++ b/aarch64/configfrag.ac
@@ -0,0 +1,31 @@
+dnl Configure fragment for aarch64.
+
+dnl Copyright (C) 2024 Free Software Foundation, Inc.
+
+dnl Permission to use, copy, modify and distribute this software and its
+dnl documentation is hereby granted, provided that both the copyright
+dnl notice and this permission notice appear in all copies of the
+dnl software, derivative works or modified versions, and any portions
+dnl thereof, and that both notices appear in supporting documentation.
+dnl
+dnl THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+dnl "AS IS" CONDITION.  THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
+dnl LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
+dnl USE OF THIS SOFTWARE.
+
+[case $host_cpu in
+  aarch64)]
+    AM_CONDITIONAL([HOST_aarch64], [true])
+
+    [
+    # Does the architecture provide machine-specific interfaces?
+    mach_machine_routines=1
+    ;;
+  *)]
+    AM_CONDITIONAL([HOST_aarch64], [false])
+    [;;
+esac]
+
+dnl Local Variables:
+dnl mode: autoconf
+dnl End:
diff --git a/aarch64/include/mach/aarch64/boolean.h 
b/aarch64/include/mach/aarch64/boolean.h
new file mode 100644
index 00000000..da61ea7e
--- /dev/null
+++ b/aarch64/include/mach/aarch64/boolean.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023-2024 Free Software Foundation.
+ *
+ * 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 Free Software Foundation; either version 2 of the License, or
+ * (at your option) any 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _MACH_AARCH64_BOOLEAN_H_
+#define _MACH_AARCH64_BOOLEAN_H_
+
+typedef int boolean_t;
+
+#endif  /* _MACH_AARCH64_BOOLEAN_H_ */
diff --git a/aarch64/include/mach/aarch64/kern_return.h 
b/aarch64/include/mach/aarch64/kern_return.h
new file mode 100644
index 00000000..43107046
--- /dev/null
+++ b/aarch64/include/mach/aarch64/kern_return.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2023-2024 Free Software Foundation.
+ *
+ * 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 Free Software Foundation; either version 2 of the License, or
+ * (at your option) any 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _MACH_AARCH64_KERN_RETURN_H_
+#define _MACH_AARCH64_KERN_RETURN_H_
+
+#ifndef __ASSEMBLER__
+typedef int kern_return_t;
+#endif  /* __ASSEMBLER__ */
+#endif  /* _MACH_AARCH64_KERN_RETURN_H_ */
diff --git a/aarch64/include/mach/aarch64/machine_types.defs 
b/aarch64/include/mach/aarch64/machine_types.defs
new file mode 100644
index 00000000..d2f5e31e
--- /dev/null
+++ b/aarch64/include/mach/aarch64/machine_types.defs
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2023-2024 Free Software Foundation.
+ *
+ * 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 Free Software Foundation; either version 2 of the License, or
+ * (at your option) any 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * Mach Operating System
+ * Copyright (c) 1992 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
+ *  School of Computer Science
+ *  Carnegie Mellon University
+ *  Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+
+#ifndef        _MACHINE_MACHINE_TYPES_DEFS_
+#define        _MACHINE_MACHINE_TYPES_DEFS_    1
+
+/*
+ * A natural_t is the type for the native
+ * unsigned integer type, usually 32 bits. It is suitable for
+ * most counters with a small chance of overflow.
+ * While historically natural_t was meant to be the same
+ * as a pointer, that is not the case here.
+ */
+type natural_t = uint32_t;
+
+/*
+ * An integer_t is the signed counterpart
+ * of the natural_t type. Both types are
+ * only supposed to be used to define
+ * other types in a machine-independent
+ * way.
+ */
+type integer_t = int32_t;
+
+type rpc_long_natural_t = uint64_t;
+type rpc_long_integer_t = int64_t;
+
+/*
+ * A long_natural_t is a possibly larger unsigned integer type than natural_t.
+ * Should be used instead of natural_t when we want the data to be less subject
+ * to overflows.
+ */
+type long_natural_t = rpc_long_natural_t
+#if defined(KERNEL_SERVER)
+    intran: long_natural_t convert_long_natural_from_user(rpc_long_natural_t)
+    outtran: rpc_long_natural_t convert_long_natural_to_user(long_natural_t)
+#elif defined(KERNEL_USER)
+    ctype: rpc_long_natural_t
+#endif
+    ;
+
+/*
+ * Larger version of integer_t. Only used when we want to hold possibly larger
+ * values than what is possible with integer_t.
+ */
+type long_integer_t = rpc_long_integer_t
+#if defined(KERNEL_SERVER)
+    intran: long_integer_t convert_long_integer_from_user(rpc_long_integer_t)
+    outtran: rpc_long_integer_t convert_long_integer_to_user(long_integer_t)
+#elif defined(KERNEL_USER)
+    ctype: rpc_long_integer_t
+#endif
+    ;
+
+/*
+ * Physical address size
+ */
+type rpc_phys_addr_t = uint64_t;
+type rpc_phys_addr_array_t = array[] of rpc_phys_addr_t;
+
+#endif /* _MACHINE_MACHINE_TYPES_DEFS_ */
diff --git a/aarch64/include/mach/aarch64/vm_types.h 
b/aarch64/include/mach/aarch64/vm_types.h
new file mode 100644
index 00000000..7f7f4aef
--- /dev/null
+++ b/aarch64/include/mach/aarch64/vm_types.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2023-2024 Free Software Foundation.
+ *
+ * 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 Free Software Foundation; either version 2 of the License, or
+ * (at your option) any 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * Mach Operating System
+ * Copyright (c) 1992,1991,1990,1989,1988 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
+ *  School of Computer Science
+ *  Carnegie Mellon University
+ *  Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+
+#ifndef        _MACHINE_VM_TYPES_H_
+#define _MACHINE_VM_TYPES_H_   1
+
+#ifdef __ASSEMBLER__
+#else  /* __ASSEMBLER__ */
+
+#include <stdint.h>
+
+#ifdef MACH_KERNEL
+#include <kern/assert.h>
+#endif
+
+/*
+ * A natural_t is the type for the native
+ * unsigned integer type, usually 32 bits. It is suitable for
+ * most counters with a small chance of overflow.
+ * While historically natural_t was meant to be the same
+ * as a pointer, that is not the case here.
+ */
+typedef unsigned int   natural_t;
+
+/*
+ * An integer_t is the signed counterpart
+ * of the natural_t type. Both types are
+ * only supposed to be used to define
+ * other types in a machine-independent
+ * way.
+ */
+typedef int            integer_t;
+
+/*
+ * A long_natural_t is a possibly larger unsigned integer type than natural_t.
+ * Should be used instead of natural_t when we want the data to be less subject
+ * to overflows.
+ */
+typedef unsigned long long_natural_t;
+
+/*
+ * Larger version of integer_t. Only used when we want to hold possibly larger
+ * values than what is possible with integer_t.
+ */
+typedef long long_integer_t;
+
+/*
+ * A vm_offset_t is a type-neutral pointer,
+ * e.g. an offset into a virtual memory space.
+ */
+typedef        uintptr_t       vm_offset_t;
+typedef        vm_offset_t *   vm_offset_array_t;
+
+/*
+ * A type for physical addresses.
+ */
+typedef unsigned long phys_addr_t;
+typedef unsigned long rpc_phys_addr_t;
+typedef rpc_phys_addr_t *rpc_phys_addr_array_t;
+
+/*
+ * A vm_size_t is the proper type for e.g.
+ * expressing the difference between two
+ * vm_offset_t entities.
+ */
+typedef uintptr_t vm_size_t;
+typedef        vm_size_t *     vm_size_array_t;
+
+/*
+ * rpc_types are for user/kernel interfaces. On kernel side they may differ 
from
+ * the native types, while on user space they shall be the same.
+ * These three types are always of the same size, so we can reuse the 
conversion
+ * functions.
+ */
+typedef uintptr_t      rpc_uintptr_t;
+typedef vm_offset_t    rpc_vm_address_t;
+typedef vm_offset_t    rpc_vm_offset_t;
+typedef vm_size_t      rpc_vm_size_t;
+
+#define convert_vm_to_user null_conversion
+#define convert_vm_from_user null_conversion
+
+typedef long_natural_t rpc_long_natural_t;
+typedef long_integer_t rpc_long_integer_t;
+
+#define convert_long_integer_to_user null_conversion
+#define convert_long_integer_from_user null_conversion
+
+#define convert_long_natural_to_user convert_vm_to_user
+#define convert_long_natural_from_user convert_vm_from_user
+
+typedef        rpc_vm_size_t * rpc_vm_size_array_t;
+typedef        rpc_vm_offset_t *       rpc_vm_offset_array_t;
+
+typedef rpc_vm_size_t *        rpc_vm_size_array_t;
+typedef rpc_vm_offset_t *      rpc_vm_offset_array_t;
+
+#endif /* __ASSEMBLER__ */
+
+/*
+ * If composing messages by hand (please dont)
+ */
+
+#define        MACH_MSG_TYPE_INTEGER_T MACH_MSG_TYPE_INTEGER_32
+
+#endif /* _MACHINE_VM_TYPES_H_ */
diff --git a/configure.ac b/configure.ac
index 69f75cf2..bf74b88e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,8 @@ case $host_platform:$host_cpu in
     [host_platform=at;;
   at:i?86 | xen:i?86 | at:x86_64 | xen:x86_64)
     :;;
+  *:aarch64)
+    ;;
   *)]
     AC_MSG_ERROR([unsupported combination of cpu type `$host_cpu' and platform
       `$host_platform'.])[;;
@@ -173,6 +175,9 @@ m4_include([i386/configfrag.ac])
 # x86_64
 m4_include([x86_64/configfrag.ac])
 
+# aarch64
+m4_include([aarch64/configfrag.ac])
+
 # General options.
 m4_include([configfrag.ac])
 
-- 
2.44.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]