package-notes/generate-rpm-note.sh
Zbigniew Jędrzejewski-Szmek 41c9a3140e Add --insert-after param to the note generation script
I thought this would allow insertion with ld.gold, but it turns out
that the resulting binary has something wrong with sections. So only the
change to the script is committed, because it makes it much easier to
experiment with various linkers.
2022-01-24 13:09:53 +01:00

65 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
readonly=1
insert_after=1
pad_string() {
for _ in $(seq "$1"); do
printf ' BYTE(0x00)'
done
}
write_string() {
text="$1"
prefix="$2"
label="$3"
total="$4"
printf "%s/* %s: '%s' */" "$prefix" "$label" "$text"
for i in $(seq ${#text}); do
if (( i % 4 == 1 )); then
printf '\n%s' "$prefix"
else
printf ' '
fi
printf 'BYTE(0x%02x)' "'${text:i-1:1}"
done
pad_string $(( total - ${#text} ))
printf '\n'
}
write_script() {
value_len=$(( (${#1} + 3) / 4 * 4 ))
[ -n "$readonly" ] && readonly_attr='(READONLY) '
printf 'SECTIONS\n{\n'
printf ' .note.package %s: ALIGN(4) {\n' "$readonly_attr"
printf ' BYTE(0x04) BYTE(0x00) BYTE(0x00) BYTE(0x00) /* Length of Owner including NUL */\n'
printf ' BYTE(0x%02x) BYTE(0x%02x) BYTE(0x00) BYTE(0x00) /* Length of Value including NUL */\n' \
$((value_len % 256)) $((value_len / 256))
printf ' BYTE(0x7e) BYTE(0x1a) BYTE(0xfe) BYTE(0xca) /* Note ID */\n'
printf " BYTE(0x46) BYTE(0x44) BYTE(0x4f) BYTE(0x00) /* Owner: 'FDO' */\n"
write_string "$1" ' ' 'Value' "$value_len"
printf ' }\n}\n'
[ -n "$insert_after" ] && printf 'INSERT AFTER .note.gnu.build-id;\n'
:
}
if [ "$1" == "--readonly=no" ]; then
shift
readonly=
fi
if [ "$1" == "--insert-after=no" ]; then
shift
insert_after=
fi
cpe="$(cat /usr/lib/system-release-cpe)"
json="$(printf '{"type":"rpm","name":"%s","version":"%s","architecture":"%s","osCpe":"%s"}' "$1" "$2" "$3" "$cpe")"
write_script "$json"