Print this page
4436 ::dis -b fails to separate address columns


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)