Message ID | 20250318173547.59475-7-roger.pau@citrix.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | x86: generate xen.efi image with no write-execute sections | expand |
On 18/03/2025 5:35 pm, Roger Pau Monne wrote: > As a result of relocations now being applied after the trampoline has been > copied into the low 1MB region, there's no need for a single .init section > that's writable, as .init.text is no longer modified. > > Remove the bodge and fallback to the layout used by ELF images with an > .init.text and .init.data section. > > The resulting PE sections are: > > Sections: > Idx Name Size VMA LMA File off Algn > 0 .text 0019072c ffff82d040200000 ffff82d040200000 00000440 2**4 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 1 .rodata 000884c8 ffff82d040400000 ffff82d040400000 00190b80 2**2 > CONTENTS, ALLOC, LOAD, DATA > 2 .buildid 00000035 ffff82d0404884c8 ffff82d0404884c8 00219060 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 3 .init.text 00052866 ffff82d040600000 ffff82d040600000 002190a0 2**2 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 4 .init.data 00059730 ffff82d040658000 ffff82d040658000 0026b920 2**2 > CONTENTS, ALLOC, LOAD, DATA > [...] > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
On 18.03.2025 18:35, Roger Pau Monne wrote: > As a result of relocations now being applied after the trampoline has been > copied into the low 1MB region, there's no need for a single .init section > that's writable, as .init.text is no longer modified. This builds on the confusion of the two different types of relocations that started in the previous patch. The change here may be okay once that other aspect was clarified; the description would need extending then, though, to cover both kinds or relocations. > Remove the bodge and fallback to the layout used by ELF images with an > .init.text and .init.data section. > > The resulting PE sections are: > > Sections: > Idx Name Size VMA LMA File off Algn > 0 .text 0019072c ffff82d040200000 ffff82d040200000 00000440 2**4 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 1 .rodata 000884c8 ffff82d040400000 ffff82d040400000 00190b80 2**2 > CONTENTS, ALLOC, LOAD, DATA > 2 .buildid 00000035 ffff82d0404884c8 ffff82d0404884c8 00219060 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 3 .init.text 00052866 ffff82d040600000 ffff82d040600000 002190a0 2**2 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 4 .init.data 00059730 ffff82d040658000 ffff82d040658000 0026b920 2**2 > CONTENTS, ALLOC, LOAD, DATA > [...] Just to mention it, also because Demi raised concern: This will leave us with yet more sections with long names. We may want to consider to e.g. use .init.t and .init.d instead. (Of course there's nothing we can really do about the various .debug_* sections, as those can only be identified by name. The only option I see there is to strip the binary.) Jan
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index d4dd6434c466..5ab37cefa25a 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -197,11 +197,7 @@ SECTIONS __2M_init_start = .; /* Start of 2M superpages, mapped RWX (boot only). */ . = ALIGN(PAGE_SIZE); /* Init code and data */ __init_begin = .; -#ifdef EFI /* EFI wants to merge all of .init.* ELF doesn't. */ - DECL_SECTION(.init) { -#else DECL_SECTION(.init.text) { -#endif _sinittext = .; *(.init.text) *(.text.startup) @@ -213,12 +209,8 @@ SECTIONS */ *(.altinstr_replacement) -#ifdef EFI /* EFI wants to merge all of .init.* ELF doesn't. */ - . = ALIGN(SMP_CACHE_BYTES); -#else } PHDR(text) DECL_SECTION(.init.data) { -#endif *(.init.bss.stack_aligned) . = ALIGN(POINTER_ALIGN);
As a result of relocations now being applied after the trampoline has been copied into the low 1MB region, there's no need for a single .init section that's writable, as .init.text is no longer modified. Remove the bodge and fallback to the layout used by ELF images with an .init.text and .init.data section. The resulting PE sections are: Sections: Idx Name Size VMA LMA File off Algn 0 .text 0019072c ffff82d040200000 ffff82d040200000 00000440 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .rodata 000884c8 ffff82d040400000 ffff82d040400000 00190b80 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .buildid 00000035 ffff82d0404884c8 ffff82d0404884c8 00219060 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .init.text 00052866 ffff82d040600000 ffff82d040600000 002190a0 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 4 .init.data 00059730 ffff82d040658000 ffff82d040658000 0026b920 2**2 CONTENTS, ALLOC, LOAD, DATA [...] Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- xen/arch/x86/xen.lds.S | 8 -------- 1 file changed, 8 deletions(-)