vulnerable-serenityos/Meta/generate-embedded-resource-assembly.sh
#!/usr/bin/env bash

set -e

if [ -z "$1" ]; then
    echo "ERROR: No output file specified"
    exit 1
fi

OUTPUT_FILE="$1"
shift

rm -f "${OUTPUT_FILE}"

while (( "$#" >= 3 )); do
    SECTION_NAME="$1"
    INPUT_FILE="$2"
    FILE_SIZE="$3"

    {
        printf '    .file "%s"\n' "${OUTPUT_FILE}"
        printf '    .data\n'
        printf '    .section %s, "a", @progbits\n' "${SECTION_NAME}"
        printf '    .align 4\n'
        printf '    .globl %s\n' "${SECTION_NAME}_start"
        printf '    .type %s, @object\n' "${SECTION_NAME}_start"
        printf '    .size %s, 4\n' "${SECTION_NAME}_start"
        printf '%s:\n' "${SECTION_NAME}_start"
        printf '    .incbin "%s"\n' "${INPUT_FILE}"
        printf '    .section serenity_embedded_resource_info, "a", @progbits\n'
        printf '    .align 4\n'
        printf '    .globl %s\n' "${SECTION_NAME}_size"
        printf '    .type %s, @object\n' "${SECTION_NAME}_size"
        printf '    .size %s, 4\n' "${SECTION_NAME}_size"
        printf '%s:\n' "${SECTION_NAME}_size"
        printf '    .long %s\n' "${FILE_SIZE}"
        printf '\n'
    } >> "${OUTPUT_FILE}"
    shift 3
done
