From: Gabe Black Date: Fri, 23 Oct 2020 03:00:51 +0000 (-0700) Subject: util: Rename the aarch64 m5 util version to arm64. X-Git-Tag: develop-gem5-snapshot~391 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=87e3a8543d0595df1de2d11a9694a19dc6f2809e;p=gem5.git util: Rename the aarch64 m5 util version to arm64. Change-Id: I0ab0c4af0b24a4934b059d934fce237eeab839da Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27757 Tested-by: kokoro Reviewed-by: Gabe Black Maintainer: Gabe Black --- diff --git a/util/m5/README.md b/util/m5/README.md index 5314f9be4..00c0aeb14 100644 --- a/util/m5/README.md +++ b/util/m5/README.md @@ -93,7 +93,7 @@ first identify what ABI(s) you're targetting. ABI | Description | Triggers ---------|--------------|---------- - aarch64 | 64 bit ARM | instruction, adddress, semihosting + arm64 | 64 bit ARM | instruction, adddress, semihosting arm | 32 bit ARM | instruction thumb | ARM thumb | instruction sparc | 64 bit SPARC | instruction @@ -161,7 +161,7 @@ scons x86.CROSS_COMPILE=x86_64-linux-gnu- build/x86/out/m5 ABI | QEMU_ARCH | CROSS_COMPILE ---------|-----------|--------------------- - aarch64 | aarch64 | aarch64-linux-gnu- + arm64 | aarch64 | aarch64-linux-gnu- arm | arm | arm-linux-gnueabihf- thumb | arm | arm-linux-gnueabihf- sparc | sparc64 | sparc64-linux-gnu- @@ -245,7 +245,7 @@ varies based on the ABI. ABI | Default call type ---------|------------------- - aarch64 | instruction + arm64 | instruction arm | instruction thumb | instruction sparc | instruction diff --git a/util/m5/src/abi/aarch64/SConsopts b/util/m5/src/abi/aarch64/SConsopts deleted file mode 100644 index f55b1a147..000000000 --- a/util/m5/src/abi/aarch64/SConsopts +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2020 Google, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# 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; -# neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT -# OWNER 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. - -Import('*') - -env['ABI'] = 'aarch64' -get_abi_opt('CROSS_COMPILE', 'aarch64-linux-gnu-') -get_abi_opt('QEMU_ARCH', 'aarch64') - -env['CALL_TYPE']['inst'].impl('m5op.S', 'verify_inst.cc', default=True) -env['CALL_TYPE']['addr'].impl('m5op_addr.S') -env['CALL_TYPE']['semi'].impl('m5op_semi.S', 'verify_semi.cc') diff --git a/util/m5/src/abi/aarch64/m5op.S b/util/m5/src/abi/aarch64/m5op.S deleted file mode 100644 index 6529dcf0b..000000000 --- a/util/m5/src/abi/aarch64/m5op.S +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2010-2013, 2016-2017 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Copyright (c) 2003-2006 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * 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; - * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT - * OWNER 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. - */ - -#include - -.macro m5op_func, name, func - .globl \name - \name: - .long 0xff000110 | (\func << 16) - ret -.endm - -.text -#define M5OP(name, func) m5op_func name, func; - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/src/abi/aarch64/m5op_addr.S b/util/m5/src/abi/aarch64/m5op_addr.S deleted file mode 100644 index 0368754b3..000000000 --- a/util/m5/src/abi/aarch64/m5op_addr.S +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2010-2013, 2016-2017 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Copyright (c) 2003-2006 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * 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; - * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT - * OWNER 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. - */ - -#include - -.macro m5op_func, name, func - .globl \name - \name: - // Load the value of m5_mem into x9... -#if defined(M5OP_PIC) - // using the global offset table. - adrp x9, :got:m5_mem - ldr x9, [ x9, #:got_lo12:m5_mem ] - ldr x9, [ x9 ] -#else - // normally. - adrp x9, m5_mem - ldr x9, [ x9, #:lo12:m5_mem ] -#endif - movz x10, #(\func << 8) - ldr x0, [ x9, x10 ] - ret -.endm - -.text -#define M5OP(name, func) m5op_func M5OP_MERGE_TOKENS(name, _addr), func; - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/src/abi/aarch64/m5op_semi.S b/util/m5/src/abi/aarch64/m5op_semi.S deleted file mode 100644 index 744b13003..000000000 --- a/util/m5/src/abi/aarch64/m5op_semi.S +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2010-2013, 2016-2017 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Copyright (c) 2003-2006 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * 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; - * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT - * OWNER 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. - */ - -#include - -.macro m5op_func, name, func - .globl \name - \name: - // Put the m5 op number in x16. - mov x16, #(\func << 8) - // Branch into the common handler for the rest. - b 1f -.endm - -.text -#define M5OP(name, func) m5op_func M5OP_MERGE_TOKENS(name, _semi), func; - M5OP_FOREACH -#undef M5OP - - 1: - // Get the address of the argument block. - ldr x17, =m5_semi_argument_block - // Store the m5 op number in the first slot. - str x16, [ x17 ], #8 - // Store all 8 possible arguments in the subsequent slots. We don't - // know how many we need, so just store them all. - str x0, [ x17 ], #8 - str x1, [ x17 ], #8 - str x2, [ x17 ], #8 - str x3, [ x17 ], #8 - str x4, [ x17 ], #8 - str x5, [ x17 ], #8 - str x6, [ x17 ], #8 - str x7, [ x17 ], #8 - // Set x0 to the m5 op semi-hosting call number. - mov x0, #0x100 - // Set x1 to the address of the argument blob. - ldr x1, =m5_semi_argument_block - // Trigger the semihosting call with the gem5 specific immediate. - hlt #0x5d57 - ret - -.data - .globl m5_semi_argument_block - m5_semi_argument_block: - .quad 0 // function - .quad 0 // argument 0 - .quad 0 // argument 1 - .quad 0 // argument 2 - .quad 0 // argument 3 - .quad 0 // argument 4 - .quad 0 // argument 5 - .quad 0 // argument 6 - .quad 0 // argument 7 diff --git a/util/m5/src/abi/aarch64/verify_inst.cc b/util/m5/src/abi/aarch64/verify_inst.cc deleted file mode 100644 index 7370e9ef0..000000000 --- a/util/m5/src/abi/aarch64/verify_inst.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * 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; - * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT - * OWNER 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. - */ - -#include - -#include "call_type/verify_inst.hh" - -void -abi_verify_inst(const siginfo_t &info, int func) -{ - EXPECT_EQ(func, *(uint8_t *)((uintptr_t)info.si_addr + 2)); -} diff --git a/util/m5/src/abi/aarch64/verify_semi.cc b/util/m5/src/abi/aarch64/verify_semi.cc deleted file mode 100644 index c3cc77ed4..000000000 --- a/util/m5/src/abi/aarch64/verify_semi.cc +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * 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; - * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT - * OWNER 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. - */ - -#include - -#include "call_type/verify_semi.hh" - -extern uint64_t m5_semi_argument_block[]; - -void -abi_verify_semi(const siginfo_t &info, int func, - const std::vector &args) -{ - // Extract the instruction that triggered the signal. - uint32_t inst = *(uint32_t *)info.si_addr; - - // Get the imm16 field from it. - uint32_t imm16 = (inst >> 5) & 0xffff; - - // Verify that it used the gem5 immediate value. - EXPECT_EQ(imm16, 0x5d57); - - // Check that the right function was called. - EXPECT_EQ(func, (m5_semi_argument_block[0] >> 8) & 0xff); - - // Check that the arguments were correct. - uint64_t *arg = &m5_semi_argument_block[1]; - for (uint64_t expected: args) - EXPECT_EQ(*arg++, expected); -} diff --git a/util/m5/src/abi/arm64/SConsopts b/util/m5/src/abi/arm64/SConsopts new file mode 100644 index 000000000..ebf40c5fe --- /dev/null +++ b/util/m5/src/abi/arm64/SConsopts @@ -0,0 +1,34 @@ +# Copyright 2020 Google, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# 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; +# neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT +# OWNER 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. + +Import('*') + +env['ABI'] = 'arm64' +get_abi_opt('CROSS_COMPILE', 'aarch64-linux-gnu-') +get_abi_opt('QEMU_ARCH', 'aarch64') + +env['CALL_TYPE']['inst'].impl('m5op.S', 'verify_inst.cc', default=True) +env['CALL_TYPE']['addr'].impl('m5op_addr.S') +env['CALL_TYPE']['semi'].impl('m5op_semi.S', 'verify_semi.cc') diff --git a/util/m5/src/abi/arm64/m5op.S b/util/m5/src/abi/arm64/m5op.S new file mode 100644 index 000000000..6529dcf0b --- /dev/null +++ b/util/m5/src/abi/arm64/m5op.S @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2010-2013, 2016-2017 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * + * Copyright (c) 2003-2006 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * 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; + * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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. + */ + +#include + +.macro m5op_func, name, func + .globl \name + \name: + .long 0xff000110 | (\func << 16) + ret +.endm + +.text +#define M5OP(name, func) m5op_func name, func; + M5OP_FOREACH +#undef M5OP diff --git a/util/m5/src/abi/arm64/m5op_addr.S b/util/m5/src/abi/arm64/m5op_addr.S new file mode 100644 index 000000000..0368754b3 --- /dev/null +++ b/util/m5/src/abi/arm64/m5op_addr.S @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010-2013, 2016-2017 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * + * Copyright (c) 2003-2006 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * 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; + * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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. + */ + +#include + +.macro m5op_func, name, func + .globl \name + \name: + // Load the value of m5_mem into x9... +#if defined(M5OP_PIC) + // using the global offset table. + adrp x9, :got:m5_mem + ldr x9, [ x9, #:got_lo12:m5_mem ] + ldr x9, [ x9 ] +#else + // normally. + adrp x9, m5_mem + ldr x9, [ x9, #:lo12:m5_mem ] +#endif + movz x10, #(\func << 8) + ldr x0, [ x9, x10 ] + ret +.endm + +.text +#define M5OP(name, func) m5op_func M5OP_MERGE_TOKENS(name, _addr), func; + M5OP_FOREACH +#undef M5OP diff --git a/util/m5/src/abi/arm64/m5op_semi.S b/util/m5/src/abi/arm64/m5op_semi.S new file mode 100644 index 000000000..744b13003 --- /dev/null +++ b/util/m5/src/abi/arm64/m5op_semi.S @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2010-2013, 2016-2017 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * + * Copyright (c) 2003-2006 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * 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; + * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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. + */ + +#include + +.macro m5op_func, name, func + .globl \name + \name: + // Put the m5 op number in x16. + mov x16, #(\func << 8) + // Branch into the common handler for the rest. + b 1f +.endm + +.text +#define M5OP(name, func) m5op_func M5OP_MERGE_TOKENS(name, _semi), func; + M5OP_FOREACH +#undef M5OP + + 1: + // Get the address of the argument block. + ldr x17, =m5_semi_argument_block + // Store the m5 op number in the first slot. + str x16, [ x17 ], #8 + // Store all 8 possible arguments in the subsequent slots. We don't + // know how many we need, so just store them all. + str x0, [ x17 ], #8 + str x1, [ x17 ], #8 + str x2, [ x17 ], #8 + str x3, [ x17 ], #8 + str x4, [ x17 ], #8 + str x5, [ x17 ], #8 + str x6, [ x17 ], #8 + str x7, [ x17 ], #8 + // Set x0 to the m5 op semi-hosting call number. + mov x0, #0x100 + // Set x1 to the address of the argument blob. + ldr x1, =m5_semi_argument_block + // Trigger the semihosting call with the gem5 specific immediate. + hlt #0x5d57 + ret + +.data + .globl m5_semi_argument_block + m5_semi_argument_block: + .quad 0 // function + .quad 0 // argument 0 + .quad 0 // argument 1 + .quad 0 // argument 2 + .quad 0 // argument 3 + .quad 0 // argument 4 + .quad 0 // argument 5 + .quad 0 // argument 6 + .quad 0 // argument 7 diff --git a/util/m5/src/abi/arm64/verify_inst.cc b/util/m5/src/abi/arm64/verify_inst.cc new file mode 100644 index 000000000..7370e9ef0 --- /dev/null +++ b/util/m5/src/abi/arm64/verify_inst.cc @@ -0,0 +1,36 @@ +/* + * Copyright 2020 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * 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; + * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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. + */ + +#include + +#include "call_type/verify_inst.hh" + +void +abi_verify_inst(const siginfo_t &info, int func) +{ + EXPECT_EQ(func, *(uint8_t *)((uintptr_t)info.si_addr + 2)); +} diff --git a/util/m5/src/abi/arm64/verify_semi.cc b/util/m5/src/abi/arm64/verify_semi.cc new file mode 100644 index 000000000..c3cc77ed4 --- /dev/null +++ b/util/m5/src/abi/arm64/verify_semi.cc @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * 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; + * neither the name of the copyright holders 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 COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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. + */ + +#include + +#include "call_type/verify_semi.hh" + +extern uint64_t m5_semi_argument_block[]; + +void +abi_verify_semi(const siginfo_t &info, int func, + const std::vector &args) +{ + // Extract the instruction that triggered the signal. + uint32_t inst = *(uint32_t *)info.si_addr; + + // Get the imm16 field from it. + uint32_t imm16 = (inst >> 5) & 0xffff; + + // Verify that it used the gem5 immediate value. + EXPECT_EQ(imm16, 0x5d57); + + // Check that the right function was called. + EXPECT_EQ(func, (m5_semi_argument_block[0] >> 8) & 0xff); + + // Check that the arguments were correct. + uint64_t *arg = &m5_semi_argument_block[1]; + for (uint64_t expected: args) + EXPECT_EQ(*arg++, expected); +}