Unverified Commit 4a0180f4 authored by Fernando Rodrigues's avatar Fernando Rodrigues
Browse files

nixos/xen: dehardcode the .pad section from the UKI builder



Upstream, intentionally or not, no longer appends the EFI image
with a .pad section for us to hook the rest of the UKI to. This
simply dehardcodes .pad from the awk script, instead using the
very last section in the binary. (Currently .reloc)

Co-authored-by: default avatarYaroslav Bolyukin <iam@lach.pw>
Signed-off-by: default avatarFernando Rodrigues <alpha@sigmasquadron.net>
parent e3c735cc
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
# This script is called by ./xen-dom0.nix to create the Xen boot entries.
# shellcheck shell=bash

export LC_ALL=C

# Handle input argument and exit if the flag is invalid. See virtualisation.xen.efi.bootBuilderVerbosity below.
[[ $# -ne 1 ]] && echo -e "\e[1;31merror:\e[0m xenBootBuilder must be called with exactly one verbosity argument. See the \e[1;34mvirtualisation.xen.efi.bootBuilderVerbosity\e[0m option." && exit 1
case "$1" in
@@ -89,7 +91,8 @@ EOF
        # https://xenbits.xenproject.org/docs/unstable/misc/efi.html.
        [ "$1" = "debug" ] && echo -e "\e[1;34mxenBootBuilder:\e[0m making Xen UKI..."
        xenEfi=$(jq -re '."org.xenproject.bootspec.v1".xen' "$bootspecFile")
        padding=$(objdump --header --section=".pad" "$xenEfi" | awk '/\.pad/ { printf("0x%016x\n", strtonum("0x"$3) + strtonum("0x"$4))};')
        finalSection=$(objdump --header --wide "$xenEfi" | tail -n +6 | sort --key="4,4" | tail -n 1 | grep -Eo '\.[a-z]*')
        padding=$(objdump --header --section="$finalSection" "$xenEfi" | awk -v section="$finalSection" '$0 ~ section { printf("0x%016x\n", and(strtonum("0x"$3) + strtonum("0x"$4) + 0xfff, compl(0xfff)))};')
        [ "$1" = "debug" ] && echo "               - padding: $padding"
        objcopy \
            --add-section .config="$tmpCfg" \