[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/5] x86: Put trampoline in .init.data section
On 27.08.2024 16:56, Frediano Ziglio wrote: > On Mon, Aug 19, 2024 at 4:50 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: >> >> On 19.08.2024 17:30, Frediano Ziglio wrote: >>> On Mon, Aug 19, 2024 at 3:30 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: >>>> On 19.08.2024 16:16, Frediano Ziglio wrote: >>>>> Could I ouput the trampoline in a code section ("ax" instead of "aw") >>>>> and then later move it into .init.data section assuring .init.data is >>>>> writeable but not executable? >>>> >>>> Could you go into a little more detail on what you mean here? At the >>>> first glance my reaction is "yes, sure, why not", but much depends on >>>> what exactly is meant. >>> >>> For instance you could put the trampoline into a >>> .section .init.trampoline, "awx", @progbits >>> section (having the "x" will be disassembled by objdump -d head.o). >>> Then in xen/arch/x86/xen.lds.S in the .init.data section having something >>> like >>> ... >>> DECL_SECTION(.init.data) { >>> *(.init.bss.stack_aligned) >>> (.init.trampoline) >>> ... >>> this will put the trampoline in .init.data section of the final >>> object. At this point the .init.data containing code will have execute >>> permission that you would have to fix using objcopy command. >>> The final trampoline will be in a data section not executable so to >>> use objdump you will need the -D option, but not disassembling head.o. >>> In theory we could keep the temporary object file before the objcopy >>> adjustment to avoid the -D but I don't think it would save a lot of >>> burdain. >> >> Part of my "want to be able to disassemble" also applies to the final >> binaries. Since iirc one can disassemble individual sections, an option >> may be to have .trampoline be its own section even in the final (PE) >> binary? >> >> In any event, especially as long as there is no really good option, I >> think I'd like to have input from Andrew and/or Roger as well. > > what about having an extra copy in .init.data. That is, compile the > trampoline in .init.text having it readable/executable in the final > PE, at the beginning copying into .init.data and handle the changes > there then when we can allocate the final memory allocate it and copy > the temporary writable copy into final lower memory area. I dislike such duplication, and I'd fear it may cause more confusion than to actually help. Plus you'd need to sort the symbol name clashes. > On a related but not too much topic, I noted there's no .init.bss. > Maybe we could allocate .init.bss (and .init.bss.stack_aligned or > whatever .init.bss.*) at the end of normal .bss and "cut" it while we > remove .init.text and .init.data. How would anything (in C) use .init.bss? __attribute__((section(...))) doesn't make @nobits sections (last I checked), and .init.bss that's @progbits is not really different from .init.data. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |