diff options
Diffstat (limited to 'linux/errors.c')
-rw-r--r-- | linux/errors.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/linux/errors.c b/linux/errors.c new file mode 100644 index 0000000..d8a0e7f --- /dev/null +++ b/linux/errors.c @@ -0,0 +1,130 @@ +/* See LICENSE file for copyright and license details. */ + +/* This file is included from ../libsyscalls_get_syscall_errors.c */ + + +#include "../generated/linux-errors.h" + +static enum libsyscalls_error +get_linux_syscall_errors(enum libsyscalls_arch arch, const struct libsyscalls_named_number **errs_out, size_t *nerrs_out) +{ +#define CASE(ARCH)\ + *errs_out = linux_errors_for_##ARCH;\ + *nerrs_out = sizeof(linux_errors_for_##ARCH) / sizeof(*linux_errors_for_##ARCH);\ + goto out + + switch ((int)arch) { + case LIBSYSCALLS_ARCH_ALPHA: +#ifdef LIST_LINUX_ERRORS_FOR_ALPHA + CASE(alpha); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_AMD64: + case LIBSYSCALLS_ARCH_AMD64_X32: + case LIBSYSCALLS_ARCH_I386: +#ifdef LIST_LINUX_ERRORS_FOR_X86 + CASE(x86); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_ARM_OABI: + case LIBSYSCALLS_ARCH_ARM_EABI: +#ifdef LIST_LINUX_ERRORS_FOR_ARM + CASE(arm); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_IA64: +#ifdef LIST_LINUX_ERRORS_FOR_IA64 + CASE(ia64); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_M68K: +#ifdef LIST_LINUX_ERRORS_FOR_M68K + CASE(m68k); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_MICROBLAZE: +#ifdef LIST_LINUX_ERRORS_FOR_MICROBLAZE + CASE(microblaze); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_MIPS_O32: + case LIBSYSCALLS_ARCH_MIPS_N32: + case LIBSYSCALLS_ARCH_MIPS_N64: +#ifdef LIST_LINUX_ERRORS_FOR_MIPS + CASE(mips); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_PARISC_32: + case LIBSYSCALLS_ARCH_PARISC_64: +#ifdef LIST_LINUX_ERRORS_FOR_PARISC + CASE(parisc); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_POWERPC_32: + case LIBSYSCALLS_ARCH_POWERPC_64: + case LIBSYSCALLS_ARCH_POWERPC_NOSPU: + case LIBSYSCALLS_ARCH_POWERPC_SPU: +#ifdef LIST_LINUX_ERRORS_FOR_POWERPC + CASE(powerpc); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_S390_32: + case LIBSYSCALLS_ARCH_S390_64: +#ifdef LIST_LINUX_ERRORS_FOR_S390 + CASE(s390); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_SH: +#ifdef LIST_LINUX_ERRORS_FOR_SH + CASE(sh); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_SPARC_32: + case LIBSYSCALLS_ARCH_SPARC_64: +#ifdef LIST_LINUX_ERRORS_FOR_SPARC + CASE(sparc); +#else + break; +#endif + + case LIBSYSCALLS_ARCH_XTENSA: +#ifdef LIST_LINUX_ERRORS_FOR_XTENSA + CASE(xtensa); +#else + break; +#endif + + default: + return LIBSYSCALLS_E_ARCHNOSUP; + } + + *errs_out = linux_errors_for_generic; + *nerrs_out = sizeof(linux_errors_for_generic) / sizeof(*linux_errors_for_generic); + +out: + return LIBSYSCALLS_E_OK; + +#undef CASE +} |