1/* SPDX-License-Identifier: GPL-2.0-or-later 2 * Copyright (c) 2021 Li Wang <liwang@redhat.com> 3 */ 4 5#include <string.h> 6#include <stdlib.h> 7 8#define TST_NO_DEFAULT_MAIN 9#include "tst_arch.h" 10#include "tst_test.h" 11 12const struct tst_arch tst_arch = { 13#if defined(__x86_64__) 14 .name = "x86_64", 15 .type = TST_X86_64, 16#elif defined(__i386__) || defined(__i586__) || defined(__i686__) 17 .name = "x86", 18 .type = TST_X86, 19#elif defined(__ia64__) 20 .name = "ia64", 21 .type = TST_IA64, 22#elif defined(__powerpc64__) || defined(__ppc64__) 23 .name = "ppc64", 24 .type = TST_PPC64, 25#elif defined(__powerpc__) || defined(__ppc__) 26 .name = "ppc", 27 .type = TST_PPC, 28#elif defined(__s390x__) 29 .name = "s390x", 30 .type = TST_S390X, 31#elif defined(__s390__) 32 .name = "s390", 33 .type = TST_S390, 34#elif defined(__aarch64__) 35 .name = "aarch64", 36 .type = TST_AARCH64, 37#elif defined(__arm__) 38 .name = "arm", 39 .type = TST_ARM, 40#elif defined(__sparc__) 41 .name = "sparc", 42 .type = TST_SPARC, 43#else 44 .name = "unknown", 45 .type = TST_UNKNOWN, 46#endif 47}; 48 49static const char *const arch_type_list[] = { 50 "x86", 51 "x86_64", 52 "ia64", 53 "ppc", 54 "ppc64", 55 "s390", 56 "s390x", 57 "arm", 58 "aarch64", 59 "sparc", 60 NULL 61}; 62 63static int is_valid_arch_name(const char *name) 64{ 65 unsigned int i; 66 67 for (i = 0; arch_type_list[i]; i++) { 68 if (!strcmp(arch_type_list[i], name)) 69 return 1; 70 } 71 72 return 0; 73} 74 75int tst_is_on_arch(const char *const *archlist) 76{ 77 unsigned int i; 78 79 if (!archlist) 80 return 1; 81 82 for (i = 0; archlist[i]; i++) { 83 if (!is_valid_arch_name(archlist[i])) 84 tst_brk(TBROK, "%s is invalid arch, please reset!", 85 archlist[i]); 86 } 87 88 for (i = 0; archlist[i]; i++) { 89 if (!strcmp(tst_arch.name, archlist[i])) 90 return 1; 91 } 92 93 return 0; 94} 95