Commit d499e962 authored by Pepper Gray's avatar Pepper Gray Committed by Will Deacon
Browse files

arm64/scs: Fix handling of advance_loc4

DW_CFA_advance_loc4 is defined but no handler is implemented. Its
CFA opcode defaults to EDYNSCS_INVALID_CFA_OPCODE triggering an
error which wrongfully prevents modules from loading.

Link: https://bugs.gentoo.org/971060


Signed-off-by: default avatarPepper Gray <hello@peppergray.xyz>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent d87c828d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -192,6 +192,14 @@ static int scs_handle_fde_frame(const struct eh_frame *frame,
			size -= 2;
			break;

		case DW_CFA_advance_loc4:
			loc += *opcode++ * code_alignment_factor;
			loc += (*opcode++ << 8) * code_alignment_factor;
			loc += (*opcode++ << 16) * code_alignment_factor;
			loc += (*opcode++ << 24) * code_alignment_factor;
			size -= 4;
		break;

		case DW_CFA_def_cfa:
		case DW_CFA_offset_extended:
			size = skip_xleb128(&opcode, size);