/* Note: we cannot allow this function to be inlined, because that would give us more than 1 exception table entry. This in turn would break the assumptions above.  */
static noinline int test_address(void *address)
/* Note: we cannot allow this function to be inlined, because that would give us more than 1 exception table entry. This in turn would break the assumptions above.  */
static noinline int test_address(void *address)
{
	unsigned long result;
	fudze_exception_table(&foo_label, address);
	result = 1;
	asm volatile(
		"foo_label:\n"
		"0:	call *%[fake_code]\n"
		"1:\n"
		".section .fixup,\"ax\"\n"
		"2:	mov %[zero], %[rslt]\n"
		"	ret\n"
		".previous\n"
		_ASM_EXTABLE(0b,2b)
		: [rslt] "=r" (result)
		: [fake_code] "r" (address), [zero] "r" (0UL), "0" (result)
	);
	fudze_exception_table(address, &foo_label);
	if (result)
		return -ENODEV;
	return 0;
}