118 ucontext_t uc;
119
120 if (argc != 0)
121 return (DCMD_USAGE);
122
123 if (mdb_vread(&uc, sizeof (uc), addr) != sizeof (uc)) {
124 mdb_warn("failed to read ucontext at %p", addr);
125 return (DCMD_ERR);
126 }
127
128 mdb_printf(" flags = 0x%lx <%b>\n", uc.uc_flags,
129 (uint_t)uc.uc_flags, uc_flags_bits);
130 mdb_printf(" link = 0x%p\n", uc.uc_link);
131 mdb_printf(" sigmask = 0x%08x 0x%08x 0x%08x 0x%08x\n",
132 uc.uc_sigmask.__sigbits[0], uc.uc_sigmask.__sigbits[1],
133 uc.uc_sigmask.__sigbits[2], uc.uc_sigmask.__sigbits[3]);
134 mdb_printf(" stack = sp 0x%p size 0x%lx flags %s\n",
135 uc.uc_stack.ss_sp, uc.uc_stack.ss_size, stack_flags(&uc.uc_stack));
136 mdb_printf(" mcontext = 0x%p\n",
137 addr + OFFSETOF(ucontext_t, uc_mcontext));
138
139 return (DCMD_OK);
140 }
141
142 /*ARGSUSED*/
143 static int
144 d_sigjmp_buf(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
145 {
146 #if defined(__sparc)
147 struct {
148 int sjs_flags;
149 greg_t sjs_sp;
150 greg_t sjs_pc;
151 greg_t sjs_fp;
152 greg_t sjs_i7;
153 ucontext_t *sjs_uclink;
154 ulong_t sjs_pad[_JBLEN - 6];
155 sigset_t sjs_sigmask;
156 #if defined(_LP64)
157 greg_t sjs_asi;
829 uberdata.uberflags.uf_x.x_mt,
830 uberdata.uberflags.uf_x.x_pad,
831 uberdata.uberflags.uf_x.x_tdb_register_sync,
832 uberdata.uberflags.uf_x.x_thread_error_detection);
833
834 HD("queue_head thr_hash_table hash_size hash_mask");
835 mdb_printf(OFFSTR "%s %s %-10d 0x%x\n",
836 OFFSET(queue_head),
837 prt_addr(uberdata.queue_head, 1),
838 prt_addr(uberdata.thr_hash_table, 1),
839 uberdata.hash_size,
840 uberdata.hash_mask);
841
842 HD("ulwp_one all_lwps all_zombies");
843 mdb_printf(OFFSTR "%s %s %s\n",
844 OFFSET(ulwp_one),
845 prt_addr(uberdata.ulwp_one, 1),
846 prt_addr(uberdata.all_lwps, 1),
847 prt_addr(uberdata.all_zombies, 0));
848
849 HD("nthreads nzombies ndaemons pid sigacthandler");
850 mdb_printf(OFFSTR "%-10d %-10d %-10d %-10d %s\n",
851 OFFSET(nthreads),
852 uberdata.nthreads,
853 uberdata.nzombies,
854 uberdata.ndaemons,
855 (int)uberdata.pid,
856 prt_addr((void *)uberdata.sigacthandler, 0));
857
858 HD("lwp_stacks lwp_laststack nfreestack stk_cache");
859 mdb_printf(OFFSTR "%s %s %-10d %d\n",
860 OFFSET(lwp_stacks),
861 prt_addr(uberdata.lwp_stacks, 1),
862 prt_addr(uberdata.lwp_laststack, 1),
863 uberdata.nfreestack,
864 uberdata.thread_stack_cache);
865
866 HD("ulwp_freelist ulwp_lastfree ulwp_replace_free");
867 mdb_printf(OFFSTR "%s %s %s\n",
868 OFFSET(ulwp_freelist),
869 prt_addr(uberdata.ulwp_freelist, 1),
870 prt_addr(uberdata.ulwp_lastfree, 1),
871 prt_addr(uberdata.ulwp_replace_free, 0));
872
873 HD("ulwp_replace_last atforklist");
874 mdb_printf(OFFSTR "%s %s\n",
875 OFFSET(ulwp_replace_last),
876 prt_addr(uberdata.ulwp_replace_last, 1),
877 prt_addr(uberdata.atforklist, 0));
878
879 HD("robustlocks robustlist progname");
880 mdb_printf(OFFSTR "%s %s %s\n",
881 OFFSET(robustlocks),
882 prt_addr(uberdata.robustlocks, 1),
883 prt_addr(uberdata.robustlist, 1),
884 prt_addr(uberdata.progname, 0));
885
886 HD("tdb_bootstrap tdb_sync_addr_hash tdb_'count tdb_'fail");
887 mdb_printf(OFFSTR "%s %s %-10d %d\n",
888 OFFSET(tdb_bootstrap),
889 prt_addr(uberdata.tdb_bootstrap, 1),
890 prt_addr(uberdata.tdb.tdb_sync_addr_hash, 1),
891 uberdata.tdb.tdb_register_count,
892 uberdata.tdb.tdb_hash_alloc_failed);
893
894 HD("tdb_sync_addr_free tdb_sync_addr_last tdb_sync_alloc");
895 mdb_printf(OFFSTR "%s %s %ld\n",
896 OFFSET(tdb.tdb_sync_addr_free),
897 prt_addr(uberdata.tdb.tdb_sync_addr_free, 1),
898 prt_addr(uberdata.tdb.tdb_sync_addr_last, 1),
899 uberdata.tdb.tdb_sync_alloc);
900
901 HD("tdb_ev_global_mask tdb_events");
902 mdb_printf(OFFSTR "0x%08x 0x%08x %s\n",
903 OFFSET(tdb.tdb_ev_global_mask),
904 uberdata.tdb.tdb_ev_global_mask.event_bits[0],
905 uberdata.tdb.tdb_ev_global_mask.event_bits[1],
|
118 ucontext_t uc;
119
120 if (argc != 0)
121 return (DCMD_USAGE);
122
123 if (mdb_vread(&uc, sizeof (uc), addr) != sizeof (uc)) {
124 mdb_warn("failed to read ucontext at %p", addr);
125 return (DCMD_ERR);
126 }
127
128 mdb_printf(" flags = 0x%lx <%b>\n", uc.uc_flags,
129 (uint_t)uc.uc_flags, uc_flags_bits);
130 mdb_printf(" link = 0x%p\n", uc.uc_link);
131 mdb_printf(" sigmask = 0x%08x 0x%08x 0x%08x 0x%08x\n",
132 uc.uc_sigmask.__sigbits[0], uc.uc_sigmask.__sigbits[1],
133 uc.uc_sigmask.__sigbits[2], uc.uc_sigmask.__sigbits[3]);
134 mdb_printf(" stack = sp 0x%p size 0x%lx flags %s\n",
135 uc.uc_stack.ss_sp, uc.uc_stack.ss_size, stack_flags(&uc.uc_stack));
136 mdb_printf(" mcontext = 0x%p\n",
137 addr + OFFSETOF(ucontext_t, uc_mcontext));
138 mdb_printf(" brand = 0x%p 0x%p 0x%p\n",
139 uc.uc_brand_data[0], uc.uc_brand_data[1], uc.uc_brand_data[2]);
140
141 return (DCMD_OK);
142 }
143
144 /*ARGSUSED*/
145 static int
146 d_sigjmp_buf(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
147 {
148 #if defined(__sparc)
149 struct {
150 int sjs_flags;
151 greg_t sjs_sp;
152 greg_t sjs_pc;
153 greg_t sjs_fp;
154 greg_t sjs_i7;
155 ucontext_t *sjs_uclink;
156 ulong_t sjs_pad[_JBLEN - 6];
157 sigset_t sjs_sigmask;
158 #if defined(_LP64)
159 greg_t sjs_asi;
831 uberdata.uberflags.uf_x.x_mt,
832 uberdata.uberflags.uf_x.x_pad,
833 uberdata.uberflags.uf_x.x_tdb_register_sync,
834 uberdata.uberflags.uf_x.x_thread_error_detection);
835
836 HD("queue_head thr_hash_table hash_size hash_mask");
837 mdb_printf(OFFSTR "%s %s %-10d 0x%x\n",
838 OFFSET(queue_head),
839 prt_addr(uberdata.queue_head, 1),
840 prt_addr(uberdata.thr_hash_table, 1),
841 uberdata.hash_size,
842 uberdata.hash_mask);
843
844 HD("ulwp_one all_lwps all_zombies");
845 mdb_printf(OFFSTR "%s %s %s\n",
846 OFFSET(ulwp_one),
847 prt_addr(uberdata.ulwp_one, 1),
848 prt_addr(uberdata.all_lwps, 1),
849 prt_addr(uberdata.all_zombies, 0));
850
851 HD("nthreads nzombies ndaemons pid");
852 mdb_printf(OFFSTR "%-10d %-10d %-10d %-10d\n",
853 OFFSET(nthreads),
854 uberdata.nthreads,
855 uberdata.nzombies,
856 uberdata.ndaemons,
857 (int)uberdata.pid);
858
859 HD("sigacthandler setctxt");
860 mdb_printf(OFFSTR "%s %s\n",
861 OFFSET(sigacthandler),
862 prt_addr((void *)uberdata.sigacthandler, 1),
863 prt_addr((void *)uberdata.setctxt, 1));
864
865 HD("lwp_stacks lwp_laststack nfreestack stk_cache");
866 mdb_printf(OFFSTR "%s %s %-10d %d\n",
867 OFFSET(lwp_stacks),
868 prt_addr(uberdata.lwp_stacks, 1),
869 prt_addr(uberdata.lwp_laststack, 1),
870 uberdata.nfreestack,
871 uberdata.thread_stack_cache);
872
873 HD("ulwp_freelist ulwp_lastfree ulwp_replace_free");
874 mdb_printf(OFFSTR "%s %s %s\n",
875 OFFSET(ulwp_freelist),
876 prt_addr(uberdata.ulwp_freelist, 1),
877 prt_addr(uberdata.ulwp_lastfree, 1),
878 prt_addr(uberdata.ulwp_replace_free, 0));
879
880 HD("ulwp_replace_last atforklist");
881 mdb_printf(OFFSTR "%s %s\n",
882 OFFSET(ulwp_replace_last),
883 prt_addr(uberdata.ulwp_replace_last, 1),
884 prt_addr(uberdata.atforklist, 0));
885
886 HD("robustlocks robustlist");
887 mdb_printf(OFFSTR "%s %s\n",
888 OFFSET(robustlocks),
889 prt_addr(uberdata.robustlocks, 1),
890 prt_addr(uberdata.robustlist, 1));
891
892 HD("progname ub_broot");
893 mdb_printf(OFFSTR "%s %s\n",
894 OFFSET(progname),
895 prt_addr(uberdata.progname, 1),
896 prt_addr(uberdata.ub_broot, 1));
897
898 HD("tdb_bootstrap tdb_sync_addr_hash tdb_'count tdb_'fail");
899 mdb_printf(OFFSTR "%s %s %-10d %d\n",
900 OFFSET(tdb_bootstrap),
901 prt_addr(uberdata.tdb_bootstrap, 1),
902 prt_addr(uberdata.tdb.tdb_sync_addr_hash, 1),
903 uberdata.tdb.tdb_register_count,
904 uberdata.tdb.tdb_hash_alloc_failed);
905
906 HD("tdb_sync_addr_free tdb_sync_addr_last tdb_sync_alloc");
907 mdb_printf(OFFSTR "%s %s %ld\n",
908 OFFSET(tdb.tdb_sync_addr_free),
909 prt_addr(uberdata.tdb.tdb_sync_addr_free, 1),
910 prt_addr(uberdata.tdb.tdb_sync_addr_last, 1),
911 uberdata.tdb.tdb_sync_alloc);
912
913 HD("tdb_ev_global_mask tdb_events");
914 mdb_printf(OFFSTR "0x%08x 0x%08x %s\n",
915 OFFSET(tdb.tdb_ev_global_mask),
916 uberdata.tdb.tdb_ev_global_mask.event_bits[0],
917 uberdata.tdb.tdb_ev_global_mask.event_bits[1],
|