🔒 Repository is read-only – file editing is disabled.

PaganLinux/.tmp-grub-link-test.sh main

34 linii Raw ← Powrót
12345678910111213141516171819202122232425262728293031323334
#!/bin/bash
# Eksperyment: która flaga linkowania GRUB-a daje kernel.exec .text = 0x9000?
# Bierze DOKŁADNĄ komendę linkowania z logu budowy i relinkuje warianty.
set -u
cd /tmp/gb/grub-core || exit 1

CMD=$(grep -n "kernel_exec-startup.o" /tmp/gb-make.log | tail -1 | sed 's/^[0-9]*://')
echo "długość komendy: ${#CMD} znaków"
[ -n "$CMD" ] || { echo "nie znalazłem komendy linkowania"; exit 1; }

wariant() {
    local _name="$1" _sed="$2"
    local _cmd
    _cmd=$(printf '%s' "$CMD" | sed "$_sed")
    # podmiana pliku wyjściowego, żeby nie nadpisać bazowego
    _cmd=$(printf '%s' "$_cmd" | sed "s/-o kernel\.exec/-o kernel.$_name.exec/")
    if eval "$_cmd" > /tmp/link-$_name.log 2>&1; then
        local _t
        _t=$(readelf -SW kernel.$_name.exec 2>/dev/null \
             | sed -n 's/^ *\[ *[0-9]*\] *\.text  *[A-Z]* *\([0-9a-fA-F]*\).*/\1/p' | head -1)
        printf '  %-28s .text = 0x%s\n' "$_name" "${_t:-?}"
    else
        printf '  %-28s LINK BŁĄD (patrz /tmp/link-%s.log)\n' "$_name" "$_name"
        tail -2 /tmp/link-$_name.log | sed 's/^/      /'
    fi
}

echo "=== warianty ==="
wariant baseline            's/^gcc //'
wariant bez_noseparate      's/ -Wl,-z,noseparate-code//'
wariant bez_N               's/ -Wl,-N//g'
wariant Ttext_zamiast_imgbase 's/ -Wl,--image-base,0x9000/ -Wl,-Ttext,0x9000/'
wariant bez_noseparate_Ttext 's/ -Wl,-z,noseparate-code//; s/ -Wl,--image-base,0x9000/ -Wl,-Ttext,0x9000/'
wariant bez_buildid         's/ -Wl,--build-id=none//'