[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 0/5] Reuse 32 bit C code more safely
This RFC series attempt to: - use more C code, that is replace some assembly code with C; - avoid some code duplication between C and assembly; - prevent some issues having relocations in C code. The idea is extending the current C to binary code conversion done for 32 bit C code called from head.S making sure relocations are safe and allowing external symbols usage from C code. Note that, as an addition, scripts generating code check for no data to allow code and data separation. More details of the implementation are in commit message 2/5, which is the largest patch. Patch 1/5 is to prepare code and avoid data. Patch 3/5 is an example of code reuse between 32 and 64 bit. Patch 4/5 is also another example of code reuse but is more hacky and dirty due to not being possible include use some headers. Code boot successfully using: - BIOS boot; - EFI boot with Grub2 and ELF file; - direct EFI boot without Grub. Suggestions/opinions are welcome. Code is currently based on "staging" branch, currently commit 6471badeeec92db1cb8155066551f7509cd82efd. Frediano Ziglio (5): Avoid usage of global in reloc.c x86/boot: create a C bundle for 32 bit boot code and use it Reuse code to relocate trampoline Remove duplication preparing pages setup mapping for trampoline in setup_pagesXX .gitignore | 3 +- xen/arch/x86/boot/Makefile | 30 ++- .../x86/boot/{build32.lds => build32.lds.S} | 60 +++++- xen/arch/x86/boot/cmdline.c | 7 - xen/arch/x86/boot/head.S | 89 +-------- xen/arch/x86/boot/reloc-trampoline.c | 28 +++ xen/arch/x86/boot/reloc-trampoline64.c | 1 + xen/arch/x86/boot/reloc.c | 69 ++++--- xen/arch/x86/boot/setup-pages.c | 116 ++++++++++++ xen/arch/x86/boot/setup-pages64.c | 1 + xen/arch/x86/boot/x86_64.S | 2 +- xen/arch/x86/efi/efi-boot.h | 67 +------ xen/arch/x86/include/asm/page.h | 3 +- xen/tools/make_output | 177 ++++++++++++++++++ 14 files changed, 446 insertions(+), 207 deletions(-) rename xen/arch/x86/boot/{build32.lds => build32.lds.S} (52%) create mode 100644 xen/arch/x86/boot/reloc-trampoline.c create mode 120000 xen/arch/x86/boot/reloc-trampoline64.c create mode 100644 xen/arch/x86/boot/setup-pages.c create mode 120000 xen/arch/x86/boot/setup-pages64.c create mode 100755 xen/tools/make_output -- 2.46.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |