diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-06-20 22:55:44 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-06-22 19:38:09 -0400 |
commit | cc40b4f2a3c66db1219e851c837c9e5481124aab (patch) | |
tree | e2f52273d8d885c995ad7ceef8ece22d3d9861a5 /sim | |
parent | c45cffdbe1a1b816fd9a88f88bb83bd7078a1e4e (diff) | |
download | binutils-cc40b4f2a3c66db1219e851c837c9e5481124aab.zip binutils-cc40b4f2a3c66db1219e851c837c9e5481124aab.tar.gz binutils-cc40b4f2a3c66db1219e851c837c9e5481124aab.tar.bz2 |
sim: callback: generate signal map
We've been generating the syscall/errno/open maps, but not the signal
map, even though we've been including them in the source constants.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/common/ChangeLog | 9 | ||||
-rw-r--r-- | sim/common/callback.c | 3 | ||||
-rw-r--r-- | sim/common/gentmap.c | 24 |
3 files changed, 36 insertions, 0 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 5545771..5ce1a66 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,5 +1,14 @@ 2021-06-22 Mike Frysinger <vapier@gentoo.org> + * callback.c: Include signal.h. + (cb_init_signal_map): New prototype. + (os_init): Assign signal_map. + * gentmap.c (signal_tdefs): New array. + (gen_targ_vals_h): Output signal_tdefs. + (gen_targ_map_c): Likewise. + +2021-06-22 Mike Frysinger <vapier@gentoo.org> + * callback.c (os_getpid): New function. (default_callback): Add os_getpid. * syscall.c (cb_syscall): Change getpid to cb->getpid. diff --git a/sim/common/callback.c b/sim/common/callback.c index 071e7b1..aca0112 100644 --- a/sim/common/callback.c +++ b/sim/common/callback.c @@ -32,6 +32,7 @@ #include <limits.h> #include <errno.h> #include <fcntl.h> +#include <signal.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> @@ -56,6 +57,7 @@ void sim_cb_eprintf (host_callback *, const char *, ...); extern CB_TARGET_DEFS_MAP cb_init_syscall_map[]; extern CB_TARGET_DEFS_MAP cb_init_errno_map[]; +extern CB_TARGET_DEFS_MAP cb_init_signal_map[]; extern CB_TARGET_DEFS_MAP cb_init_open_map[]; /* Make sure the FD provided is ok. If not, return non-zero @@ -676,6 +678,7 @@ os_init (host_callback *p) p->syscall_map = cb_init_syscall_map; p->errno_map = cb_init_errno_map; + p->signal_map = cb_init_signal_map; p->open_map = cb_init_open_map; return 1; diff --git a/sim/common/gentmap.c b/sim/common/gentmap.c index 254ec3f..f1f1bc2 100644 --- a/sim/common/gentmap.c +++ b/sim/common/gentmap.c @@ -23,6 +23,13 @@ static struct tdefs errno_tdefs[] = { { 0, 0 } }; +static struct tdefs signal_tdefs[] = { +#define signal_defs +#include "nltvals.def" +#undef signal_defs + { 0, 0 } +}; + static struct tdefs open_tdefs[] = { #define open_defs #include "nltvals.def" @@ -51,6 +58,11 @@ gen_targ_vals_h (void) printf ("#define TARGET_%s %d\n", t->symbol, t->value); printf ("\n"); + printf ("/* signal values */\n"); + for (t = &signal_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); @@ -70,6 +82,7 @@ gen_targ_map_c (void) printf ("#include \"defs.h\"\n"); printf ("#include <errno.h>\n"); printf ("#include <fcntl.h>\n"); + printf ("#include <signal.h>\n"); printf ("#include \"ansidecl.h\"\n"); printf ("#include \"sim/callback.h\"\n"); printf ("#include \"targ-vals.h\"\n"); @@ -98,6 +111,17 @@ gen_targ_map_c (void) printf (" { 0, 0, 0 }\n"); printf ("};\n\n"); + printf ("/* signals mapping table */\n"); + printf ("CB_TARGET_DEFS_MAP cb_init_signal_map[] = {\n"); + for (t = &signal_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"); + printf ("/* open flags mapping table */\n"); printf ("CB_TARGET_DEFS_MAP cb_init_open_map[] = {\n"); for (t = &open_tdefs[0]; t->symbol; ++t) |