* configure.in: Check for working mmap, ansi headers, string.h,
strings.h, and memory.h. * configure: Regenerated. * gdb_stat.h: New file, "portable" <sys/stat.h>. * gdb_string.h: New file, "portable" <string.h>. * altos-xdep.c, arm-tdep.c, arm-xdep.c, convex-tdep.c, convex-xdep.c, coredep.c, cxux-nat.c, dbxread.c, exec.c, gould-xdep.c, hppa-tdep.c, i386aix-nat.c, i386b-nat.c, i386mach-nat.c, i386v-nat.c, infptrace.c, m88k-nat.c, main.c, mdebugread.c, objfiles.c, os9kread.c, procfs.c, pyr-xdep.c, rs6000-nat.c, source.c, standalone.c, stuff.c, sun386-nat.c, symfile.c, symm-nat.c, symm-tdep.c, symtab.c, top.c, ultra3-nat.c, ultra3-xdep.c, umax-xdep.c, xcoffread.c: Include "gdb_stat.h" instead of <sys/stat.h>. * alpha-tdep.c, breakpoint.c, buildsym.c, c-typeprint.c, ch-typeprint.c, coffread.c, command.c, core-sol2.c, core-svr4.c, core.c, corelow.c, cp-valprint.c, dbxread.c, dcache.c, demangle.c, dpx2-nat.c, dstread.c, dwarfread.c, elfread.c, environ.c, eval.c, exec.c, f-lang.c, f-typeprint.c, f-valprint.c, findvar.c, fork-child.c, gdbtypes.c, hpread.c, i386-tdep.c, infcmd.c, inflow.c, infptrace.c, infrun.c, irix5-nat.c, language.c, m2-typeprint.c, main.c, mdebugread.c, minsyms.c, mipsread.c, monitor.c, nlmread.c, objfiles.c, os9kread.c, osfsolib.c, parse.c, printcmd.c, procfs.c, regex.c, remote-adapt.c, remote-arc.c, remote-array.c, remote-bug.c, remote-e7000.c, remote-eb.c, remote-es.c, remote-hms.c, remote-mm.c, remote-os9k.c, remote-pa.c, remote-sim.c, remote-st.c, remote-udi.c, remote-utils.c, remote-vx.c, remote-vx29k.c, remote-vx68.c, remote-vx960.c, remote-vxmips.c, remote-vxsparc.c, remote.c, solib.c, somread.c, source.c, stabsread.c, stack.c, symfile.c, symmisc.c, symtab.c, target.c, top.c, typeprint.c, utils.c, valarith.c, valops.c, valprint.c, values.c, xcoffread.c: Include "gdb_string.h" instead of <string.h>. * gdbtk.c: Likewise. * config/xm-sysv4.h, i386/xm-ptx.h, m68k/xm-sun3os4.h, sparc/xm-sun4os4.h (HAVE_MMAP): Removed. * config/xm-lynx.h, config/i386/xm-ptx.h, config/m68k/nm-apollo68b.h, config/m68k/xm-hp300hpux.h, config/mips/xm-irix3.h, config/mips/xm-mips.h, config/mips/xm-news-mips.h, config/mips/xm-riscos.h, config/pa/hppah.h, config/rs6000/xm-rs6000.h, config/sparc/xm-sun4os4.h, config/sparc/xm-sun4sol2.h, config/vax/xm-vaxbsd.h, config/vax/xm-vaxult.h, config/vax/xm-vaxult2.h (MEM_FNS_DECLARED): Removed. * config/mips/xm-irix3.h, config/mips/xm-mips.h, config/pa/xm-hppah.h (memcpy, memset): Removed declarations.
This commit is contained in:
parent
a1bdcf913a
commit
2b57629364
137 changed files with 2207 additions and 1157 deletions
|
@ -26,7 +26,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#include "target.h"
|
||||
#include "language.h"
|
||||
#include "demangle.h"
|
||||
#include <string.h>
|
||||
#include "gdb_string.h"
|
||||
|
||||
/* Define whether or not the C operator '/' truncates towards zero for
|
||||
differently signed operands (truncation direction is undefined in C). */
|
||||
|
@ -35,7 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
|
||||
#endif
|
||||
|
||||
static value_ptr value_subscripted_rvalue PARAMS ((value_ptr, value_ptr));
|
||||
static value_ptr value_subscripted_rvalue PARAMS ((value_ptr, value_ptr, int));
|
||||
|
||||
|
||||
value_ptr
|
||||
|
@ -125,29 +125,44 @@ value_ptr
|
|||
value_subscript (array, idx)
|
||||
value_ptr array, idx;
|
||||
{
|
||||
int lowerbound;
|
||||
value_ptr bound;
|
||||
struct type *range_type;
|
||||
int c_style = current_language->c_style_arrays;
|
||||
|
||||
COERCE_REF (array);
|
||||
COERCE_VARYING_ARRAY (array);
|
||||
|
||||
if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_ARRAY
|
||||
|| TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_STRING)
|
||||
{
|
||||
range_type = TYPE_FIELD_TYPE (VALUE_TYPE (array), 0);
|
||||
lowerbound = TYPE_FIELD_BITPOS (range_type, 0);
|
||||
struct type *range_type = TYPE_FIELD_TYPE (VALUE_TYPE (array), 0);
|
||||
int lowerbound = TYPE_LOW_BOUND (range_type);
|
||||
int upperbound = TYPE_HIGH_BOUND (range_type);
|
||||
|
||||
if (VALUE_LVAL (array) != lval_memory)
|
||||
return value_subscripted_rvalue (array, idx, lowerbound);
|
||||
|
||||
if (c_style == 0)
|
||||
{
|
||||
LONGEST index = value_as_long (idx);
|
||||
if (index >= lowerbound && index <= upperbound)
|
||||
return value_subscripted_rvalue (array, idx, lowerbound);
|
||||
warning ("array or string index out of range");
|
||||
/* fall doing C stuff */
|
||||
c_style = 1;
|
||||
}
|
||||
|
||||
if (lowerbound != 0)
|
||||
{
|
||||
bound = value_from_longest (builtin_type_int, (LONGEST) lowerbound);
|
||||
idx = value_sub (idx, bound);
|
||||
}
|
||||
if (VALUE_LVAL (array) != lval_memory)
|
||||
{
|
||||
return value_subscripted_rvalue (array, idx);
|
||||
}
|
||||
|
||||
array = value_coerce_array (array);
|
||||
}
|
||||
return value_ind (value_add (array, idx));
|
||||
if (c_style)
|
||||
return value_ind (value_add (array, idx));
|
||||
else
|
||||
error ("not an array or string");
|
||||
}
|
||||
|
||||
/* Return the value of EXPR[IDX], expr an aggregate rvalue
|
||||
|
@ -155,24 +170,29 @@ value_subscript (array, idx)
|
|||
to doubles, but no longer does. */
|
||||
|
||||
static value_ptr
|
||||
value_subscripted_rvalue (array, idx)
|
||||
value_subscripted_rvalue (array, idx, lowerbound)
|
||||
value_ptr array, idx;
|
||||
int lowerbound;
|
||||
{
|
||||
struct type *elt_type = TYPE_TARGET_TYPE (VALUE_TYPE (array));
|
||||
int elt_size = TYPE_LENGTH (elt_type);
|
||||
int elt_offs = elt_size * longest_to_int (value_as_long (idx));
|
||||
LONGEST index = value_as_long (idx);
|
||||
int elt_offs = elt_size * longest_to_int (index - lowerbound);
|
||||
value_ptr v;
|
||||
|
||||
if (elt_offs >= TYPE_LENGTH (VALUE_TYPE (array)))
|
||||
if (index < lowerbound || elt_offs >= TYPE_LENGTH (VALUE_TYPE (array)))
|
||||
error ("no such vector element");
|
||||
|
||||
v = allocate_value (elt_type);
|
||||
memcpy (VALUE_CONTENTS (v), VALUE_CONTENTS (array) + elt_offs, elt_size);
|
||||
if (VALUE_LAZY (array))
|
||||
VALUE_LAZY (v) = 1;
|
||||
else
|
||||
memcpy (VALUE_CONTENTS (v), VALUE_CONTENTS (array) + elt_offs, elt_size);
|
||||
|
||||
if (VALUE_LVAL (array) == lval_internalvar)
|
||||
VALUE_LVAL (v) = lval_internalvar_component;
|
||||
else
|
||||
VALUE_LVAL (v) = not_lval;
|
||||
VALUE_LVAL (v) = VALUE_LVAL (array);
|
||||
VALUE_ADDRESS (v) = VALUE_ADDRESS (array);
|
||||
VALUE_OFFSET (v) = VALUE_OFFSET (array) + elt_offs;
|
||||
VALUE_BITSIZE (v) = elt_size * 8;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue