Print this page
9441 kmdb should stash %cr3 in kdiregs
Reviewed by: John Levon <john.levon@joyent.com>
8956 Implement KPTI
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mdb/intel/mdb/mdb_amd64util.c
          +++ new/usr/src/cmd/mdb/intel/mdb/mdb_amd64util.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  /*
  27      - * Copyright (c) 2012, Joyent, Inc.  All rights reserved.
       27 + * Copyright (c) 2018, Joyent, Inc.  All rights reserved.
  28   28   * Copyright 2014 Nexenta Systems, Inc.  All rights reserved.
  29   29   * Copyright (c) 2013 by Delphix. All rights reserved.
  30   30   */
  31   31  
  32   32  #include <sys/types.h>
  33   33  #include <sys/reg.h>
  34   34  #include <sys/privregs.h>
  35   35  #include <sys/stack.h>
  36   36  #include <sys/frame.h>
  37   37  
↓ open down ↓ 88 lines elided ↑ open up ↑
 126  126          { "err", KREG_ERR, MDB_TGT_R_EXPORT | MDB_TGT_R_PRIV },
 127  127          { "rip", KREG_RIP, MDB_TGT_R_EXPORT },
 128  128          { "cs", KREG_CS, MDB_TGT_R_EXPORT },
 129  129          { "rflags", KREG_RFLAGS, MDB_TGT_R_EXPORT },
 130  130          { "eflags", KREG_RFLAGS, MDB_TGT_R_EXPORT | MDB_TGT_R_32 },
 131  131          { "rsp", KREG_RSP, MDB_TGT_R_EXPORT },
 132  132          { "esp", KREG_RSP, MDB_TGT_R_EXPORT | MDB_TGT_R_32 },
 133  133          { "sp",  KREG_RSP, MDB_TGT_R_EXPORT | MDB_TGT_R_16 },
 134  134          { "spl", KREG_RSP, MDB_TGT_R_EXPORT | MDB_TGT_R_8L },
 135  135          { "ss", KREG_SS, MDB_TGT_R_EXPORT },
      136 +        { "gsbase", KREG_GSBASE, MDB_TGT_R_EXPORT },
      137 +        { "kgsbase", KREG_KGSBASE, MDB_TGT_R_EXPORT },
      138 +        { "cr2", KREG_CR2, MDB_TGT_R_EXPORT },
      139 +        { "cr3", KREG_CR3, MDB_TGT_R_EXPORT },
 136  140          { NULL, 0, 0 }
 137  141  };
 138  142  
 139  143  void
 140  144  mdb_amd64_printregs(const mdb_tgt_gregset_t *gregs)
 141  145  {
 142  146          const kreg_t *kregs = &gregs->kregs[0];
 143  147          kreg_t rflags = kregs[KREG_RFLAGS];
 144  148  
 145  149  #define GETREG2(x) ((uintptr_t)kregs[(x)]), ((uintptr_t)kregs[(x)])
↓ open down ↓ 33 lines elided ↑ open up ↑
 179  183              (rflags & KREG_EFLAGS_OF_MASK) ? "OF" : "of",
 180  184              (rflags & KREG_EFLAGS_DF_MASK) ? "DF" : "df",
 181  185              (rflags & KREG_EFLAGS_IF_MASK) ? "IF" : "if",
 182  186              (rflags & KREG_EFLAGS_TF_MASK) ? "TF" : "tf",
 183  187              (rflags & KREG_EFLAGS_SF_MASK) ? "SF" : "sf",
 184  188              (rflags & KREG_EFLAGS_ZF_MASK) ? "ZF" : "zf",
 185  189              (rflags & KREG_EFLAGS_AF_MASK) ? "AF" : "af",
 186  190              (rflags & KREG_EFLAGS_PF_MASK) ? "PF" : "pf",
 187  191              (rflags & KREG_EFLAGS_CF_MASK) ? "CF" : "cf");
 188  192  
 189      -        mdb_printf("%24s%%cs = 0x%04x\t%%ds = 0x%04x\t%%es = 0x%04x\n",
 190      -            " ", kregs[KREG_CS], kregs[KREG_DS], kregs[KREG_ES]);
 191      -
 192      -        mdb_printf("%%trapno = 0x%x\t\t%%fs = 0x%04x\t%%gs = 0x%04x\n",
 193      -            kregs[KREG_TRAPNO], (kregs[KREG_FS] & 0xffff),
 194      -            (kregs[KREG_GS] & 0xffff));
 195      -        mdb_printf("   %%err = 0x%x\n", kregs[KREG_ERR]);
      193 +        mdb_printf("%%cs = 0x%04x\t%%ds = 0x%04x\t"
      194 +            "%%es = 0x%04x\t%%fs = 0x%04x\n", kregs[KREG_CS], kregs[KREG_DS],
      195 +            kregs[KREG_ES], kregs[KREG_FS] & 0xffff);
      196 +        mdb_printf("%%gs = 0x%04x\t%%gsbase = 0x%lx\t%%kgsbase = 0x%lx\n",
      197 +            kregs[KREG_GS] & 0xffff, kregs[KREG_GSBASE], kregs[KREG_KGSBASE]);
      198 +        mdb_printf("%%trapno = 0x%x\t%%err = 0x%x\t%%cr2 = 0x%lx\t"
      199 +            "%%cr3 = 0x%lx\n", kregs[KREG_TRAPNO], kregs[KREG_ERR],
      200 +            kregs[KREG_CR2], kregs[KREG_CR3]);
 196  201  }
 197  202  
 198  203  int
 199  204  mdb_amd64_kvm_stack_iter(mdb_tgt_t *t, const mdb_tgt_gregset_t *gsp,
 200  205      mdb_tgt_stack_f *func, void *arg)
 201  206  {
 202  207          mdb_tgt_gregset_t gregs;
 203  208          kreg_t *kregs = &gregs.kregs[0];
 204  209          int got_pc = (gsp->kregs[KREG_RIP] != 0);
 205  210          uint_t argc, reg_argc;
↓ open down ↓ 327 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX