Handle breakpoints on L instruction type in MLX instruction bundle by

moving the breakpoint to the third slot (X instruction type) as L holds
only data.
This commit is contained in:
Petr Sorfa 2002-05-10 16:08:24 +00:00
parent f4d733664a
commit 126fa72d9c
2 changed files with 26 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2002-05-10 Petr Sorfa <petrs@caldera.com>
* ia64-tdep.c: Handle breakpoints on L instruction type
in MLX instruction bundle by moving the breakpoint to
the third slot (X instruction type) as L holds only data.
2002-05-10 Kevin Buettner <kevinb@redhat.com>
* dbxread.c (discarding_local_symbols_complaint): New complaint.

View File

@ -564,6 +564,7 @@ ia64_memory_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
long long instr;
int val;
int template;
if (slotnum > 2)
error("Can't insert breakpoint for slot numbers greater than 2.");
@ -571,6 +572,15 @@ ia64_memory_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
addr &= ~0x0f;
val = target_read_memory (addr, bundle, BUNDLE_LEN);
/* Check for L type instruction in 2nd slot, if present then
bump up the slot number to the 3rd slot */
template = extract_bit_field (bundle, 0, 5);
if (slotnum == 1 && template_encoding_table[template][1] == L)
{
slotnum = 2;
}
instr = slotN_contents (bundle, slotnum);
memcpy(contents_cache, &instr, sizeof(instr));
replace_slotN_contents (bundle, BREAKPOINT, slotnum);
@ -587,10 +597,20 @@ ia64_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER;
long long instr;
int val;
int template;
addr &= ~0x0f;
val = target_read_memory (addr, bundle, BUNDLE_LEN);
/* Check for L type instruction in 2nd slot, if present then
bump up the slot number to the 3rd slot */
template = extract_bit_field (bundle, 0, 5);
if (slotnum == 1 && template_encoding_table[template][1] == L)
{
slotnum = 2;
}
memcpy (&instr, contents_cache, sizeof instr);
replace_slotN_contents (bundle, instr, slotnum);
if (val == 0)