Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.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>

*** 123,132 **** --- 123,133 ---- 0, /* nthreads */ 0, /* nzombies */ 0, /* ndaemons */ 0, /* pid */ sigacthandler, /* sigacthandler */ + __setcontext, /* setctxt */ NULL, /* lwp_stacks */ NULL, /* lwp_laststack */ 0, /* nfreestack */ 10, /* thread_stack_cache */ NULL, /* ulwp_freelist */
*** 135,144 **** --- 136,147 ---- NULL, /* ulwp_replace_last */ NULL, /* atforklist */ NULL, /* robustlocks */ NULL, /* robustlist */ NULL, /* progname */ + NULL, /* ub_broot */ + NULL, /* ub_comm_page */ NULL, /* __tdb_bootstrap */ { /* tdb */ NULL, /* tdb_sync_addr_hash */ 0, /* tdb_register_count */ 0, /* tdb_hash_alloc_failed */
*** 1218,1227 **** --- 1221,1253 ---- #ifdef __amd64 extern void __proc64id(void); #endif + static void + init_auxv_data(uberdata_t *udp) + { + Dl_argsinfo_t args; + + udp->ub_broot = NULL; + udp->ub_comm_page = NULL; + if (dlinfo(RTLD_SELF, RTLD_DI_ARGSINFO, &args) < 0) + return; + + while (args.dla_auxv->a_type != AT_NULL) { + switch (args.dla_auxv->a_type) { + case AT_SUN_BRAND_NROOT: + udp->ub_broot = args.dla_auxv->a_un.a_ptr; + break; + case AT_SUN_COMMPAGE: + udp->ub_comm_page = args.dla_auxv->a_un.a_ptr; + break; + } + args.dla_auxv++; + } + } + /* * libc_init() is called by ld.so.1 for library initialization. * We perform minimal initialization; enough to work with the main thread. */ void
*** 1254,1263 **** --- 1280,1297 ---- * Every libc, regardless of which link map, must register __cleanup(). */ (void) _atexit(__cleanup); /* + * Every libc, regardless of link map, needs to go through and check + * its aux vectors. Doing so will indicate whether or not this has + * been given a brand root (used to qualify various other data) or a + * comm page (to optimize certain system actions). + */ + init_auxv_data(udp); + + /* * We keep our uberdata on one of (a) the first alternate link map * or (b) the primary link map. We switch to the primary link map * and stay there once we see it. All intermediate link maps are * subject to being unloaded at any time. */