ChangeLog
-/*/gentmap
/*/run
/*/hw-config.h
-/*/targ-*
/*/version.c
target-newlib-errno.o \
target-newlib-open.o \
target-newlib-signal.o \
+ target-newlib-syscall.o \
version.o
COMMON_OBJS = $(COMMON_OBJS_NAMES:%=../common/common_libcommon_a-%)
LIB_OBJS = modules.o syscall.o $(COMMON_OBJS) $(SIM_OBJS)
-# TODO: Migrate everyone to target-newlib-syscall.o.
-ifeq ($(NL_TARGET),)
-COMMON_OBJS_NAMES += target-newlib-syscall.o
-else
-LIB_OBJS += targ-map.o
-endif
-
COMPILE_FOR_BUILD = $(CC_FOR_BUILD) $(BUILD_CFLAGS)
LINK_FOR_BUILD = $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(LDFLAGS_FOR_BUILD) -o $@
$(ECHO_CCLD) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o run$(EXEEXT) \
$(SIM_RUN_OBJS) libsim.a $(EXTRA_LIBS)
-# FIXME: Ideally, callback.o and friends live in a library outside of
-# both the gdb and simulator source trees (e.g. devo/remote. Not
-# devo/libremote because this directory would contain more than just
-# a library).
-
-gentmap.o: Makefile $(srccom)/gentmap.c $(srccom)/nltvals.def
- $(ECHO_CC) $(COMPILE_FOR_BUILD) -o $@ -c $(srccom)/gentmap.c $(NL_TARGET)
-
-gentmap: gentmap.o
- $(ECHO_CC) $(LINK_FOR_BUILD) $<
-
-targ-vals.h targ-map.c: stamp-tvals
-stamp-tvals: gentmap
- $(ECHO_STAMP) targ-vals.h
- $(SILENCE) ./gentmap -h >tmp-tvals.h
- $(SILENCE) $(SHELL) $(srcroot)/move-if-change tmp-tvals.h targ-vals.h
-ifneq ($(NL_TARGET),)
- $(ECHO_STAMP) targ-tmap.c
- $(SILENCE) ./gentmap -c >tmp-tmap.c
- $(SILENCE) $(SHELL) $(srcroot)/move-if-change tmp-tmap.c targ-map.c
-endif
- $(SILENCE) touch $@
-
#
# Rules for building sim-* components. Triggered by listing the corresponding
# .o file in the list of simulator targets.
generated_files = \
$(SIM_EXTRA_DEPS) \
hw-config.h \
- modules.c \
- targ-vals.h
-ifneq ($(NL_TARGET),)
-generated_files += targ-map.c
-endif
+ modules.c
# Ensure that generated files are created early. Use order-only
# dependencies if available. They require GNU make 3.80 or newer,
run$(EXEEXT) libsim.a \
hw-config.h stamp-hw \
modules.c stamp-modules \
- gentmap targ-map.c targ-vals.h stamp-tvals \
tmp-mloop.hin tmp-mloop.h tmp-mloop.cin tmp-mloop.c
distclean maintainer-clean realclean: clean $(SIM_EXTRA_DISTCLEAN)
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""Helper to generate nltvals.def.
+"""Helper to generate target-newlib-* files.
-nltvals.def is a file that describes various newlib/libgloss target values used
+target-newlib-* are files that describe various newlib/libgloss values used
by the host/target interface. This needs to be rerun whenever the newlib source
changes. Developers manually run it.
return ret
-def gentvals(output_dir: Path, output: TextIO,
+def gentvals(output_dir: Path,
cpp: str, srctype: str, srcdir: Path,
headers: Iterable[str],
pattern: str,
syms = extract_syms(cpp, srcdir, headers, pattern, filter)
- # If we have a map file, use it directly.
target_map = output_dir / f'target-newlib-{srctype}.c'
- if target_map.exists():
- old_lines = target_map.read_text().splitlines()
- start_i = end_i = None
- for i, line in enumerate(old_lines):
- if START_MARKER in line:
- start_i = i
- if END_MARKER in line:
- end_i = i
- assert start_i and end_i
- new_lines = old_lines[0:start_i + 1]
- new_lines.extend(
- f'#ifdef {sym}\n'
- f' {{ "{sym}", {sym}, {val} }},\n'
- f'#endif' for sym, val in sorted(syms.items()))
- new_lines.extend(old_lines[end_i:])
- target_map.write_text('\n'.join(new_lines) + '\n')
- return
-
- # Fallback to classic nltvals.def.
- if target is not None:
- print(f'#ifdef NL_TARGET_{target}', file=output)
- print(f'#ifdef {srctype}_defs', file=output)
-
- print('\n'.join(f'/* from {x} */' for x in headers), file=output)
-
- if target is None:
- print(f'/* begin {srctype} target macros */', file=output)
- else:
- print(f'/* begin {target} {srctype} target macros */', file=output)
-
- for sym, val in sorted(syms.items()):
- print(f' {{ "{sym}", {val} }},', file=output)
-
- print(f'#undef {srctype}_defs', file=output)
- if target is None:
- print(f'/* end {srctype} target macros */', file=output)
- else:
- print(f'/* end {target} {srctype} target macros */', file=output)
- print('#endif', file=output)
- print('#endif', file=output)
+ assert target_map.exists(), f'{target_map}: Missing skeleton'
+ old_lines = target_map.read_text().splitlines()
+ start_i = end_i = None
+ for i, line in enumerate(old_lines):
+ if START_MARKER in line:
+ start_i = i
+ if END_MARKER in line:
+ end_i = i
+ assert start_i and end_i
+ new_lines = old_lines[0:start_i + 1]
+ new_lines.extend(
+ f'#ifdef {sym}\n'
+ f' {{ "{sym}", {sym}, {val} }},\n'
+ f'#endif' for sym, val in sorted(syms.items()))
+ new_lines.extend(old_lines[end_i:])
+ target_map.write_text('\n'.join(new_lines) + '\n')
-def gen_common(output_dir: Path, output: TextIO, newlib: Path, cpp: str):
+def gen_common(output_dir: Path, newlib: Path, cpp: str):
"""Generate the common C library constants.
No arch should override these.
"""
- gentvals(output_dir, output, cpp, 'errno', newlib / 'newlib/libc/include',
+ gentvals(output_dir, cpp, 'errno', newlib / 'newlib/libc/include',
('errno.h', 'sys/errno.h'), 'E[A-Z0-9]*')
- gentvals(output_dir, output, cpp, 'signal', newlib / 'newlib/libc/include',
+ gentvals(output_dir, cpp, 'signal', newlib / 'newlib/libc/include',
('signal.h', 'sys/signal.h'), r'SIG[A-Z0-9]*', filter=r'SIGSTKSZ')
- gentvals(output_dir, output, cpp, 'open', newlib / 'newlib/libc/include',
+ gentvals(output_dir, cpp, 'open', newlib / 'newlib/libc/include',
('fcntl.h', 'sys/fcntl.h', 'sys/_default_fcntl.h'), r'O_[A-Z0-9]*')
target_map_h.write_text('\n'.join(new_lines_h) + '\n')
-def gen_targets(output_dir: Path, output: TextIO, newlib: Path, cpp: str):
+def gen_targets(output_dir: Path, newlib: Path, cpp: str):
"""Generate the target-specific lists."""
gen_target_syscall(output_dir, newlib, cpp)
-def gen(output_dir: Path, output: TextIO, newlib: Path, cpp: str):
+def gen(output_dir: Path, newlib: Path, cpp: str):
"""Generate all the things!"""
- print(FILE_HEADER, file=output)
- gen_common(output_dir, output, newlib, cpp)
- gen_targets(output_dir, output, newlib, cpp)
+ gen_common(output_dir, newlib, cpp)
+ gen_targets(output_dir, newlib, cpp)
def get_parser() -> argparse.ArgumentParser:
"""The main entry point for scripts."""
opts = parse_args(argv)
- output = (opts.output / 'nltvals.def').open('w', encoding='utf-8')
-
- gen(opts.output, output, opts.newlib, opts.cpp)
+ gen(opts.output, opts.newlib, opts.cpp)
return 0
+++ /dev/null
-/* 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 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 ("#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 \"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");
-}
-
-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);
-}
+++ /dev/null
-/* Newlib/libgloss macro values needed by remote target support. */
-/* This file is machine generated by gennltvals.py. */
-#ifdef NL_TARGET_cr16
-#ifdef sys_defs
-/* from syscall.h */
-/* begin cr16 sys target macros */
- { "SYS_ARG", 24 },
- { "SYS_chdir", 12 },
- { "SYS_chmod", 15 },
- { "SYS_chown", 16 },
- { "SYS_close", 0x402 },
- { "SYS_create", 8 },
- { "SYS_execv", 11 },
- { "SYS_execve", 59 },
- { "SYS_exit", 0x410 },
- { "SYS_fork", 2 },
- { "SYS_fstat", 22 },
- { "SYS_getpid", 20 },
- { "SYS_isatty", 21 },
- { "SYS_kill", 60 },
- { "SYS_link", 9 },
- { "SYS_lseek", 0x405 },
- { "SYS_mknod", 14 },
- { "SYS_open", 0x401 },
- { "SYS_pipe", 42 },
- { "SYS_read", 0x403 },
- { "SYS_rename", 0x406 },
- { "SYS_stat", 38 },
- { "SYS_time", 0x300 },
- { "SYS_unlink", 0x407 },
- { "SYS_utime", 201 },
- { "SYS_wait", 202 },
- { "SYS_wait4", 7 },
- { "SYS_write", 0x404 },
-#undef sys_defs
-/* end cr16 sys target macros */
-#endif
-#endif
-#ifdef NL_TARGET_d10v
-#ifdef sys_defs
-/* from syscall.h */
-/* begin d10v sys target macros */
- { "SYS_ARG", 24 },
- { "SYS_chdir", 12 },
- { "SYS_chmod", 15 },
- { "SYS_chown", 16 },
- { "SYS_close", 6 },
- { "SYS_creat", 8 },
- { "SYS_execv", 11 },
- { "SYS_execve", 59 },
- { "SYS_exit", 1 },
- { "SYS_fork", 2 },
- { "SYS_fstat", 22 },
- { "SYS_getpid", 20 },
- { "SYS_isatty", 21 },
- { "SYS_kill", 60 },
- { "SYS_link", 9 },
- { "SYS_lseek", 19 },
- { "SYS_mknod", 14 },
- { "SYS_open", 5 },
- { "SYS_pipe", 42 },
- { "SYS_read", 3 },
- { "SYS_stat", 38 },
- { "SYS_time", 23 },
- { "SYS_unlink", 10 },
- { "SYS_utime", 201 },
- { "SYS_wait", 202 },
- { "SYS_wait4", 7 },
- { "SYS_write", 4 },
-#undef sys_defs
-/* end d10v sys target macros */
-#endif
-#endif
-#ifdef NL_TARGET_mcore
-#ifdef sys_defs
-/* from syscall.h */
-/* begin mcore sys target macros */
- { "SYS_access", 33 },
- { "SYS_close", 6 },
- { "SYS_creat", 8 },
- { "SYS_link", 9 },
- { "SYS_lseek", 19 },
- { "SYS_open", 5 },
- { "SYS_read", 3 },
- { "SYS_time", 13 },
- { "SYS_times", 43 },
- { "SYS_unlink", 10 },
- { "SYS_write", 4 },
-#undef sys_defs
-/* end mcore sys target macros */
-#endif
-#endif
-#ifdef NL_TARGET_riscv
-#ifdef sys_defs
-/* from syscall.h */
-/* begin riscv sys target macros */
- { "SYS_access", 1033 },
- { "SYS_brk", 214 },
- { "SYS_chdir", 49 },
- { "SYS_clock_gettime64", 403 },
- { "SYS_close", 57 },
- { "SYS_dup", 23 },
- { "SYS_exit", 93 },
- { "SYS_exit_group", 94 },
- { "SYS_faccessat", 48 },
- { "SYS_fcntl", 25 },
- { "SYS_fstat", 80 },
- { "SYS_fstatat", 79 },
- { "SYS_getcwd", 17 },
- { "SYS_getdents", 61 },
- { "SYS_getegid", 177 },
- { "SYS_geteuid", 175 },
- { "SYS_getgid", 176 },
- { "SYS_getmainvars", 2011 },
- { "SYS_getpid", 172 },
- { "SYS_gettimeofday", 169 },
- { "SYS_getuid", 174 },
- { "SYS_kill", 129 },
- { "SYS_link", 1025 },
- { "SYS_lseek", 62 },
- { "SYS_lstat", 1039 },
- { "SYS_mkdir", 1030 },
- { "SYS_mmap", 222 },
- { "SYS_mremap", 216 },
- { "SYS_munmap", 215 },
- { "SYS_open", 1024 },
- { "SYS_openat", 56 },
- { "SYS_pread", 67 },
- { "SYS_pwrite", 68 },
- { "SYS_read", 63 },
- { "SYS_rt_sigaction", 134 },
- { "SYS_stat", 1038 },
- { "SYS_time", 1062 },
- { "SYS_times", 153 },
- { "SYS_uname", 160 },
- { "SYS_unlink", 1026 },
- { "SYS_write", 64 },
- { "SYS_writev", 66 },
-#undef sys_defs
-/* end riscv sys target macros */
-#endif
-#endif
-#ifdef NL_TARGET_sh
-#ifdef sys_defs
-/* from syscall.h */
-/* begin sh sys target macros */
- { "SYS_ARG", 24 },
- { "SYS_argc", 172 },
- { "SYS_argn", 174 },
- { "SYS_argnlen", 173 },
- { "SYS_chdir", 12 },
- { "SYS_chmod", 15 },
- { "SYS_chown", 16 },
- { "SYS_close", 6 },
- { "SYS_creat", 8 },
- { "SYS_execv", 11 },
- { "SYS_execve", 59 },
- { "SYS_exit", 1 },
- { "SYS_fork", 2 },
- { "SYS_fstat", 22 },
- { "SYS_ftruncate", 130 },
- { "SYS_getpid", 20 },
- { "SYS_isatty", 21 },
- { "SYS_link", 9 },
- { "SYS_lseek", 19 },
- { "SYS_mknod", 14 },
- { "SYS_open", 5 },
- { "SYS_pipe", 42 },
- { "SYS_read", 3 },
- { "SYS_stat", 38 },
- { "SYS_time", 23 },
- { "SYS_truncate", 129 },
- { "SYS_unlink", 10 },
- { "SYS_utime", 201 },
- { "SYS_wait", 202 },
- { "SYS_wait4", 7 },
- { "SYS_write", 4 },
-#undef sys_defs
-/* end sh sys target macros */
-#endif
-#endif
-#ifdef NL_TARGET_v850
-#ifdef sys_defs
-/* from syscall.h */
-/* begin v850 sys target macros */
- { "SYS_ARG", 24 },
- { "SYS_chdir", 12 },
- { "SYS_chmod", 15 },
- { "SYS_chown", 16 },
- { "SYS_close", 6 },
- { "SYS_creat", 8 },
- { "SYS_execv", 11 },
- { "SYS_execve", 59 },
- { "SYS_exit", 1 },
- { "SYS_fork", 2 },
- { "SYS_fstat", 22 },
- { "SYS_getpid", 20 },
- { "SYS_gettimeofday", 116 },
- { "SYS_isatty", 21 },
- { "SYS_link", 9 },
- { "SYS_lseek", 19 },
- { "SYS_mknod", 14 },
- { "SYS_open", 5 },
- { "SYS_pipe", 42 },
- { "SYS_read", 3 },
- { "SYS_rename", 134 },
- { "SYS_stat", 38 },
- { "SYS_time", 23 },
- { "SYS_times", 43 },
- { "SYS_unlink", 10 },
- { "SYS_utime", 201 },
- { "SYS_wait", 202 },
- { "SYS_wait4", 7 },
- { "SYS_write", 4 },
-#undef sys_defs
-/* end v850 sys target macros */
-#endif
-#endif
-#ifdef sys_defs
-/* from syscall.h */
-/* begin sys target macros */
- { "SYS_argc", 22 },
- { "SYS_argn", 24 },
- { "SYS_argnlen", 23 },
- { "SYS_argv", 13 },
- { "SYS_argvlen", 12 },
- { "SYS_chdir", 14 },
- { "SYS_chmod", 16 },
- { "SYS_close", 3 },
- { "SYS_exit", 1 },
- { "SYS_fstat", 10 },
- { "SYS_getpid", 8 },
- { "SYS_gettimeofday", 19 },
- { "SYS_kill", 9 },
- { "SYS_link", 21 },
- { "SYS_lseek", 6 },
- { "SYS_open", 2 },
- { "SYS_read", 4 },
- { "SYS_reconfig", 25 },
- { "SYS_stat", 15 },
- { "SYS_time", 18 },
- { "SYS_times", 20 },
- { "SYS_unlink", 7 },
- { "SYS_utime", 17 },
- { "SYS_write", 5 },
-#undef sys_defs
-/* end sys target macros */
-#endif
SIM_MULTI_IGEN_CONFIGS = @sim_multi_igen_configs@
$(BUILT_SRC_FROM_MULTI): tmp-multi
-tmp-multi: tmp-mach-multi tmp-itable-multi tmp-run-multi targ-vals.h
+tmp-multi: tmp-mach-multi tmp-itable-multi tmp-run-multi
tmp-mach-multi: $(IGEN_INSN) $(IGEN_DC) $(IGEN) $(IGEN_INCLUDE)
for t in $(SIM_MULTI_IGEN_CONFIGS); do \
p=`echo $${t} | sed -e 's/:.*//'` ; \