mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-12 12:16:04 +08:00
6df01ab8ab
The defs.h header will take care of including the various config.h headers. For now, it's just config.h, but we'll add more when we integrate gnulib in. This header should be used instead of config.h, and should be the first include in every .c file. We won't rely on the old behavior where we expected files to include the port's sim-main.h which then includes the common sim-basics.h which then includes config.h. We have a ton of code that includes things before sim-main.h, and it sometimes needs to be that way. Creating a dedicated header avoids the ordering mess and implicit inclusion that shows up otherwise.
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 \"defs.h\"\n");
|
|
printf ("#include <errno.h>\n");
|
|
printf ("#include <fcntl.h>\n");
|
|
printf ("#include \"ansidecl.h\"\n");
|
|
printf ("#include \"sim/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);
|
|
}
|