blob: 7b63e3cc0914fb17c8d308104b6cf30fd84ab927 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#!/bin/sh
set -e
test $# -ge 1
lowercase () { printf '%s\n' "$*" | tr '[A-Z]' '[a-z]'; }
symbols="$(lowercase "$1")"
shift 1
validate () {
if (( -$1 > 0x7FFF )) || (( +$1 > 0x7FFF )); then
printf 'Invalid enum value: %s = %x (beyond 16-bit signed integer)\n' $2 $1 >&2
return 1
else
return 0
fi
}
printf 'static const char *\n'
printf 'extract_symbol_%s(struct libsyscalls_symbol_printer_data *data, ' "$symbols"
printf 'unsigned long long int *valuep, char *fallback_out) /* 1 */\n'
printf '{\n'
printf ' const char *ret;\n'
printf ' switch ((signed long long int)*valuep) {\n'
while read name value; do
validate $value $name
printf ' case %i: ret = "%s"; break;\n' $value $name
done
printf ' default:\n'
if test $# -ge 1; then
for use; do
printf ' if ((ret = extract_symbol_%s(data, valuep, fallback_out))) return ret;\n' "$(lowercase "$use")"
done
fi
printf ' return NULL;\n'
printf ' }\n'
printf ' *valuep = 0;\n'
if test $# = 0; then
printf ' (void) data;\n'
printf ' (void) fallback_out;\n'
fi
printf ' return ret;\n'
printf '}\n'
|