99d8e87993
We don't have alternative nltvals.def files, so always symlinking the targ-vals.def file to it doesn't gain us anything. It does make the build more complicated though and a pain to convert to something newer (like automake). Drop the symlinking entirely. In the future, we'll want to explode this file anyways into the respective arch dirs so things can be selected dynamically at runtime, so it's not like we'll be bringing this back.
128 lines
3.0 KiB
C
128 lines
3.0 KiB
C
/* Generate targ-vals.h and targ-map.c. */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
struct tdefs {
|
|
char *symbol;
|
|
int value;
|
|
};
|
|
|
|
static struct tdefs sys_tdefs[] = {
|
|
#define sys_defs
|
|
#include "nltvals.def"
|
|
#undef sys_defs
|
|
{ 0, 0 }
|
|
};
|
|
|
|
static struct tdefs errno_tdefs[] = {
|
|
#define errno_defs
|
|
#include "nltvals.def"
|
|
#undef errno_defs
|
|
{ 0, 0 }
|
|
};
|
|
|
|
static struct tdefs open_tdefs[] = {
|
|
#define open_defs
|
|
#include "nltvals.def"
|
|
#undef open_defs
|
|
{ 0, 0 }
|
|
};
|
|
|
|
static void
|
|
gen_targ_vals_h (void)
|
|
{
|
|
struct tdefs *t;
|
|
|
|
printf ("/* Target header values needed by the simulator and gdb. */\n");
|
|
printf ("/* This file is machine generated by gentmap.c. */\n\n");
|
|
|
|
printf ("#ifndef TARG_VALS_H\n");
|
|
printf ("#define TARG_VALS_H\n\n");
|
|
|
|
printf ("/* syscall values */\n");
|
|
for (t = &sys_tdefs[0]; t->symbol; ++t)
|
|
printf ("#define TARGET_%s %d\n", t->symbol, t->value);
|
|
printf ("\n");
|
|
|
|
printf ("/* errno values */\n");
|
|
for (t = &errno_tdefs[0]; t->symbol; ++t)
|
|
printf ("#define TARGET_%s %d\n", t->symbol, t->value);
|
|
printf ("\n");
|
|
|
|
printf ("/* open flag values */\n");
|
|
for (t = &open_tdefs[0]; t->symbol; ++t)
|
|
printf ("#define TARGET_%s 0x%x\n", t->symbol, t->value);
|
|
printf ("\n");
|
|
|
|
printf ("#endif /* TARG_VALS_H */\n");
|
|
}
|
|
|
|
static void
|
|
gen_targ_map_c (void)
|
|
{
|
|
struct tdefs *t;
|
|
|
|
printf ("/* Target value mapping utilities needed by the simulator and gdb. */\n");
|
|
printf ("/* This file is machine generated by gentmap.c. */\n\n");
|
|
|
|
printf ("#include \"config.h\"\n");
|
|
printf ("#include <errno.h>\n");
|
|
printf ("#include <fcntl.h>\n");
|
|
printf ("#include \"ansidecl.h\"\n");
|
|
printf ("#include \"gdb/callback.h\"\n");
|
|
printf ("#include \"targ-vals.h\"\n");
|
|
printf ("\n");
|
|
|
|
printf ("/* syscall mapping table */\n");
|
|
printf ("CB_TARGET_DEFS_MAP cb_init_syscall_map[] = {\n");
|
|
for (t = &sys_tdefs[0]; t->symbol; ++t)
|
|
{
|
|
printf ("#ifdef CB_%s\n", t->symbol);
|
|
/* Skip the "SYS_" prefix for the name. */
|
|
printf (" { \"%s\", CB_%s, TARGET_%s },\n", t->symbol + 4, t->symbol, t->symbol);
|
|
printf ("#endif\n");
|
|
}
|
|
printf (" { 0, -1, -1 }\n");
|
|
printf ("};\n\n");
|
|
|
|
printf ("/* errno mapping table */\n");
|
|
printf ("CB_TARGET_DEFS_MAP cb_init_errno_map[] = {\n");
|
|
for (t = &errno_tdefs[0]; t->symbol; ++t)
|
|
{
|
|
printf ("#ifdef %s\n", t->symbol);
|
|
printf (" { \"%s\", %s, TARGET_%s },\n", t->symbol, t->symbol, t->symbol);
|
|
printf ("#endif\n");
|
|
}
|
|
printf (" { 0, 0, 0 }\n");
|
|
printf ("};\n\n");
|
|
|
|
printf ("/* open flags mapping table */\n");
|
|
printf ("CB_TARGET_DEFS_MAP cb_init_open_map[] = {\n");
|
|
for (t = &open_tdefs[0]; t->symbol; ++t)
|
|
{
|
|
printf ("#ifdef %s\n", t->symbol);
|
|
printf (" { \"%s\", %s, TARGET_%s },\n", t->symbol, t->symbol, t->symbol);
|
|
printf ("#endif\n");
|
|
}
|
|
printf (" { 0, -1, -1 }\n");
|
|
printf ("};\n\n");
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
if (argc != 2)
|
|
abort ();
|
|
|
|
if (strcmp (argv[1], "-h") == 0)
|
|
gen_targ_vals_h ();
|
|
else if (strcmp (argv[1], "-c") == 0)
|
|
gen_targ_map_c ();
|
|
else
|
|
abort ();
|
|
|
|
exit (0);
|
|
}
|