summaryrefslogtreecommitdiff
path: root/arch/arm64/kernel
diff options
context:
space:
mode:
authorPepper Gray <hello@peppergray.xyz>2026-03-10 14:44:28 +0100
committerWill Deacon <will@kernel.org>2026-03-13 14:15:34 +0000
commitd499e9627d70b1269020d59b95ed3e18bee6b8cd (patch)
treef12abe21ca1bca85f2fc18cd725c9d8d84ae599e /arch/arm64/kernel
parentd87c828daa7ead9763416f75cc416496969cf1dc (diff)
downloadlwn-d499e9627d70b1269020d59b95ed3e18bee6b8cd.tar.gz
lwn-d499e9627d70b1269020d59b95ed3e18bee6b8cd.zip
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>
Diffstat (limited to 'arch/arm64/kernel')
-rw-r--r--arch/arm64/kernel/pi/patch-scs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm64/kernel/pi/patch-scs.c b/arch/arm64/kernel/pi/patch-scs.c
index bbe7d30ed12b..dac568e4a54f 100644
--- a/arch/arm64/kernel/pi/patch-scs.c
+++ b/arch/arm64/kernel/pi/patch-scs.c
@@ -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);