Print this page
OS-3561 lxbrand emulation library should execute on alternate stack
OS-3558 lxbrand add support for full in-kernel syscall handling
OS-3545 lx_syscall_regs should not walk stack
OS-3868 many LTP testcases now hang
OS-3901 lxbrand lx_recvmsg fails to translate control messages when 64-bit
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Bryan Cantrill <bryan@joyent.com>
OS-2844 lx brand should support 64-bit user-land
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>


 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],