Skip to content

Commit d499e96

Browse files
peppergrayxyzwilldeacon
authored andcommitted
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: Pepper Gray <hello@peppergray.xyz> Signed-off-by: Will Deacon <will@kernel.org>
1 parent d87c828 commit d499e96

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

arch/arm64/kernel/pi/patch-scs.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ static int scs_handle_fde_frame(const struct eh_frame *frame,
192192
size -= 2;
193193
break;
194194

195+
case DW_CFA_advance_loc4:
196+
loc += *opcode++ * code_alignment_factor;
197+
loc += (*opcode++ << 8) * code_alignment_factor;
198+
loc += (*opcode++ << 16) * code_alignment_factor;
199+
loc += (*opcode++ << 24) * code_alignment_factor;
200+
size -= 4;
201+
break;
202+
195203
case DW_CFA_def_cfa:
196204
case DW_CFA_offset_extended:
197205
size = skip_xleb128(&opcode, size);

0 commit comments

Comments
 (0)