* hppa-tdep.h (HPPA_INSN_SIZE): New define.
* hppa-hpux-tdep.c (hppa_hpux_search_pattern) (hppa64_hpux_search_dummy_call_sequence): Rewrite to avoid assumption on sizeof(unsigned).
This commit is contained in:
parent
7c35e3f307
commit
d275c05160
3 changed files with 27 additions and 20 deletions
|
@ -1,5 +1,10 @@
|
||||||
2005-10-29 Mark Kettenis <kettenis@gnu.org>
|
2005-10-29 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
|
* hppa-tdep.h (HPPA_INSN_SIZE): New define.
|
||||||
|
* hppa-hpux-tdep.c (hppa_hpux_search_pattern)
|
||||||
|
(hppa64_hpux_search_dummy_call_sequence): Rewrite to avoid
|
||||||
|
assumption on sizeof(unsigned).
|
||||||
|
|
||||||
* inf-ttrace.c (inf_ttrace_wait): Comment out TARGET_WAITKIND_EXEC
|
* inf-ttrace.c (inf_ttrace_wait): Comment out TARGET_WAITKIND_EXEC
|
||||||
code; return TARGET_WAITKIND_STOPPED instead.
|
code; return TARGET_WAITKIND_STOPPED instead.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Target-dependent code for HP-UX on PA-RISC.
|
/* Target-dependent code for HP-UX on PA-RISC.
|
||||||
|
|
||||||
Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
|
Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -1309,32 +1309,31 @@ static CORE_ADDR
|
||||||
hppa_hpux_search_pattern (CORE_ADDR start, CORE_ADDR end,
|
hppa_hpux_search_pattern (CORE_ADDR start, CORE_ADDR end,
|
||||||
unsigned int *patterns, int count)
|
unsigned int *patterns, int count)
|
||||||
{
|
{
|
||||||
unsigned int *buf;
|
int num_insns = (end - start + HPPA_INSN_SIZE) / HPPA_INSN_SIZE;
|
||||||
|
unsigned int *insns;
|
||||||
|
gdb_byte *buf;
|
||||||
int offset, i;
|
int offset, i;
|
||||||
int region, insns;
|
|
||||||
|
|
||||||
region = end - start + 4;
|
buf = alloca (num_insns * HPPA_INSN_SIZE);
|
||||||
insns = region / 4;
|
insns = alloca (num_insns * sizeof (unsigned int));
|
||||||
buf = (unsigned int *) alloca (region);
|
|
||||||
|
|
||||||
read_memory (start, (char *) buf, region);
|
read_memory (start, buf, num_insns * HPPA_INSN_SIZE);
|
||||||
|
for (i = 0; i < num_insns; i++, buf += HPPA_INSN_SIZE)
|
||||||
|
insns[i] = extract_unsigned_integer (buf, HPPA_INSN_SIZE);
|
||||||
|
|
||||||
for (i = 0; i < insns; i++)
|
for (offset = 0; offset <= num_insns - count; offset++)
|
||||||
buf[i] = extract_unsigned_integer (&buf[i], 4);
|
|
||||||
|
|
||||||
for (offset = 0; offset <= insns - count; offset++)
|
|
||||||
{
|
{
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if ((buf[offset + i] & patterns[i]) != patterns[i])
|
if ((insns[offset + i] & patterns[i]) != patterns[i])
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == count)
|
if (i == count)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset <= insns - count)
|
if (offset <= num_insns - count)
|
||||||
return start + offset * 4;
|
return start + offset * HPPA_INSN_SIZE;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1472,7 +1471,7 @@ hppa64_hpux_search_dummy_call_sequence (struct gdbarch *gdbarch, CORE_ADDR pc,
|
||||||
{
|
{
|
||||||
CORE_ADDR begin, end;
|
CORE_ADDR begin, end;
|
||||||
char *name;
|
char *name;
|
||||||
unsigned int insns[2];
|
gdb_byte buf[2 * HPPA_INSN_SIZE];
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
find_pc_partial_function (SYMBOL_VALUE_ADDRESS (msym), &name,
|
find_pc_partial_function (SYMBOL_VALUE_ADDRESS (msym), &name,
|
||||||
|
@ -1481,16 +1480,16 @@ hppa64_hpux_search_dummy_call_sequence (struct gdbarch *gdbarch, CORE_ADDR pc,
|
||||||
if (name == NULL || begin == 0 || end == 0)
|
if (name == NULL || begin == 0 || end == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (target_read_memory (end - sizeof (insns), (char *)insns, sizeof (insns)) == 0)
|
if (target_read_memory (end - sizeof (buf), buf, sizeof (buf)) == 0)
|
||||||
{
|
{
|
||||||
for (offset = 0; offset < ARRAY_SIZE (insns); offset++)
|
for (offset = 0; offset < sizeof (buf); offset++)
|
||||||
{
|
{
|
||||||
unsigned int insn;
|
unsigned int insn;
|
||||||
|
|
||||||
insn = extract_unsigned_integer (&insns[offset], 4);
|
insn = extract_unsigned_integer (buf + offset, HPPA_INSN_SIZE);
|
||||||
if (insn == 0xe840d002) /* bve,n (rp) */
|
if (insn == 0xe840d002) /* bve,n (rp) */
|
||||||
{
|
{
|
||||||
addr = (end - sizeof (insns)) + (offset * 4);
|
addr = (end - sizeof (buf)) + offset;
|
||||||
goto found_pattern;
|
goto found_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,9 @@ enum hppa_regnum
|
||||||
HPPA_ARG3_REGNUM = 23 /* The fourth argument of a callee. */
|
HPPA_ARG3_REGNUM = 23 /* The fourth argument of a callee. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Instruction size. */
|
||||||
|
#define HPPA_INSN_SIZE 4
|
||||||
|
|
||||||
/* Target-dependent structure in gdbarch. */
|
/* Target-dependent structure in gdbarch. */
|
||||||
struct gdbarch_tdep
|
struct gdbarch_tdep
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue