1800b99b8Sopenharmony_ci/* 2800b99b8Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3800b99b8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4800b99b8Sopenharmony_ci * you may not use this file except in compliance with the License. 5800b99b8Sopenharmony_ci * You may obtain a copy of the License at 6800b99b8Sopenharmony_ci * 7800b99b8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8800b99b8Sopenharmony_ci * 9800b99b8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10800b99b8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11800b99b8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12800b99b8Sopenharmony_ci * See the License for the specific language governing permissions and 13800b99b8Sopenharmony_ci * limitations under the License. 14800b99b8Sopenharmony_ci */ 15800b99b8Sopenharmony_ci 16800b99b8Sopenharmony_ci#include "arch_util.h" 17800b99b8Sopenharmony_ci 18800b99b8Sopenharmony_ci#include <securec.h> 19800b99b8Sopenharmony_ci#include "dfx_define.h" 20800b99b8Sopenharmony_ci#include "dfx_log.h" 21800b99b8Sopenharmony_ci#include "string_util.h" 22800b99b8Sopenharmony_ci 23800b99b8Sopenharmony_cinamespace OHOS { 24800b99b8Sopenharmony_cinamespace HiviewDFX { 25800b99b8Sopenharmony_ciArchType GetCurrentArch() 26800b99b8Sopenharmony_ci{ 27800b99b8Sopenharmony_ci ArchType curArch = ArchType::ARCH_UNKNOWN; 28800b99b8Sopenharmony_ci#if defined(__arm__) 29800b99b8Sopenharmony_ci curArch = ArchType::ARCH_ARM; 30800b99b8Sopenharmony_ci#elif defined(__aarch64__) 31800b99b8Sopenharmony_ci curArch = ArchType::ARCH_ARM64; 32800b99b8Sopenharmony_ci#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 33800b99b8Sopenharmony_ci curArch = ArchType::ARCH_RISCV64; 34800b99b8Sopenharmony_ci#elif defined(__i386__) 35800b99b8Sopenharmony_ci curArch = ArchType::ARCH_X86; 36800b99b8Sopenharmony_ci#elif defined(__x86_64__) 37800b99b8Sopenharmony_ci curArch = ArchType::ARCH_X86_64; 38800b99b8Sopenharmony_ci#else 39800b99b8Sopenharmony_ci#error "Unsupported architecture" 40800b99b8Sopenharmony_ci#endif 41800b99b8Sopenharmony_ci return curArch; 42800b99b8Sopenharmony_ci} 43800b99b8Sopenharmony_ci 44800b99b8Sopenharmony_ciArchType GetArchFromUname(const std::string& machine) 45800b99b8Sopenharmony_ci{ 46800b99b8Sopenharmony_ci if (StartsWith(machine, "arm")) { 47800b99b8Sopenharmony_ci if (machine == "armv8l") { 48800b99b8Sopenharmony_ci return ArchType::ARCH_ARM64; 49800b99b8Sopenharmony_ci } 50800b99b8Sopenharmony_ci return ArchType::ARCH_ARM; 51800b99b8Sopenharmony_ci } else if (machine == "aarch64") { 52800b99b8Sopenharmony_ci return ArchType::ARCH_ARM64; 53800b99b8Sopenharmony_ci } else if (machine == "riscv64") { 54800b99b8Sopenharmony_ci return ArchType::ARCH_RISCV64; 55800b99b8Sopenharmony_ci } else if (machine == "x86_64") { 56800b99b8Sopenharmony_ci return ArchType::ARCH_X86_64; 57800b99b8Sopenharmony_ci } else if (machine == "x86" || machine == "i686") { 58800b99b8Sopenharmony_ci return ArchType::ARCH_X86; 59800b99b8Sopenharmony_ci } else { 60800b99b8Sopenharmony_ci return ArchType::ARCH_UNKNOWN; 61800b99b8Sopenharmony_ci } 62800b99b8Sopenharmony_ci} 63800b99b8Sopenharmony_ci 64800b99b8Sopenharmony_ciconst std::string GetArchName(ArchType arch) 65800b99b8Sopenharmony_ci{ 66800b99b8Sopenharmony_ci switch (arch) { 67800b99b8Sopenharmony_ci case ArchType::ARCH_X86: 68800b99b8Sopenharmony_ci return "X86_32"; 69800b99b8Sopenharmony_ci case ArchType::ARCH_X86_64: 70800b99b8Sopenharmony_ci return "X86_64"; 71800b99b8Sopenharmony_ci case ArchType::ARCH_ARM: 72800b99b8Sopenharmony_ci return "ARM"; 73800b99b8Sopenharmony_ci case ArchType::ARCH_ARM64: 74800b99b8Sopenharmony_ci return "ARM64"; 75800b99b8Sopenharmony_ci case ArchType::ARCH_RISCV64: 76800b99b8Sopenharmony_ci return "RISCV64"; 77800b99b8Sopenharmony_ci default: 78800b99b8Sopenharmony_ci return "Unsupport"; 79800b99b8Sopenharmony_ci } 80800b99b8Sopenharmony_ci} 81800b99b8Sopenharmony_ci} // namespace HiviewDFX 82800b99b8Sopenharmony_ci} // namespace OHOS 83