Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c723ea46 authored by Vineet Gupta's avatar Vineet Gupta
Browse files

ARC: unaligned access emulation error handling consolidation



If CONFIG_ARC_MISALIGN_ACCESS is not enabled, or if the fixup fails,
call the same error handler: same signal/si_code to user (SIGBUS)

Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent bd3c8b11
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -393,12 +393,12 @@ ARC_ENTRY EV_TLBProtV
#ifdef  CONFIG_ARC_MISALIGN_ACCESS
	SAVE_CALLEE_SAVED_USER
	mov r3, sp              ; callee_regs
#endif

	bl  do_misaligned_access

#ifdef  CONFIG_ARC_MISALIGN_ACCESS
	DISCARD_CALLEE_SAVED_USER
#else
	bl  do_misaligned_error
#endif

	b   ret_from_exception
+4 −13
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ DO_ERROR_INFO(SIGILL, "Invalid Extn Insn", do_extension_fault, ILL_ILLOPC)
DO_ERROR_INFO(SIGILL, "Illegal Insn (or Seq)", insterror_is_error, ILL_ILLOPC)
DO_ERROR_INFO(SIGBUS, "Invalid Mem Access", do_memory_error, BUS_ADRERR)
DO_ERROR_INFO(SIGTRAP, "Breakpoint Set", trap_is_brkpt, TRAP_BRKPT)
DO_ERROR_INFO(SIGBUS, "Misaligned Access", do_misaligned_error, BUS_ADRALN)

#ifdef CONFIG_ARC_MISALIGN_ACCESS
/*
@@ -92,21 +93,11 @@ DO_ERROR_INFO(SIGTRAP, "Breakpoint Set", trap_is_brkpt, TRAP_BRKPT)
int do_misaligned_access(unsigned long cause, unsigned long address,
			 struct pt_regs *regs, struct callee_regs *cregs)
{
	if (misaligned_fixup(address, regs, cause, cregs) != 0) {
		siginfo_t info;

		info.si_signo = SIGBUS;
		info.si_errno = 0;
		info.si_code = BUS_ADRALN;
		info.si_addr = (void __user *)address;
		return handle_exception(cause, "Misaligned Access", regs,
					  &info);
	}
	if (misaligned_fixup(address, regs, cause, cregs) != 0)
		return do_misaligned_error(cause, address, regs);

	return 0;
}

#else
DO_ERROR_INFO(SIGSEGV, "Misaligned Access", do_misaligned_access, SEGV_ACCERR)
#endif

/*