diff -Naur gdb-6.8.orig/sim/common/aclocal.m4 gdb-6.8/sim/common/aclocal.m4
--- gdb-6.8.orig/sim/common/aclocal.m4 2006-06-13 10:06:48.000000000 +0200
+++ gdb-6.8/sim/common/aclocal.m4 2008-09-12 08:37:44.000000000 +0200
@@ -18,7 +18,7 @@
#
# SIM_AC_OUTPUT
-AC_DEFUN(SIM_AC_COMMON,
+AC_DEFUN([SIM_AC_COMMON],
[
# autoconf.info says this should be called right after AC_INIT.
AC_CONFIG_HEADER(ifelse([$1],,config.h,[$1]):config.in)
@@ -245,7 +245,7 @@
dnl supported.
dnl ??? Until there is demonstrable value in doing something more complicated,
dnl let's not.
-AC_DEFUN(SIM_AC_OPTION_ENVIRONMENT,
+AC_DEFUN([SIM_AC_OPTION_ENVIRONMENT],
[
AC_ARG_ENABLE(sim-environment,
[ --enable-sim-environment=environment Specify mixed, user, virtual or operating environment.],
@@ -269,7 +269,7 @@
dnl Without this option all possible alignment restrictions are accommodated.
dnl arg[1] is hardwired target alignment
dnl arg[2] is default target alignment
-AC_DEFUN(SIM_AC_OPTION_ALIGNMENT,
+AC_DEFUN([SIM_AC_OPTION_ALIGNMENT],
wire_alignment="[$1]"
default_alignment="[$2]"
[
@@ -318,7 +318,7 @@
dnl Conditionally compile in assertion statements.
-AC_DEFUN(SIM_AC_OPTION_ASSERT,
+AC_DEFUN([SIM_AC_OPTION_ASSERT],
[
AC_ARG_ENABLE(sim-assert,
[ --enable-sim-assert Specify whether to perform random assertions.],
@@ -342,7 +342,7 @@
dnl arg[3] is the number of bits in an address
dnl arg[4] is the number of bits in an OpenFirmware cell.
dnl FIXME: this information should be obtained from bfd/archure
-AC_DEFUN(SIM_AC_OPTION_BITSIZE,
+AC_DEFUN([SIM_AC_OPTION_BITSIZE],
wire_word_bitsize="[$1]"
wire_word_msb="[$2]"
wire_address_bitsize="[$3]"
@@ -408,7 +408,7 @@
dnl that support both big and little endian targets.
dnl arg[1] is hardwired target endianness.
dnl arg[2] is default target endianness.
-AC_DEFUN(SIM_AC_OPTION_ENDIAN,
+AC_DEFUN([SIM_AC_OPTION_ENDIAN],
[
wire_endian="[$1]"
default_endian="[$2]"
@@ -458,7 +458,7 @@
dnl --enable-sim-hostendian is for users of the simulator when
dnl they find that AC_C_BIGENDIAN does not function correctly
dnl (for instance in a canadian cross)
-AC_DEFUN(SIM_AC_OPTION_HOSTENDIAN,
+AC_DEFUN([SIM_AC_OPTION_HOSTENDIAN],
[
AC_ARG_ENABLE(sim-hostendian,
[ --enable-sim-hostendian=end Specify host byte endian orientation.],
@@ -490,7 +490,7 @@
dnl And optionally the bitsize of the floating point register.
dnl arg[1] specifies the presence (or absence) of floating point hardware
dnl arg[2] specifies the number of bits in a floating point register
-AC_DEFUN(SIM_AC_OPTION_FLOAT,
+AC_DEFUN([SIM_AC_OPTION_FLOAT],
[
default_sim_float="[$1]"
default_sim_float_bitsize="[$2]"
@@ -519,7 +519,7 @@
dnl The argument is the default cache size if none is specified.
-AC_DEFUN(SIM_AC_OPTION_SCACHE,
+AC_DEFUN([SIM_AC_OPTION_SCACHE],
[
default_sim_scache="ifelse([$1],,0,[$1])"
AC_ARG_ENABLE(sim-scache,
@@ -539,7 +539,7 @@
dnl The argument is the default model if none is specified.
-AC_DEFUN(SIM_AC_OPTION_DEFAULT_MODEL,
+AC_DEFUN([SIM_AC_OPTION_DEFAULT_MODEL],
[
default_sim_default_model="ifelse([$1],,0,[$1])"
AC_ARG_ENABLE(sim-default-model,
@@ -559,7 +559,7 @@
dnl arg[1] Enable sim-hw by default? ("yes" or "no")
dnl arg[2] is a space separated list of devices that override the defaults
dnl arg[3] is a space separated list of extra target specific devices.
-AC_DEFUN(SIM_AC_OPTION_HARDWARE,
+AC_DEFUN([SIM_AC_OPTION_HARDWARE],
[
if test x"[$1]" = x"yes"; then
sim_hw_p=yes
@@ -621,7 +621,7 @@
dnl performance by inlining functions.
dnl Guarantee that unconfigured simulators do not do any inlining
sim_inline="-DDEFAULT_INLINE=0"
-AC_DEFUN(SIM_AC_OPTION_INLINE,
+AC_DEFUN([SIM_AC_OPTION_INLINE],
[
default_sim_inline="ifelse([$1],,,-DDEFAULT_INLINE=[$1])"
AC_ARG_ENABLE(sim-inline,
@@ -666,7 +666,7 @@
AC_SUBST(sim_inline)
-AC_DEFUN(SIM_AC_OPTION_PACKAGES,
+AC_DEFUN([SIM_AC_OPTION_PACKAGES],
[
AC_ARG_ENABLE(sim-packages,
[ --enable-sim-packages=list Specify the packages to be included in the build.],
@@ -692,7 +692,7 @@
AC_SUBST(sim_packages)
-AC_DEFUN(SIM_AC_OPTION_REGPARM,
+AC_DEFUN([SIM_AC_OPTION_REGPARM],
[
AC_ARG_ENABLE(sim-regparm,
[ --enable-sim-regparm=nr-parm Pass parameters in registers instead of on the stack - x86/GCC specific.],
@@ -709,7 +709,7 @@
AC_SUBST(sim_regparm)
-AC_DEFUN(SIM_AC_OPTION_RESERVED_BITS,
+AC_DEFUN([SIM_AC_OPTION_RESERVED_BITS],
[
default_sim_reserved_bits="ifelse([$1],,1,[$1])"
AC_ARG_ENABLE(sim-reserved-bits,
@@ -726,7 +726,7 @@
AC_SUBST(sim_reserved_bits)
-AC_DEFUN(SIM_AC_OPTION_SMP,
+AC_DEFUN([SIM_AC_OPTION_SMP],
[
default_sim_smp="ifelse([$1],,5,[$1])"
AC_ARG_ENABLE(sim-smp,
@@ -746,7 +746,7 @@
AC_SUBST(sim_smp)
-AC_DEFUN(SIM_AC_OPTION_STDCALL,
+AC_DEFUN([SIM_AC_OPTION_STDCALL],
[
AC_ARG_ENABLE(sim-stdcall,
[ --enable-sim-stdcall=type Use an alternative function call/return mechanism - x86/GCC specific.],
@@ -763,7 +763,7 @@
AC_SUBST(sim_stdcall)
-AC_DEFUN(SIM_AC_OPTION_XOR_ENDIAN,
+AC_DEFUN([SIM_AC_OPTION_XOR_ENDIAN],
[
default_sim_xor_endian="ifelse([$1],,8,[$1])"
AC_ARG_ENABLE(sim-xor-endian,
@@ -782,7 +782,7 @@
dnl --enable-build-warnings is for developers of the simulator.
dnl it enables extra GCC specific warnings.
-AC_DEFUN(SIM_AC_OPTION_WARNINGS,
+AC_DEFUN([SIM_AC_OPTION_WARNINGS],
[
# NOTE: Don't add -Wall or -Wunused, they both include
# -Wunused-parameter which reports bogus warnings.
@@ -866,7 +866,7 @@
dnl one afterwards. The two pieces of the common fragment are inserted into
dnl the target's fragment at the appropriate points.
-AC_DEFUN(SIM_AC_OUTPUT,
+AC_DEFUN([SIM_AC_OUTPUT],
[
AC_LINK_FILES($sim_link_files, $sim_link_links)
dnl Make @cgen_breaks@ non-null only if the sim uses CGEN.
@@ -895,7 +895,7 @@
sinclude(../../config/gettext-sister.m4)
dnl --enable-cgen-maint support
-AC_DEFUN(SIM_AC_OPTION_CGEN_MAINT,
+AC_DEFUN([SIM_AC_OPTION_CGEN_MAINT],
[
cgen_maint=no
dnl Default is to use one in build tree.
diff -Naur gdb-6.8.orig/sim/erc32/configure gdb-6.8/sim/erc32/configure
--- gdb-6.8.orig/sim/erc32/configure 2006-12-20 23:35:51.000000000 +0100
+++ gdb-6.8/sim/erc32/configure 2008-09-12 08:37:44.000000000 +0200
@@ -309,7 +309,7 @@
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS sim_environment sim_alignment sim_assert sim_bitsize sim_endian sim_hostendian sim_float sim_scache sim_default_model sim_hw_cflags sim_hw_objs sim_hw sim_inline sim_packages sim_regparm sim_reserved_bits sim_smp sim_stdcall sim_xor_endian WARN_CFLAGS WERROR_CFLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CC_FOR_BUILD HDEFINES AR RANLIB ac_ct_RANLIB USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT CPP EGREP MAINT sim_bswap sim_cflags sim_debug sim_stdio sim_trace sim_profile TERMCAP READLINE cgen_breaks LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS sim_environment sim_alignment sim_assert sim_bitsize sim_endian sim_hostendian sim_float sim_scache sim_default_model sim_hw_cflags sim_hw_objs sim_hw sim_inline sim_packages sim_regparm sim_reserved_bits sim_smp sim_stdcall sim_xor_endian WARN_CFLAGS WERROR_CFLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CC_FOR_BUILD HDEFINES AR RANLIB ac_ct_RANLIB USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT CPP EGREP MAINT sim_bswap sim_cflags sim_debug sim_stdio sim_trace sim_profile READLINE READLINE_DEPS READLINE_CFLAGS cgen_breaks LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -858,6 +858,11 @@
--enable-sim-trace=opts Enable tracing flags
--enable-sim-profile=opts Enable profiling flags
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-system-readline use installed readline library
+
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
@@ -4493,57 +4498,36 @@
done
-# In the Cygwin environment, we need some additional flags.
-echo "$as_me:$LINENO: checking for cygwin" >&5
-echo $ECHO_N "checking for cygwin... $ECHO_C" >&6
-if test "${sim_cv_os_cygwin+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __CYGWIN__
-lose
-#endif
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "lose" >/dev/null 2>&1; then
- sim_cv_os_cygwin=yes
-else
- sim_cv_os_cygwin=no
-fi
-rm -f conftest*
+# Check whether --with-system-readline or --without-system-readline was given.
+if test "${with_system_readline+set}" = set; then
+ withval="$with_system_readline"
-fi
-echo "$as_me:$LINENO: result: $sim_cv_os_cygwin" >&5
-echo "${ECHO_T}$sim_cv_os_cygwin" >&6
+fi;
-if test x$sim_cv_os_cygwin = xyes; then
- TERMCAP='`if test -r ../../libtermcap/libtermcap.a; then echo ../../libtermcap/libtermcap.a; else echo -ltermcap; fi` -luser32'
-else
- echo "$as_me:$LINENO: checking for main in -ltermcap" >&5
-echo $ECHO_N "checking for main in -ltermcap... $ECHO_C" >&6
-if test "${ac_cv_lib_termcap_main+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltermcap $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+if test "$with_system_readline" = yes; then
+ echo "$as_me:$LINENO: checking for readline" >&5
+echo $ECHO_N "checking for readline... $ECHO_C" >&6
+ save_LIBS="$LIBS"
+ LIBS="-lreadline $save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char add_history ();
int
main ()
{
-main ();
+add_history ();
;
return 0;
}
@@ -4570,41 +4554,13 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_termcap_main=yes
+ READLINE=-lreadline
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_termcap_main=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_termcap_main" >&5
-echo "${ECHO_T}$ac_cv_lib_termcap_main" >&6
-if test $ac_cv_lib_termcap_main = yes; then
- TERMCAP=-ltermcap
-else
- TERMCAP=""
-fi
-
-fi
-
-
-# We prefer the in-tree readline. Top-level dependencies make sure
-# src/readline (if it's there) is configured before src/sim.
-if test -r ../../readline/Makefile; then
- READLINE=../../readline/libreadline.a
-else
- echo "$as_me:$LINENO: checking for readline in -lreadline" >&5
-echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6
-if test "${ac_cv_lib_readline_readline+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lreadline $TERMCAP $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+ LIBS="-lreadline -lncurses $save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -4617,11 +4573,11 @@
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char readline ();
+char add_history ();
int
main ()
{
-readline ();
+add_history ();
;
return 0;
}
@@ -4648,28 +4604,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_readline_readline=yes
+ READLINE="-lreadline -lncurses"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_readline_readline=no
+{ { echo "$as_me:$LINENO: error: unable to detect readline" >&5
+echo "$as_me: error: unable to detect readline" >&2;}
+ { (exit 1); exit 1; }; }
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5
-echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6
-if test $ac_cv_lib_readline_readline = yes; then
- READLINE=-lreadline
-else
- { { echo "$as_me:$LINENO: error: the required \"readline\" library is missing" >&5
-echo "$as_me: error: the required \"readline\" library is missing" >&2;}
- { (exit 1); exit 1; }; }
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$save_LIBS"
+ echo "$as_me:$LINENO: result: $READLINE" >&5
+echo "${ECHO_T}$READLINE" >&6
+ READLINE_DEPS=
+ READLINE_CFLAGS=
+else
+ READLINE='$(READLINE_DIR)/libreadline.a'
+ READLINE_DEPS='$(READLINE)'
+ READLINE_CFLAGS='-I$(READLINE_SRC)/..'
fi
-fi
+
+
ac_sources="$sim_link_files"
@@ -5389,8 +5351,9 @@
s,@sim_stdio@,$sim_stdio,;t t
s,@sim_trace@,$sim_trace,;t t
s,@sim_profile@,$sim_profile,;t t
-s,@TERMCAP@,$TERMCAP,;t t
s,@READLINE@,$READLINE,;t t
+s,@READLINE_DEPS@,$READLINE_DEPS,;t t
+s,@READLINE_CFLAGS@,$READLINE_CFLAGS,;t t
s,@cgen_breaks@,$cgen_breaks,;t t
s,@LIBOBJS@,$LIBOBJS,;t t
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
diff -Naur gdb-6.8.orig/sim/erc32/configure.ac gdb-6.8/sim/erc32/configure.ac
--- gdb-6.8.orig/sim/erc32/configure.ac 2006-12-20 23:35:51.000000000 +0100
+++ gdb-6.8/sim/erc32/configure.ac 2008-09-12 08:37:44.000000000 +0200
@@ -11,27 +11,32 @@
AC_CHECK_HEADERS(stdlib.h)
-# In the Cygwin environment, we need some additional flags.
-AC_CACHE_CHECK([for cygwin], sim_cv_os_cygwin,
-[AC_EGREP_CPP(lose, [
-#ifdef __CYGWIN__
-lose
-#endif],[sim_cv_os_cygwin=yes],[sim_cv_os_cygwin=no])])
+AC_ARG_WITH([system-readline],
+ [AS_HELP_STRING([--with-system-readline],
+ [use installed readline library])])
-if test x$sim_cv_os_cygwin = xyes; then
- TERMCAP='`if test -r ../../libtermcap/libtermcap.a; then echo ../../libtermcap/libtermcap.a; else echo -ltermcap; fi` -luser32'
+if test "$with_system_readline" = yes; then
+ AC_MSG_CHECKING([for readline])
+ save_LIBS="$LIBS"
+ LIBS="-lreadline $save_LIBS"
+ AC_LINK_IFELSE([AC_LANG_CALL([],
+ [add_history])], [READLINE=-lreadline],
+ [ LIBS="-lreadline -lncurses $save_LIBS"
+ AC_LINK_IFELSE([AC_LANG_CALL([],
+ [add_history])], [READLINE="-lreadline -lncurses"],
+ [AC_MSG_ERROR([unable to detect readline])])
+ ])
+ LIBS="$save_LIBS"
+ AC_MSG_RESULT($READLINE)
+ READLINE_DEPS=
+ READLINE_CFLAGS=
else
- AC_CHECK_LIB(termcap, main, TERMCAP=-ltermcap, TERMCAP="")
-fi
-AC_SUBST(TERMCAP)
-
-# We prefer the in-tree readline. Top-level dependencies make sure
-# src/readline (if it's there) is configured before src/sim.
-if test -r ../../readline/Makefile; then
- READLINE=../../readline/libreadline.a
-else
- AC_CHECK_LIB(readline, readline, READLINE=-lreadline,
- AC_ERROR([the required "readline" library is missing]), $TERMCAP)
+ READLINE='$(READLINE_DIR)/libreadline.a'
+ READLINE_DEPS='$(READLINE)'
+ READLINE_CFLAGS='-I$(READLINE_SRC)/..'
fi
AC_SUBST(READLINE)
+AC_SUBST(READLINE_DEPS)
+AC_SUBST(READLINE_CFLAGS)
+
SIM_AC_OUTPUT
diff -Naur gdb-6.8.orig/sim/erc32/erc32.c gdb-6.8/sim/erc32/erc32.c
--- gdb-6.8.orig/sim/erc32/erc32.c 1999-04-16 03:35:00.000000000 +0200
+++ gdb-6.8/sim/erc32/erc32.c 2008-09-12 08:37:44.000000000 +0200
@@ -24,6 +24,7 @@
#include <sys/types.h>
#include <stdio.h>
+#include <string.h>
#include <termios.h>
#include <sys/fcntl.h>
#include <sys/file.h>
@@ -413,7 +414,7 @@
if (rom8) mec_memcfg &= ~0x20000;
else mec_memcfg |= 0x20000;
- mem_ramsz = (256 * 1024) << ((mec_memcfg >> 10) & 7);
+ mem_ramsz = (512 * 1024) << ((mec_memcfg >> 10) & 7);
mem_romsz = (128 * 1024) << ((mec_memcfg >> 18) & 7);
if (sparclite_board) {
@@ -1659,7 +1660,7 @@
errmec = 0;
return(1);
}
-#endif;
+#endif
if ((addr >= mem_ramstart) && (addr < (mem_ramstart + mem_ramsz))) {
fetch_bytes (asi, &ramb[addr & mem_rammask], data, sz);
@@ -1736,7 +1737,7 @@
errmec = 0;
return(1);
}
-#endif;
+#endif
if ((addr >= mem_ramstart) && (addr < (mem_ramstart + mem_ramsz))) {
if (mem_accprot) {
diff -Naur gdb-6.8.orig/sim/erc32/exec.c gdb-6.8/sim/erc32/exec.c
--- gdb-6.8.orig/sim/erc32/exec.c 2005-03-07 12:09:05.000000000 +0100
+++ gdb-6.8/sim/erc32/exec.c 2008-09-12 08:37:44.000000000 +0200
@@ -1713,7 +1713,7 @@
sregs->fdp[rs2 | 1] = sregs->fs[rs2 & ~1];
sregs->fdp[rs2 & ~1] = sregs->fs[rs2 | 1];
default:
- ;
+ break;
}
#endif
@@ -1886,7 +1886,7 @@
sregs->fs[rd & ~1] = sregs->fdp[rd | 1];
sregs->fs[rd | 1] = sregs->fdp[rd & ~1];
default:
- ;
+ break;
}
#endif
if (sregs->fpstate == FP_EXC_PE) {
diff -Naur gdb-6.8.orig/sim/erc32/Makefile.in gdb-6.8/sim/erc32/Makefile.in
--- gdb-6.8.orig/sim/erc32/Makefile.in 2008-01-01 23:53:24.000000000 +0100
+++ gdb-6.8/sim/erc32/Makefile.in 2008-09-12 08:37:44.000000000 +0200
@@ -18,12 +18,12 @@
## COMMON_PRE_CONFIG_FRAG
-TERMCAP_LIB = @TERMCAP@
+# TERMCAP_LIB = -lncurses
READLINE_LIB = @READLINE@
SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o
SIM_EXTRA_LIBS = $(READLINE_LIB) $(TERMCAP_LIB) -lm
-SIM_EXTRA_ALL = sis
+SIM_EXTRA_ALL = sis$(EXEEXT)
SIM_EXTRA_INSTALL = install-sis
SIM_EXTRA_CLEAN = clean-sis
@@ -37,8 +37,8 @@
# `sis' doesn't need interf.o.
SIS_OFILES = exec.o erc32.o func.o help.o float.o
-sis: sis.o $(SIS_OFILES) $(COMMON_OBJS) $(LIBDEPS)
- $(CC) $(ALL_CFLAGS) -o sis \
+sis$(EXEEXT): sis.o $(SIS_OFILES) $(COMMON_OBJS) $(LIBDEPS)
+ $(CC) $(ALL_CFLAGS) -o sis$(EXEEXT) \
sis.o $(SIS_OFILES) $(COMMON_OBJS) $(EXTRA_LIBS)
# FIXME: This computes the build host's endianness, doesn't it?
@@ -51,11 +51,11 @@
# Copy the files into directories where they will be run.
install-sis: installdirs
- n=`echo sis | sed '$(program_transform_name)'`; \
- $(INSTALL_PROGRAM) sis$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)
+ n=`echo sis$(EXEEXT) | sed '$(program_transform_name)'`; \
+ $(INSTALL_PROGRAM) sis$(EXEEXT) $(DESTDIR)$(bindir)/$$n
clean-sis:
- rm -f sis end end.h
+ rm -f sis$(EXEEXT) end end.h
configure:
@echo "Rebuilding configure..."
diff -Naur gdb-6.8.orig/sim/ppc/configure.ac gdb-6.8/sim/ppc/configure.ac
--- gdb-6.8.orig/sim/ppc/configure.ac 2008-03-14 22:35:27.000000000 +0100
+++ gdb-6.8/sim/ppc/configure.ac 2008-09-12 08:37:39.000000000 +0200
@@ -209,10 +209,105 @@
esac
])dnl
+AC_CACHE_CHECK([if union semun defined],
+ ac_cv_HAS_UNION_SEMUN,
+ [AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>],
+[union semun arg ;],
+[ac_cv_has_union_semun="yes"],
+[ac_cv_has_union_semun="no"])
+AC_MSG_RESULT($ac_cv_has_union_semun)
+])
+
+
+if test "$ac_cv_has_union_semun" = "yes"; then
+ AC_CACHE_CHECK(whether System V semaphores are supported,
+ ac_cv_sysv_sem,
+ [
+ AC_TRY_RUN(
+ [
+ #include <sys/types.h>
+ #include <sys/ipc.h>
+ #include <sys/sem.h>
+ int main () {
+ union semun arg ;
+
+ int id=semget(IPC_PRIVATE,1,IPC_CREAT|0400);
+ if (id == -1)
+ exit(1);
+ arg.val = 0; /* avoid implicit type cast to union */
+ if (semctl(id, 0, IPC_RMID, arg) == -1)
+ exit(1);
+ exit(0);
+ }
+ ],
+ ac_cv_sysv_sem="yes", ac_cv_sysv_sem="no", :)
+ ])
+else # semun is not defined
+ AC_CACHE_CHECK(whether System V semaphores are supported,
+ ac_cv_sysv_sem,
+ [
+ AC_TRY_RUN(
+ [
+ #include <sys/types.h>
+ #include <sys/ipc.h>
+ #include <sys/sem.h>
+ union semun {
+ int val;
+ struct semid_ds *buf;
+ ushort *array;
+ };
+ int main () {
+ union semun arg ;
+
+ int id=semget(IPC_PRIVATE,1,IPC_CREAT|0400);
+ if (id == -1)
+ exit(1);
+ arg.val = 0; /* avoid implicit type cast to union */
+ if (semctl(id, 0, IPC_RMID, arg) == -1)
+ exit(1);
+ exit(0);
+ }
+ ],
+ ac_cv_sysv_sem="yes", ac_cv_sysv_sem="no", :)
+ ])
+fi
+
+AC_CACHE_CHECK(whether System V shared memory is supported,
+ac_cv_sysv_shm,
+[
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+int main () {
+ int id=shmget(IPC_PRIVATE,1,IPC_CREAT|0400);
+ if (id == -1)
+ exit(1);
+ if (shmctl(id, IPC_RMID, 0) == -1)
+ exit(1);
+ exit(0);
+}
+],
+ac_cv_sysv_shm="yes", ac_cv_sysv_shm="no", :)
+])
+
+if test x"$ac_cv_sysv_shm" = x"yes" -a x"$ac_cv_sysv_sem" = x"yes" ; then
+ sim_sysv_ipc_hw=",sem,shm";
+else
+ sim_sysv_ipc_hw="";
+fi
+
+if test x"$ac_cv_has_union_semun" = x"yes" -a x"$ac_cv_sysv_sem" = x"yes" ; then
+ sim_hwflags="-DHAS_UNION_SEMUN";
+fi
+
AC_ARG_ENABLE(sim-hardware,
[ --enable-sim-hardware=list Specify the hardware to be included in the build.],
-[hardware="cpu,memory,nvram,iobus,htab,disk,trace,register,vm,init,core,pal,com,eeprom,opic,glue,phb,ide"
+[hardware="cpu,memory,nvram,iobus,htab,disk,trace,register,vm,init,core,pal,com,eeprom,opic,glue,phb,ide${sim_sysv_ipc_hw}"
case "${enableval}" in
yes) ;;
no) AC_MSG_ERROR("List of hardware must be specified for --enable-sim-hardware"); hardware="";;
@@ -224,14 +319,13 @@
sim_hw_obj=`echo $sim_hw_src | sed -e 's/\.c/.o/g'`
if test x"$silent" != x"yes" && test x"$hardware" != x""; then
echo "Setting hardware to $sim_hw_src, $sim_hw_obj"
-fi],[hardware="cpu,memory,nvram,iobus,htab,disk,trace,register,vm,init,core,pal,com,eeprom,opic,glue,phb,ide"
+fi],[hardware="cpu,memory,nvram,iobus,htab,disk,trace,register,vm,init,core,pal,com,eeprom,opic,glue,phb,ide${sim_sysv_ipc_hw}"
sim_hw_src=`echo $hardware | sed -e 's/,/.c hw_/g' -e 's/^/hw_/' -e s'/$/.c/'`
sim_hw_obj=`echo $sim_hw_src | sed -e 's/\.c/.o/g'`
if test x"$silent" != x"yes"; then
echo "Setting hardware to $sim_hw_src, $sim_hw_obj"
fi])dnl
-
AC_ARG_ENABLE(sim-hostbitsize,
[ --enable-sim-hostbitsize=32|64 Specify host bitsize (32 or 64).],
[case "${enableval}" in
diff -Naur gdb-6.8.orig/sim/ppc/debug.c gdb-6.8/sim/ppc/debug.c
--- gdb-6.8.orig/sim/ppc/debug.c 1999-04-16 03:35:08.000000000 +0200
+++ gdb-6.8/sim/ppc/debug.c 2008-09-12 08:37:39.000000000 +0200
@@ -70,6 +70,8 @@
{ trace_pass_device, "pass-device" },
{ trace_phb_device, "phb-device" },
{ trace_register_device, "register-device", "Device initializing registers" },
+ { trace_sem_device, "sem-device" },
+ { trace_shm_device, "shm-device" },
{ trace_stack_device, "stack-device" },
{ trace_vm_device, "vm-device" },
/* packages */
diff -Naur gdb-6.8.orig/sim/ppc/debug.h gdb-6.8/sim/ppc/debug.h
--- gdb-6.8.orig/sim/ppc/debug.h 1999-04-16 03:35:08.000000000 +0200
+++ gdb-6.8/sim/ppc/debug.h 2008-09-12 08:37:39.000000000 +0200
@@ -51,6 +51,8 @@
trace_pal_device,
trace_pass_device,
trace_phb_device,
+ trace_sem_device,
+ trace_shm_device,
trace_stack_device,
trace_register_device,
trace_vm_device,
diff -Naur gdb-6.8.orig/sim/ppc/hw_sem.c gdb-6.8/sim/ppc/hw_sem.c
--- gdb-6.8.orig/sim/ppc/hw_sem.c 1970-01-01 01:00:00.000000000 +0100
+++ gdb-6.8/sim/ppc/hw_sem.c 2008-09-12 08:37:39.000000000 +0200
@@ -0,0 +1,301 @@
+/* This file is part of the program psim.
+
+ Copyright (C) 1997,2008, Joel Sherrill <joel@OARcorp.com>
+
+ 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
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ */
+
+
+#ifndef _HW_SEM_C_
+#define _HW_SEM_C_
+
+#include "device_table.h"
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
+#include <sys/ipc.h>
+#include <sys/sem.h>
+
+#include <errno.h>
+
+/* DEVICE
+
+
+ sem - provide access to a unix semaphore
+
+
+ DESCRIPTION
+
+
+ This device implements an interface to a unix semaphore.
+
+
+ PROPERTIES
+
+
+ reg = <address> <size> (required)
+
+ Determine where the memory lives in the parents address space.
+
+ key = <integer> (required)
+
+ This is the key of the unix semaphore.
+
+ EXAMPLES
+
+
+ Enable tracing of the sem:
+
+ | bash$ psim -t sem-device \
+
+
+ Configure a UNIX semaphore using key 0x12345678 mapped into psim
+ address space at 0xfff00000:
+
+ | -o '/sem@0xfff00000/reg 0xfff00000 0x80000' \
+ | -o '/sem@0xfff00000/key 0x12345678' \
+
+ sim/ppc/run -o '/#address-cells 1' \
+ -o '/sem@0xc0000000/reg 0xc0000000 0x80000' \
+ -o '/sem@0xc0000000/key 0x12345678' ../psim-hello/hello
+
+ REGISTERS
+
+ offset 0 - lock count
+ offset 4 - lock operation
+ offset 8 - unlock operation
+
+ All reads return the current or resulting count.
+
+ BUGS
+
+ None known.
+
+ */
+
+typedef struct _hw_sem_device {
+ unsigned_word physical_address;
+ key_t key;
+ int id;
+ int initial;
+ int count;
+} hw_sem_device;
+
+static void
+hw_sem_init_data(device *me)
+{
+ hw_sem_device *sem = (hw_sem_device*)device_data(me);
+ const device_unit *d;
+ int status;
+#if !HAS_UNION_SEMUN
+ union semun {
+ int val;
+ struct semid_ds *buf;
+ unsigned short int *array;
+#if defined(__linux__)
+ struct seminfo *__buf;
+#endif
+ } ;
+#endif
+ union semun help;
+
+ /* initialize the properties of the sem */
+
+ if (device_find_property(me, "key") == NULL)
+ error("sem_init_data() required key property is missing\n");
+
+ if (device_find_property(me, "value") == NULL)
+ error("sem_init_data() required value property is missing\n");
+
+ sem->key = (key_t) device_find_integer_property(me, "key");
+ DTRACE(sem, ("semaphore key (%d)\n", sem->key) );
+
+ sem->initial = (int) device_find_integer_property(me, "value");
+ DTRACE(sem, ("semaphore initial value (%d)\n", sem->initial) );
+
+ d = device_unit_address(me);
+ sem->physical_address = d->cells[ d->nr_cells-1 ];
+ DTRACE(sem, ("semaphore physical_address=0x%x\n", sem->physical_address));
+
+ /* Now to initialize the semaphore */
+
+ if ( sem->initial != -1 ) {
+
+ sem->id = semget(sem->key, 1, IPC_CREAT | 0660);
+ if (sem->id == -1)
+ error("hw_sem_init_data() semget failed\n");
+
+ help.val = sem->initial;
+ status = semctl( sem->id, 0, SETVAL, help );
+ if (status == -1)
+ error("hw_sem_init_data() semctl -- set value failed\n");
+
+ } else {
+ sem->id = semget(sem->key, 1, 0660);
+ if (sem->id == -1)
+ error("hw_sem_init_data() semget failed\n");
+ }
+
+ sem->count = semctl( sem->id, 0, GETVAL, help );
+ if (sem->count == -1)
+ error("hw_sem_init_data() semctl -- get value failed\n");
+ DTRACE(sem, ("semaphore OS value (%d)\n", sem->count) );
+
+ if (sizeof(int) != 4)
+ error("hw_sem_init_data() typing problem\n");
+}
+
+static void
+hw_sem_attach_address_callback(device *me,
+ attach_type attach,
+ int space,
+ unsigned_word addr,
+ unsigned nr_bytes,
+ access_type access,
+ device *client) /*callback/default*/
+{
+ hw_sem_device *sem = (hw_sem_device*)device_data(me);
+
+ if (space != 0)
+ error("sem_attach_address_callback() invalid address space\n");
+
+ if (nr_bytes == 12)
+ error("sem_attach_address_callback() invalid size\n");
+
+ sem->physical_address = addr;
+ DTRACE(sem, ("semaphore physical_address=0x%x\n", addr));
+}
+
+static unsigned
+hw_sem_io_read_buffer(device *me,
+ void *dest,
+ int space,
+ unsigned_word addr,
+ unsigned nr_bytes,
+ cpu *processor,
+ unsigned_word cia)
+{
+ hw_sem_device *sem = (hw_sem_device*)device_data(me);
+ struct sembuf sb;
+ int status;
+ unsigned32 u32;
+#if !HAS_UNION_SEMUN
+ union semun {
+ int val;
+ struct semid_ds *buf;
+ unsigned short int *array;
+#if defined(__linux__)
+ struct seminfo *__buf;
+#endif
+ } ;
+#endif
+ union semun help;
+
+ /* do we need to worry about out of range addresses? */
+
+ DTRACE(sem, ("semaphore read addr=0x%x length=%d\n", addr, nr_bytes));
+
+ if (!(addr >= sem->physical_address && addr <= sem->physical_address + 11))
+ error("hw_sem_io_read_buffer() invalid address - out of range\n");
+
+ if ((addr % 4) != 0)
+ error("hw_sem_io_read_buffer() invalid address - alignment\n");
+
+ if (nr_bytes != 4)
+ error("hw_sem_io_read_buffer() invalid length\n");
+
+ switch ( (addr - sem->physical_address) / 4 ) {
+
+ case 0: /* OBTAIN CURRENT VALUE */
+ break;
+
+ case 1: /* LOCK */
+ sb.sem_num = 0;
+ sb.sem_op = -1;
+ sb.sem_flg = 0;
+
+ status = semop(sem->id, &sb, 1);
+ if (status == -1) {
+ perror( "hw_sem.c: lock" );
+ error("hw_sem_io_read_buffer() sem lock\n");
+ }
+
+ DTRACE(sem, ("semaphore lock %d\n", sem->count));
+ break;
+
+ case 2: /* UNLOCK */
+ sb.sem_num = 0;
+ sb.sem_op = 1;
+ sb.sem_flg = 0;
+
+ status = semop(sem->id, &sb, 1);
+ if (status == -1) {
+ perror( "hw_sem.c: unlock" );
+ error("hw_sem_io_read_buffer() sem unlock\n");
+ }
+ DTRACE(sem, ("semaphore unlock %d\n", sem->count));
+ break;
+
+ default:
+ error("hw_sem_io_read_buffer() invalid address - unknown error\n");
+ break;
+ }
+
+ /* assume target is big endian */
+ u32 = H2T_4(semctl( sem->id, 0, GETVAL, help ));
+
+ DTRACE(sem, ("semaphore OS value (%d)\n", u32) );
+ if (u32 == 0xffffffff) {
+ perror( "hw_sem.c: getval" );
+ error("hw_sem_io_read_buffer() semctl -- get value failed\n");
+ }
+
+ memcpy(dest, &u32, nr_bytes);
+ return nr_bytes;
+
+}
+
+static device_callbacks const hw_sem_callbacks = {
+ { generic_device_init_address, hw_sem_init_data },
+ { hw_sem_attach_address_callback, }, /* address */
+ { hw_sem_io_read_buffer, NULL }, /* IO */
+ { NULL, }, /* DMA */
+ { NULL, }, /* interrupt */
+ { NULL, }, /* unit */
+ NULL,
+};
+
+static void *
+hw_sem_create(const char *name,
+ const device_unit *unit_address,
+ const char *args)
+{
+ hw_sem_device *sem = ZALLOC(hw_sem_device);
+ return sem;
+}
+
+const device_descriptor hw_sem_device_descriptor[] = {
+ { "sem", hw_sem_create, &hw_sem_callbacks },
+ { NULL },
+};
+
+#endif /* _HW_SEM_C_ */
diff -Naur gdb-6.8.orig/sim/ppc/hw_shm.c gdb-6.8/sim/ppc/hw_shm.c
--- gdb-6.8.orig/sim/ppc/hw_shm.c 1970-01-01 01:00:00.000000000 +0100
+++ gdb-6.8/sim/ppc/hw_shm.c 2008-09-12 08:37:39.000000000 +0200
@@ -0,0 +1,236 @@
+/* This file is part of the program psim.
+
+ Copyright (C) 1997,2008, Joel Sherrill <joel@OARcorp.com>
+
+ 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
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ */
+
+
+#ifndef _HW_SHM_C_
+#define _HW_SHM_C_
+
+#include "device_table.h"
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+
+/* DEVICE
+
+
+ shm - map unix shared memory into psim address space
+
+
+ DESCRIPTION
+
+
+ This device implements an area of memory which is mapped into UNIX
+ shared memory.
+
+
+ PROPERTIES
+
+
+ reg = <address> <size> (required)
+
+ Determine where the memory lives in the parents address space.
+ The SHM area is assumed to be of the same length.
+
+ key = <integer> (required)
+
+ This is the key of the unix shared memory area.
+
+ EXAMPLES
+
+
+ Enable tracing of the shm:
+
+ | bash$ psim -t shm-device \
+
+
+ Configure a 512 kilobytes of UNIX shared memory with the key 0x12345678
+ mapped into psim address space at 0x0c000000.
+
+ | -o '/shm@0x0c000000/reg 0x0c000000 0x80000' \
+ | -o '/shm@0x0c000000/key 0x12345678' \
+
+ sim/ppc/run -o '/#address-cells 1' \
+ -o '/shm@0x0c000000/reg 0x0c000000 0x80000' \
+ -o '/shm@0x0c000000/key 0x12345678' ../psim-hello/hello
+
+ BUGS
+
+ None known.
+
+ */
+
+typedef struct _hw_shm_device {
+ unsigned_word physical_address;
+ char *shm_address;
+ unsigned sizeof_memory;
+ key_t key;
+ int id;
+} hw_shm_device;
+
+static void
+hw_shm_init_data(device *me)
+{
+ hw_shm_device *shm = (hw_shm_device*)device_data(me);
+ const device_unit *d;
+ reg_property_spec reg;
+ int i;
+
+ /* Obtain the Key Value */
+ if (device_find_property(me, "key") == NULL)
+ error("shm_init_data() required key property is missing\n");
+
+ shm->key = (key_t) device_find_integer_property(me, "key");
+ DTRACE(shm, ("shm key (0x%08x)\n", shm->key) );
+
+ /* Figure out where this memory is in address space and how long it is */
+ if ( !device_find_reg_array_property(me, "reg", 0, ®) )
+ error("hw_shm_init_data() no address registered\n");
+
+ /* Determine the address and length being as paranoid as possible */
+ shm->physical_address = 0xffffffff;
+ shm->sizeof_memory = 0xffffffff;
+
+ for ( i=0 ; i<reg.address.nr_cells; i++ ) {
+ if (reg.address.cells[0] == 0 && reg.size.cells[0] == 0)
+ continue;
+
+ if ( shm->physical_address != 0xffffffff )
+ device_error(me, "Only single celled address ranges supported\n");
+
+ shm->physical_address = reg.address.cells[i];
+ DTRACE(shm, ("shm physical_address=0x%x\n", shm->physical_address));
+
+ shm->sizeof_memory = reg.size.cells[i];
+ DTRACE(shm, ("shm length=0x%x\n", shm->sizeof_memory));
+ }
+
+ if ( shm->physical_address == 0xffffffff )
+ device_error(me, "Address not specified\n" );
+
+ if ( shm->sizeof_memory == 0xffffffff )
+ device_error(me, "Length not specified\n" );
+
+ /* Now actually attach to or create the shared memory area */
+ shm->id = shmget(shm->key, shm->sizeof_memory, IPC_CREAT | 0660);
+ if (shm->id == -1)
+ error("hw_shm_init_data() shmget failed\n");
+
+ shm->shm_address = shmat(shm->id, (char *)0, SHM_RND);
+ if (shm->shm_address == (void *)-1)
+ error("hw_shm_init_data() shmat failed\n");
+}
+
+static void
+hw_shm_attach_address_callback(device *me,
+ attach_type attach,
+ int space,
+ unsigned_word addr,
+ unsigned nr_bytes,
+ access_type access,
+ device *client) /*callback/default*/
+{
+ hw_shm_device *shm = (hw_shm_device*)device_data(me);
+
+ if (space != 0)
+ error("shm_attach_address_callback() invalid address space\n");
+
+ if (nr_bytes == 0)
+ error("shm_attach_address_callback() invalid size\n");
+}
+
+
+static unsigned
+hw_shm_io_read_buffer(device *me,
+ void *dest,
+ int space,
+ unsigned_word addr,
+ unsigned nr_bytes,
+ cpu *processor,
+ unsigned_word cia)
+{
+ hw_shm_device *shm = (hw_shm_device*)device_data(me);
+
+ /* do we need to worry about out of range addresses? */
+
+ DTRACE(shm, ("read %p %x %x %x\n", \
+ shm->shm_address, shm->physical_address, addr, nr_bytes) );
+
+ memcpy(dest, &shm->shm_address[addr - shm->physical_address], nr_bytes);
+ return nr_bytes;
+}
+
+
+static unsigned
+hw_shm_io_write_buffer(device *me,
+ const void *source,
+ int space,
+ unsigned_word addr,
+ unsigned nr_bytes,
+ cpu *processor,
+ unsigned_word cia)
+{
+ hw_shm_device *shm = (hw_shm_device*)device_data(me);
+
+ /* do we need to worry about out of range addresses? */
+
+ DTRACE(shm, ("write %p %x %x %x\n", \
+ shm->shm_address, shm->physical_address, addr, nr_bytes) );
+
+ memcpy(&shm->shm_address[addr - shm->physical_address], source, nr_bytes);
+ return nr_bytes;
+}
+
+static device_callbacks const hw_shm_callbacks = {
+ { generic_device_init_address, hw_shm_init_data },
+ { hw_shm_attach_address_callback, }, /* address */
+ { hw_shm_io_read_buffer,
+ hw_shm_io_write_buffer }, /* IO */
+ { NULL, }, /* DMA */
+ { NULL, }, /* interrupt */
+ { NULL, }, /* unit */
+ NULL,
+};
+
+static void *
+hw_shm_create(const char *name,
+ const device_unit *unit_address,
+ const char *args)
+{
+ hw_shm_device *shm = ZALLOC(hw_shm_device);
+ return shm;
+}
+
+
+
+const device_descriptor hw_shm_device_descriptor[] = {
+ { "shm", hw_shm_create, &hw_shm_callbacks },
+ { NULL },
+};
+
+#endif /* _HW_SHM_C_ */
diff -Naur gdb-6.8.orig/sim/ppc/Makefile.in gdb-6.8/sim/ppc/Makefile.in
--- gdb-6.8.orig/sim/ppc/Makefile.in 2006-05-31 17:14:45.000000000 +0200
+++ gdb-6.8/sim/ppc/Makefile.in 2008-09-12 08:37:39.000000000 +0200
@@ -834,6 +834,8 @@
hw_pal.o: hw_pal.c $(DEVICE_TABLE_H) $(CPU_H)
hw_phb.o: hw_phb.c $(DEVICE_TABLE_H) $(HW_PHB_H) $(COREFILE_H)
hw_register.o: hw_register.c $(DEVICE_TABLE_H) $(PSIM_H)
+hw_sem.o: hw_sem.c $(DEVICE_TABLE_H) $(PSIM_H)
+hw_shm.o: hw_shm.c $(DEVICE_TABLE_H) $(PSIM_H)
hw_trace.o: hw_trace.c $(DEVICE_TABLE_H)
hw_vm.o: hw_vm.c $(DEVICE_TABLE_H) $(CPU_H)
# ignore this line, it stops make from getting confused
diff -Naur gdb-6.8.orig/sim/ppc/ppc-instructions gdb-6.8/sim/ppc/ppc-instructions
--- gdb-6.8.orig/sim/ppc/ppc-instructions 2006-11-29 16:20:55.000000000 +0100
+++ gdb-6.8/sim/ppc/ppc-instructions 2008-09-12 08:37:44.000000000 +0200
@@ -3402,6 +3402,14 @@
case spr_dec:
*rT = cpu_get_decrementer(processor);
break;
+ case spr_tbrl:
+ if (is_64bit_implementation) *rT = TB;
+ else *rT = EXTRACTED64(TB, 32, 63);
+ break;
+ case spr_tbru:
+ if (is_64bit_implementation) *rT = EXTRACTED64(TB, 0, 31);
+ else *rT = EXTRACTED64(TB, 0, 31);
+ break;
case spr_tbu:
case spr_tbl:
/* NOTE - these SPR's are not readable. Use mftb[ul] */
diff -Naur gdb-6.8.orig/sim/ppc/ppc-spr-table gdb-6.8/sim/ppc/ppc-spr-table
--- gdb-6.8.orig/sim/ppc/ppc-spr-table 2003-06-22 18:48:12.000000000 +0200
+++ gdb-6.8/sim/ppc/ppc-spr-table 2008-09-12 08:37:44.000000000 +0200
@@ -32,6 +32,8 @@
SRR0:26:0:0
SRR1:27:0:0
VRSAVE:256:0:0
+TBRL:268:0:0
+TBRU:269:0:0
SPRG0:272:0:0
SPRG1:273:0:0
SPRG2:274:0:0