From 48728c33e43329c8037575320ce681a65cc13eb7 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 3 Sep 2026 09:58:51 +0200 Subject: [PATCH] x86/alternatives: mark .altinstructions r/w MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Forever since the introduction of the .priv member it has been wrong to record the section as r/o. .alt_call_sites, otoh, is legitimately r/o, hence __alt_call_sites_{start,end}[] would better reflect that. Fixes: 4008c71d7af2 ("x86/alt: Support for automatic padding calculations") Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- xen/arch/x86/alternative.c | 2 +- xen/arch/x86/include/asm/alternative-asm.h | 4 ++-- xen/arch/x86/include/asm/alternative.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c index 5709c0b514..80c4dc721b 100644 --- a/xen/arch/x86/alternative.c +++ b/xen/arch/x86/alternative.c @@ -464,7 +464,7 @@ static unsigned int __initdata alt_todo; static unsigned int __initdata alt_done; extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; -extern struct alt_call __alt_call_sites_start[], __alt_call_sites_end[]; +extern const struct alt_call __alt_call_sites_start[], __alt_call_sites_end[]; /* * At boot time, we patch alternatives in NMI context. This means that the diff --git a/xen/arch/x86/include/asm/alternative-asm.h b/xen/arch/x86/include/asm/alternative-asm.h index d5c7f18160..8fd18204f1 100644 --- a/xen/arch/x86/include/asm/alternative-asm.h +++ b/xen/arch/x86/include/asm/alternative-asm.h @@ -59,7 +59,7 @@ .macro ALTERNATIVE oldinstr, newinstr, feature decl_orig(\oldinstr, repl_len(1) - orig_len) - .pushsection .altinstructions, "a", @progbits + .pushsection .altinstructions, "aw", @progbits altinstruction_entry .L\@_orig_s, .L\@_repl_s1, \feature, \ orig_len, repl_len(1), pad_len @@ -82,7 +82,7 @@ .macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2 decl_orig(\oldinstr, as_max(repl_len(1), repl_len(2)) - orig_len) - .pushsection .altinstructions, "a", @progbits + .pushsection .altinstructions, "aw", @progbits altinstruction_entry .L\@_orig_s, .L\@_repl_s1, \feature1, \ orig_len, repl_len(1), pad_len diff --git a/xen/arch/x86/include/asm/alternative.h b/xen/arch/x86/include/asm/alternative.h index 18109e3dc5..5ac36342aa 100644 --- a/xen/arch/x86/include/asm/alternative.h +++ b/xen/arch/x86/include/asm/alternative.h @@ -90,7 +90,7 @@ extern void alternative_instructions(void); /* alternative assembly primitive: */ #define ALTERNATIVE(oldinstr, newinstr, feature) \ OLDINSTR_1(oldinstr, 1) \ - ".pushsection .altinstructions, \"a\", @progbits\n" \ + ".pushsection .altinstructions, \"aw\", @progbits\n" \ ALTINSTR_ENTRY(feature, 1) \ ".section .discard, \"a\", @progbits\n" \ ".byte " alt_total_len "\n" /* total_len <= 255 */ \ @@ -101,7 +101,7 @@ extern void alternative_instructions(void); #define ALTERNATIVE_2(oldinstr, newinstr1, feature1, newinstr2, feature2) \ OLDINSTR_2(oldinstr, 1, 2) \ - ".pushsection .altinstructions, \"a\", @progbits\n" \ + ".pushsection .altinstructions, \"aw\", @progbits\n" \ ALTINSTR_ENTRY(feature1, 1) \ ALTINSTR_ENTRY(feature2, 2) \ ".section .discard, \"a\", @progbits\n" \