1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "arch_util.h" 17 18 #include <securec.h> 19 #include "dfx_define.h" 20 #include "dfx_log.h" 21 #include "string_util.h" 22 23 namespace OHOS { 24 namespace HiviewDFX { GetCurrentArch()25ArchType GetCurrentArch() 26 { 27 ArchType curArch = ArchType::ARCH_UNKNOWN; 28 #if defined(__arm__) 29 curArch = ArchType::ARCH_ARM; 30 #elif defined(__aarch64__) 31 curArch = ArchType::ARCH_ARM64; 32 #elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 33 curArch = ArchType::ARCH_RISCV64; 34 #elif defined(__i386__) 35 curArch = ArchType::ARCH_X86; 36 #elif defined(__x86_64__) 37 curArch = ArchType::ARCH_X86_64; 38 #elif defined(__loongarch__) 39 curArch = ArchType::ARCH_LOONGARCH; 40 #else 41 #error "Unsupported architecture" 42 #endif 43 return curArch; 44 } 45 GetArchFromUname(const std::string & machine)46ArchType GetArchFromUname(const std::string& machine) 47 { 48 if (StartsWith(machine, "arm")) { 49 if (machine == "armv8l") { 50 return ArchType::ARCH_ARM64; 51 } 52 return ArchType::ARCH_ARM; 53 } else if (machine == "aarch64") { 54 return ArchType::ARCH_ARM64; 55 } else if (machine == "riscv64") { 56 return ArchType::ARCH_RISCV64; 57 } else if (machine == "x86_64") { 58 return ArchType::ARCH_X86_64; 59 } else if (machine == "x86" || machine == "i686") { 60 return ArchType::ARCH_X86; 61 } else if (machine == "loongarch64") { 62 return ArchType::ARCH_LOONGARCH; 63 } else { 64 return ArchType::ARCH_UNKNOWN; 65 } 66 } 67 GetArchName(ArchType arch)68const std::string GetArchName(ArchType arch) 69 { 70 switch (arch) { 71 case ArchType::ARCH_X86: 72 return "X86_32"; 73 case ArchType::ARCH_X86_64: 74 return "X86_64"; 75 case ArchType::ARCH_ARM: 76 return "ARM"; 77 case ArchType::ARCH_ARM64: 78 return "ARM64"; 79 case ArchType::ARCH_RISCV64: 80 return "RISCV64"; 81 case ArchType::ARCH_LOONGARCH: 82 return "LOONGARCH"; 83 default: 84 return "Unsupport"; 85 } 86 } 87 } // namespace HiviewDFX 88 } // namespace OHOS 89