diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2020-07-17 22:59:07 +0200 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2020-09-30 03:08:36 +0200 |
commit | 03aacdb73d2f797768129d54ac971b48756fa51a (patch) | |
tree | 7902012ef175d3649d404e0eaa0e739b924414ec /bridges/inc | |
parent | f11dc8335c9bae837823c14d059388b8d5965dcb (diff) |
bridges: add a Windows Arm64 UNO bridge
Since Microsoft follows the general ARM64 ABI calling conventions,
and the SEH exception handling is the same, this result is a mixed
port of the gcc3_linux_aarch64 bridge and the refactored x86-64
exception handling.
I have no idea, if the complicated 32-bit handling in RaiseInfo()
is needed, as the ARM64 trampolines definitly use 64-bit code.
But since this is the first working version, I currently don't
mind much ;-)
There is definitly more potential for refactoring in the whole
bridges directory...
Change-Id: I9782a2e99c0231cdd1286af156ad312229eccf39
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103642
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'bridges/inc')
-rw-r--r-- | bridges/inc/msvc/arm64.hxx | 59 | ||||
-rw-r--r-- | bridges/inc/msvc/except.hxx | 6 |
2 files changed, 61 insertions, 4 deletions
diff --git a/bridges/inc/msvc/arm64.hxx b/bridges/inc/msvc/arm64.hxx new file mode 100644 index 000000000000..fb095446b097 --- /dev/null +++ b/bridges/inc/msvc/arm64.hxx @@ -0,0 +1,59 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <msvc/except.hxx> + +#pragma pack(push, 8) + +struct ExceptionType final +{ + sal_Int32 _n0; // flags + sal_uInt32 _pTypeInfo; // typeinfo + sal_Int32 _n1, _n2, _n3; // thiscast + sal_Int32 _n4; // object_size + sal_uInt32 _pCopyCtor; // copyctor + ExceptionTypeInfo exc_type_info; + + explicit ExceptionType(unsigned char* pCode, sal_uInt64 pCodeBase, + typelib_TypeDescription* pTD) throw(); + + ExceptionType(const ExceptionType&) = delete; + ExceptionType& operator=(const ExceptionType&) = delete; +}; + +struct RaiseInfo final +{ + sal_Int32 _n0; + sal_uInt32 _pDtor; + sal_Int32 _n2; + sal_uInt32 _types; + + // Additional fields + typelib_TypeDescription* _pTD; + unsigned char* _code; + sal_uInt64 _codeBase; + + explicit RaiseInfo(typelib_TypeDescription* pTD) throw(); +}; + +#pragma pack(pop) + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/bridges/inc/msvc/except.hxx b/bridges/inc/msvc/except.hxx index 8ed49a887a24..91a6441006a3 100644 --- a/bridges/inc/msvc/except.hxx +++ b/bridges/inc/msvc/except.hxx @@ -38,15 +38,13 @@ constexpr DWORD MSVC_EH_MAGIC_PARAM = 0x19930520; // The NT Exception code that msvcrt uses ('msc' | 0xE0000000) constexpr DWORD MSVC_EH_MAGIC_CODE = 0xE06D7363; -#ifdef _M_IX86 +#if defined(_M_IX86) #define MSVC_EH_PARAMETERS 3 // Number of parameters in exception record for x86 -#else -#ifdef _M_AMD64 +#elif defined(_M_AMD64) || defined(_M_ARM64) #define MSVC_EH_PARAMETERS 4 // Number of parameters in exception record for AMD64 #else #error "Unsupported machine type" #endif -#endif class type_info; struct RaiseInfo; |