serenity/Meta/generate-embedded-resource-assembly.sh
William Marlow 91b65ec328 Build: Expose symbols SECTION_start and SECTION_size for embedded resources.
Resources embedded by the embed_resource() function will now also expose
a SECTION_start and SECTION_size symbol so the embedded resource can be found
by an application without having to parse its own ELF image which is not
something applications can currently do from userspace.
2020-12-29 23:38:48 +01:00

41 lines
1.1 KiB
Bash
Executable file

#!/bin/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