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.distribut...@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.distribut...@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