/* SPDX-License-Identifier: GPL-2.0-only */ #include /* GCC's libgcc handling is quite broken. While the libgcc functions * are always regparm(0) the code that calls them uses whatever the * compiler call specifies. Therefore we need a wrapper around those * functions. See gcc bug PR41055 for more information. */ /* TODO: maybe this code should move to arch/x86 as architecture * specific implementations may vary */ #define WRAP_LIBGCC_CALL(type, name) \ asmlinkage type __real_##name(type a, type b); \ type __wrap_##name(type a, type b); \ type __wrap_##name(type a, type b) { return __real_##name(a, b); } WRAP_LIBGCC_CALL(long long, __divdi3) WRAP_LIBGCC_CALL(unsigned long long, __udivdi3) WRAP_LIBGCC_CALL(long long, __moddi3) WRAP_LIBGCC_CALL(unsigned long long, __umoddi3)