Print this page
cleanup


 212                 return (-1);
 213         }
 214 
 215         reslen = (res != NULL) ? strlen(res) : 0;
 216         reslen += prefixlen;
 217         reslen += 1;
 218 
 219         if (reslen > dmp->dm_len) {
 220                 mdb_free(dmp->dm_buf, dmp->dm_len);
 221 
 222                 dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
 223                 if (dmp->dm_buf == NULL) {
 224                         dmp->dm_len = 0;
 225                         mdb_warn("Unable to allocate memory for demangling");
 226                         return (-1);
 227                 }
 228                 dmp->dm_len = reslen;
 229         }
 230 
 231         if (prefixlen > 0)
 232                 (void) strlcpy(dmp->dm_buf, name, prefixlen);


 233 
 234         if (res != NULL) {
 235                 (void) strlcat(dmp->dm_buf, res, dmp->dm_len);
 236                 mdb_dem_free(res, strlen(res) + 1);
 237         }
 238 
 239         /*
 240          * Save the position of the demangled string for mdb_dem_filter()
 241          */
 242         dmp->dm_dem = dmp->dm_buf + prefixlen;
 243 
 244         return (0);
 245 }
 246 
 247 /* used by mdb_io.c:iob_addr2str */
 248 const char *
 249 mdb_dem_convert(mdb_demangler_t *dmp, const char *name)
 250 {
 251         if (mdb_dem_process(dmp, name) != 0 ||
 252             strcmp(dmp->dm_buf, name) == 0)


 310         }
 311 
 312         if (flags & DCMD_ADDRSPEC)
 313                 dmp->dm_flags = ((uint_t)addr & MDB_DM_ALL);
 314 
 315         for (i = 0; i < sizeof (dm_desc) / sizeof (dm_desc[0]); i++) {
 316                 mdb_printf("0x%x\t%s\t%s\n", 1 << i,
 317                     (dmp->dm_flags & (1 << i)) ? "on" : "off", dm_desc[i]);
 318         }
 319 
 320         return (DCMD_OK);
 321 }
 322 
 323 /*ARGSUSED*/
 324 int
 325 cmd_demstr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
 326 {
 327         if ((flags & DCMD_ADDRSPEC) || argc == 0)
 328                 return (DCMD_USAGE);
 329 






 330         for (; argc != 0; argc--, argv++) {
 331                 mdb_printf("%s == %s\n", argv->a_un.a_str,
 332                     mdb_dem_convert(mdb.m_demangler, argv->a_un.a_str));
 333         }
 334 
 335         return (DCMD_OK);
 336 }


 212                 return (-1);
 213         }
 214 
 215         reslen = (res != NULL) ? strlen(res) : 0;
 216         reslen += prefixlen;
 217         reslen += 1;
 218 
 219         if (reslen > dmp->dm_len) {
 220                 mdb_free(dmp->dm_buf, dmp->dm_len);
 221 
 222                 dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
 223                 if (dmp->dm_buf == NULL) {
 224                         dmp->dm_len = 0;
 225                         mdb_warn("Unable to allocate memory for demangling");
 226                         return (-1);
 227                 }
 228                 dmp->dm_len = reslen;
 229         }
 230 
 231         if (prefixlen > 0)
 232                 (void) strlcpy(dmp->dm_buf, name, prefixlen + 1);
 233         else
 234                 *dmp->dm_buf = '\0';
 235 
 236         if (res != NULL) {
 237                 (void) strlcat(dmp->dm_buf, res, dmp->dm_len);
 238                 mdb_dem_free(res, strlen(res) + 1);
 239         }
 240 
 241         /*
 242          * Save the position of the demangled string for mdb_dem_filter()
 243          */
 244         dmp->dm_dem = dmp->dm_buf + prefixlen;
 245 
 246         return (0);
 247 }
 248 
 249 /* used by mdb_io.c:iob_addr2str */
 250 const char *
 251 mdb_dem_convert(mdb_demangler_t *dmp, const char *name)
 252 {
 253         if (mdb_dem_process(dmp, name) != 0 ||
 254             strcmp(dmp->dm_buf, name) == 0)


 312         }
 313 
 314         if (flags & DCMD_ADDRSPEC)
 315                 dmp->dm_flags = ((uint_t)addr & MDB_DM_ALL);
 316 
 317         for (i = 0; i < sizeof (dm_desc) / sizeof (dm_desc[0]); i++) {
 318                 mdb_printf("0x%x\t%s\t%s\n", 1 << i,
 319                     (dmp->dm_flags & (1 << i)) ? "on" : "off", dm_desc[i]);
 320         }
 321 
 322         return (DCMD_OK);
 323 }
 324 
 325 /*ARGSUSED*/
 326 int
 327 cmd_demstr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
 328 {
 329         if ((flags & DCMD_ADDRSPEC) || argc == 0)
 330                 return (DCMD_USAGE);
 331 
 332         if (mdb.m_demangler == NULL && (mdb.m_demangler =
 333             mdb_dem_load()) == NULL) {
 334                 mdb_warn("failed to load demangler");
 335                 return (DCMD_ERR);
 336         }
 337 
 338         for (; argc != 0; argc--, argv++) {
 339                 mdb_printf("%s == %s\n", argv->a_un.a_str,
 340                     mdb_dem_convert(mdb.m_demangler, argv->a_un.a_str));
 341         }
 342 
 343         return (DCMD_OK);
 344 }