1993 * If the state is IDLE (i.e. no address space), turn on -f.
1994 */
1995 if (mdb_tgt_status(tgt, &st) == 0 && st.st_state == MDB_TGT_IDLE)
1996 opt_f = TRUE;
1997
1998 if (opt_f)
1999 as = MDB_TGT_AS_FILE;
2000 else
2001 as = MDB_TGT_AS_VIRT;
2002
2003 if (opt_w == FALSE) {
2004 n++;
2005 while ((eaddr == 0 && n-- != 0) || (addr < eaddr)) {
2006 naddr = mdb_dis_ins2str(dis, tgt, as,
2007 buf, sizeof (buf), addr);
2008 if (naddr == addr)
2009 return (DCMD_ERR);
2010 if (opt_a)
2011 mdb_printf("%-#32p%8T%s\n", addr, buf);
2012 else if (opt_b)
2013 mdb_printf("%-#10p%-#32a%8T%s\n",
2014 addr, addr, buf);
2015 else
2016 mdb_printf("%-#32a%8T%s\n", addr, buf);
2017 addr = naddr;
2018 }
2019
2020 } else {
2021 #ifdef __sparc
2022 if (addr & 0x3) {
2023 mdb_warn("address is not properly aligned\n");
2024 return (DCMD_ERR);
2025 }
2026 #endif
2027
2028 for (oaddr = mdb_dis_previns(dis, tgt, as, addr, n);
2029 oaddr < addr; oaddr = naddr) {
2030 naddr = mdb_dis_ins2str(dis, tgt, as,
2031 buf, sizeof (buf), oaddr);
2032 if (naddr == oaddr)
2033 return (DCMD_ERR);
2034 if (opt_a)
2035 mdb_printf("%-#32p%8T%s\n", oaddr, buf);
2036 else if (opt_b)
2037 mdb_printf("%-#10p%-#32a%8T%s\n",
2038 oaddr, oaddr, buf);
2039 else
2040 mdb_printf("%-#32a%8T%s\n", oaddr, buf);
2041 }
2042
2043 if ((naddr = mdb_dis_ins2str(dis, tgt, as,
2044 buf, sizeof (buf), addr)) == addr)
2045 return (DCMD_ERR);
2046
2047 mdb_printf("%<b>");
2048 mdb_flush();
2049 if (opt_a)
2050 mdb_printf("%-#32p%8T%s%", addr, buf);
2051 else if (opt_b)
2052 mdb_printf("%-#10p%-#32a%8T%s", addr, addr, buf);
2053 else
2054 mdb_printf("%-#32a%8T%s%", addr, buf);
2055 mdb_printf("%</b>\n");
2056
2057 for (addr = naddr; n-- != 0; addr = naddr) {
2058 naddr = mdb_dis_ins2str(dis, tgt, as,
2059 buf, sizeof (buf), addr);
2060 if (naddr == addr)
2061 return (DCMD_ERR);
2062 if (opt_a)
2063 mdb_printf("%-#32p%8T%s\n", addr, buf);
2064 else if (opt_b)
2065 mdb_printf("%-#10p%-#32a%8T%s\n",
2066 addr, addr, buf);
2067 else
2068 mdb_printf("%-#32a%8T%s\n", addr, buf);
2069 }
2070 }
2071
2072 mdb_set_dot(addr);
2073 return (DCMD_OK);
2074 }
2075
2076 /*ARGSUSED*/
2077 static int
2078 walk_step(uintptr_t addr, const void *data, void *private)
2079 {
2080 mdb_printf("%#lr\n", addr);
2081 return (WALK_NEXT);
2082 }
2083
2084 static int
2085 cmd_walk(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
|
1993 * If the state is IDLE (i.e. no address space), turn on -f.
1994 */
1995 if (mdb_tgt_status(tgt, &st) == 0 && st.st_state == MDB_TGT_IDLE)
1996 opt_f = TRUE;
1997
1998 if (opt_f)
1999 as = MDB_TGT_AS_FILE;
2000 else
2001 as = MDB_TGT_AS_VIRT;
2002
2003 if (opt_w == FALSE) {
2004 n++;
2005 while ((eaddr == 0 && n-- != 0) || (addr < eaddr)) {
2006 naddr = mdb_dis_ins2str(dis, tgt, as,
2007 buf, sizeof (buf), addr);
2008 if (naddr == addr)
2009 return (DCMD_ERR);
2010 if (opt_a)
2011 mdb_printf("%-#32p%8T%s\n", addr, buf);
2012 else if (opt_b)
2013 mdb_printf("%-#?p %-#32a%8T%s\n",
2014 addr, addr, buf);
2015 else
2016 mdb_printf("%-#32a%8T%s\n", addr, buf);
2017 addr = naddr;
2018 }
2019
2020 } else {
2021 #ifdef __sparc
2022 if (addr & 0x3) {
2023 mdb_warn("address is not properly aligned\n");
2024 return (DCMD_ERR);
2025 }
2026 #endif
2027
2028 for (oaddr = mdb_dis_previns(dis, tgt, as, addr, n);
2029 oaddr < addr; oaddr = naddr) {
2030 naddr = mdb_dis_ins2str(dis, tgt, as,
2031 buf, sizeof (buf), oaddr);
2032 if (naddr == oaddr)
2033 return (DCMD_ERR);
2034 if (opt_a)
2035 mdb_printf("%-#32p%8T%s\n", oaddr, buf);
2036 else if (opt_b)
2037 mdb_printf("%-#?p %-#32a%8T%s\n",
2038 oaddr, oaddr, buf);
2039 else
2040 mdb_printf("%-#32a%8T%s\n", oaddr, buf);
2041 }
2042
2043 if ((naddr = mdb_dis_ins2str(dis, tgt, as,
2044 buf, sizeof (buf), addr)) == addr)
2045 return (DCMD_ERR);
2046
2047 mdb_printf("%<b>");
2048 mdb_flush();
2049 if (opt_a)
2050 mdb_printf("%-#32p%8T%s%", addr, buf);
2051 else if (opt_b)
2052 mdb_printf("%-#?p %-#32a%8T%s", addr, addr, buf);
2053 else
2054 mdb_printf("%-#32a%8T%s%", addr, buf);
2055 mdb_printf("%</b>\n");
2056
2057 for (addr = naddr; n-- != 0; addr = naddr) {
2058 naddr = mdb_dis_ins2str(dis, tgt, as,
2059 buf, sizeof (buf), addr);
2060 if (naddr == addr)
2061 return (DCMD_ERR);
2062 if (opt_a)
2063 mdb_printf("%-#32p%8T%s\n", addr, buf);
2064 else if (opt_b)
2065 mdb_printf("%-#?p %-#32a%8T%s\n",
2066 addr, addr, buf);
2067 else
2068 mdb_printf("%-#32a%8T%s\n", addr, buf);
2069 }
2070 }
2071
2072 mdb_set_dot(addr);
2073 return (DCMD_OK);
2074 }
2075
2076 /*ARGSUSED*/
2077 static int
2078 walk_step(uintptr_t addr, const void *data, void *private)
2079 {
2080 mdb_printf("%#lr\n", addr);
2081 return (WALK_NEXT);
2082 }
2083
2084 static int
2085 cmd_walk(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
|