From be35d67a029485f461ce83cbeda15056a52cb069 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 1 May 2026 14:34:52 +0100 Subject: [PATCH] [librm] Specify regparm function attribute only for i386 The regparm function attribute is meaningful only for i386, not for x86_64, and is reported as a build error by GCC 16. Signed-off-by: Michael Brown --- src/arch/x86/transitions/librm_mgmt.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/arch/x86/transitions/librm_mgmt.c b/src/arch/x86/transitions/librm_mgmt.c index 89feec96a..6c8d55f90 100644 --- a/src/arch/x86/transitions/librm_mgmt.c +++ b/src/arch/x86/transitions/librm_mgmt.c @@ -21,6 +21,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); * */ +/* Calling convention used by interrupt wrapper */ +#ifdef __x86_64__ +#define __intrcall +#else +#define __intrcall __attribute__ (( regparm ( 3 ) )) +#endif + /** The interrupt wrapper */ extern char interrupt_wrapper[]; @@ -247,9 +254,8 @@ interrupt_dump ( int intr, struct interrupt_frame32 *frame32, * @v frame64 64-bit interrupt wrapper stack frame (or NULL) * @v frame Interrupt wrapper stack frame */ -void __attribute__ (( regparm ( 3 ) )) -interrupt ( int intr, struct interrupt_frame32 *frame32, - struct interrupt_frame64 *frame64 ) { +__intrcall void interrupt ( int intr, struct interrupt_frame32 *frame32, + struct interrupt_frame64 *frame64 ) { struct profiler *profiler = interrupt_profiler ( intr ); uint32_t discard_eax;