mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
* gdbarch-utils.h, gdbarch-utils.c: New files.
* Makefile.in (SFILES, COMMON_OBS): Update. (gdbarch_utils_h) Define. (gdbarch-utils.o): Add dependencies. * gdbarch.c, gdbarch.sh: Include "gdbarch-utils.h". Fix code handling default method values. (startup_gdbarch): Rename default_gdbarch, name misleading. (breakpoint_from_pc): Default to legacy_breakpoint_from_pc. (register_name): Default to legacy_register_name. (call_dummy_words): Default to legacy_call_dummy_words. (sizeof_call_dummy_words): Default to legacy_sizeof_call_dummy_words. (register_convertible): Default to generic_register_convertible_not. (breakpoint_from_pc): Default to legacy_breakpoint_from_pc. (remote_translate_xfer_address): Default to generic_remote_translate_xfer_address. (frameless_function_invocation): Default to generic_frameless_function_invocation_not.
This commit is contained in:
parent
ed40e7aff9
commit
c0e8c25248
@ -1,3 +1,26 @@
|
||||
Fri Mar 31 08:59:58 2000 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* gdbarch-utils.h, gdbarch-utils.c: New files.
|
||||
* Makefile.in (SFILES, COMMON_OBS): Update.
|
||||
(gdbarch_utils_h) Define.
|
||||
(gdbarch-utils.o): Add dependencies.
|
||||
|
||||
* gdbarch.c, gdbarch.sh: Include "gdbarch-utils.h". Fix code
|
||||
handling default method values.
|
||||
(startup_gdbarch): Rename default_gdbarch, name misleading.
|
||||
(breakpoint_from_pc): Default to legacy_breakpoint_from_pc.
|
||||
(register_name): Default to legacy_register_name.
|
||||
(call_dummy_words): Default to legacy_call_dummy_words.
|
||||
(sizeof_call_dummy_words): Default to
|
||||
legacy_sizeof_call_dummy_words.
|
||||
(register_convertible): Default to
|
||||
generic_register_convertible_not.
|
||||
(breakpoint_from_pc): Default to legacy_breakpoint_from_pc.
|
||||
(remote_translate_xfer_address): Default to
|
||||
generic_remote_translate_xfer_address.
|
||||
(frameless_function_invocation): Default to
|
||||
generic_frameless_function_invocation_not.
|
||||
|
||||
2000-04-02 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* i386-linux-nat.c: Add copyright notice.
|
||||
|
@ -466,7 +466,7 @@ SFILES = ax-general.c ax-gdb.c bcache.c blockframe.c breakpoint.c \
|
||||
demangle.c dwarfread.c dwarf2read.c elfread.c environ.c eval.c \
|
||||
event-loop.c event-top.c \
|
||||
expprint.c f-exp.y f-lang.c f-typeprint.c f-valprint.c \
|
||||
findvar.c gdbarch.c gdbtypes.c \
|
||||
findvar.c gdbarch.c gdbarch-utils.c gdbtypes.c \
|
||||
inf-loop.c infcmd.c inflow.c infrun.c language.c \
|
||||
kod.c kod-cisco.c \
|
||||
ui-out.c cli-out.c \
|
||||
@ -548,6 +548,7 @@ remote_h = remote.h
|
||||
version_h = version.h
|
||||
ui_out_h = ui-out.h
|
||||
cli_out_h = cli-out.h
|
||||
gdbarch_utils_h = gdbarch-utils.h
|
||||
|
||||
# Header files that need to have srcdir added. Note that in the cases
|
||||
# where we use a macro like $(gdbcmd_h), things are carefully arranged
|
||||
@ -605,7 +606,7 @@ COMMON_OBS = version.o blockframe.o breakpoint.o findvar.o stack.o thread.o \
|
||||
symtab.o symfile.o symmisc.o infcmd.o infrun.o command.o \
|
||||
expprint.o environ.o \
|
||||
event-loop.o event-top.o inf-loop.o \
|
||||
gdbarch.o gdbtypes.o copying.o $(DEPFILES) \
|
||||
gdbarch.o gdbarch-utils.o gdbtypes.o copying.o $(DEPFILES) \
|
||||
mem-break.o target.o parse.o language.o $(YYOBJ) buildsym.o \
|
||||
kod.o kod-cisco.o \
|
||||
gdb-events.o \
|
||||
@ -1353,6 +1354,9 @@ tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(tracepoint_h) \
|
||||
|
||||
gdbarch.o: gdbarch.c $(defs_h) $(bfd_h) $(gdbcmd_h)
|
||||
|
||||
gdbarch-utils.o: gdbarch-utils.c $(defs_h) $(bfd_h) $(gdbcmd_h) \
|
||||
$(gdbarch_utils_h)
|
||||
|
||||
gdbtypes.o: gdbtypes.c $(bfd_h) complaints.h $(defs_h) $(expression_h) \
|
||||
$(gdbtypes_h) language.h objfiles.h symfile.h $(symtab_h) target.h \
|
||||
$(value_h) gdb_string.h
|
||||
@ -1522,6 +1526,7 @@ minsyms.o: minsyms.c $(bfd_h) $(defs_h) objfiles.h symfile.h \
|
||||
mips-nat.o: mips-nat.c $(defs_h) $(gdbcore_h) $(inferior_h)
|
||||
|
||||
mips-tdep.o: mips-tdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \
|
||||
$(gdbarch_utils_h) \
|
||||
$(inferior_h) language.h objfiles.h symfile.h gdb_string.h
|
||||
|
||||
mipsread.o: mipsread.c buildsym.h complaints.h $(bfd_h) $(defs_h) \
|
||||
|
137
gdb/gdbarch-utils.c
Normal file
137
gdb/gdbarch-utils.c
Normal file
@ -0,0 +1,137 @@
|
||||
/* Dynamic architecture support for GDB, the GNU debugger.
|
||||
Copyright 1998-1999, Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
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. */
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
#if GDB_MULTI_ARCH
|
||||
#include "gdbcmd.h"
|
||||
#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
|
||||
#else
|
||||
/* Just include everything in sight so that the every old definition
|
||||
of macro is visible. */
|
||||
#include "gdb_string.h"
|
||||
#include <ctype.h>
|
||||
#include "symtab.h"
|
||||
#include "frame.h"
|
||||
#include "inferior.h"
|
||||
#include "breakpoint.h"
|
||||
#include "gdb_wait.h"
|
||||
#include "gdbcore.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "target.h"
|
||||
#include "gdbthread.h"
|
||||
#include "annotate.h"
|
||||
#include "symfile.h" /* for overlay functions */
|
||||
#endif
|
||||
|
||||
/* Convenience macro for allocting typesafe memory. */
|
||||
|
||||
#ifndef XMALLOC
|
||||
#define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE))
|
||||
#endif
|
||||
|
||||
|
||||
/* Use the program counter to determine the contents and size
|
||||
of a breakpoint instruction. If no target-dependent macro
|
||||
BREAKPOINT_FROM_PC has been defined to implement this function,
|
||||
assume that the breakpoint doesn't depend on the PC, and
|
||||
use the values of the BIG_BREAKPOINT and LITTLE_BREAKPOINT macros.
|
||||
Return a pointer to a string of bytes that encode a breakpoint
|
||||
instruction, stores the length of the string to *lenptr,
|
||||
and optionally adjust the pc to point to the correct memory location
|
||||
for inserting the breakpoint. */
|
||||
|
||||
unsigned char *
|
||||
legacy_breakpoint_from_pc (CORE_ADDR * pcptr, int *lenptr)
|
||||
{
|
||||
/* {BIG_,LITTLE_}BREAKPOINT is the sequence of bytes we insert for a
|
||||
breakpoint. On some machines, breakpoints are handled by the
|
||||
target environment and we don't have to worry about them here. */
|
||||
#ifdef BIG_BREAKPOINT
|
||||
if (TARGET_BYTE_ORDER == BIG_ENDIAN)
|
||||
{
|
||||
static unsigned char big_break_insn[] = BIG_BREAKPOINT;
|
||||
*lenptr = sizeof (big_break_insn);
|
||||
return big_break_insn;
|
||||
}
|
||||
#endif
|
||||
#ifdef LITTLE_BREAKPOINT
|
||||
if (TARGET_BYTE_ORDER != BIG_ENDIAN)
|
||||
{
|
||||
static unsigned char little_break_insn[] = LITTLE_BREAKPOINT;
|
||||
*lenptr = sizeof (little_break_insn);
|
||||
return little_break_insn;
|
||||
}
|
||||
#endif
|
||||
#ifdef BREAKPOINT
|
||||
{
|
||||
static unsigned char break_insn[] = BREAKPOINT;
|
||||
*lenptr = sizeof (break_insn);
|
||||
return break_insn;
|
||||
}
|
||||
#endif
|
||||
*lenptr = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
generic_frameless_function_invocation_not (struct frame_info *fi)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *
|
||||
legacy_register_name (int i)
|
||||
{
|
||||
#ifdef REGISTER_NAMES
|
||||
static char *names[] = REGISTER_NAMES;
|
||||
if (i < 0 || i >= (sizeof (names) / sizeof (*names)))
|
||||
return NULL;
|
||||
else
|
||||
return names[i];
|
||||
#else
|
||||
internal_error ("legacy_register_name: called.");
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined (CALL_DUMMY)
|
||||
LONGEST legacy_call_dummy_words[] = CALL_DUMMY;
|
||||
#else
|
||||
LONGEST legacy_call_dummy_words[1];
|
||||
#endif
|
||||
int legacy_sizeof_call_dummy_words = sizeof (legacy_call_dummy_words);
|
||||
|
||||
void
|
||||
generic_remote_translate_xfer_address (CORE_ADDR gdb_addr, int gdb_len,
|
||||
CORE_ADDR * rem_addr, int *rem_len)
|
||||
{
|
||||
*rem_addr = gdb_addr;
|
||||
*rem_len = gdb_len;
|
||||
}
|
||||
|
||||
/* */
|
||||
|
||||
extern initialize_file_ftype __initialize_gdbarch_utils;
|
||||
|
||||
void
|
||||
__initialize_gdbarch_utils (void)
|
||||
{
|
||||
}
|
52
gdb/gdbarch-utils.h
Normal file
52
gdb/gdbarch-utils.h
Normal file
@ -0,0 +1,52 @@
|
||||
/* Dynamic architecture support for GDB, the GNU debugger.
|
||||
Copyright 1998-2000, Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
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 GDBARCH_UTILS_H
|
||||
#define GDBARCH_UTILS_H
|
||||
|
||||
/* gdbarch trace variable */
|
||||
extern int gdbarch_debug;
|
||||
|
||||
/* Fallback for register convertible. */
|
||||
extern gdbarch_register_convertible_ftype generic_register_convertible_not;
|
||||
|
||||
/* Helper function for targets that don't know how my arguments are
|
||||
being passed */
|
||||
extern gdbarch_frame_num_args_ftype frame_num_args_unknown;
|
||||
|
||||
/* Implementation of breakpoint from PC using any of the deprecated
|
||||
macros BREAKPOINT, LITTLE_BREAKPOINT, BIG_BREAPOINT. For legacy
|
||||
targets that don't yet implement their own breakpoint_from_pc(). */
|
||||
extern gdbarch_breakpoint_from_pc_ftype legacy_breakpoint_from_pc;
|
||||
|
||||
/* Frameless functions not identifable. */
|
||||
extern gdbarch_frameless_function_invocation_ftype generic_frameless_function_invocation_not;
|
||||
|
||||
/* Map onto old REGISTER_NAMES. */
|
||||
extern char *legacy_register_name (int i);
|
||||
|
||||
/* Backward compatible call_dummy_words. */
|
||||
extern LONGEST legacy_call_dummy_words[];
|
||||
extern int legacy_sizeof_call_dummy_words;
|
||||
|
||||
/* Typical remote_translate_xfer_address */
|
||||
extern gdbarch_remote_translate_xfer_address_ftype generic_remote_translate_xfer_address;
|
||||
|
||||
#endif
|
@ -34,6 +34,7 @@
|
||||
|
||||
|
||||
#include "defs.h"
|
||||
#include "gdbarch-utils.h"
|
||||
|
||||
#if GDB_MULTI_ARCH
|
||||
#include "gdbcmd.h"
|
||||
@ -117,7 +118,7 @@ struct gdbarch
|
||||
gdbarch_dump(): Add a fprintf_unfiltered call to so that the new
|
||||
field is dumped out
|
||||
|
||||
``default_gdbarch()'': Append an initial value to the static
|
||||
``startup_gdbarch()'': Append an initial value to the static
|
||||
variable (base values on the host's c-type system).
|
||||
|
||||
get_gdbarch(): Implement the set/get functions (probably using
|
||||
@ -216,7 +217,7 @@ struct gdbarch
|
||||
|
||||
extern const struct bfd_arch_info bfd_default_arch_struct;
|
||||
|
||||
struct gdbarch default_gdbarch = {
|
||||
struct gdbarch startup_gdbarch = {
|
||||
/* basic architecture information */
|
||||
&bfd_default_arch_struct,
|
||||
BIG_ENDIAN,
|
||||
@ -308,9 +309,9 @@ struct gdbarch default_gdbarch = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
/* default_gdbarch() */
|
||||
/* startup_gdbarch() */
|
||||
};
|
||||
struct gdbarch *current_gdbarch = &default_gdbarch;
|
||||
struct gdbarch *current_gdbarch = &startup_gdbarch;
|
||||
|
||||
|
||||
/* Create a new ``struct gdbarch'' based in information provided by
|
||||
@ -334,6 +335,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
|
||||
gdbarch->sp_regnum = -1;
|
||||
gdbarch->fp_regnum = -1;
|
||||
gdbarch->pc_regnum = -1;
|
||||
gdbarch->register_name = legacy_register_name;
|
||||
gdbarch->register_size = -1;
|
||||
gdbarch->register_bytes = -1;
|
||||
gdbarch->max_register_raw_size = -1;
|
||||
@ -344,13 +346,19 @@ gdbarch_alloc (const struct gdbarch_info *info,
|
||||
gdbarch->call_dummy_breakpoint_offset_p = -1;
|
||||
gdbarch->call_dummy_length = -1;
|
||||
gdbarch->call_dummy_p = -1;
|
||||
gdbarch->call_dummy_words = legacy_call_dummy_words;
|
||||
gdbarch->sizeof_call_dummy_words = legacy_sizeof_call_dummy_words;
|
||||
gdbarch->call_dummy_stack_adjust_p = -1;
|
||||
gdbarch->coerce_float_to_double = default_coerce_float_to_double;
|
||||
gdbarch->register_convertible = generic_register_convertible_not;
|
||||
gdbarch->breakpoint_from_pc = legacy_breakpoint_from_pc;
|
||||
gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
|
||||
gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
|
||||
gdbarch->decr_pc_after_break = -1;
|
||||
gdbarch->function_start_offset = -1;
|
||||
gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address;
|
||||
gdbarch->frame_args_skip = -1;
|
||||
gdbarch->frameless_function_invocation = generic_frameless_function_invocation_not;
|
||||
/* gdbarch_alloc() */
|
||||
|
||||
return gdbarch;
|
||||
@ -384,9 +392,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if (gdbarch->bfd_arch_info == NULL)
|
||||
internal_error ("verify_gdbarch: bfd_arch_info unset");
|
||||
/* Check those that need to be defined for the given multi-arch level. */
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (0))
|
||||
internal_error ("gdbarch: verify_gdbarch: bfd_vma_bit invalid");
|
||||
/* Skip verify of bfd_vma_bit, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (gdbarch->ptr_bit == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: ptr_bit invalid");
|
||||
@ -441,9 +447,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->pc_regnum == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: pc_regnum invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->register_name == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: register_name invalid");
|
||||
/* Skip verify of register_name, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->register_size == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: register_size invalid");
|
||||
@ -495,6 +499,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (gdbarch->call_dummy_p == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: call_dummy_p invalid");
|
||||
/* Skip verify of call_dummy_words, invalid_p == 0 */
|
||||
/* Skip verify of sizeof_call_dummy_words, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (gdbarch->call_dummy_stack_adjust_p == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: call_dummy_stack_adjust_p invalid");
|
||||
@ -504,21 +510,13 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->fix_call_dummy == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: fix_call_dummy invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->coerce_float_to_double == default_coerce_float_to_double))
|
||||
internal_error ("gdbarch: verify_gdbarch: coerce_float_to_double invalid");
|
||||
/* Skip verify of coerce_float_to_double, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (gdbarch->get_saved_register == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: get_saved_register invalid");
|
||||
if ((GDB_MULTI_ARCH >= 1)
|
||||
&& (gdbarch->register_convertible == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: register_convertible invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->register_convert_to_virtual == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: register_convert_to_virtual invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->register_convert_to_raw == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: register_convert_to_raw invalid");
|
||||
/* Skip verify of register_convertible, invalid_p == 0 */
|
||||
/* Skip verify of register_convert_to_virtual, invalid_p == 0 */
|
||||
/* Skip verify of register_convert_to_raw, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->extract_return_value == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: extract_return_value invalid");
|
||||
@ -534,12 +532,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->pop_frame == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: pop_frame invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->d10v_make_daddr == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: d10v_make_daddr invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->d10v_make_iaddr == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: d10v_make_iaddr invalid");
|
||||
/* Skip verify of d10v_make_daddr, invalid_p == 0 */
|
||||
/* Skip verify of d10v_make_iaddr, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->d10v_daddr_p == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: d10v_daddr_p invalid");
|
||||
@ -576,30 +570,20 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->inner_than == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: inner_than invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->breakpoint_from_pc == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: breakpoint_from_pc invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (0))
|
||||
internal_error ("gdbarch: verify_gdbarch: memory_insert_breakpoint invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (0))
|
||||
internal_error ("gdbarch: verify_gdbarch: memory_remove_breakpoint invalid");
|
||||
/* Skip verify of breakpoint_from_pc, invalid_p == 0 */
|
||||
/* Skip verify of memory_insert_breakpoint, invalid_p == 0 */
|
||||
/* Skip verify of memory_remove_breakpoint, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->decr_pc_after_break == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: decr_pc_after_break invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->function_start_offset == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: function_start_offset invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->remote_translate_xfer_address == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: remote_translate_xfer_address invalid");
|
||||
/* Skip verify of remote_translate_xfer_address, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->frame_args_skip == -1))
|
||||
internal_error ("gdbarch: verify_gdbarch: frame_args_skip invalid");
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->frameless_function_invocation == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: frameless_function_invocation invalid");
|
||||
/* Skip verify of frameless_function_invocation, invalid_p == 0 */
|
||||
if ((GDB_MULTI_ARCH >= 2)
|
||||
&& (gdbarch->frame_chain == 0))
|
||||
internal_error ("gdbarch: verify_gdbarch: frame_chain invalid");
|
||||
@ -971,8 +955,7 @@ gdbarch_byte_order (struct gdbarch *gdbarch)
|
||||
int
|
||||
gdbarch_bfd_vma_bit (struct gdbarch *gdbarch)
|
||||
{
|
||||
if (0)
|
||||
internal_error ("gdbarch: gdbarch_bfd_vma_bit invalid");
|
||||
/* Skip verify of bfd_vma_bit, invalid_p == 0 */
|
||||
if (gdbarch_debug >= 2)
|
||||
fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_vma_bit called\n");
|
||||
return gdbarch->bfd_vma_bit;
|
||||
@ -1600,6 +1583,7 @@ set_gdbarch_call_dummy_p (struct gdbarch *gdbarch,
|
||||
LONGEST *
|
||||
gdbarch_call_dummy_words (struct gdbarch *gdbarch)
|
||||
{
|
||||
/* Skip verify of call_dummy_words, invalid_p == 0 */
|
||||
if (gdbarch_debug >= 2)
|
||||
fprintf_unfiltered (gdb_stdlog, "gdbarch_call_dummy_words called\n");
|
||||
return gdbarch->call_dummy_words;
|
||||
@ -1615,6 +1599,7 @@ set_gdbarch_call_dummy_words (struct gdbarch *gdbarch,
|
||||
int
|
||||
gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch)
|
||||
{
|
||||
/* Skip verify of sizeof_call_dummy_words, invalid_p == 0 */
|
||||
if (gdbarch_debug >= 2)
|
||||
fprintf_unfiltered (gdb_stdlog, "gdbarch_sizeof_call_dummy_words called\n");
|
||||
return gdbarch->sizeof_call_dummy_words;
|
||||
|
284
gdb/gdbarch.sh
284
gdb/gdbarch.sh
@ -34,8 +34,32 @@ compare_new ()
|
||||
}
|
||||
|
||||
|
||||
# DEFAULT is a valid fallback definition of a MACRO when
|
||||
# multi-arch is not enabled.
|
||||
default_is_fallback_p ()
|
||||
{
|
||||
[ "${default}" != "" -a "${invalid_p}" = "0" ]
|
||||
# FIXME: cagney - not until after 5.0
|
||||
false
|
||||
}
|
||||
|
||||
# Format of the input table
|
||||
read="class level macro returntype function formal actual attrib default init invalid_p fmt print print_p description"
|
||||
read="class level macro returntype function formal actual attrib startup default invalid_p fmt print print_p description"
|
||||
|
||||
do_read ()
|
||||
{
|
||||
if eval read $read
|
||||
then
|
||||
test "${startup}" || startup=0
|
||||
test "${fmt}" || fmt="%ld"
|
||||
test "${print}" || print="(long) ${macro}"
|
||||
#test "${default}" || default=0
|
||||
:
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# dump out/verify the doco
|
||||
for field in ${read}
|
||||
@ -44,90 +68,102 @@ do
|
||||
|
||||
class ) : ;;
|
||||
|
||||
# # -> line disable
|
||||
# f -> function
|
||||
# hiding a function
|
||||
# v -> variable
|
||||
# hiding a variable
|
||||
# i -> set from info
|
||||
# hiding something from the ``struct info'' object
|
||||
# # -> line disable
|
||||
# f -> function
|
||||
# hiding a function
|
||||
# v -> variable
|
||||
# hiding a variable
|
||||
# i -> set from info
|
||||
# hiding something from the ``struct info'' object
|
||||
|
||||
level ) : ;;
|
||||
|
||||
# See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
|
||||
# LEVEL is a predicate on checking that a given method is
|
||||
# initialized (using INVALID_P).
|
||||
# See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
|
||||
# LEVEL is a predicate on checking that a given method is
|
||||
# initialized (using INVALID_P).
|
||||
|
||||
macro ) : ;;
|
||||
|
||||
# The name of the MACRO that this method is to be accessed by.
|
||||
# The name of the MACRO that this method is to be accessed by.
|
||||
|
||||
returntype ) : ;;
|
||||
|
||||
# For functions, the return type; for variables, the data type
|
||||
# For functions, the return type; for variables, the data type
|
||||
|
||||
function ) : ;;
|
||||
|
||||
# For functions, the member function name; for variables, the
|
||||
# variable name. Member function names are always prefixed with
|
||||
# ``gdbarch_'' for name-space purity.
|
||||
# For functions, the member function name; for variables, the
|
||||
# variable name. Member function names are always prefixed with
|
||||
# ``gdbarch_'' for name-space purity.
|
||||
|
||||
formal ) : ;;
|
||||
|
||||
# The formal argument list. It is assumed that the formal
|
||||
# argument list includes the actual name of each list element.
|
||||
# A function with no arguments shall have ``void'' as the formal
|
||||
# argument list.
|
||||
# The formal argument list. It is assumed that the formal
|
||||
# argument list includes the actual name of each list element.
|
||||
# A function with no arguments shall have ``void'' as the
|
||||
# formal argument list.
|
||||
|
||||
actual ) : ;;
|
||||
|
||||
# The list of actual arguments. The arguments specified shall
|
||||
# match the FORMAL list given above. Functions with out
|
||||
# arguments leave this blank.
|
||||
# The list of actual arguments. The arguments specified shall
|
||||
# match the FORMAL list given above. Functions with out
|
||||
# arguments leave this blank.
|
||||
|
||||
attrib ) : ;;
|
||||
|
||||
# Any GCC attributes that should be attached to the function
|
||||
# declaration. At present this field is unused.
|
||||
# Any GCC attributes that should be attached to the function
|
||||
# declaration. At present this field is unused.
|
||||
|
||||
startup ) : ;;
|
||||
|
||||
# To help with the GDB startup a static gdbarch object is
|
||||
# created. STARTUP is the value to insert into that static
|
||||
# gdbarch object.
|
||||
|
||||
# By default ``0'' is used.
|
||||
|
||||
default ) : ;;
|
||||
|
||||
# To help with the GDB startup a default static gdbarch object
|
||||
# is created. DEFAULT is the value to insert into the static
|
||||
# gdbarch object. If empty ZERO is used.
|
||||
# Any initial value to assign to a new gdbarch object after it
|
||||
# as been malloc()ed. Zero is used by default.
|
||||
|
||||
init ) : ;;
|
||||
|
||||
# Any initial value to assign to a new gdbarch object after it
|
||||
# as been malloc()ed. Zero is used by default.
|
||||
# Specify a non-empty DEFAULT and a zero INVALID_P to create a
|
||||
# fallback value or function for when multi-arch is disabled.
|
||||
# Specify a zero DEFAULT function to make that fallback
|
||||
# illegal to call.
|
||||
|
||||
invalid_p ) : ;;
|
||||
|
||||
# A predicate equation that validates MEMBER. Non-zero is returned
|
||||
# if the code creating the new architecture failed to initialize
|
||||
# the MEMBER or initialized the member to something invalid.
|
||||
# By default, a check that the value is no longer equal to INIT
|
||||
# is performed. The equation ``0'' disables the invalid_p check.
|
||||
# A predicate equation that validates MEMBER. Non-zero is
|
||||
# returned if the code creating the new architecture failed to
|
||||
# initialize the MEMBER or initialized the member to something
|
||||
# invalid. By default, a check that the value is no longer
|
||||
# equal to DEFAULT ips performed. The equation ``0'' disables
|
||||
# the invalid_p check.
|
||||
|
||||
fmt ) : ;;
|
||||
|
||||
# printf style format string that can be used to print out the
|
||||
# MEMBER. The default is to assume "%ld" is safe. Sometimes
|
||||
# "%s" is useful. For functions, this is ignored and the
|
||||
# function address is printed.
|
||||
# printf style format string that can be used to print out the
|
||||
# MEMBER. Sometimes "%s" is useful. For functions, this is
|
||||
# ignored and the function address is printed.
|
||||
|
||||
# By default ```%ld'' is used.
|
||||
|
||||
print ) : ;;
|
||||
|
||||
# An optional equation that converts the MEMBER into a value
|
||||
# suitable for that FMT. By default it is assumed that the
|
||||
# member's MACRO cast to long is safe.
|
||||
# An optional equation that casts MEMBER to a value suitable
|
||||
# for formatting by FMT.
|
||||
|
||||
# By default ``(long)'' is used.
|
||||
|
||||
print_p ) : ;;
|
||||
|
||||
# An optional indicator for any predicte to wrap around the
|
||||
# print member code.
|
||||
# # -> Wrap print up in ``#ifdef MACRO''
|
||||
# exp -> Wrap print up in ``if (${print_p}) ...
|
||||
# An optional indicator for any predicte to wrap around the
|
||||
# print member code.
|
||||
|
||||
# # -> Wrap print up in ``#ifdef MACRO''
|
||||
# exp -> Wrap print up in ``if (${print_p}) ...
|
||||
# ``'' -> No predicate
|
||||
|
||||
description ) : ;;
|
||||
|
||||
@ -169,7 +205,7 @@ v:2:NUM_REGS:int:num_regs::::0:-1
|
||||
v:2:SP_REGNUM:int:sp_regnum::::0:-1
|
||||
v:2:FP_REGNUM:int:fp_regnum::::0:-1
|
||||
v:2:PC_REGNUM:int:pc_regnum::::0:-1
|
||||
f:2:REGISTER_NAME:char *:register_name:int regnr:regnr::0:0
|
||||
f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name:0
|
||||
v:2:REGISTER_SIZE:int:register_size::::0:-1
|
||||
v:2:REGISTER_BYTES:int:register_bytes::::0:-1
|
||||
f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
|
||||
@ -188,55 +224,55 @@ v:1:CALL_DUMMY_BREAKPOINT_OFFSET_P:int:call_dummy_breakpoint_offset_p::::0:-1
|
||||
v:2:CALL_DUMMY_LENGTH:int:call_dummy_length::::0:-1::::CALL_DUMMY_LOCATION == BEFORE_TEXT_END || CALL_DUMMY_LOCATION == AFTER_TEXT_END
|
||||
f:2:PC_IN_CALL_DUMMY:int:pc_in_call_dummy:CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address:pc, sp, frame_address::0:0
|
||||
v:1:CALL_DUMMY_P:int:call_dummy_p::::0:-1
|
||||
v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:::0x%08lx
|
||||
v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:::0x%08lx
|
||||
v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:legacy_call_dummy_words:0:0x%08lx
|
||||
v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:legacy_sizeof_call_dummy_words:0:0x%08lx
|
||||
v:1:CALL_DUMMY_STACK_ADJUST_P:int:call_dummy_stack_adjust_p::::0:-1::0x%08lx
|
||||
v:2:CALL_DUMMY_STACK_ADJUST:int:call_dummy_stack_adjust::::0::gdbarch->call_dummy_stack_adjust_p && gdbarch->call_dummy_stack_adjust == 0:0x%08lx::CALL_DUMMY_STACK_ADJUST_P
|
||||
f:2:FIX_CALL_DUMMY:void:fix_call_dummy:char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p:dummy, pc, fun, nargs, args, type, gcc_p::0:0
|
||||
#
|
||||
v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion::::0:::::#
|
||||
v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type::::0:::::#
|
||||
f:2:COERCE_FLOAT_TO_DOUBLE:int:coerce_float_to_double:struct type *formal, struct type *actual:formal, actual:::default_coerce_float_to_double
|
||||
f:2:COERCE_FLOAT_TO_DOUBLE:int:coerce_float_to_double:struct type *formal, struct type *actual:formal, actual:::default_coerce_float_to_double:0
|
||||
f:1:GET_SAVED_REGISTER:void:get_saved_register:char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval:raw_buffer, optimized, addrp, frame, regnum, lval::generic_get_saved_register:0
|
||||
#
|
||||
f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr::0:0
|
||||
f:2:REGISTER_CONVERT_TO_VIRTUAL:void:register_convert_to_virtual:int regnum, struct type *type, char *from, char *to:regnum, type, from, to::0:0
|
||||
f:2:REGISTER_CONVERT_TO_RAW:void:register_convert_to_raw:struct type *type, int regnum, char *from, char *to:type, regnum, from, to::0:0
|
||||
f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_convertible_not:0
|
||||
f:2:REGISTER_CONVERT_TO_VIRTUAL:void:register_convert_to_virtual:int regnum, struct type *type, char *from, char *to:regnum, type, from, to:::0:0
|
||||
f:2:REGISTER_CONVERT_TO_RAW:void:register_convert_to_raw:struct type *type, int regnum, char *from, char *to:type, regnum, from, to:::0:0
|
||||
#
|
||||
f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
|
||||
f:1:PUSH_ARGUMENTS:CORE_ADDR:push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr::0:0
|
||||
f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-::0:0
|
||||
f:1:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp::0:0
|
||||
f:2:POP_FRAME:void:pop_frame:void:-::0:0
|
||||
f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
|
||||
f:1:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
|
||||
f:2:POP_FRAME:void:pop_frame:void:-:::0
|
||||
#
|
||||
# I wish that these would just go away....
|
||||
f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x::0:0
|
||||
f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x:::0:0
|
||||
f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x:::0:0
|
||||
f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0
|
||||
f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0
|
||||
f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0
|
||||
f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0
|
||||
#
|
||||
f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp::0:0
|
||||
f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf::0:0
|
||||
f:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf::0:0
|
||||
f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type::0:0
|
||||
f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
|
||||
f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
|
||||
f:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf:::0
|
||||
f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::0
|
||||
#
|
||||
f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:frame::0:0
|
||||
f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame::0:0
|
||||
f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
|
||||
#
|
||||
f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
|
||||
f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
|
||||
f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr::0:0
|
||||
f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc:0
|
||||
f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint:0
|
||||
f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint:0
|
||||
v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
|
||||
v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
|
||||
#
|
||||
f:2:REMOTE_TRANSLATE_XFER_ADDRESS:void:remote_translate_xfer_address:CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len:gdb_addr, gdb_len, rem_addr, rem_len::0:0
|
||||
f:2:REMOTE_TRANSLATE_XFER_ADDRESS:void:remote_translate_xfer_address:CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len:gdb_addr, gdb_len, rem_addr, rem_len:::generic_remote_translate_xfer_address:0
|
||||
#
|
||||
v:2:FRAME_ARGS_SKIP:CORE_ADDR:frame_args_skip::::0:-1
|
||||
f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi::0:0
|
||||
f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi:::generic_frameless_function_invocation_not:0
|
||||
f:2:FRAME_CHAIN:CORE_ADDR:frame_chain:struct frame_info *frame:frame::0:0
|
||||
f:1:FRAME_CHAIN_VALID:int:frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe::0:0
|
||||
f:2:FRAME_SAVED_PC:CORE_ADDR:frame_saved_pc:struct frame_info *fi:fi::0:0
|
||||
@ -254,14 +290,14 @@ EOF
|
||||
if true
|
||||
then
|
||||
exec > new-gdbarch
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
cat <<EOF
|
||||
${class} ${macro}(${actual})
|
||||
${returntype} ${function} ($formal)${attrib}
|
||||
level=${level}
|
||||
startup=${startup}
|
||||
default=${default}
|
||||
init=${init}
|
||||
invalid_p=${invalid_p}
|
||||
fmt=${fmt}
|
||||
print=${print}
|
||||
@ -369,7 +405,7 @@ EOF
|
||||
echo ""
|
||||
echo ""
|
||||
echo "/* The following are pre-initialized by GDBARCH. */"
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"i" )
|
||||
@ -389,7 +425,7 @@ done
|
||||
echo ""
|
||||
echo ""
|
||||
echo "/* The following are initialized by the target dependant code. */"
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"v" )
|
||||
@ -412,7 +448,10 @@ do
|
||||
echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});"
|
||||
fi
|
||||
echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});"
|
||||
echo "#if GDB_MULTI_ARCH"
|
||||
if ! default_is_fallback_p
|
||||
then
|
||||
echo "#if GDB_MULTI_ARCH"
|
||||
fi
|
||||
echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
|
||||
if [ "${actual}" = "" ]
|
||||
then
|
||||
@ -424,7 +463,10 @@ do
|
||||
echo "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))"
|
||||
fi
|
||||
echo "#endif"
|
||||
echo "#endif"
|
||||
if ! default_is_fallback_p
|
||||
then
|
||||
echo "#endif"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@ -770,6 +812,7 @@ copyright
|
||||
cat <<EOF
|
||||
|
||||
#include "defs.h"
|
||||
#include "gdbarch-utils.h"
|
||||
|
||||
#if GDB_MULTI_ARCH
|
||||
#include "gdbcmd.h"
|
||||
@ -825,7 +868,7 @@ echo ""
|
||||
echo "struct gdbarch"
|
||||
echo "{"
|
||||
echo " /* basic architectural information */"
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"i" ) echo " ${returntype} ${function};" ;;
|
||||
@ -861,7 +904,7 @@ cat <<EOF
|
||||
gdbarch_dump(): Add a fprintf_unfiltered call to so that the new
|
||||
field is dumped out
|
||||
|
||||
\`\`default_gdbarch()'': Append an initial value to the static
|
||||
\`\`startup_gdbarch()'': Append an initial value to the static
|
||||
variable (base values on the host's c-type system).
|
||||
|
||||
get_gdbarch(): Implement the set/get functions (probably using
|
||||
@ -870,7 +913,7 @@ cat <<EOF
|
||||
*/
|
||||
|
||||
EOF
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"v" ) echo " ${returntype} ${function};" ;;
|
||||
@ -889,17 +932,13 @@ EOF
|
||||
echo ""
|
||||
echo "extern const struct bfd_arch_info bfd_default_arch_struct;"
|
||||
echo ""
|
||||
echo "struct gdbarch default_gdbarch = {"
|
||||
echo "struct gdbarch startup_gdbarch = {"
|
||||
echo " /* basic architecture information */"
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"i" )
|
||||
if [ "${default}" = "" ]; then
|
||||
echo " 0,"
|
||||
else
|
||||
echo " ${default},"
|
||||
fi
|
||||
echo " ${startup},"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@ -910,22 +949,18 @@ cat <<EOF
|
||||
0, NULL, NULL,
|
||||
/* Multi-arch values */
|
||||
EOF
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"f" | "v" )
|
||||
if [ "${default}" = "" ]; then
|
||||
echo " 0,"
|
||||
else
|
||||
echo " ${default},"
|
||||
fi
|
||||
echo " ${startup},"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
cat <<EOF
|
||||
/* default_gdbarch() */
|
||||
/* startup_gdbarch() */
|
||||
};
|
||||
struct gdbarch *current_gdbarch = &default_gdbarch;
|
||||
struct gdbarch *current_gdbarch = &startup_gdbarch;
|
||||
EOF
|
||||
|
||||
# Create a new gdbarch struct
|
||||
@ -947,7 +982,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
|
||||
gdbarch->tdep = tdep;
|
||||
EOF
|
||||
echo ""
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"i" ) echo " gdbarch->${function} = info->${function};"
|
||||
@ -955,13 +990,13 @@ do
|
||||
done
|
||||
echo ""
|
||||
echo " /* Force the explicit initialization of these. */"
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"f" | "v" )
|
||||
if [ "${init}" != "" -a "${init}" != "0" ]
|
||||
if [ "${default}" != "" -a "${default}" != "0" ]
|
||||
then
|
||||
echo " gdbarch->${function} = ${init};"
|
||||
echo " gdbarch->${function} = ${default};"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@ -1009,20 +1044,23 @@ verify_gdbarch (struct gdbarch *gdbarch)
|
||||
internal_error ("verify_gdbarch: bfd_arch_info unset");
|
||||
/* Check those that need to be defined for the given multi-arch level. */
|
||||
EOF
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"f" | "v" )
|
||||
if [ "${invalid_p}" ]
|
||||
if [ "${invalid_p}" = "0" ]
|
||||
then
|
||||
echo " if ((GDB_MULTI_ARCH >= ${level})"
|
||||
echo " && (${invalid_p}))"
|
||||
echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
|
||||
elif [ "${init}" ]
|
||||
echo " /* Skip verify of ${function}, invalid_p == 0 */"
|
||||
elif [ "${invalid_p}" ]
|
||||
then
|
||||
echo " if ((GDB_MULTI_ARCH >= ${level})"
|
||||
echo " && (gdbarch->${function} == ${init}))"
|
||||
echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
|
||||
echo " if ((GDB_MULTI_ARCH >= ${level})"
|
||||
echo " && (${invalid_p}))"
|
||||
echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
|
||||
elif [ "${default}" ]
|
||||
then
|
||||
echo " if ((GDB_MULTI_ARCH >= ${level})"
|
||||
echo " && (gdbarch->${function} == ${default}))"
|
||||
echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@ -1041,7 +1079,7 @@ void
|
||||
gdbarch_dump (void)
|
||||
{
|
||||
EOF
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"f" )
|
||||
@ -1051,8 +1089,6 @@ do
|
||||
echo " /*${macro} ()*/);"
|
||||
;;
|
||||
* )
|
||||
test "${fmt}" || fmt="%ld"
|
||||
test "${print}" || print="(long) ${macro}"
|
||||
if [ "${print_p}" = "#" ]
|
||||
then
|
||||
echo "#ifdef ${macro}"
|
||||
@ -1089,7 +1125,7 @@ gdbarch_tdep (struct gdbarch *gdbarch)
|
||||
}
|
||||
EOF
|
||||
echo ""
|
||||
function_list | while eval read $read
|
||||
function_list | while do_read # eval read $read
|
||||
do
|
||||
case "${class}" in
|
||||
"f" )
|
||||
@ -1102,6 +1138,19 @@ do
|
||||
echo "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})"
|
||||
fi
|
||||
echo "{"
|
||||
if default_is_fallback_p && [ "${default}" != "0" ]
|
||||
then
|
||||
echo " if (GDB_MULTI_ARCH == 0)"
|
||||
if [ "${returntype}" = "void" ]
|
||||
then
|
||||
echo " {"
|
||||
echo " ${default} (${actual});"
|
||||
echo " return;"
|
||||
echo " }"
|
||||
else
|
||||
echo " return ${default} (${actual});"
|
||||
fi
|
||||
fi
|
||||
echo " if (gdbarch->${function} == 0)"
|
||||
echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
|
||||
echo " if (gdbarch_debug >= 2)"
|
||||
@ -1127,13 +1176,16 @@ do
|
||||
echo "${returntype}"
|
||||
echo "gdbarch_${function} (struct gdbarch *gdbarch)"
|
||||
echo "{"
|
||||
if [ "${invalid_p}" ]
|
||||
if [ "${invalid_p}" = "0" ]
|
||||
then
|
||||
echo " /* Skip verify of ${function}, invalid_p == 0 */"
|
||||
elif [ "${invalid_p}" ]
|
||||
then
|
||||
echo " if (${invalid_p})"
|
||||
echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
|
||||
elif [ "${init}" ]
|
||||
elif [ "${default}" ]
|
||||
then
|
||||
echo " if (gdbarch->${function} == ${init})"
|
||||
echo " if (gdbarch->${function} == ${default})"
|
||||
echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
|
||||
fi
|
||||
echo " if (gdbarch_debug >= 2)"
|
||||
|
Loading…
Reference in New Issue
Block a user