blob: cad1e6cfd0577cc81943cf367a31faf59fce3025 [file] [log] [blame] [edit]
#!/bin/bash
#
# Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Auto-generates the kernel_symbols table for accessing kernel symbols.
if [ $# -ne 2 ]; then
echo "Usage: $0 objdump-command kernel.elf" 1>&2
exit 1
fi
cat - <<EOT
/* Auto-generated by $0. Do not edit manually. */
/* Include Kconfig variables. */
#include <autoconf.h>
#include <sel4test/gen_config.h>
#include <string.h>
static struct kernel_symbol {
char *symbol;
void *addr;
} kernel_symbols[] = {
EOT
# Objdump the symbol table and format it nicely for C.
"$1" --syms "$2" \
| grep --color=none "^[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f] " \
| sed 's/\([0-9a-f]*\) .* \(.*\)/ { .symbol = "\2", .addr = (void*)0xf\1 },/g'
cat - <<EOT
{ .symbol = NULL, .addr = (void*)NULL }, /* Terminate array. */
};
void * resolve_kernel_symbol(char *symbol) {
for (int i = 0; kernel_symbols[i].symbol != NULL ; ++i) {
if (!strcmp(kernel_symbols[i].symbol, symbol)) {
return kernel_symbols[i].addr;
}
}
return NULL;
}
EOT