mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
import gdb-1999-12-07 snapshot
This commit is contained in:
parent
6fe6a46127
commit
de57eccd12
@ -1,3 +1,31 @@
|
||||
1999-12-07 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Add support for SSE registers in core files.
|
||||
* corelow.c (get_core_register_section): New function.
|
||||
(get_core_registers): Fetch the new ".reg-xfp" sections,
|
||||
in addition to the traditional ".reg" and ".reg2" sections.
|
||||
Check for per-thread variants of all three. Use
|
||||
get_core_register_section, instead of writing it out over and over
|
||||
again.
|
||||
* i386-linux-nat.c (i386_linux_fetch_core_registers): New function.
|
||||
(i386_linux_nat_core_fns): New core_fns structure. We do our own
|
||||
core handling now, instead of using the generic code in core-regset.c.
|
||||
(_initialize_i386_linux_nat): New function, needed to register
|
||||
i386_linux_nat_core_fns.
|
||||
* config/i386/linux.mh (NATDEPFILES): Remove core-regset.o;
|
||||
i386-linux-nat.c has its own sniffer now.
|
||||
* gdbcore.h: (struct core_fns): Doc fix.
|
||||
|
||||
* i386v-nat.c (i386_float_info): Definition is #if 0'd; delete it
|
||||
altogether. This should use the function i387-tdep.c.
|
||||
|
||||
Patch from Mark Kettenis <kettenis@gnu.org>:
|
||||
|
||||
* config/i386/tm-i386.h (FLOAT_INFO): New define.
|
||||
* i387-tdep.c (print_i387_value, print_i387_ext,
|
||||
print_i387_status_word, print_i387_control_word, i387_float_info):
|
||||
New functions, used to implement generic `info float' command.
|
||||
|
||||
1999-12-06 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* dcache.c (set_dcache_state): New function.
|
||||
@ -55,6 +83,23 @@ Thu Dec 2 17:14:53 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* ser-pipe.c: Include <string.h> for memset().
|
||||
|
||||
1999-12-01 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* gdbtypes.c (builtin_type_v4si, builtin_type_v8qi,
|
||||
builtin_type_v4hi, builtin_type_v2si): New SIMD types.
|
||||
(build_gdbtypes): Initialize them.
|
||||
(_initialize_gdbtypes): Gdbarch_swap them.
|
||||
* gdbtypes.h (builtin_type_v4si, builtin_type_v8qi,
|
||||
builtin_type_v4hi, builtin_type_v2si): Declare them.
|
||||
|
||||
* findvar.c (read_register_bytes, write_register_bytes): Correctly
|
||||
determine how the region the caller is writing overlaps with each
|
||||
register's bytes.
|
||||
|
||||
* value.h (struct value): Doc fixes.
|
||||
|
||||
* valops.c (value_assign): Clarify error message.
|
||||
|
||||
1999-12-01 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* config/i386/tm-cygwin.h: Change tm-i386.h include back to tm-i386v.h.
|
||||
@ -187,7 +232,7 @@ Mon Nov 29 11:28:21 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* stabsread.c: Revert 1999-11-09 Jim Blandy
|
||||
<jimb@zwingli.cygnus.com> and 1999-11-08 Jim Blandy
|
||||
<jimb@zenia.red-bean.com>. Broken on non-Linux targets.
|
||||
<jimb@cygnus.com>. Broken on non-Linux targets.
|
||||
|
||||
1999-11-26 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
|
||||
|
||||
@ -231,7 +276,7 @@ Wed Nov 17 17:01:06 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* Makefile.in (i386-tdep.o): Update list of dependencies.
|
||||
|
||||
1999-11-22 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-11-22 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* config/i386/tm-i386v.h (NUM_REGS, REGISTER_NAMES,
|
||||
REGISTER_BYTES, REGISTER_BYTE, REGISTER_RAW_SIZE,
|
||||
@ -272,7 +317,7 @@ Mon Nov 22 12:02:47 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
arguments.
|
||||
(print_percentage): Make function void.
|
||||
|
||||
1999-11-21 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-11-21 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Make the bcache hash table grow.
|
||||
* bcache.h (BCACHE_NUM_BUCKETS): Delete definition.
|
||||
@ -292,7 +337,7 @@ Mon Nov 22 12:02:47 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
freeing the bcache's obstack directly.
|
||||
* symfile.c (reread_symbols): Same.
|
||||
|
||||
1999-11-20 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-11-20 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* bcache.c, bcache.h: Rewritten. New version imposes less memory
|
||||
overhead, and has a more effective hash function, so it's probably
|
||||
@ -526,7 +571,7 @@ Tue Nov 9 15:33:43 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
statement.
|
||||
(info_cb): Use paddr when printing addresses.
|
||||
|
||||
1999-11-08 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-11-08 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* defs.h (ULONGEST_MAX, LONGEST_MAX): New definitions.
|
||||
* stabsread.c (read_huge_number): Parse and return LONGEST values.
|
||||
@ -951,7 +996,7 @@ Thu Nov 4 17:36:27 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* infcmd.c: Fix typo.
|
||||
|
||||
1999-10-28 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-28 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* gdbtypes.c (init_simd_type): The upper bound to
|
||||
create_range_type is inclusive, not exclusive.
|
||||
@ -1096,12 +1141,12 @@ Sat Oct 23 16:39:34 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
to avoid compiler warnings.
|
||||
(catch_fork_command_1): Ditto.
|
||||
|
||||
1999-10-20 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-10-20 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* Makefile.in (dwarf2read.o): Note that this depends on bfd/elf-bfd.h.
|
||||
(elf_bfd_h): New variable.
|
||||
|
||||
1999-10-19 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-19 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* config/i386/tm-i386.h (REGISTER_NAMES): Change names of FPU
|
||||
instruction and operand pointer registers to improve consistency,
|
||||
@ -1133,7 +1178,7 @@ Mon Oct 18 17:32:51 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
chunk/block write a run-time option. Check for quit_flag.
|
||||
Use target_write_memory_partial for downloads.
|
||||
|
||||
1999-10-18 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-18 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Change Linux x86 register support to use the new tm-i386.h layout.
|
||||
* config/i386/tm-linux.h (HAVE_I387_REGS): #define this, so we get
|
||||
@ -1247,7 +1292,7 @@ Sun Oct 17 13:58:56 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
(generic_load): Don't cast the result of bfd_get_section_name.
|
||||
Replace ``sect'' with ``sect_name'', use consistently.
|
||||
|
||||
1999-10-15 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-15 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Add beginnings of support for SIMD register types.
|
||||
* gdbtypes.c (init_simd_type): New function for building
|
||||
@ -1268,7 +1313,7 @@ Fri Oct 15 17:46:39 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
(_initialize_dcache): Fix description of ``set remotecache''.
|
||||
Cache is OFF by default.
|
||||
|
||||
1999-10-13 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-13 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* valops.c (value_push): Don't forget to initialize container_len.
|
||||
|
||||
@ -1331,7 +1376,7 @@ Tue Oct 12 12:19:07 1999 David Taylor <taylor@texas.cygnus.com>
|
||||
* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): It's not
|
||||
enough to #define this; you have to give it a non-zero value.
|
||||
|
||||
1999-10-11 Jim Blandy <jimb@zenia.red-bean.com>
|
||||
1999-10-11 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Fix from Jim Kingdon <kingdon@redhat.com>, with tweaks to make it
|
||||
gdbarch- and bigendian-friendly:
|
||||
@ -1958,7 +2003,7 @@ Tue Sep 28 11:08:34 1999 Jeffrey A Law (law@cygnus.com)
|
||||
remote.c, top.c, tracepoint.c, utils.c (async_p): Change var name
|
||||
to event_loop_p.
|
||||
|
||||
1999-09-28 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-28 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* hppa-tdep.c (skip_prologue_hard_way): Recognize ldo insns
|
||||
which generate pointers into the argument list.
|
||||
@ -2278,7 +2323,7 @@ Fri Sep 17 19:28:17 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
* breakpoints.c (delete_command): Move declaration from here.
|
||||
* breakpoints.h (delete_command): To here.
|
||||
|
||||
1999-09-18 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-18 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* hppa-tdep.c (in_solib_call_trampoline): If we can't recognize
|
||||
the instruction we're at, we're not in a stub.
|
||||
@ -2331,7 +2376,7 @@ Sat Sep 18 07:13:03 1999 Jeffrey A Law (law@cygnus.com)
|
||||
(inferior_event_handler): New function. Smarter inferior event
|
||||
handling.
|
||||
|
||||
1999-09-18 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-18 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* pa64solib.c (pa64_solib_create_inferior_hook): Remove code which
|
||||
tries to set __d_pid; it's not relevant to PA64 shared libraries.
|
||||
@ -2358,7 +2403,7 @@ Sat Sep 18 07:13:03 1999 Jeffrey A Law (law@cygnus.com)
|
||||
* breakpoint.c (permanent_breakpoint_here_p): Delete.
|
||||
Accidentally left over from previous changes.
|
||||
|
||||
1999-09-17 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-17 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* config/pa/tm-hppa64.h (ARGS_GROW_DOWNWARD): Deleted. There are
|
||||
many more differences between the 32- and 64-bit ABI's than the
|
||||
@ -2484,11 +2529,11 @@ Thu Sep 16 09:04:53 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
* remote-d10v.c: Remove.
|
||||
* config/d10v/d10v.mt (TDEPFILES): Remove remote-d10v.o.
|
||||
|
||||
1999-09-15 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-15 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* breakpoint.c (remove_breakpoint): Return zero, not nothing.
|
||||
|
||||
1999-09-14 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-14 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* hppa-tdep.c (frame_chain): If the unwind info says we've saved
|
||||
r3, don't trust it. Call get_frame_saved_regs and see if we can
|
||||
@ -2509,7 +2554,7 @@ Tue Sep 14 14:34:28 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
* remote-st.c (connect_command), remote-os9k.c (connect_command):
|
||||
Fix. Call FD_SET et.al. with FD instead of serial_t.
|
||||
|
||||
1999-09-14 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-09-14 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* hppa-tdep.c (hppa_frame_find_saved_regs): The two possible
|
||||
instructions for saving the return pointer (32- and 64-bit) save
|
||||
@ -2716,7 +2761,7 @@ Mon Sep 13 18:54:05 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
Mon Sep 13 17:51:28 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
From 1999-09-12 Jim Blandy <jimb@cris.red-bean.com>:
|
||||
From 1999-09-12 Jim Blandy <jimb@cygnus.com>:
|
||||
* gdbarch.sh (generating setters): Use sed to generate the proper
|
||||
indentation, not tr; tr's behavior is notoriously unportable.
|
||||
|
||||
@ -4236,11 +4281,11 @@ Wed Aug 4 10:42:58 1999 Fred Fish <fnf@cygnus.com>
|
||||
to a CORE_ADDR look like an subtraction expression.
|
||||
(add_symbol_file_command): Ditto.
|
||||
|
||||
1999-07-30 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-07-30 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* hppa-tdep.c (pa_print_registers): Frob register output some more.
|
||||
|
||||
1999-07-29 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-07-29 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* config/pa/nm-hppah.h (PTRACE_ARG3_TYPE): After more
|
||||
consideration, make this a CORE_ADDR, like WDB did.
|
||||
@ -4280,7 +4325,7 @@ Wed Aug 4 10:42:58 1999 Fred Fish <fnf@cygnus.com>
|
||||
* hppah-nat.c (child_xfer_memory): Correctly compute mask to round
|
||||
address to an int boundary.
|
||||
|
||||
1999-07-29 Jim Blandy <jimb@savonarola.red-bean.com>
|
||||
1999-07-29 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Change from Ian Lance Taylor <ian@zembu.com>. The
|
||||
i386_linux_sigtramp* functions should be moved to
|
||||
@ -4303,7 +4348,7 @@ Wed Aug 4 10:42:58 1999 Fred Fish <fnf@cygnus.com>
|
||||
(i386_linux_sigtramp_saved_pc): Likewise.
|
||||
(i386_linux_sigtramp_saved_sp): Likewise.
|
||||
|
||||
1999-07-28 Jim Blandy <jimb@savonarola.red-bean.com>
|
||||
1999-07-28 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* infrun.c (handle_inferior_event): Don't try to use the code for
|
||||
stepping over a function call to also handle stepping out of a
|
||||
@ -4318,7 +4363,7 @@ Wed Aug 4 10:42:58 1999 Fred Fish <fnf@cygnus.com>
|
||||
from readline the same way as a multiline command. This avoids
|
||||
missing detecting when the user presses just 'enter'.
|
||||
|
||||
1999-07-28 Jim Blandy <jimb@savonarola.red-bean.com>
|
||||
1999-07-28 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Provide more sanity checking:
|
||||
* infrun.c (handle_inferior_event): Before assigning a new
|
||||
@ -4365,7 +4410,7 @@ Mon Jul 26 17:13:39 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* remote.c (_initialize_remote): "remotebreak" should be a var_boolean.
|
||||
|
||||
1999-07-15 Jim Blandy <jimb@cris.red-bean.com>
|
||||
1999-07-15 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
Make the output from "info registers" fit withinin 80 columns.
|
||||
* hppa-tdep.c (pa_print_registers): Make it easy to change row and
|
||||
|
@ -229,7 +229,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
|
||||
ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
||||
ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
||||
|
||||
VERSION = 19991206
|
||||
VERSION = 19991207
|
||||
DIST=gdb
|
||||
|
||||
LINT=/usr/5bin/lint
|
||||
|
@ -5,4 +5,4 @@ XDEPFILES= ser-tcp.o
|
||||
|
||||
NAT_FILE= nm-linux.h
|
||||
NATDEPFILES= infptrace.o solib.o inftarg.o fork-child.o corelow.o \
|
||||
core-aout.o core-regset.o i386v-nat.o i386-linux-nat.o linux-thread.o
|
||||
core-aout.o i386v-nat.o i386-linux-nat.o linux-thread.o
|
||||
|
@ -259,6 +259,13 @@ extern void double_to_i387 (char *, char *);
|
||||
double_to_i387((char *)&val, (TO)); \
|
||||
}
|
||||
|
||||
/* Print out the i387 floating point state. */
|
||||
#ifdef HAVE_I387_REGS
|
||||
extern void i387_float_info (void);
|
||||
#define FLOAT_INFO { i387_float_info (); }
|
||||
#endif
|
||||
|
||||
|
||||
/* Store the address of the place in which to copy the structure the
|
||||
subroutine will return. This is called from call_function. */
|
||||
|
||||
|
115
gdb/corelow.c
115
gdb/corelow.c
@ -373,6 +373,62 @@ core_detach (args, from_tty)
|
||||
printf_filtered ("No core file now.\n");
|
||||
}
|
||||
|
||||
|
||||
/* Try to retrieve registers from a section in core_bfd, and supply
|
||||
them to core_vec->core_read_registers, as the register set numbered
|
||||
WHICH.
|
||||
|
||||
If inferior_pid is zero, do the single-threaded thing: look for a
|
||||
section named NAME. If inferior_pid is non-zero, do the
|
||||
multi-threaded thing: look for a section named "NAME/PID", where
|
||||
PID is the shortest ASCII decimal representation of inferior_pid.
|
||||
|
||||
HUMAN_NAME is a human-readable name for the kind of registers the
|
||||
NAME section contains, for use in error messages.
|
||||
|
||||
If REQUIRED is non-zero, print an error if the core file doesn't
|
||||
have a section by the appropriate name. Otherwise, just do nothing. */
|
||||
|
||||
static void
|
||||
get_core_register_section (char *name,
|
||||
int which,
|
||||
char *human_name,
|
||||
int required)
|
||||
{
|
||||
char section_name[100];
|
||||
sec_ptr section;
|
||||
bfd_size_type size;
|
||||
char *contents;
|
||||
|
||||
if (inferior_pid)
|
||||
sprintf (section_name, "%s/%d", name, inferior_pid);
|
||||
else
|
||||
strcpy (section_name, name);
|
||||
|
||||
section = bfd_get_section_by_name (core_bfd, section_name);
|
||||
if (! section)
|
||||
{
|
||||
if (required)
|
||||
warning ("Couldn't find %s registers in core file.\n", human_name);
|
||||
return;
|
||||
}
|
||||
|
||||
size = bfd_section_size (core_bfd, section);
|
||||
contents = alloca (size);
|
||||
if (! bfd_get_section_contents (core_bfd, section, contents,
|
||||
(file_ptr) 0, size))
|
||||
{
|
||||
warning ("Couldn't read %s registers from `%s' section in core file.\n",
|
||||
human_name, name);
|
||||
return;
|
||||
}
|
||||
|
||||
core_vec->core_read_registers (contents, size, which,
|
||||
((CORE_ADDR)
|
||||
bfd_section_vma (core_bfd, section)));
|
||||
}
|
||||
|
||||
|
||||
/* Get the registers out of a core file. This is the machine-
|
||||
independent part. Fetch_core_registers is the machine-dependent
|
||||
part, typically implemented in the xm-file for each architecture. */
|
||||
@ -384,67 +440,20 @@ static void
|
||||
get_core_registers (regno)
|
||||
int regno;
|
||||
{
|
||||
sec_ptr reg_sec;
|
||||
unsigned size;
|
||||
char *the_regs;
|
||||
char secname[30];
|
||||
int status;
|
||||
|
||||
if (core_vec == NULL)
|
||||
if (core_vec == NULL
|
||||
|| core_vec->core_read_registers == NULL)
|
||||
{
|
||||
fprintf_filtered (gdb_stderr,
|
||||
"Can't fetch registers from this type of core file\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Thread support. If inferior_pid is non-zero, then we have found a core
|
||||
file with threads (or multiple processes). In that case, we need to
|
||||
use the appropriate register section, else we just use `.reg'. */
|
||||
get_core_register_section (".reg", 0, "general-purpose", 1);
|
||||
get_core_register_section (".reg2", 2, "floating-point", 0);
|
||||
get_core_register_section (".reg-xfp", 3, "extended floating-point", 0);
|
||||
|
||||
/* XXX - same thing needs to be done for floating-point (.reg2) sections. */
|
||||
|
||||
if (inferior_pid)
|
||||
sprintf (secname, ".reg/%d", inferior_pid);
|
||||
else
|
||||
strcpy (secname, ".reg");
|
||||
|
||||
reg_sec = bfd_get_section_by_name (core_bfd, secname);
|
||||
if (!reg_sec)
|
||||
goto cant;
|
||||
size = bfd_section_size (core_bfd, reg_sec);
|
||||
the_regs = alloca (size);
|
||||
if (bfd_get_section_contents (core_bfd, reg_sec, the_regs, (file_ptr) 0, size) &&
|
||||
core_vec->core_read_registers != NULL)
|
||||
{
|
||||
(core_vec->core_read_registers (the_regs, size, 0,
|
||||
(unsigned) bfd_section_vma (abfd, reg_sec)));
|
||||
}
|
||||
else
|
||||
{
|
||||
cant:
|
||||
fprintf_filtered (gdb_stderr,
|
||||
"Couldn't fetch registers from core file: %s\n",
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
}
|
||||
|
||||
/* Now do it again for the float registers, if they exist. */
|
||||
reg_sec = bfd_get_section_by_name (core_bfd, ".reg2");
|
||||
if (reg_sec)
|
||||
{
|
||||
size = bfd_section_size (core_bfd, reg_sec);
|
||||
the_regs = alloca (size);
|
||||
if (bfd_get_section_contents (core_bfd, reg_sec, the_regs, (file_ptr) 0, size) &&
|
||||
core_vec->core_read_registers != NULL)
|
||||
{
|
||||
(core_vec->core_read_registers (the_regs, size, 2,
|
||||
(unsigned) bfd_section_vma (abfd, reg_sec)));
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf_filtered (gdb_stderr,
|
||||
"Couldn't fetch register set 2 from core file: %s\n",
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
}
|
||||
}
|
||||
registers_fetched ();
|
||||
}
|
||||
|
||||
|
@ -163,15 +163,21 @@ struct core_fns
|
||||
|
||||
CORE_REG_SIZE is the size of that area.
|
||||
|
||||
WHICH says which set of registers we are handling (0 = int, 2 = float on
|
||||
machines where they are discontiguous).
|
||||
WHICH says which set of registers we are handling:
|
||||
0 --- integer registers
|
||||
2 --- floating-point registers, on machines where they are
|
||||
discontiguous
|
||||
3 --- extended floating-point registers, on machines where
|
||||
these are present in yet a third area. (GNU/Linux uses
|
||||
this to get at the SSE registers.)
|
||||
|
||||
REG_ADDR is the offset from u.u_ar0 to the register values relative to
|
||||
core_reg_sect. This is used with old-fashioned core files to locate the
|
||||
registers in a large upage-plus-stack ".reg" section. Original upage
|
||||
address X is at location core_reg_sect+x+reg_addr. */
|
||||
|
||||
void (*core_read_registers) PARAMS ((char *core_reg_sect, unsigned core_reg_size,
|
||||
void (*core_read_registers) PARAMS ((char *core_reg_sect,
|
||||
unsigned core_reg_size,
|
||||
int which, CORE_ADDR reg_addr));
|
||||
|
||||
/* Finds the next struct core_fns. They are allocated and initialized
|
||||
|
@ -274,267 +274,6 @@ m68k_linux_register_u_addr (blockend, regnum)
|
||||
{
|
||||
return (blockend + 4 * regmap[regnum]);
|
||||
}
|
||||
/* start-sanitize-ia64 */
|
||||
#elif defined(IA64_GNULINUX_TARGET)
|
||||
#undef NUM_FREGS
|
||||
#define NUM_FREGS 0
|
||||
|
||||
#include <asm/ptrace_offsets.h>
|
||||
|
||||
static int u_offsets[] =
|
||||
{
|
||||
/* general registers */
|
||||
-1, /* gr0 not available; i.e, it's always zero */
|
||||
PT_R1,
|
||||
PT_R2,
|
||||
PT_R3,
|
||||
PT_R4,
|
||||
PT_R5,
|
||||
PT_R6,
|
||||
PT_R7,
|
||||
PT_R8,
|
||||
PT_R9,
|
||||
PT_R10,
|
||||
PT_R11,
|
||||
PT_R12,
|
||||
PT_R13,
|
||||
PT_R14,
|
||||
PT_R15,
|
||||
PT_R16,
|
||||
PT_R17,
|
||||
PT_R18,
|
||||
PT_R19,
|
||||
PT_R20,
|
||||
PT_R21,
|
||||
PT_R22,
|
||||
PT_R23,
|
||||
PT_R24,
|
||||
PT_R25,
|
||||
PT_R26,
|
||||
PT_R27,
|
||||
PT_R28,
|
||||
PT_R29,
|
||||
PT_R30,
|
||||
PT_R31,
|
||||
/* gr32 through gr127 not directly available via the ptrace interface */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
/* Floating point registers */
|
||||
-1, -1, /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
|
||||
PT_F2,
|
||||
PT_F3,
|
||||
PT_F4,
|
||||
PT_F5,
|
||||
PT_F6,
|
||||
PT_F7,
|
||||
PT_F8,
|
||||
PT_F9,
|
||||
PT_F10,
|
||||
PT_F11,
|
||||
PT_F12,
|
||||
PT_F13,
|
||||
PT_F14,
|
||||
PT_F15,
|
||||
PT_F16,
|
||||
PT_F17,
|
||||
PT_F18,
|
||||
PT_F19,
|
||||
PT_F20,
|
||||
PT_F21,
|
||||
PT_F22,
|
||||
PT_F23,
|
||||
PT_F24,
|
||||
PT_F25,
|
||||
PT_F26,
|
||||
PT_F27,
|
||||
PT_F28,
|
||||
PT_F29,
|
||||
PT_F30,
|
||||
PT_F31,
|
||||
PT_F32,
|
||||
PT_F33,
|
||||
PT_F34,
|
||||
PT_F35,
|
||||
PT_F36,
|
||||
PT_F37,
|
||||
PT_F38,
|
||||
PT_F39,
|
||||
PT_F40,
|
||||
PT_F41,
|
||||
PT_F42,
|
||||
PT_F43,
|
||||
PT_F44,
|
||||
PT_F45,
|
||||
PT_F46,
|
||||
PT_F47,
|
||||
PT_F48,
|
||||
PT_F49,
|
||||
PT_F50,
|
||||
PT_F51,
|
||||
PT_F52,
|
||||
PT_F53,
|
||||
PT_F54,
|
||||
PT_F55,
|
||||
PT_F56,
|
||||
PT_F57,
|
||||
PT_F58,
|
||||
PT_F59,
|
||||
PT_F60,
|
||||
PT_F61,
|
||||
PT_F62,
|
||||
PT_F63,
|
||||
PT_F64,
|
||||
PT_F65,
|
||||
PT_F66,
|
||||
PT_F67,
|
||||
PT_F68,
|
||||
PT_F69,
|
||||
PT_F70,
|
||||
PT_F71,
|
||||
PT_F72,
|
||||
PT_F73,
|
||||
PT_F74,
|
||||
PT_F75,
|
||||
PT_F76,
|
||||
PT_F77,
|
||||
PT_F78,
|
||||
PT_F79,
|
||||
PT_F80,
|
||||
PT_F81,
|
||||
PT_F82,
|
||||
PT_F83,
|
||||
PT_F84,
|
||||
PT_F85,
|
||||
PT_F86,
|
||||
PT_F87,
|
||||
PT_F88,
|
||||
PT_F89,
|
||||
PT_F90,
|
||||
PT_F91,
|
||||
PT_F92,
|
||||
PT_F93,
|
||||
PT_F94,
|
||||
PT_F95,
|
||||
PT_F96,
|
||||
PT_F97,
|
||||
PT_F98,
|
||||
PT_F99,
|
||||
PT_F100,
|
||||
PT_F101,
|
||||
PT_F102,
|
||||
PT_F103,
|
||||
PT_F104,
|
||||
PT_F105,
|
||||
PT_F106,
|
||||
PT_F107,
|
||||
PT_F108,
|
||||
PT_F109,
|
||||
PT_F110,
|
||||
PT_F111,
|
||||
PT_F112,
|
||||
PT_F113,
|
||||
PT_F114,
|
||||
PT_F115,
|
||||
PT_F116,
|
||||
PT_F117,
|
||||
PT_F118,
|
||||
PT_F119,
|
||||
PT_F120,
|
||||
PT_F121,
|
||||
PT_F122,
|
||||
PT_F123,
|
||||
PT_F124,
|
||||
PT_F125,
|
||||
PT_F126,
|
||||
PT_F127,
|
||||
/* predicate registers - we don't fetch these individually */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
/* branch registers */
|
||||
PT_B0,
|
||||
PT_B1,
|
||||
PT_B2,
|
||||
PT_B3,
|
||||
PT_B4,
|
||||
PT_B5,
|
||||
PT_B6,
|
||||
PT_B7,
|
||||
/* virtual frame pointer and virtual return address pointer */
|
||||
-1, -1,
|
||||
/* other registers */
|
||||
PT_PR,
|
||||
PT_CR_IIP,
|
||||
PT_CR_IPSR,
|
||||
/* kernel registers not visible via ptrace interface (?) */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
/* hole */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
PT_AR_RSC,
|
||||
PT_AR_BSP,
|
||||
PT_AR_BSPSTORE,
|
||||
PT_AR_RNAT,
|
||||
-1,
|
||||
-1, /* Not available: FCR, IA32 floating control register */
|
||||
-1, -1,
|
||||
-1, /* Not available: EFLAG */
|
||||
-1, /* Not available: CSD */
|
||||
-1, /* Not available: SSD */
|
||||
-1, /* Not available: CFLG */
|
||||
-1, /* Not available: FSR */
|
||||
-1, /* Not available: FIR */
|
||||
-1, /* Not available: FDR */
|
||||
-1,
|
||||
PT_AR_CCV,
|
||||
-1, -1, -1,
|
||||
PT_AR_UNAT,
|
||||
-1, -1, -1,
|
||||
PT_AR_FPSR,
|
||||
-1, -1, -1,
|
||||
-1, /* Not available: ITC */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
PT_CR_IFS, /* was PT_AR_PFS, but it seemed bogus */
|
||||
PT_AR_LC,
|
||||
-1, /* Not available: EC, the Epilog Count register */
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1,
|
||||
};
|
||||
|
||||
int
|
||||
ia64_register_u_addr (int blockend, int regnum)
|
||||
{
|
||||
int addr;
|
||||
|
||||
if (regnum < 0 || regnum >= NUM_REGS)
|
||||
error ("Invalid register number %d.", regnum);
|
||||
|
||||
addr = u_offsets[regnum];
|
||||
if (addr == -1)
|
||||
addr = 0;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
initialize_arch()
|
||||
{
|
||||
return;
|
||||
}
|
||||
/* end-sanitize-ia64 */
|
||||
#endif
|
||||
|
||||
CORE_ADDR
|
||||
|
@ -611,6 +611,91 @@ store_inferior_registers (regno)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Interpreting register set info found in core files. */
|
||||
|
||||
/* Provide registers to GDB from a core file.
|
||||
|
||||
(We can't use the generic version of this function in
|
||||
core-regset.c, because Linux has *three* different kinds of
|
||||
register set notes. core-regset.c would have to call
|
||||
supply_xfpregset, which most platforms don't have.)
|
||||
|
||||
CORE_REG_SECT points to an array of bytes, which are the contents
|
||||
of a `note' from a core file which BFD thinks might contain
|
||||
register contents. CORE_REG_SIZE is its size.
|
||||
|
||||
WHICH says which register set corelow suspects this is:
|
||||
0 --- the general register set, in gregset format
|
||||
2 --- the floating-point register set, in fpregset format
|
||||
3 --- the extended floating-point register set, in struct
|
||||
user_xfpregs_struct format
|
||||
|
||||
DUMMY isn't used on Linux. */
|
||||
static void
|
||||
i386_linux_fetch_core_registers (char *core_reg_sect,
|
||||
unsigned core_reg_size,
|
||||
int which,
|
||||
CORE_ADDR dummy)
|
||||
{
|
||||
gregset_t gregset;
|
||||
fpregset_t fpregset;
|
||||
|
||||
switch (which)
|
||||
{
|
||||
case 0:
|
||||
if (core_reg_size != sizeof (gregset))
|
||||
warning ("wrong size gregset struct in core file");
|
||||
else
|
||||
{
|
||||
memcpy (&gregset, core_reg_sect, sizeof (gregset));
|
||||
supply_gregset (&gregset);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (core_reg_size != sizeof (fpregset))
|
||||
warning ("wrong size fpregset struct in core file");
|
||||
else
|
||||
{
|
||||
memcpy (&fpregset, core_reg_sect, sizeof (fpregset));
|
||||
supply_fpregset (&fpregset);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef HAVE_PTRACE_GETXFPREGS
|
||||
{
|
||||
struct user_xfpregs_struct xfpregset;
|
||||
case 3:
|
||||
if (core_reg_size != sizeof (struct user_xfpregs_struct))
|
||||
warning ("wrong size user_xfpregs_struct in core file");
|
||||
else
|
||||
{
|
||||
memcpy (&xfpregset, core_reg_sect, sizeof (xfpregset));
|
||||
supply_xfpregset (&xfpregset);
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
/* We've covered all the kinds of registers we know about here,
|
||||
so this must be something we wouldn't know what to do with
|
||||
anyway. Just ignore it. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static struct core_fns i386_linux_nat_core_fns =
|
||||
{
|
||||
bfd_target_elf_flavour, /* core_flavour */
|
||||
default_check_format, /* check_format */
|
||||
default_core_sniffer, /* core_sniffer */
|
||||
i386_linux_fetch_core_registers, /* core_read_registers */
|
||||
NULL /* next */
|
||||
};
|
||||
|
||||
|
||||
/* Calling functions in shared libraries. */
|
||||
|
||||
@ -700,3 +785,13 @@ i386_linux_skip_solib_resolver (CORE_ADDR pc)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Module initialization. */
|
||||
|
||||
void
|
||||
_initialize_i386_linux_nat ()
|
||||
{
|
||||
add_core_fns (&i386_linux_nat_core_fns);
|
||||
}
|
||||
|
@ -307,88 +307,3 @@ i386_stopped_by_watchpoint (pid)
|
||||
}
|
||||
|
||||
#endif /* TARGET_HAS_HARDWARE_WATCHPOINTS */
|
||||
|
||||
#if 0
|
||||
/* using FLOAT_INFO as is would be a problem. FLOAT_INFO is called
|
||||
via a command xxx and eventually calls ptrace without ever having
|
||||
traversed the target vector. This would be terribly impolite
|
||||
behaviour for a sun4 hosted remote gdb.
|
||||
|
||||
A fix might be to move this code into the "info registers" command.
|
||||
rich@cygnus.com 15 Sept 92. */
|
||||
i386_float_info ()
|
||||
{
|
||||
struct user u; /* just for address computations */
|
||||
int i;
|
||||
/* fpstate defined in <sys/user.h> */
|
||||
struct fpstate *fpstatep;
|
||||
char buf[sizeof (struct fpstate) + 2 * sizeof (int)];
|
||||
unsigned int uaddr;
|
||||
char fpvalid = 0;
|
||||
unsigned int rounded_addr;
|
||||
unsigned int rounded_size;
|
||||
extern int corechan;
|
||||
int skip;
|
||||
|
||||
uaddr = (char *) &u.u_fpvalid - (char *) &u;
|
||||
if (target_has_execution)
|
||||
{
|
||||
unsigned int data;
|
||||
unsigned int mask;
|
||||
|
||||
rounded_addr = uaddr & -sizeof (int);
|
||||
data = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0);
|
||||
mask = 0xff << ((uaddr - rounded_addr) * 8);
|
||||
|
||||
fpvalid = ((data & mask) != 0);
|
||||
}
|
||||
#if 0
|
||||
else
|
||||
{
|
||||
if (lseek (corechan, uaddr, 0) < 0)
|
||||
perror ("seek on core file");
|
||||
if (myread (corechan, &fpvalid, 1) < 0)
|
||||
perror ("read on core file");
|
||||
|
||||
}
|
||||
#endif /* no core support yet */
|
||||
|
||||
if (fpvalid == 0)
|
||||
{
|
||||
printf_unfiltered ("no floating point status saved\n");
|
||||
return;
|
||||
}
|
||||
|
||||
uaddr = (char *) &U_FPSTATE (u) - (char *) &u;
|
||||
if (target_has_execution)
|
||||
{
|
||||
int *ip;
|
||||
|
||||
rounded_addr = uaddr & -sizeof (int);
|
||||
rounded_size = (((uaddr + sizeof (struct fpstate)) - uaddr) +
|
||||
sizeof (int) - 1) / sizeof (int);
|
||||
skip = uaddr - rounded_addr;
|
||||
|
||||
ip = (int *) buf;
|
||||
for (i = 0; i < rounded_size; i++)
|
||||
{
|
||||
*ip++ = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0);
|
||||
rounded_addr += sizeof (int);
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
else
|
||||
{
|
||||
if (lseek (corechan, uaddr, 0) < 0)
|
||||
perror_with_name ("seek on core file");
|
||||
if (myread (corechan, buf, sizeof (struct fpstate)) < 0)
|
||||
perror_with_name ("read from core file");
|
||||
skip = 0;
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
fpstatep = (struct fpstate *) (buf + skip);
|
||||
print_387_status (fpstatep->status, (struct env387 *) fpstatep->state);
|
||||
}
|
||||
|
||||
#endif /* never */
|
||||
|
259
gdb/i387-tdep.c
259
gdb/i387-tdep.c
@ -1,5 +1,5 @@
|
||||
/* Intel 387 floating point stuff.
|
||||
Copyright (C) 1988, 1989, 1991, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988, 1989, 1991, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
@ -26,14 +26,12 @@
|
||||
#include "gdbcore.h"
|
||||
#include "floatformat.h"
|
||||
|
||||
void i387_to_double PARAMS ((char *, char *));
|
||||
void double_to_i387 PARAMS ((char *, char *));
|
||||
|
||||
static void print_387_control_bits PARAMS ((unsigned int control));
|
||||
static void print_387_status_bits PARAMS ((unsigned int status));
|
||||
/* FIXME: Eliminate the next two functions when we have the time to
|
||||
change all the callers. */
|
||||
|
||||
/* FIXME: Eliminate these routines when we have the time to change all
|
||||
the callers. */
|
||||
void i387_to_double PARAMS ((char *from, char *to));
|
||||
void double_to_i387 PARAMS ((char *from, char *to));
|
||||
|
||||
void
|
||||
i387_to_double (from, to)
|
||||
@ -51,6 +49,16 @@ double_to_i387 (from, to)
|
||||
floatformat_from_double (&floatformat_i387_ext, (double *) from, to);
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: The functions on this page are used by the old `info float'
|
||||
implementations that a few of the i386 targets provide. These
|
||||
functions should be removed if all of these have been converted to
|
||||
use the generic implementation based on the new register file
|
||||
layout. */
|
||||
|
||||
static void print_387_control_bits PARAMS ((unsigned int control));
|
||||
static void print_387_status_bits PARAMS ((unsigned int status));
|
||||
|
||||
static void
|
||||
print_387_control_bits (control)
|
||||
unsigned int control;
|
||||
@ -149,6 +157,243 @@ print_387_status_word (status)
|
||||
puts_unfiltered ("\n");
|
||||
}
|
||||
|
||||
|
||||
/* Implement the `info float' layout based on the register definitions
|
||||
in `tm-i386.h'. */
|
||||
|
||||
/* Print the floating point number specified by RAW. */
|
||||
static void
|
||||
print_i387_value (char *raw)
|
||||
{
|
||||
DOUBLEST value;
|
||||
|
||||
floatformat_to_doublest (&floatformat_i387_ext, raw, &value);
|
||||
|
||||
/* We try to print 19 digits. The last digit may or may not contain
|
||||
garbage, but we'd better print one too many. We need enough room
|
||||
to print the value, 1 position for the sign, 1 for the decimal
|
||||
point, 19 for the digits and 6 for the exponent adds up to 27. */
|
||||
#ifdef PRINTF_HAS_LONG_DOUBLE
|
||||
printf_filtered (" %-+27.19Lg", (long double) value);
|
||||
#else
|
||||
printf_filtered (" %-+27.19g", (double) value);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Print the classification for the register contents RAW. */
|
||||
static void
|
||||
print_i387_ext (unsigned char *raw)
|
||||
{
|
||||
int sign;
|
||||
int integer;
|
||||
unsigned int exponent;
|
||||
unsigned long fraction[2];
|
||||
|
||||
sign = raw[9] & 0x80;
|
||||
integer = raw[7] & 0x80;
|
||||
exponent = (((raw[9] & 0x7f) << 8) | raw[8]);
|
||||
fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]);
|
||||
fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16)
|
||||
| (raw[5] << 8) | raw[4]);
|
||||
|
||||
if (exponent == 0x7fff && integer)
|
||||
{
|
||||
if (fraction[0] == 0x00000000 && fraction[1] == 0x00000000)
|
||||
/* Infinity. */
|
||||
printf_filtered (" %cInf", (sign ? '-' : '+'));
|
||||
else if (sign && fraction[0] == 0x00000000 && fraction[1] == 0x40000000)
|
||||
/* Real Indefinite (QNaN). */
|
||||
puts_unfiltered (" Real Indefinite (QNaN)");
|
||||
else if (fraction[1] & 0x40000000)
|
||||
/* QNaN. */
|
||||
puts_filtered (" QNaN");
|
||||
else
|
||||
/* SNaN. */
|
||||
puts_filtered (" SNaN");
|
||||
}
|
||||
else if (exponent < 0x7fff && exponent > 0x0000 && integer)
|
||||
/* Normal. */
|
||||
print_i387_value (raw);
|
||||
else if (exponent == 0x0000)
|
||||
{
|
||||
/* Denormal or zero. */
|
||||
print_i387_value (raw);
|
||||
|
||||
if (integer)
|
||||
/* Pseudo-denormal. */
|
||||
puts_filtered (" Pseudo-denormal");
|
||||
else if (fraction[0] || fraction[1])
|
||||
/* Denormal. */
|
||||
puts_filtered (" Denormal");
|
||||
}
|
||||
else
|
||||
/* Unsupported. */
|
||||
puts_filtered (" Unsupported");
|
||||
}
|
||||
|
||||
/* Print the status word STATUS. */
|
||||
static void
|
||||
print_i387_status_word (unsigned int status)
|
||||
{
|
||||
printf_filtered ("Status Word: %s",
|
||||
local_hex_string_custom (status, "04"));
|
||||
puts_filtered (" ");
|
||||
printf_filtered (" %s", (status & 0x0001) ? "IE" : " ");
|
||||
printf_filtered (" %s", (status & 0x0002) ? "DE" : " ");
|
||||
printf_filtered (" %s", (status & 0x0004) ? "ZE" : " ");
|
||||
printf_filtered (" %s", (status & 0x0008) ? "OE" : " ");
|
||||
printf_filtered (" %s", (status & 0x0010) ? "UE" : " ");
|
||||
printf_filtered (" %s", (status & 0x0020) ? "PE" : " ");
|
||||
puts_filtered (" ");
|
||||
printf_filtered (" %s", (status & 0x0080) ? "ES" : " ");
|
||||
puts_filtered (" ");
|
||||
printf_filtered (" %s", (status & 0x0080) ? "SF" : " ");
|
||||
puts_filtered (" ");
|
||||
printf_filtered (" %s", (status & 0x0100) ? "C0" : " ");
|
||||
printf_filtered (" %s", (status & 0x0200) ? "C1" : " ");
|
||||
printf_filtered (" %s", (status & 0x0400) ? "C2" : " ");
|
||||
printf_filtered (" %s", (status & 0x4000) ? "C3" : " ");
|
||||
|
||||
puts_filtered ("\n");
|
||||
|
||||
printf_filtered (" TOP: %d\n", ((status >> 11) & 7));
|
||||
}
|
||||
|
||||
/* Print the control word CONTROL. */
|
||||
static void
|
||||
print_i387_control_word (unsigned int control)
|
||||
{
|
||||
printf_filtered ("Control Word: %s",
|
||||
local_hex_string_custom (control, "04"));
|
||||
puts_filtered (" ");
|
||||
printf_filtered (" %s", (control & 0x0001) ? "IM" : " ");
|
||||
printf_filtered (" %s", (control & 0x0002) ? "DM" : " ");
|
||||
printf_filtered (" %s", (control & 0x0004) ? "ZM" : " ");
|
||||
printf_filtered (" %s", (control & 0x0008) ? "OM" : " ");
|
||||
printf_filtered (" %s", (control & 0x0010) ? "UM" : " ");
|
||||
printf_filtered (" %s", (control & 0x0020) ? "PM" : " ");
|
||||
|
||||
puts_filtered ("\n");
|
||||
|
||||
puts_filtered (" PC: ");
|
||||
switch ((control >> 8) & 3)
|
||||
{
|
||||
case 0:
|
||||
puts_filtered ("Single Precision (24-bits)\n");
|
||||
break;
|
||||
case 1:
|
||||
puts_filtered ("Reserved\n");
|
||||
break;
|
||||
case 2:
|
||||
puts_filtered ("Double Precision (53-bits)\n");
|
||||
break;
|
||||
case 3:
|
||||
puts_filtered ("Extended Precision (64-bits)\n");
|
||||
break;
|
||||
}
|
||||
|
||||
puts_filtered (" RC: ");
|
||||
switch ((control >> 10) & 3)
|
||||
{
|
||||
case 0:
|
||||
puts_filtered ("Round to nearest\n");
|
||||
break;
|
||||
case 1:
|
||||
puts_filtered ("Round down\n");
|
||||
break;
|
||||
case 2:
|
||||
puts_filtered ("Round up\n");
|
||||
break;
|
||||
case 3:
|
||||
puts_filtered ("Round toward zero\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Print out the i387 floating poin state. */
|
||||
void
|
||||
i387_float_info (void)
|
||||
{
|
||||
unsigned int fctrl;
|
||||
unsigned int fstat;
|
||||
unsigned int ftag;
|
||||
unsigned int fiseg;
|
||||
unsigned int fioff;
|
||||
unsigned int foseg;
|
||||
unsigned int fooff;
|
||||
unsigned int fop;
|
||||
int fpreg;
|
||||
int top;
|
||||
|
||||
fctrl = read_register (FCTRL_REGNUM);
|
||||
fstat = read_register (FSTAT_REGNUM);
|
||||
ftag = read_register (FTAG_REGNUM);
|
||||
fiseg = read_register (FCS_REGNUM);
|
||||
fioff = read_register (FCOFF_REGNUM);
|
||||
foseg = read_register (FDS_REGNUM);
|
||||
fooff = read_register (FDOFF_REGNUM);
|
||||
fop = read_register (FOP_REGNUM);
|
||||
|
||||
top = ((fstat >> 11) & 7);
|
||||
|
||||
for (fpreg = 7; fpreg >= 0; fpreg--)
|
||||
{
|
||||
unsigned char raw[FPU_REG_RAW_SIZE];
|
||||
int tag = (ftag >> (fpreg * 2)) & 3;
|
||||
int i;
|
||||
|
||||
printf_filtered ("%sR%d: ", fpreg == top ? "=>" : " ", fpreg);
|
||||
|
||||
switch (tag)
|
||||
{
|
||||
case 0:
|
||||
puts_filtered ("Valid ");
|
||||
break;
|
||||
case 1:
|
||||
puts_filtered ("Zero ");
|
||||
break;
|
||||
case 2:
|
||||
puts_filtered ("Special ");
|
||||
break;
|
||||
case 3:
|
||||
puts_filtered ("Empty ");
|
||||
break;
|
||||
}
|
||||
|
||||
read_register_gen ((fpreg + 8 - top) % 8 + FP0_REGNUM, raw);
|
||||
|
||||
puts_filtered ("0x");
|
||||
for (i = 9; i >= 0; i--)
|
||||
printf_filtered ("%02x", raw[i]);
|
||||
|
||||
if (tag != 3)
|
||||
print_i387_ext (raw);
|
||||
|
||||
puts_filtered ("\n");
|
||||
}
|
||||
|
||||
puts_filtered ("\n");
|
||||
|
||||
print_i387_status_word (fstat);
|
||||
print_i387_control_word (fctrl);
|
||||
printf_filtered ("Tag Word: %s\n",
|
||||
local_hex_string_custom (ftag, "04"));
|
||||
printf_filtered ("Instruction Pointer: %s:",
|
||||
local_hex_string_custom (fiseg, "02"));
|
||||
printf_filtered ("%s\n", local_hex_string_custom (fioff, "08"));
|
||||
printf_filtered ("Operand Pointer: %s:",
|
||||
local_hex_string_custom (foseg, "02"));
|
||||
printf_filtered ("%s\n", local_hex_string_custom (fooff, "08"));
|
||||
printf_filtered ("Opcode: %s\n",
|
||||
local_hex_string_custom (fop ? (fop | 0xd800) : 0, "04"));
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: The functions on this page are used to provide `long double'
|
||||
support for Linux. However, the approach does not seem to be the
|
||||
right one, and we are planning to solve this in a way that should
|
||||
work for all i386 targets. These functions will disappear in the
|
||||
near future, so please don't use them. */
|
||||
#ifdef LD_I387
|
||||
int
|
||||
i387_extract_floating (PTR addr, int len, DOUBLEST *dretptr)
|
||||
|
@ -1,3 +1,11 @@
|
||||
1999-12-06 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* gdb.base/default.exp: Expect the new 'info float' command on
|
||||
all i386 platforms.
|
||||
|
||||
* gdb.threads/linux-dp.exp: Expand our ability to recognize
|
||||
LinuxThreads libraries that don't support debugging.
|
||||
|
||||
Sat Dec 4 15:21:18 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* gdb.base/remote.c: Fill the buffer with truely random data.
|
||||
|
@ -304,8 +304,8 @@ if [istarget "arm-*-*"] then {
|
||||
gdb_test "info float" "Software FPU type.*mask:.*flags:.*" "info float"
|
||||
} elseif [istarget "strongarm-*-*"] then {
|
||||
gdb_test "info float" "Software FPU type.*mask:.*flags:.*" "info float"
|
||||
} elseif [istarget "i\[3456\]86-*-linux-gnu"] then {
|
||||
gdb_test "info float" "No registers."
|
||||
} elseif [istarget "i\[3456\]86-*-*"] then {
|
||||
gdb_test "info float" "R7:.*Status Word:.*Opcode:.*" "info float"
|
||||
} else {
|
||||
gdb_test "info float" "No floating point info available for this processor." "info float"
|
||||
}
|
||||
|
@ -1,3 +1,33 @@
|
||||
1999-12-07 Dave Brolley <brolley@cygnus.com>
|
||||
|
||||
* cgen-par.h (CGEN_FN_MEM_QI_WRITE): New enumerator.
|
||||
(CGEN_FN_MEM_HI_WRITE): New enumerator.
|
||||
(CGEN_FN_MEM_SI_WRITE): New enumerator.
|
||||
(CGEN_FN_MEM_DI_WRITE): New enumerator.
|
||||
(CGEN_FN_MEM_DF_WRITE): New enumerator.
|
||||
(CGEN_FN_MEM_XI_WRITE): New enumerator.
|
||||
(fn_mem_qi_write): New union members.
|
||||
(fn_mem_hi_write): New union members.
|
||||
(fn_mem_si_write): New union members.
|
||||
(fn_mem_di_write): New union members.
|
||||
(fn_mem_df_write): New union members.
|
||||
(fn_mem_xi_write): New union members.
|
||||
(sim_queue_fn_mem_qi_write): New function.
|
||||
(sim_queue_fn_mem_hi_write): New function.
|
||||
(sim_queue_fn_mem_si_write): New function.
|
||||
(sim_queue_fn_mem_di_write): New function.
|
||||
(sim_queue_fn_mem_df_write): New function.
|
||||
(sim_queue_fn_mem_xi_write): New function.
|
||||
* cgen-par.c (sim_queue_fn_mem_qi_write): New function.
|
||||
(sim_queue_fn_mem_hi_write): New function.
|
||||
(sim_queue_fn_mem_si_write): New function.
|
||||
(sim_queue_fn_mem_di_write): New function.
|
||||
(sim_queue_fn_mem_df_write): New function.
|
||||
(sim_queue_fn_mem_xi_write): New function.
|
||||
(cgen_write_queue_element_execute): Handle CGEN_FN_MEM_QI_WRITE,
|
||||
CGEN_FN_MEM_HI_WRITE, CGEN_FN_MEM_SI_WRITE, CGEN_FN_MEM_DI_WRITE,
|
||||
CGEN_FN_MEM_DF_WRITE, CGEN_FN_MEM_XI_WRITE.
|
||||
|
||||
1999-12-01 Dave Brolley <brolley@cygnus.com>
|
||||
|
||||
* cgen-accfp.c (subsf): Check status code.
|
||||
|
@ -233,6 +233,105 @@ void sim_queue_mem_xi_write (SIM_CPU *cpu, SI address, SI *value)
|
||||
element->kinds.mem_xi_write.value[3] = value[3];
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_qi_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, QI),
|
||||
SI address,
|
||||
QI value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_QI_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_qi_write.function = write_function;
|
||||
element->kinds.fn_mem_qi_write.address = address;
|
||||
element->kinds.fn_mem_qi_write.value = value;
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_hi_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, HI),
|
||||
SI address,
|
||||
HI value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_HI_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_hi_write.function = write_function;
|
||||
element->kinds.fn_mem_hi_write.address = address;
|
||||
element->kinds.fn_mem_hi_write.value = value;
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_si_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, SI),
|
||||
SI address,
|
||||
SI value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_SI_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_si_write.function = write_function;
|
||||
element->kinds.fn_mem_si_write.address = address;
|
||||
element->kinds.fn_mem_si_write.value = value;
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_di_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, DI),
|
||||
SI address,
|
||||
DI value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_DI_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_di_write.function = write_function;
|
||||
element->kinds.fn_mem_di_write.address = address;
|
||||
element->kinds.fn_mem_di_write.value = value;
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_df_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, DF),
|
||||
SI address,
|
||||
DF value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_DF_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_df_write.function = write_function;
|
||||
element->kinds.fn_mem_df_write.address = address;
|
||||
element->kinds.fn_mem_df_write.value = value;
|
||||
}
|
||||
|
||||
void sim_queue_fn_mem_xi_write (
|
||||
SIM_CPU *cpu,
|
||||
void (*write_function)(SIM_CPU *cpu, IADDR, SI, SI *),
|
||||
SI address,
|
||||
SI *value
|
||||
)
|
||||
{
|
||||
CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu);
|
||||
CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q);
|
||||
element->kind = CGEN_FN_MEM_XI_WRITE;
|
||||
element->insn_address = CPU_PC_GET (cpu);
|
||||
element->kinds.fn_mem_xi_write.function = write_function;
|
||||
element->kinds.fn_mem_xi_write.address = address;
|
||||
element->kinds.fn_mem_xi_write.value[0] = value[0];
|
||||
element->kinds.fn_mem_xi_write.value[1] = value[1];
|
||||
element->kinds.fn_mem_xi_write.value[2] = value[2];
|
||||
element->kinds.fn_mem_xi_write.value[3] = value[3];
|
||||
}
|
||||
|
||||
/* Execute a write stored on the write queue. */
|
||||
void
|
||||
cgen_write_queue_element_execute (SIM_CPU *cpu, CGEN_WRITE_QUEUE_ELEMENT *item)
|
||||
@ -319,7 +418,44 @@ cgen_write_queue_element_execute (SIM_CPU *cpu, CGEN_WRITE_QUEUE_ELEMENT *item)
|
||||
SETMEMSI (cpu, pc, item->kinds.mem_xi_write.address + 12,
|
||||
item->kinds.mem_xi_write.value[3]);
|
||||
break;
|
||||
case CGEN_FN_MEM_QI_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_qi_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_qi_write.address,
|
||||
item->kinds.fn_mem_qi_write.value);
|
||||
break;
|
||||
case CGEN_FN_MEM_HI_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_hi_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_hi_write.address,
|
||||
item->kinds.fn_mem_hi_write.value);
|
||||
break;
|
||||
case CGEN_FN_MEM_SI_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_si_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_si_write.address,
|
||||
item->kinds.fn_mem_si_write.value);
|
||||
break;
|
||||
case CGEN_FN_MEM_DI_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_di_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_di_write.address,
|
||||
item->kinds.fn_mem_di_write.value);
|
||||
break;
|
||||
case CGEN_FN_MEM_DF_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_df_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_df_write.address,
|
||||
item->kinds.fn_mem_df_write.value);
|
||||
break;
|
||||
case CGEN_FN_MEM_XI_WRITE:
|
||||
pc = item->insn_address;
|
||||
item->kinds.fn_mem_xi_write.function (cpu, pc,
|
||||
item->kinds.fn_mem_xi_write.address,
|
||||
item->kinds.fn_mem_xi_write.value);
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
break; /* FIXME: for now....print message later. */
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,8 @@ enum cgen_write_queue_kind {
|
||||
CGEN_FN_XI_WRITE, CGEN_FN_PC_WRITE,
|
||||
CGEN_MEM_QI_WRITE, CGEN_MEM_HI_WRITE, CGEN_MEM_SI_WRITE, CGEN_MEM_DI_WRITE,
|
||||
CGEN_MEM_DF_WRITE, CGEN_MEM_XI_WRITE,
|
||||
CGEN_FN_MEM_QI_WRITE, CGEN_FN_MEM_HI_WRITE, CGEN_FN_MEM_SI_WRITE,
|
||||
CGEN_FN_MEM_DI_WRITE, CGEN_FN_MEM_DF_WRITE, CGEN_FN_MEM_XI_WRITE,
|
||||
CGEN_NUM_WRITE_KINDS
|
||||
};
|
||||
|
||||
@ -103,12 +105,42 @@ typedef struct {
|
||||
} mem_di_write;
|
||||
struct {
|
||||
SI address;
|
||||
DI value;
|
||||
DF value;
|
||||
} mem_df_write;
|
||||
struct {
|
||||
SI address;
|
||||
SI value[4];
|
||||
} mem_xi_write;
|
||||
struct {
|
||||
SI address;
|
||||
QI value;
|
||||
void (*function)(SIM_CPU *, IADDR, SI, QI);
|
||||
} fn_mem_qi_write;
|
||||
struct {
|
||||
SI address;
|
||||
HI value;
|
||||
void (*function)(SIM_CPU *, IADDR, SI, HI);
|
||||
} fn_mem_hi_write;
|
||||
struct {
|
||||
SI address;
|
||||
SI value;
|
||||
void (*function)(SIM_CPU *, IADDR, SI, SI);
|
||||
} fn_mem_si_write;
|
||||
struct {
|
||||
SI address;
|
||||
DI value;
|
||||
void (*function)(SIM_CPU *, IADDR, SI, DI);
|
||||
} fn_mem_di_write;
|
||||
struct {
|
||||
SI address;
|
||||
DF value;
|
||||
void (*function)(SIM_CPU *, IADDR, SI, DF);
|
||||
} fn_mem_df_write;
|
||||
struct {
|
||||
SI address;
|
||||
SI value[4];
|
||||
void (*function)(SIM_CPU *, IADDR, SI, SI *);
|
||||
} fn_mem_xi_write;
|
||||
} kinds;
|
||||
} CGEN_WRITE_QUEUE_ELEMENT;
|
||||
|
||||
@ -162,4 +194,11 @@ extern void sim_queue_mem_di_write (SIM_CPU *, SI, DI);
|
||||
extern void sim_queue_mem_df_write (SIM_CPU *, SI, DF);
|
||||
extern void sim_queue_mem_xi_write (SIM_CPU *, SI, SI *);
|
||||
|
||||
extern void sim_queue_fn_mem_qi_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, QI), SI, QI);
|
||||
extern void sim_queue_fn_mem_hi_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, HI), SI, HI);
|
||||
extern void sim_queue_fn_mem_si_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, SI), SI, SI);
|
||||
extern void sim_queue_fn_mem_di_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, DI), SI, DI);
|
||||
extern void sim_queue_fn_mem_df_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, DF), SI, DF);
|
||||
extern void sim_queue_fn_mem_xi_write (SIM_CPU *, void (*)(SIM_CPU *, IADDR, SI, SI *), SI, SI *);
|
||||
|
||||
#endif /* CGEN_PAR_H */
|
||||
|
@ -93,21 +93,10 @@ Fri Apr 16 16:47:43 1999 Doug Evans <devans@charmed.cygnus.com>
|
||||
|
||||
* cpu.c,cpu.h: Rebuild.
|
||||
|
||||
start-sanitize-cygnus
|
||||
1999-02-12 Doug Evans <devans@casey.cygnus.com>
|
||||
|
||||
* Makefile.in (stamp-arch,stamp-cpu,stamp-xcpu): CGEN_MAIN_SCM
|
||||
renamed to CGEN_READ_SCM.
|
||||
|
||||
end-sanitize-cygnus
|
||||
1999-02-09 Doug Evans <devans@casey.cygnus.com>
|
||||
|
||||
* Makefile.in (SIM_EXTRA_DEPS): Add m32r-desc.h, delete cpu-opc.h.
|
||||
(stamp-xmloop): s/-parallel/-parallel-write/.
|
||||
start-sanitize-cygnus
|
||||
(stamp-arch,stamp-cpu): Update FLAGS variable, option syntax changed.
|
||||
(stamp-xcpu): Update FLAGS variable, option syntax changed.
|
||||
end-sanitize-cygnus
|
||||
* configure.in (sim_link_files,sim_link_links): Delete.
|
||||
* configure: Rebuild.
|
||||
* decode.c,decode.h,model.c,sem-switch.c,sem.c: Rebuild.
|
||||
@ -135,9 +124,6 @@ Thu Feb 4 16:04:26 1999 Doug Evans <devans@canuck.cygnus.com>
|
||||
|
||||
1999-01-14 Doug Evans <devans@casey.cygnus.com>
|
||||
|
||||
start-sanitize-cygnus
|
||||
* Makefile.in (stamp-arch): Pass FLAGS to cgen.
|
||||
end-sanitize-cygnus
|
||||
* arch.c,arch.h,cpuall.h: Regenerate.
|
||||
* cpu.c,cpu.h,decode.c,decode.h,model.c,sem-switch.c,sem.c: Regenerate.
|
||||
* traps.c (sim_engine_invalid_insn): PCADDR->IADDR.
|
||||
@ -164,9 +150,6 @@ end-sanitize-cygnus
|
||||
(M32RBF_INCLUDE_DEPS): Use CGEN_MAIN_CPU_DEPS.
|
||||
(m32r.o,mloop.o,cpu.o,decode.o,sem.o,model.o): Simplify dependencies.
|
||||
(m32rx.o,mloopx.o,cpux.o,decodex.o,semx.o,modelx.o): Ditto.
|
||||
start-sanitize-cygnus
|
||||
(stamp-arch): Pass mach=all to cgen-arch.
|
||||
end-sanitize-cygnus
|
||||
* cpu.c,cpu.h,decode.c,model.c,sem-switch.c,sem.c: Regenerate.
|
||||
* m32r-sim.h (m32rbf_h_cr_[gs]et_handler): Declare.
|
||||
([GS]ET_H_CR): Define.
|
||||
@ -230,19 +213,10 @@ end-sanitize-cygnus
|
||||
|
||||
* Makefile.in (M32R_OBJS): Delete extract.o.
|
||||
(extract.o): Delete.
|
||||
start-sanitize-cygnus
|
||||
(stamp-arch): Depend on $(CGEN_ARCH_SCM).
|
||||
(stamp-cpu): Don't build extract.c.
|
||||
end-sanitize-cygnus
|
||||
* cpu.c,cpu.h,decode.c,decode.h,sem-switch.c,sem.c: Rebuild.
|
||||
* mloop.in (extract16): Update type of `insn' arg.
|
||||
Delete call to d->extract.
|
||||
(extract32): Ditto.
|
||||
start-sanitize-cygnus
|
||||
* Makefile.in (M32RX_OBJS): Delete extractx.o.
|
||||
(extractx.o): Delete.
|
||||
(stamp-xcpu): Don't build extractx.c.
|
||||
end-sanitize-cygnus
|
||||
* cpux.c,cpux.h,decodex.c,decodex.h,semx-switch.c: Rebuild.
|
||||
* mloopx.in (extractx16): Update type of `insn' arg.
|
||||
Delete call to d->extract. Delete arg pbb_p. All callers updated.
|
||||
@ -282,14 +256,6 @@ Fri Oct 16 09:15:29 1998 Doug Evans <devans@charmed.cygnus.com>
|
||||
|
||||
* sim-if.c (sim_do_command): Handle "sim info reg {bbpsw,bbpc}".
|
||||
|
||||
start-sanitize-cygnus
|
||||
Wed Oct 14 14:49:50 1998 Doug Evans <devans@canuck.cygnus.com>
|
||||
|
||||
* Makefile.in (mloop.o): Don't depend on stamp-cpu, depend on
|
||||
explicit files.
|
||||
(mloopx.o): Ditto for stamp-xcpu.
|
||||
|
||||
end-sanitize-cygnus
|
||||
Fri Oct 9 16:11:58 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
|
||||
Add pseudo-basic-block execution support.
|
||||
@ -297,9 +263,6 @@ Fri Oct 9 16:11:58 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
(SIM_EXTRA_DEPS): Add include/opcode/cgen.h.
|
||||
(INCLUDE_DEPS): Delete cpu-sim.h, include/opcode/cgen.h.
|
||||
(mloop.c): Build pseudo-basic-block version. Depend on stamp-cpu.
|
||||
start-sanitize-cygnus
|
||||
(stamp-decode): Delete, build decode files with other cpu files.
|
||||
end-sanitize-cygnus
|
||||
* arch.c,arch.h,cpuall.h: Regenerate.
|
||||
* cpu.c,cpu.h,decode.c,decode.h,extract.c,model.c: Regenerate.
|
||||
* sem-switch.c,sem.c: Regenerate.
|
||||
@ -330,14 +293,8 @@ end-sanitize-cygnus
|
||||
* configure: Regenerate.
|
||||
* Makefile.in (M32RX_OBJS): Delete semx.o, add extract.o.
|
||||
(mloopx.c): Build pseudo-basic-block version.
|
||||
start-sanitize-cygnus
|
||||
Depend on stamp-xcpu.
|
||||
end-sanitize-cygnus
|
||||
(semx.o): Delete.
|
||||
(extractx.o): Add.
|
||||
start-sanitize-cygnus
|
||||
(stamp-xdecode): Delete, build decode files with other cpu files.
|
||||
end-sanitize-cygnus
|
||||
* cpux.c,cpux.h,decodex.c,decodex.h,modelx.c: Regenerate.
|
||||
* readx.c: Delete.
|
||||
* semx.c: Delete.
|
||||
@ -390,9 +347,6 @@ Mon Aug 3 12:59:17 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
|
||||
Rename cpu m32r to m32rb to distinguish from architecture name.
|
||||
* Makefile.in (mloop.c): cpu m32r renamed to m32rb.
|
||||
start-sanitize-cygnus
|
||||
(stamp-cpu): Ditto.
|
||||
end-sanitize-cygnus
|
||||
* sim-main.h (WANT_CPU_M32RB): Renamed from WANT_CPU_M32R.
|
||||
* tconfig.in (WANT_CPU_M32RB): Ditto.
|
||||
* m32r.c (WANT_CPU_M32RB): Ditto.
|
||||
@ -457,14 +411,6 @@ Sat Jun 13 07:49:23 1998 Doug Evans <devans@fallis.cygnus.com>
|
||||
* mloopx.in: Call cycle init/update fns.
|
||||
* modelx.c: Regenerate.
|
||||
|
||||
start-sanitize-cygnus
|
||||
Thu Jun 11 23:39:53 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
|
||||
* Makefile.in (stamp-{arch,cpu,decode}): Pass CGEN_FLAGS_TO_PASS
|
||||
to recursive makes.
|
||||
(stamp-{xcpu,xdecode}): Ditto.
|
||||
|
||||
end-sanitize-cygnus
|
||||
Wed Jun 10 17:39:29 1998 Doug Evans <devans@canuck.cygnus.com>
|
||||
|
||||
* traps.c: New file. Trap support moved here from sim-if.c.
|
||||
@ -545,9 +491,6 @@ Wed May 6 14:51:39 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
* readx.c: Regenerate. Redo computed goto label handling.
|
||||
* semx.c: Regenerate. Call PROFILE_COUNT_INSN. Finish profiling
|
||||
support.
|
||||
start-sanitize-cygnus
|
||||
* Makefile.in (stamp-xcpu): Turn on profiling support.
|
||||
end-sanitize-cygnus
|
||||
|
||||
* m32r.c (m32r_fetch_register): Change result type and args to
|
||||
conform to sim_fetch_register interface.
|
||||
@ -571,15 +514,6 @@ end-sanitize-cygnus
|
||||
* sim-main.h (sim_cia): Change to USI.
|
||||
(sim_cpu): Move m32r_misc_profile before machine generated part.
|
||||
|
||||
start-sanitize-cygnus
|
||||
Fri May 1 18:25:41 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
|
||||
* Makefile.in: Replace @MAINT@ with $(CGEN_MAINT).
|
||||
(CGEN_MAINT): New variable.
|
||||
* configure.in: Add support for --enable-cgen-maint.
|
||||
* configure: Regenerate.
|
||||
|
||||
end-sanitize-cygnus
|
||||
Tue Apr 28 18:33:31 1998 Geoffrey Noer <noer@cygnus.com>
|
||||
|
||||
* configure: Regenerated to track ../common/aclocal.m4 changes.
|
||||
@ -830,9 +764,6 @@ Mon Jan 19 14:13:40 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
* Makefile.in: Update.
|
||||
* sem-ops.h: Deleted.
|
||||
* mem-ops.h: Deleted.
|
||||
start-sanitize-cygnus
|
||||
Add cgen support for generating files.
|
||||
end-sanitize-cygnus
|
||||
(arch): Renamed from CPU.
|
||||
* cpu.h: New file.
|
||||
* decode.c: Redone.
|
||||
|
@ -116,37 +116,5 @@ modelx.o: modelx.c $(M32RXF_INCLUDE_DEPS)
|
||||
m32r-clean:
|
||||
rm -f mloop.c eng.h stamp-mloop
|
||||
rm -f mloopx.c engx.h stamp-xmloop
|
||||
# start-sanitize-cygnus
|
||||
rm -f stamp-arch stamp-cpu stamp-xcpu
|
||||
# end-sanitize-cygnus
|
||||
rm -f tmp-*
|
||||
|
||||
# start-sanitize-cygnus
|
||||
# cgen support, enable with --enable-cgen-maint
|
||||
CGEN_MAINT = ; @true
|
||||
# The following line is commented in or out depending upon --enable-cgen-maint.
|
||||
@CGEN_MAINT@CGEN_MAINT =
|
||||
|
||||
stamp-arch: $(CGEN_READ_SCM) $(CGEN_ARCH_SCM) $(srccgen)/m32r.cpu
|
||||
$(MAKE) cgen-arch $(CGEN_FLAGS_TO_PASS) mach=all \
|
||||
FLAGS="with-scache with-profile=fn"
|
||||
touch stamp-arch
|
||||
arch.h arch.c cpuall.h: $(CGEN_MAINT) stamp-arch
|
||||
@true
|
||||
|
||||
stamp-cpu: $(CGEN_READ_SCM) $(CGEN_CPU_SCM) $(CGEN_DECODE_SCM) $(srccgen)/m32r.cpu
|
||||
$(MAKE) cgen-cpu-decode $(CGEN_FLAGS_TO_PASS) \
|
||||
cpu=m32rbf mach=m32r SUFFIX= \
|
||||
FLAGS="with-scache with-profile=fn" \
|
||||
EXTRAFILES="$(CGEN_CPU_SEM) $(CGEN_CPU_SEMSW)"
|
||||
touch stamp-cpu
|
||||
cpu.h sem.c sem-switch.c model.c decode.c decode.h: $(CGEN_MAINT) stamp-cpu
|
||||
@true
|
||||
|
||||
stamp-xcpu: $(CGEN_READ_SCM) $(CGEN_CPU_SCM) $(CGEN_DECODE_SCM) $(srccgen)/m32r.cpu
|
||||
$(MAKE) cgen-cpu-decode $(CGEN_FLAGS_TO_PASS) \
|
||||
cpu=m32rxf mach=m32rx SUFFIX=x FLAGS="with-scache with-profile=fn" EXTRAFILES="$(CGEN_CPU_SEMSW)"
|
||||
touch stamp-xcpu
|
||||
cpux.h semx-switch.c modelx.c decodex.c decodex.h: $(CGEN_MAINT) stamp-xcpu
|
||||
@true
|
||||
# end-sanitize-cygnus
|
||||
|
Loading…
Reference in New Issue
Block a user