Print this page
patch fixup2

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libdisasm/common/dis_s390x.c
          +++ new/usr/src/lib/libdisasm/common/dis_s390x.c
↓ open down ↓ 2470 lines elided ↑ open up ↑
2471 2471          [IF_SSa]        = fmt_ss_a,
2472 2472          [IF_SSb]        = fmt_ss_b,
2473 2473          [IF_SSc]        = fmt_ss_c,
2474 2474          [IF_SSd]        = fmt_ss_d,
2475 2475          [IF_SSe]        = fmt_ss_e,
2476 2476          [IF_SSf]        = fmt_ss_f,
2477 2477          [IF_SSE]        = fmt_sse,
2478 2478          [IF_SSF]        = fmt_ssf,
2479 2479  };
2480 2480  
2481      -static int
     2481 +/*
     2482 + * Even if we don't know how to disassemble the instruction, we know how long
     2483 + * it is, so we always succeed.  That is why we can get away with returning
     2484 + * void.
     2485 + */
     2486 +static void
2482 2487  dis_s390(uint64_t addr, union inst *inst, char *buf, size_t buflen, int mach)
2483 2488  {
2484 2489          const struct inst_table *tbl = &tbl_xx[inst->raw[0]];
2485 2490          int tmp;
2486 2491  
     2492 +        /* nothing to do */
     2493 +        if (buflen == 0)
     2494 +                return;
     2495 +
2487 2496          while (tbl->it_fmt == IF_TBL || tbl->it_fmt == IF_MULTI) {
2488 2497                  if (tbl->it_fmt == IF_TBL) {
2489 2498                          int idx;
2490 2499  
2491 2500                          idx   = inst->raw[tbl->it_u.it_table.it_off];
2492 2501                          idx >>= tbl->it_u.it_table.it_shift;
2493 2502                          idx  &= tbl->it_u.it_table.it_mask;
2494 2503  
2495 2504                          tbl = &tbl->it_u.it_table.it_ptr[idx];
2496 2505                  } else if (tbl->it_fmt == IF_MULTI) {
↓ open down ↓ 1 lines elided ↑ open up ↑
2498 2507                  }
2499 2508          }
2500 2509  
2501 2510          if (tbl->it_fmt == IF_INVAL)
2502 2511                  goto inval;
2503 2512  
2504 2513          if ((tbl->it_u.it_inst.it_flags & mach) == 0)
2505 2514                  goto inval;
2506 2515  
2507 2516          tmp = snprintf(buf, buflen, "%-7s ", tbl->it_u.it_inst.it_name);
     2517 +        if (tmp < 0)
     2518 +                return;
2508 2519  
2509 2520          fmt_fxns[tbl->it_fmt](addr, inst, buf + tmp, buflen - tmp,
2510 2521              tbl->it_u.it_inst.it_flags);
2511 2522  
2512      -        return (0);
     2523 +        return;
2513 2524  
2514 2525  inval:
2515 2526          (void) snprintf(buf, buflen, "??");
2516      -
2517      -        /*
2518      -         * Even if we don't know how to disassemble the instruction, we know
2519      -         * how long it is, so we "succeed" even when we fail.
2520      -         */
2521      -        return (0);
2522 2527  }
2523 2528  
2524 2529  static int
2525 2530  dis_s390_supports_flags(int flags)
2526 2531  {
2527 2532          int archflags = flags & DIS_ARCH_MASK;
2528 2533  
2529 2534          if (archflags == DIS_S370 || archflags == DIS_S390_31 ||
2530 2535              archflags == DIS_S390_64)
2531 2536                  return (1);
↓ open down ↓ 23 lines elided ↑ open up ↑
2555 2560                          mach = F_370;
2556 2561                          break;
2557 2562                  case DIS_S390_31:
2558 2563                          mach = F_390;
2559 2564                          break;
2560 2565                  case DIS_S390_64:
2561 2566                          mach = F_Z;
2562 2567                          break;
2563 2568          }
2564 2569  
2565      -        return (dis_s390(addr, &inst, buf, buflen, mach));
     2570 +        dis_s390(addr, &inst, buf, buflen, mach);
     2571 +
     2572 +        return (0);
2566 2573  }
2567 2574  
2568 2575  /* ARGSUSED */
2569 2576  static int
2570 2577  dis_s390_min_instrlen(dis_handle_t *dhp)
2571 2578  {
2572 2579          return (2);
2573 2580  }
2574 2581  
2575 2582  /* ARGSUSED */
↓ open down ↓ 12 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX