+Wed Feb 14 17:38:12 1996 J. T. Conklin <jtc@cygnus.com>
+
+ * configure.in (AC_HEADER_DIRENT): Add, so that we can figure out
+ where the directory functions are declared.
+ * configure: Regenerate
+
+ * emul_netbsd.c: Use the macros defined by configure to find the
+ appropriate directory functions.
+
+Fri Jan 19 00:32:27 1996 Andrew Cagney - aka Noid <cagney@highland.au.com>
+
+ * psim.c (psim_create): Re-order so that all options are set
+ before the CPU's are created. Was breaking mon_create();
+
+ * psim.c (psim_create): Tidy up conflicting configuration errors.
+
+ * debug.c: Add missing print-info entry to trace table.
+
+ * os_emul.c (os_emul_create): Fix `-e' option. Was looking under
+ wrong name.
+
+ * psim.c (psim_options): Fix `-r' option. Was entering under wrong
+ name.
+
+Thu Jan 18 20:33:48 1996 Andrew Cagney <cagney@highland.com.au>
+
+ * vm.c (om_unpack_bats): Fix checking of bat bits.
+
+ * emul_chirp.c (emul_chirp_create): Store address of OB in memory
+ in the os_emul_data structure.
+
+ * emul_bugapi.c (emul_bugapi_create): Store the address of the
+ bugapi code (in main memory) in the os_emul_data structure.
+
+Thu Jan 18 01:14:55 1996 Andrew Cagney <cagney@highland.com.au>
+
+ * vm.c (om_translate_effective_to_real): Fix trace output.
+
+Wed Jan 17 22:21:55 1996 Andrew Cagney <cagney@highland.com.au>
+
+ * device_table.c (generic_device_init_address): Create memory from
+ information obtained from `reg' property.
+ * device_table.c (vm_init_address_callback): Use information
+ obtained from properties.
+ * emul_netbsd.c (emul_netbsd_create): Update to create device and
+ property entries to match
+
Tue Jan 16 09:50:53 1996 Michael Meissner <meissner@tiktok.cygnus.com>
* idecode_expression.h (ALU_END): Add ITRACE of the result.
echo "Setting switch flags = $sim_switch" 6>&1
fi
else
- sim_switch="-s";
+ sim_switch="";
if test x"$silent" != x"yes"; then
echo "Setting switch flags = $sim_switch" 6>&1
fi
enableval="$enable_sim_inline"
sim_inline=""
case "$enableval" in
- no) sim_inline="-DDEFAULT_INLINE=0 -DINLINE=";;
+ no) sim_inline="-DDEFAULT_INLINE=0";;
0) sim_inline="-DDEFAULT_INLINE=0";;
- yes | 2) sim_inline="-DDEFAULT_INLINE=2";;
- 1) sim_inline="-DDEFAULT_INLINE=1";;
+ yes | 2) sim_inline="-DDEFAULT_INLINE=ALL_INLINE";;
+ 1) sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS";;
*) for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
new_flag=""
case "$x" in
*_INLINE=*) new_flag="-D$x";;
- *_INLINE) new_flag="-D$x=2";;
+ *_INLINE) new_flag="-D$x=ALL_INLINE";;
*=*) new_flag=`echo "$x" | sed -e "s/=/_INLINE=/" -e "s/^/-D/"`;;
- *) new_flag="-D$x""_INLINE=2";;
+ *) new_flag="-D$x""_INLINE=ALL_INLINE";;
esac
if test x"$sim_inline" = x""; then
sim_inline="$new_flag"
fi
else
if test x"$GCC" != ""; then
- sim_inline="-DDEFAULT_INLINE=1"
+ sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS"
if test x"$silent" != x"yes"; then
echo "Setting inline flags = $sim_inline" 6>&1
fi
if test "${enable_sim_monitor+set}" = set; then
enableval="$enable_sim_monitor"
case "${enableval}" in
- yes) sim_mon="-DWITH_MON='MONITOR_INSTRUCTION_ISSUE | MONITOR_LOAD_STORE_UNIT'";;
- no) sim_mon="-DWITH_MON=0";;
- instruction) sim_mon="-DWITH_MON=MONITOR_INSTRUCTION_ISSUE";;
- memory) sim_mon="-DWITH_MON=MONITOR_LOAD_STORE_UNIT";;
+ yes) sim_monitor="-DWITH_MON='MONITOR_INSTRUCTION_ISSUE | MONITOR_LOAD_STORE_UNIT'";;
+ no) sim_monitor="-DWITH_MON=0";;
+ instruction) sim_monitor="-DWITH_MON=MONITOR_INSTRUCTION_ISSUE";;
+ memory) sim_monitor="-DWITH_MON=MONITOR_LOAD_STORE_UNIT";;
*) { echo "configure: error: "Unknown value $enableval passed to --enable-sim-mon"" 1>&2; exit 1; }; sim_env="";;
esac
-if test x"$silent" != x"yes" && test x"$sim_mon" != x""; then
- echo "Setting monitor flags = $sim_mon" 6>&1
+if test x"$silent" != x"yes" && test x"$sim_monitor" != x""; then
+ echo "Setting monitor flags = $sim_monitor" 6>&1
fi
else
- sim_mon=""
+ sim_monitor=""
fi
# Check whether --enable-sim-model or --disable-sim-model was given.
else
CC_FOR_BUILD=gcc
fi
+
+
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 1396 "configure"
+#line 1398 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 1412 "configure"
+#line 1414 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 1441 "configure"
+#line 1443 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
-
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1491 "configure"
+#line 1492 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1505 "configure"
+#line 1506 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1538 "configure"
+#line 1539 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
fi
done
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+do
+ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
+echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1576 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+int main() { return 0; }
+int t() {
+DIR *dirp = 0;
+; return 0; }
+EOF
+if eval $ac_compile; then
+ rm -rf conftest*
+ eval "ac_cv_header_dirent_$ac_safe=yes"
+else
+ rm -rf conftest*
+ eval "ac_cv_header_dirent_$ac_safe=no"
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdedfghijklmnopqrstuvwxyz./\055' 'ABCDEDFGHIJKLMNOPQRSTUVWXYZ___'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_header_dirent=$ac_hdr; break
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+echo $ac_n "checking for -ldir""... $ac_c" 1>&6
+ac_lib_var=`echo dir | tr '.-/+' '___p'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldir $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1616 "configure"
+#include "confdefs.h"
+
+int main() { return 0; }
+int t() {
+opendir()
+; return 0; }
+EOF
+if eval $ac_link; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -ldir"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+echo $ac_n "checking for -lx""... $ac_c" 1>&6
+ac_lib_var=`echo x | tr '.-/+' '___p'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lx $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1651 "configure"
+#include "confdefs.h"
+
+int main() { return 0; }
+int t() {
+opendir()
+; return 0; }
+EOF
+if eval $ac_link; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lx"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
trap '' 1 2 15
cat > confcache <<\EOF
s%@sim_default_model@%$sim_default_model%g
s%@sim_model_issue@%$sim_model_issue%g
s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
+s%@WORDS_BIGENDIAN@%$WORDS_BIGENDIAN%g
s%@CPP@%$CPP%g
CEOF
AC_SUBST(WORDS_BIGENDIAN)
AC_CHECK_HEADERS(string.h strings.h stdlib.h time.h sys/types.h sys/time.h sys/times.h unistd.h sys/resource.h)
+AC_HEADER_DIRENT
AC_OUTPUT(Makefile,
[case x$CONFIG_HEADERS in xconfig.h:config.in) echo > stamp-h ;; esac])
/* This file is part of the program psim.
- Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
+ Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <sys/ioctl.h>
#include <sys/mount.h>
-#include <sys/dirent.h>
+
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
/* NetBSD's idea of what is needed to implement emulations */
struct _os_emul_data {
+ device *vm;
emul_syscall *syscalls;
};
const int arg0,
cpu *processor,
unsigned_word cia)
- /* just pass this onto the `vm' device */
{
+ /* just pass this onto the `vm' device */
psim *system = cpu_system(processor);
- device *vm = psim_device(system, "/vm");
if (WITH_TRACE && ppc_trace[trace_os_emul])
printf_filtered ("0x%lx", (long)cpu_registers(processor)->gpr[arg0]);
SYS(break);
- device_ioctl(vm,
+ device_ioctl(emul->vm,
system,
processor,
cia,
unsigned stack_size;
int elf_binary;
os_emul_data *bsd_data;
+ device *vm;
/* check that this emulation is really for us */
if (name != NULL && strcmp(name, "netbsd") != 0)
}
/* options */
- {
- device *options = device_tree_add_found(root, "/", "options");
- device_add_integer_property(options, "smp", 1); /* always */
- device_add_boolean_property(options, "little-endian?",
- !image->xvec->byteorder_big_p);
- device_add_string_property(options, "env",
- (WITH_ENVIRONMENT == USER_ENVIRONMENT
- ? "user" : "virtual"));
- device_add_boolean_property(options, "strict-alignment?",
- (WITH_ALIGNMENT == STRICT_ALIGNMENT
- || !image->xvec->byteorder_big_p));
- device_add_boolean_property(options, "floating-point?",
- WITH_FLOATING_POINT);
- device_add_string_property(options, "os-emul", "netbsd");
- }
+ emul_add_tree_options(root, image, "netbsd",
+ (WITH_ENVIRONMENT == USER_ENVIRONMENT
+ ? "user" : "virtual"));
/* virtual memory - handles growth of stack/heap */
- {
- device *vm_node = device_tree_add_found_uw_u(root, "/", "vm",
- top_of_stack - stack_size,
- stack_size);
- device *vm_map_binary = device_tree_add_found(vm_node, "", "map-binary");
- device_add_null_property(vm_map_binary,
- bfd_get_filename(image));
- }
+ vm = device_tree_add_parsed(root, "/openprom/vm@0x%lx",
+ (unsigned long)(top_of_stack - stack_size));
+ device_tree_add_parsed(vm, "./stack-base 0x%lx",
+ (unsigned long)(top_of_stack - stack_size));
+ device_tree_add_parsed(vm, "./nr-bytes 0x%x", stack_size);
+
+ device_tree_add_parsed(root, "/openprom/vm/map-binary/file-name %s",
+ bfd_get_filename(image));
/* finish the init */
- {
- device *init = device_tree_add_found(root, "/", "init");
- {
- device *init_register = device_tree_add_found(init, "", "register");
- device_add_integer_property(init_register,
- "pc",
- bfd_get_start_address(image));
- device_add_integer_property(init_register,
- "sp",
- top_of_stack);
- device_add_integer_property(init_register,
- "msr",
- (image->xvec->byteorder_big_p
- ? 0
- : msr_little_endian_mode));
- }
- {
- device *init_stack = device_tree_add_found(init, "", "stack");
- device_add_null_property(init_stack,
- (elf_binary
- ? "elf"
- : "xcoff"));
- }
- }
+ device_tree_add_parsed(root, "/openprom/init/register/pc 0x%lx",
+ (unsigned long)bfd_get_start_address(image));
+ device_tree_add_parsed(root, "/openprom/init/register/sp 0x%lx",
+ (unsigned long)top_of_stack);
+ device_tree_add_parsed(root, "/openprom/init/register/msr 0x%x",
+ (device_find_boolean_property(root, "/options/little-endian?")
+ ? msr_little_endian_mode
+ : 0));
+ device_tree_add_parsed(root, "/openprom/init/stack/stack-type %s",
+ (elf_binary ? "elf" : "xcoff"));
/* finally our emulation data */
bsd_data = ZALLOC(os_emul_data);
+ bsd_data->vm = vm;
bsd_data->syscalls = &emul_netbsd_syscalls;
return bsd_data;
}