GNU Binutils with patches for OS216
修订版 | 9dacea90b2a61b4a84d3379ec523e82b5c18f184 (tree) |
---|---|
时间 | 2008-09-05 20:45:37 |
作者 | Ulrich Weigand <uweigand@de.i...> |
Commiter | Ulrich Weigand |
* mep-tdep.c (struct mep_prologue): Add gdbarch member.
(check_for_saved): Use it instead of current_gdbarch.
(is_arg_spill): Add gdbarch paramter. Use it instead
of current_gdbarch.
(mep_analyze_prologue): Add gdbarch parameter. Pass it
to is_arg_spill and check_for_saved.
(mep_skip_prologue, mep_analyze_frame_prologue): Update calls.
@@ -1,5 +1,15 @@ | ||
1 | 1 | 2008-09-05 Ulrich Weigand <uweigand@de.ibm.com> |
2 | 2 | |
3 | + * mep-tdep.c (struct mep_prologue): Add gdbarch member. | |
4 | + (check_for_saved): Use it instead of current_gdbarch. | |
5 | + (is_arg_spill): Add gdbarch paramter. Use it instead | |
6 | + of current_gdbarch. | |
7 | + (mep_analyze_prologue): Add gdbarch parameter. Pass it | |
8 | + to is_arg_spill and check_for_saved. | |
9 | + (mep_skip_prologue, mep_analyze_frame_prologue): Update calls. | |
10 | + | |
11 | +2008-09-05 Ulrich Weigand <uweigand@de.ibm.com> | |
12 | + | |
3 | 13 | * hppa-tdep.c (internalize_unwinds): Use objfile architecture |
4 | 14 | instead of current_gdbarch. |
5 | 15 |
@@ -1584,6 +1584,9 @@ mep_get_insn (CORE_ADDR pc, long *insn) | ||
1584 | 1584 | /* This structure holds the results of a prologue analysis. */ |
1585 | 1585 | struct mep_prologue |
1586 | 1586 | { |
1587 | + /* The architecture for which we generated this prologue info. */ | |
1588 | + struct gdbarch *gdbarch; | |
1589 | + | |
1587 | 1590 | /* The offset from the frame base to the stack pointer --- always |
1588 | 1591 | zero or negative. |
1589 | 1592 |
@@ -1635,11 +1638,12 @@ is_arg_reg (pv_t value) | ||
1635 | 1638 | - ADDR is a stack slot's address (e.g., relative to the original |
1636 | 1639 | value of the SP). */ |
1637 | 1640 | static int |
1638 | -is_arg_spill (pv_t value, pv_t addr, struct pv_area *stack) | |
1641 | +is_arg_spill (struct gdbarch *gdbarch, pv_t value, pv_t addr, | |
1642 | + struct pv_area *stack) | |
1639 | 1643 | { |
1640 | 1644 | return (is_arg_reg (value) |
1641 | 1645 | && pv_is_register (addr, MEP_SP_REGNUM) |
1642 | - && ! pv_area_find_reg (stack, current_gdbarch, value.reg, 0)); | |
1646 | + && ! pv_area_find_reg (stack, gdbarch, value.reg, 0)); | |
1643 | 1647 | } |
1644 | 1648 | |
1645 | 1649 |
@@ -1657,7 +1661,7 @@ check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value) | ||
1657 | 1661 | if (value.kind == pvk_register |
1658 | 1662 | && value.k == 0 |
1659 | 1663 | && pv_is_register (addr, MEP_SP_REGNUM) |
1660 | - && size == register_size (current_gdbarch, value.reg)) | |
1664 | + && size == register_size (result->gdbarch, value.reg)) | |
1661 | 1665 | result->reg_offset[value.reg] = addr.k; |
1662 | 1666 | } |
1663 | 1667 |
@@ -1665,7 +1669,8 @@ check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value) | ||
1665 | 1669 | /* Analyze a prologue starting at START_PC, going no further than |
1666 | 1670 | LIMIT_PC. Fill in RESULT as appropriate. */ |
1667 | 1671 | static void |
1668 | -mep_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | |
1672 | +mep_analyze_prologue (struct gdbarch *gdbarch, | |
1673 | + CORE_ADDR start_pc, CORE_ADDR limit_pc, | |
1669 | 1674 | struct mep_prologue *result) |
1670 | 1675 | { |
1671 | 1676 | CORE_ADDR pc; |
@@ -1678,6 +1683,7 @@ mep_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
1678 | 1683 | CORE_ADDR after_last_frame_setup_insn = start_pc; |
1679 | 1684 | |
1680 | 1685 | memset (result, 0, sizeof (*result)); |
1686 | + result->gdbarch = gdbarch; | |
1681 | 1687 | |
1682 | 1688 | for (rn = 0; rn < MEP_NUM_REGS; rn++) |
1683 | 1689 | { |
@@ -1741,7 +1747,7 @@ mep_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
1741 | 1747 | if (pv_area_store_would_trash (stack, reg[rm])) |
1742 | 1748 | break; |
1743 | 1749 | |
1744 | - if (is_arg_spill (reg[rn], reg[rm], stack)) | |
1750 | + if (is_arg_spill (gdbarch, reg[rn], reg[rm], stack)) | |
1745 | 1751 | after_last_frame_setup_insn = next_pc; |
1746 | 1752 | |
1747 | 1753 | pv_area_store (stack, reg[rm], 4, reg[rn]); |
@@ -1758,7 +1764,7 @@ mep_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
1758 | 1764 | if (pv_area_store_would_trash (stack, addr)) |
1759 | 1765 | break; |
1760 | 1766 | |
1761 | - if (is_arg_spill (reg[rn], addr, stack)) | |
1767 | + if (is_arg_spill (gdbarch, reg[rn], addr, stack)) | |
1762 | 1768 | after_last_frame_setup_insn = next_pc; |
1763 | 1769 | |
1764 | 1770 | pv_area_store (stack, addr, 4, reg[rn]); |
@@ -1787,7 +1793,7 @@ mep_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, | ||
1787 | 1793 | if (pv_area_store_would_trash (stack, addr)) |
1788 | 1794 | break; |
1789 | 1795 | |
1790 | - if (is_arg_spill (reg[rn], addr, stack)) | |
1796 | + if (is_arg_spill (gdbarch, reg[rn], addr, stack)) | |
1791 | 1797 | after_last_frame_setup_insn = next_pc; |
1792 | 1798 | |
1793 | 1799 | pv_area_store (stack, addr, size, reg[rn]); |
@@ -1904,7 +1910,7 @@ mep_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) | ||
1904 | 1910 | if (! find_pc_partial_function (pc, &name, &func_addr, &func_end)) |
1905 | 1911 | return pc; |
1906 | 1912 | |
1907 | - mep_analyze_prologue (pc, func_end, &p); | |
1913 | + mep_analyze_prologue (gdbarch, pc, func_end, &p); | |
1908 | 1914 | return p.prologue_end; |
1909 | 1915 | } |
1910 | 1916 |
@@ -1944,7 +1950,8 @@ mep_analyze_frame_prologue (struct frame_info *this_frame, | ||
1944 | 1950 | if (! func_start) |
1945 | 1951 | stop_addr = func_start; |
1946 | 1952 | |
1947 | - mep_analyze_prologue (func_start, stop_addr, *this_prologue_cache); | |
1953 | + mep_analyze_prologue (get_frame_arch (this_frame), | |
1954 | + func_start, stop_addr, *this_prologue_cache); | |
1948 | 1955 | } |
1949 | 1956 | |
1950 | 1957 | return *this_prologue_cache; |