Lines Matching refs:mp
369 struct module *mp; in kobj_init() local
467 mp = load_exec(bootaux, filename); in kobj_init()
473 if (load_primary(mp, KOBJ_LM_PRIMARY) == -1) in kobj_init()
710 struct module *mp; in load_exec() local
726 mp = kobj_zalloc(sizeof (struct module), KM_WAIT); in load_exec()
727 cp->mod_mp = mp; in load_exec()
734 mp->symtbl_section = 0; in load_exec()
735 mp->shdrs = NULL; in load_exec()
736 mp->strhdr = NULL; in load_exec()
743 mp->symhdr = kobj_zalloc(sizeof (Shdr), KM_WAIT); in load_exec()
746 mp->strhdr = kobj_zalloc(sizeof (Shdr), KM_WAIT); in load_exec()
748 mp->symhdr->sh_type = SHT_SYMTAB; in load_exec()
749 mp->strhdr->sh_type = SHT_STRTAB; in load_exec()
757 mp->symspace = mp->symtbl = (char *)dyn->d_un.d_ptr; in load_exec()
758 mp->symhdr->sh_addr = dyn->d_un.d_ptr; in load_exec()
761 mp->nsyms = *((uint_t *)dyn->d_un.d_ptr + 1); in load_exec()
762 mp->hashsize = *(uint_t *)dyn->d_un.d_ptr; in load_exec()
765 mp->strings = (char *)dyn->d_un.d_ptr; in load_exec()
766 mp->strhdr->sh_addr = dyn->d_un.d_ptr; in load_exec()
769 mp->strhdr->sh_size = dyn->d_un.d_val; in load_exec()
772 mp->symhdr->sh_entsize = dyn->d_un.d_val; in load_exec()
784 mp->depends_on = kobj_alloc(allocsize, KM_WAIT); in load_exec()
791 libname = mp->strings + dyn->d_un.d_val; in load_exec()
807 bcopy(mp->depends_on, tmp, osize); in load_exec()
808 kobj_free(mp->depends_on, allocsize); in load_exec()
809 mp->depends_on = tmp; in load_exec()
812 bcopy(libname, mp->depends_on + osize, lsize); in load_exec()
813 *(mp->depends_on + nsize) = ' '; /* separate */ in load_exec()
818 mp->depends_on[nsize - 1] = '\0'; /* terminate the string */ in load_exec()
824 bcopy(mp->depends_on, tmp, nsize); in load_exec()
825 kobj_free(mp->depends_on, allocsize); in load_exec()
826 mp->depends_on = tmp; in load_exec()
828 kobj_free(mp->depends_on, allocsize); in load_exec()
829 mp->depends_on = NULL; in load_exec()
832 mp->flags = KOBJ_EXEC|KOBJ_PRIM; /* NOT a relocatable .o */ in load_exec()
833 mp->symhdr->sh_size = mp->nsyms * mp->symhdr->sh_entsize; in load_exec()
839 mp->chains = kobj_zalloc(mp->nsyms * sizeof (symid_t), KM_WAIT); in load_exec()
841 mp->buckets = kobj_zalloc(mp->hashsize * sizeof (symid_t), KM_WAIT); in load_exec()
843 mp->text = _text; in load_exec()
844 mp->data = _data; in load_exec()
846 mp->text_size = _etext - _text; in load_exec()
847 mp->data_size = _edata - _data; in load_exec()
849 cp->mod_text = mp->text; in load_exec()
850 cp->mod_text_size = mp->text_size; in load_exec()
852 mp->filename = cp->mod_filename; in load_exec()
856 _kobj_printf(ops, "krtld: file=%s\n", mp->filename); in load_exec()
857 _kobj_printf(ops, "\ttext: 0x%p", mp->text); in load_exec()
858 _kobj_printf(ops, " size: 0x%x\n", mp->text_size); in load_exec()
859 _kobj_printf(ops, "\tdata: 0x%p", mp->data); in load_exec()
860 _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size); in load_exec()
867 for (i = 0; i < mp->nsyms; i++) { in load_exec()
868 sp = (Sym *)(mp->symtbl + i * mp->symhdr->sh_entsize); in load_exec()
880 sym_insert(mp, mp->strings + sp->st_name, i); in load_exec()
884 return (mp); in load_exec()
894 struct module *mp; in load_linker() local
910 mp = kobj_zalloc(sizeof (struct module), KM_WAIT); in load_linker()
912 cp->mod_mp = mp; in load_linker()
913 mp->hdr = *(Ehdr *)bootaux[BA_LDELF].ba_ptr; in load_linker()
914 shsize = mp->hdr.e_shentsize * mp->hdr.e_shnum; in load_linker()
915 mp->shdrs = kobj_alloc(shsize, KM_WAIT); in load_linker()
916 bcopy(bootaux[BA_LDSHDR].ba_ptr, mp->shdrs, shsize); in load_linker()
918 for (i = 1; i < (int)mp->hdr.e_shnum; i++) { in load_linker()
919 shp = (Shdr *)(mp->shdrs + (i * mp->hdr.e_shentsize)); in load_linker()
923 if (mp->data == NULL) in load_linker()
924 mp->data = (char *)shp->sh_addr; in load_linker()
925 } else if (mp->text == NULL) { in load_linker()
926 mp->text = (char *)shp->sh_addr; in load_linker()
930 mp->symtbl_section = i; in load_linker()
931 mp->symhdr = shp; in load_linker()
932 mp->symspace = mp->symtbl = (char *)shp->sh_addr; in load_linker()
935 mp->nsyms = mp->symhdr->sh_size / mp->symhdr->sh_entsize; in load_linker()
936 mp->flags = KOBJ_INTERP|KOBJ_PRIM; in load_linker()
937 mp->strhdr = (Shdr *) in load_linker()
938 (mp->shdrs + mp->symhdr->sh_link * mp->hdr.e_shentsize); in load_linker()
939 mp->strings = (char *)mp->strhdr->sh_addr; in load_linker()
940 mp->hashsize = kobj_gethashsize(mp->nsyms); in load_linker()
942 mp->symsize = mp->symhdr->sh_size + mp->strhdr->sh_size + sizeof (int) + in load_linker()
943 (mp->hashsize + mp->nsyms) * sizeof (symid_t); in load_linker()
945 mp->chains = kobj_zalloc(mp->nsyms * sizeof (symid_t), KM_WAIT); in load_linker()
946 mp->buckets = kobj_zalloc(mp->hashsize * sizeof (symid_t), KM_WAIT); in load_linker()
948 mp->bss = bootaux[BA_BSS].ba_val; in load_linker()
949 mp->bss_align = 0; /* pre-aligned during allocation */ in load_linker()
950 mp->bss_size = (uintptr_t)_edata - mp->bss; in load_linker()
951 mp->text_size = _etext - mp->text; in load_linker()
952 mp->data_size = _edata - mp->data; in load_linker()
953 mp->filename = cp->mod_filename; in load_linker()
954 cp->mod_text = mp->text; in load_linker()
955 cp->mod_text_size = mp->text_size; in load_linker()
961 kmp->text_size = (size_t)(mp->text - kmp->text); in load_linker()
962 kmp->data_size = (size_t)(mp->data - kmp->data); in load_linker()
967 _kobj_printf(ops, "krtld: file=%s\n", mp->filename); in load_linker()
968 _kobj_printf(ops, "\ttext:0x%p", mp->text); in load_linker()
969 _kobj_printf(ops, " size: 0x%x\n", mp->text_size); in load_linker()
970 _kobj_printf(ops, "\tdata:0x%p", mp->data); in load_linker()
971 _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size); in load_linker()
978 for (i = 0; i < mp->nsyms; i++) { in load_linker()
979 sp = (Sym *)(mp->symtbl + i * mp->symhdr->sh_entsize); in load_linker()
987 sym_insert(mp, mp->strings + sp->st_name, i); in load_linker()
1139 struct module *mp; in bind_primary() local
1145 mp = mod(lp); in bind_primary()
1151 if (mp->flags & (KOBJ_EXEC|KOBJ_INTERP)) in bind_primary()
1154 if (do_common(mp) < 0) in bind_primary()
1162 mp = mod(lp); in bind_primary()
1164 if (do_symbols(mp, 0) < 0) in bind_primary()
1172 mp = mod(lp); in bind_primary()
1174 if (mp->flags & KOBJ_EXEC) { in bind_primary()
1205 "module %s\n", mp->filename); in bind_primary()
1211 "KOBJ_EXEC\n", mp->filename); in bind_primary()
1213 if (do_relocate(mp, rela, shtype, relasz/relaent, in bind_primary()
1214 relaent, (Addr)mp->text) < 0) in bind_primary()
1217 if (do_relocations(mp) < 0) in bind_primary()
1221 kobj_sync_instruction_memory(mp->text, mp->text_size); in bind_primary()
1225 mp = mod(lp); in bind_primary()
1233 if (mp->flags & KOBJ_EXEC) { in bind_primary()
1237 file = kobj_open_file(mp->filename); in bind_primary()
1240 if (kobj_read_file(file, (char *)&mp->hdr, in bind_primary()
1241 sizeof (mp->hdr), 0) < 0) in bind_primary()
1243 n = mp->hdr.e_shentsize * mp->hdr.e_shnum; in bind_primary()
1244 mp->shdrs = kobj_alloc(n, KM_WAIT); in bind_primary()
1245 if (kobj_read_file(file, mp->shdrs, n, in bind_primary()
1246 mp->hdr.e_shoff) < 0) in bind_primary()
1248 if (get_syms(mp, file) < 0) in bind_primary()
1250 if (get_ctf(mp, file) < 0) in bind_primary()
1253 mp->flags |= KOBJ_RELOCATED; in bind_primary()
1255 } else if (mp->flags & KOBJ_INTERP) { in bind_primary()
1263 file = kobj_open_path(mp->filename, 1, 0); in bind_primary()
1266 if (get_ctf(mp, file) < 0) in bind_primary()
1269 mp->flags |= KOBJ_RELOCATED; in bind_primary()
1295 load_primary(struct module *mp, int lmid) in load_primary() argument
1302 if ((p = mp->depends_on) == NULL) in load_primary()
1345 add_dependent(mp, dmp); in load_primary()
1382 struct module *mp; in load_kmdb() local
1400 if ((mp = mctl->mod_mp) == NULL) in load_kmdb()
1403 mp->flags |= KOBJ_PRIM; in load_kmdb()
1405 if (load_primary(mp, KOBJ_LM_DEBUGGER) < 0) in load_kmdb()
1437 depends_on(struct module *mp) in depends_on() argument
1446 if ((sp = lookup_one(mp, "_depends_on")) == NULL) in depends_on()
1461 mp->filename); in depends_on()
1469 if (kobj_addrcheck(mp, q) || q[sp->st_size - 1] != '\0') { in depends_on()
1471 mp->filename); in depends_on()
1484 struct module *mp; in kobj_getmodinfo() local
1485 mp = (struct module *)xmp; in kobj_getmodinfo()
1487 modinfo->mi_base = mp->text; in kobj_getmodinfo()
1488 modinfo->mi_size = mp->text_size + mp->data_size; in kobj_getmodinfo()
1500 kobj_export_ksyms(struct module *mp) in kobj_export_ksyms() argument
1502 Sym *esp = (Sym *)(mp->symtbl + mp->symhdr->sh_size); in kobj_export_ksyms()
1508 size_t symsize = mp->symhdr->sh_entsize; in kobj_export_ksyms()
1516 bcopy(mp, omp, sizeof (struct module)); in kobj_export_ksyms()
1534 mp->nsyms = nsyms; in kobj_export_ksyms()
1535 mp->hashsize = kobj_gethashsize(mp->nsyms); in kobj_export_ksyms()
1548 mp->symsize = (2 * sizeof (Shdr)) + (nsyms * symsize) + in kobj_export_ksyms()
1549 (mp->hashsize + mp->nsyms) * sizeof (symid_t) + strsize; in kobj_export_ksyms()
1551 if (mp->flags & KOBJ_NOKSYMS) { in kobj_export_ksyms()
1552 mp->symspace = kobj_alloc(mp->symsize, KM_WAIT); in kobj_export_ksyms()
1554 mp->symspace = vmem_alloc(ksyms_arena, mp->symsize, in kobj_export_ksyms()
1557 bzero(mp->symspace, mp->symsize); in kobj_export_ksyms()
1562 mp->shdrs = mp->symspace; in kobj_export_ksyms()
1563 mp->symhdr = (Shdr *)mp->shdrs; in kobj_export_ksyms()
1564 mp->strhdr = (Shdr *)(mp->symhdr + 1); in kobj_export_ksyms()
1565 mp->symtbl = (char *)(mp->strhdr + 1); in kobj_export_ksyms()
1566 mp->buckets = (symid_t *)(mp->symtbl + (nsyms * symsize)); in kobj_export_ksyms()
1567 mp->chains = (symid_t *)(mp->buckets + mp->hashsize); in kobj_export_ksyms()
1568 mp->strings = (char *)(mp->chains + nsyms); in kobj_export_ksyms()
1573 mp->hdr.e_shnum = 2; in kobj_export_ksyms()
1574 mp->symtbl_section = 0; in kobj_export_ksyms()
1576 mp->symhdr->sh_type = SHT_SYMTAB; in kobj_export_ksyms()
1577 mp->symhdr->sh_addr = (Addr)mp->symtbl; in kobj_export_ksyms()
1578 mp->symhdr->sh_size = nsyms * symsize; in kobj_export_ksyms()
1579 mp->symhdr->sh_link = 1; in kobj_export_ksyms()
1580 mp->symhdr->sh_info = locals; in kobj_export_ksyms()
1581 mp->symhdr->sh_addralign = sizeof (Addr); in kobj_export_ksyms()
1582 mp->symhdr->sh_entsize = symsize; in kobj_export_ksyms()
1584 mp->strhdr->sh_type = SHT_STRTAB; in kobj_export_ksyms()
1585 mp->strhdr->sh_addr = (Addr)mp->strings; in kobj_export_ksyms()
1586 mp->strhdr->sh_size = strsize; in kobj_export_ksyms()
1587 mp->strhdr->sh_addralign = 1; in kobj_export_ksyms()
1599 sp = (Sym *)(mp->symtbl + symsize * nsyms); in kobj_export_ksyms()
1601 bcopy(name, mp->strings + strsize, namelen); in kobj_export_ksyms()
1603 sym_insert(mp, name, nsyms); in kobj_export_ksyms()
1613 if (!(mp->flags & KOBJ_PRIM)) { in kobj_export_ksyms()
1634 if (!(mp->flags & KOBJ_PRIM)) in kobj_export_ksyms()
1640 kobj_export_ctf(struct module *mp) in kobj_export_ctf() argument
1642 char *data = mp->ctfdata; in kobj_export_ctf()
1643 size_t size = mp->ctfsize; in kobj_export_ctf()
1647 mp->ctfdata = NULL; in kobj_export_ctf()
1648 mp->ctfsize = 0; in kobj_export_ctf()
1650 mp->ctfdata = vmem_alloc(ctf_arena, size, in kobj_export_ctf()
1652 bcopy(data, mp->ctfdata, size); in kobj_export_ctf()
1655 if (!(mp->flags & KOBJ_PRIM)) in kobj_export_ctf()
1661 kobj_export_module(struct module *mp) in kobj_export_module() argument
1663 kobj_export_ksyms(mp); in kobj_export_module()
1664 kobj_export_ctf(mp); in kobj_export_module()
1666 mp->flags |= KOBJ_EXPORTED; in kobj_export_module()
1670 process_dynamic(struct module *mp, char *dyndata, char *strdata) in process_dynamic() argument
1723 mp->flags |= KOBJ_IGNMULDEF; in process_dynamic()
1725 mp->flags |= KOBJ_NOKSYMS; in process_dynamic()
1744 mp->depends_on = depstr; in process_dynamic()
1751 do_dynamic(struct module *mp, struct _buf *file) in do_dynamic() argument
1759 for (dshp = NULL, shn = 1; shn < mp->hdr.e_shnum; shn++) { in do_dynamic()
1760 shp = (Shdr *)(mp->shdrs + shn * mp->hdr.e_shentsize); in do_dynamic()
1765 mp->filename); in do_dynamic()
1780 if (dshp->sh_link > mp->hdr.e_shnum) { in do_dynamic()
1781 _kobj_printf(ops, "krtld: get_dynamic: %s, ", mp->filename); in do_dynamic()
1785 dstrp = (Shdr *)(mp->shdrs + dshp->sh_link * mp->hdr.e_shentsize); in do_dynamic()
1788 _kobj_printf(ops, "krtld: get_dynamic: %s, ", mp->filename); in do_dynamic()
1798 _kobj_printf(ops, "krtld: get_dynamic: %s, ", mp->filename); in do_dynamic()
1808 _kobj_printf(ops, "krtld: get_dynamic: %s, ", mp->filename); in do_dynamic()
1818 rc = process_dynamic(mp, dyndata, dstrdata); in do_dynamic()
1827 kobj_set_ctf(struct module *mp, caddr_t data, size_t size) in kobj_set_ctf() argument
1830 if (mp->ctfdata != NULL) { in kobj_set_ctf()
1831 if (vmem_contains(ctf_arena, mp->ctfdata, in kobj_set_ctf()
1832 mp->ctfsize)) { in kobj_set_ctf()
1833 vmem_free(ctf_arena, mp->ctfdata, mp->ctfsize); in kobj_set_ctf()
1835 kobj_free(mp->ctfdata, mp->ctfsize); in kobj_set_ctf()
1846 mp->ctfdata = NULL; in kobj_set_ctf()
1848 mp->ctfsize = size; in kobj_set_ctf()
1849 mp->ctfdata = data; in kobj_set_ctf()
1861 struct module *mp = NULL; in kobj_load_module() local
1866 mp = kobj_zalloc(sizeof (struct module), KM_WAIT); in kobj_load_module()
1875 mp->flags |= KOBJ_NOKSYMS; in kobj_load_module()
1883 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1897 mp->filename = kobj_alloc(strlen(file->_name) + 1, KM_WAIT); in kobj_load_module()
1898 (void) strcpy(mp->filename, file->_name); in kobj_load_module()
1900 if (kobj_read_file(file, (char *)&mp->hdr, sizeof (mp->hdr), 0) < 0) { in kobj_load_module()
1903 kobj_free(mp->filename, strlen(file->_name) + 1); in kobj_load_module()
1904 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1908 if (mp->hdr.e_ident[i] != ELFMAG[i]) { in kobj_load_module()
1912 kobj_free(mp->filename, strlen(file->_name) + 1); in kobj_load_module()
1913 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1923 if (!elf_mach_ok(&mp->hdr)) { in kobj_load_module()
1927 kobj_free(mp->filename, strlen(file->_name) + 1); in kobj_load_module()
1928 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1948 if (mp->hdr.e_type != ET_REL) { in kobj_load_module()
1952 kobj_free(mp->filename, strlen(file->_name) + 1); in kobj_load_module()
1953 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1957 n = mp->hdr.e_shentsize * mp->hdr.e_shnum; in kobj_load_module()
1958 mp->shdrs = kobj_alloc(n, KM_WAIT); in kobj_load_module()
1960 if (kobj_read_file(file, mp->shdrs, n, mp->hdr.e_shoff) < 0) { in kobj_load_module()
1963 kobj_free(mp->shdrs, n); in kobj_load_module()
1964 kobj_free(mp->filename, strlen(file->_name) + 1); in kobj_load_module()
1965 kobj_free(mp, sizeof (*mp)); in kobj_load_module()
1970 module_assign(modp, mp); in kobj_load_module()
1973 if (get_progbits(mp, file) < 0) { in kobj_load_module()
1978 if (do_dynamic(mp, file) < 0) { in kobj_load_module()
1984 modp->mod_text = mp->text; in kobj_load_module()
1985 modp->mod_text_size = mp->text_size; in kobj_load_module()
1988 if (get_syms(mp, file) < 0) { in kobj_load_module()
1998 if (mp->depends_on == NULL) in kobj_load_module()
1999 mp->depends_on = depends_on(mp); in kobj_load_module()
2001 if (get_ctf(mp, file) < 0) { in kobj_load_module()
2007 if (!(mp->flags & KOBJ_PRIM)) in kobj_load_module()
2008 get_signature(mp, file); in kobj_load_module()
2012 _kobj_printf(ops, "krtld: file=%s\n", mp->filename); in kobj_load_module()
2013 _kobj_printf(ops, "\ttext:0x%p", mp->text); in kobj_load_module()
2014 _kobj_printf(ops, " size: 0x%x\n", mp->text_size); in kobj_load_module()
2015 _kobj_printf(ops, "\tdata:0x%p", mp->data); in kobj_load_module()
2016 _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size); in kobj_load_module()
2036 if ((dcrval = do_common(mp)) < 0) { in kobj_load_module()
2063 if (do_relocations(mp) < 0) { in kobj_load_module()
2069 if (mp->destination) { in kobj_load_module()
2070 off_t off = (uintptr_t)mp->destination & PAGEOFFSET; in kobj_load_module()
2071 caddr_t base = (caddr_t)mp->destination - off; in kobj_load_module()
2072 size_t size = P2ROUNDUP(mp->text_size + off, PAGESIZE); in kobj_load_module()
2079 kobj_sync_instruction_memory(mp->text, mp->text_size); in kobj_load_module()
2080 kobj_export_module(mp); in kobj_load_module()
2099 struct module *mp; in kobj_load_primary_module() local
2104 mp = modp->mod_mp; in kobj_load_primary_module()
2105 mp->flags |= KOBJ_PRIM; in kobj_load_primary_module()
2108 if (mp->depends_on != NULL && (dep = in kobj_load_primary_module()
2109 mod_already_loaded(mp->depends_on)) == NULL) { in kobj_load_primary_module()
2119 add_dependent(mp, dep->mod_mp); in kobj_load_primary_module()
2125 if (do_common(mp) < 0 || do_symbols(mp, 0) < 0 || in kobj_load_primary_module()
2126 do_relocations(mp) < 0) { in kobj_load_primary_module()
2140 module_assign(struct modctl *cp, struct module *mp) in module_assign() argument
2143 cp->mod_mp = mp; in module_assign()
2147 cp->mod_mp = mp; in module_assign()
2155 struct module *mp = modp->mod_mp; in kobj_unload_module() local
2157 if ((_moddebug & MODDEBUG_KEEPTEXT) && mp) { in kobj_unload_module()
2158 _kobj_printf(ops, "text for %s ", mp->filename); in kobj_unload_module()
2159 _kobj_printf(ops, "was at %p\n", mp->text); in kobj_unload_module()
2160 mp->text = NULL; /* don't actually free it */ in kobj_unload_module()
2174 free_module_data(mp); in kobj_unload_module()
2178 free_module_data(struct module *mp) in free_module_data() argument
2183 lp = mp->head; in free_module_data()
2191 if (mp->symspace) { in free_module_data()
2192 if (vmem_contains(ksyms_arena, mp->symspace, mp->symsize)) { in free_module_data()
2193 vmem_free(ksyms_arena, mp->symspace, mp->symsize); in free_module_data()
2196 if (mp->flags & KOBJ_NOKSYMS) in free_module_data()
2198 kobj_free(mp->symspace, mp->symsize); in free_module_data()
2203 if (mp->ctfdata) { in free_module_data()
2204 if (vmem_contains(ctf_arena, mp->ctfdata, mp->ctfsize)) in free_module_data()
2205 vmem_free(ctf_arena, mp->ctfdata, mp->ctfsize); in free_module_data()
2207 kobj_free(mp->ctfdata, mp->ctfsize); in free_module_data()
2210 if (mp->sigdata) in free_module_data()
2211 kobj_free(mp->sigdata, mp->sigsize); in free_module_data()
2217 if ((ksyms_exported == 0) && (mp->shdrs != NULL)) { in free_module_data()
2221 for (shn = 1; shn < mp->hdr.e_shnum; shn++) { in free_module_data()
2222 shp = (Shdr *)(mp->shdrs + shn * mp->hdr.e_shentsize); in free_module_data()
2233 if (!(mp->flags & KOBJ_PRIM)) { in free_module_data()
2234 kobj_free(mp->shdrs, in free_module_data()
2235 mp->hdr.e_shentsize * mp->hdr.e_shnum); in free_module_data()
2239 if (mp->bss) in free_module_data()
2240 vmem_free(data_arena, (void *)mp->bss, mp->bss_size); in free_module_data()
2242 if (mp->fbt_tab) in free_module_data()
2243 kobj_texthole_free(mp->fbt_tab, mp->fbt_size); in free_module_data()
2245 if (mp->textwin_base) in free_module_data()
2246 kobj_textwin_free(mp); in free_module_data()
2248 if (mp->sdt_probes != NULL) { in free_module_data()
2249 sdt_probedesc_t *sdp = mp->sdt_probes, *next; in free_module_data()
2259 if (mp->sdt_tab) in free_module_data()
2260 kobj_texthole_free(mp->sdt_tab, mp->sdt_size); in free_module_data()
2261 if (mp->text) in free_module_data()
2262 vmem_free(text_arena, mp->text, mp->text_size); in free_module_data()
2263 if (mp->data) in free_module_data()
2264 vmem_free(data_arena, mp->data, mp->data_size); in free_module_data()
2265 if (mp->depends_on) in free_module_data()
2266 kobj_free(mp->depends_on, strlen(mp->depends_on)+1); in free_module_data()
2267 if (mp->filename) in free_module_data()
2268 kobj_free(mp->filename, strlen(mp->filename)+1); in free_module_data()
2270 kobj_free((char *)mp, sizeof (*mp)); in free_module_data()
2274 get_progbits(struct module *mp, struct _buf *file) in get_progbits() argument
2291 if (get_progbits_size(mp, tp, dp, sdp) < 0) in get_progbits()
2294 mp->text_size = tp->size; in get_progbits()
2295 mp->data_size = dp->size; in get_progbits()
2303 mp->text = kobj_segbrk(&_etext, mp->text_size, in get_progbits()
2309 if (mp->text == NULL) { in get_progbits()
2310 mp->text = kobj_segbrk(&_edata, mp->text_size, in get_progbits()
2314 mp->data = kobj_segbrk(&_edata, mp->data_size, dp->align, 0); in get_progbits()
2316 if (mp->text == NULL || mp->data == NULL) in get_progbits()
2340 mp->text_size += tp->align; in get_progbits()
2341 mp->data_size += dp->align; in get_progbits()
2343 mp->text = kobj_text_alloc(text_arena, mp->text_size); in get_progbits()
2351 mp->text, mp->text_size)) { in get_progbits()
2352 off_t off = (uintptr_t)mp->text & PAGEOFFSET; in get_progbits()
2353 size_t size = P2ROUNDUP(mp->text_size + off, PAGESIZE); in get_progbits()
2355 caddr_t orig = mp->text - off; in get_progbits()
2376 if (mp->data_size) in get_progbits()
2377 mp->data = vmem_alloc(data_arena, mp->data_size, in get_progbits()
2380 textptr = (uintptr_t)mp->text; in get_progbits()
2382 mp->destination = dest; in get_progbits()
2388 text = ALIGN((uintptr_t)mp->text, tp->align); in get_progbits()
2389 data = ALIGN((uintptr_t)mp->data, dp->align); in get_progbits()
2392 for (shn = 1; shn < mp->hdr.e_shnum; shn++) { in get_progbits()
2393 shp = (Shdr *)(mp->shdrs + shn * mp->hdr.e_shentsize); in get_progbits()
2443 kobj_free(mp->shdrs, mp->hdr.e_shentsize * mp->hdr.e_shnum); in get_progbits()
2444 mp->shdrs = NULL; in get_progbits()
2473 get_syms(struct module *mp, struct _buf *file) in get_syms() argument
2485 for (shn = 1; shn < mp->hdr.e_shnum; shn++) { in get_syms()
2486 shp = (Shdr *)(mp->shdrs + shn * mp->hdr.e_shentsize); in get_syms()
2489 mp->symtbl_section = shn; in get_syms()
2490 mp->symhdr = shp; in get_syms()
2509 mp->filename); in get_syms()
2525 if (mp->flags & KOBJ_EXEC) in get_syms()
2528 mp->filename); in get_syms()
2536 if ((mp->symhdr == 0) || (mp->symhdr->sh_link >= mp->hdr.e_shnum)) in get_syms()
2538 mp->strhdr = (Shdr *) in get_syms()
2539 (mp->shdrs + mp->symhdr->sh_link * mp->hdr.e_shentsize); in get_syms()
2541 mp->nsyms = mp->symhdr->sh_size / mp->symhdr->sh_entsize; in get_syms()
2542 mp->hashsize = kobj_gethashsize(mp->nsyms); in get_syms()
2547 mp->symsize = mp->symhdr->sh_size + in get_syms()
2548 (mp->hashsize + mp->nsyms) * sizeof (symid_t) + mp->strhdr->sh_size; in get_syms()
2549 mp->symspace = kobj_zalloc(mp->symsize, KM_WAIT|KM_SCRATCH); in get_syms()
2551 mp->symtbl = mp->symspace; in get_syms()
2552 mp->buckets = (symid_t *)(mp->symtbl + mp->symhdr->sh_size); in get_syms()
2553 mp->chains = mp->buckets + mp->hashsize; in get_syms()
2554 mp->strings = (char *)(mp->chains + mp->nsyms); in get_syms()
2556 if (kobj_read_file(file, mp->symtbl, in get_syms()
2557 mp->symhdr->sh_size, mp->symhdr->sh_offset) < 0 || in get_syms()
2558 kobj_read_file(file, mp->strings, in get_syms()
2559 mp->strhdr->sh_size, mp->strhdr->sh_offset) < 0) in get_syms()
2567 for (i = 1; i < mp->nsyms; i++) { in get_syms()
2568 sp = (Sym *)(mp->symtbl + i * mp->symhdr->sh_entsize); in get_syms()
2570 if (sp->st_shndx >= mp->hdr.e_shnum) { in get_syms()
2577 (mp->shdrs + in get_syms()
2578 sp->st_shndx * mp->hdr.e_shentsize); in get_syms()
2579 if (!(mp->flags & KOBJ_EXEC)) in get_syms()
2585 if (sp->st_name >= mp->strhdr->sh_size) in get_syms()
2588 symname = mp->strings + sp->st_name; in get_syms()
2590 if (!(mp->flags & KOBJ_EXEC) && in get_syms()
2592 ksp = kobj_lookup_all(mp, symname, 0); in get_syms()
2610 !(mp->flags & KOBJ_IGNMULDEF)) { in get_syms()
2619 sym_insert(mp, symname, i); in get_syms()
2626 get_ctf(struct module *mp, struct _buf *file) in get_ctf() argument
2636 if (mp->hdr.e_shstrndx >= mp->hdr.e_shnum) { in get_ctf()
2638 mp->filename); in get_ctf()
2640 mp->hdr.e_shstrndx); in get_ctf()
2644 shp = (Shdr *)(mp->shdrs + mp->hdr.e_shstrndx * mp->hdr.e_shentsize); in get_ctf()
2650 mp->filename); in get_ctf()
2652 mp->hdr.e_shstrndx); in get_ctf()
2657 for (i = 0; i < mp->hdr.e_shnum; i++) { in get_ctf()
2658 shp = (Shdr *)(mp->shdrs + i * mp->hdr.e_shentsize); in get_ctf()
2667 "reading .SUNW_ctf data\n", mp->filename); in get_ctf()
2673 mp->ctfdata = ctfdata; in get_ctf()
2674 mp->ctfsize = shp->sh_size; in get_ctf()
2692 crypto_es_hash(struct module *mp, char *hash, char *shstrtab) in crypto_es_hash() argument
2700 for (shn = 1; shn < mp->hdr.e_shnum; shn++) { in crypto_es_hash()
2701 shp = (Shdr *)(mp->shdrs + shn * mp->hdr.e_shentsize); in crypto_es_hash()
2733 get_signature(struct module *mp, struct _buf *file) in get_signature() argument
2740 if (mp->hdr.e_shstrndx >= mp->hdr.e_shnum) { in get_signature()
2742 mp->filename); in get_signature()
2744 mp->hdr.e_shstrndx); in get_signature()
2748 shp = (Shdr *)(mp->shdrs + mp->hdr.e_shstrndx * mp->hdr.e_shentsize); in get_signature()
2754 mp->filename); in get_signature()
2756 mp->hdr.e_shstrndx); in get_signature()
2761 for (i = 0; i < mp->hdr.e_shnum; i++) { in get_signature()
2762 shp = (Shdr *)(mp->shdrs + i * mp->hdr.e_shentsize); in get_signature()
2774 mp->filename); in get_signature()
2789 mp->sigdata = sigdata; in get_signature()
2790 mp->sigsize = sigsize; in get_signature()
2796 crypto_es_hash(mp, sigdata + shp->sh_size, shstrtab); in get_signature()
2803 add_dependent(struct module *mp, struct module *dep) in add_dependent() argument
2807 for (lp = mp->head; lp; lp = lp->next) { in add_dependent()
2808 if (lp->mp == dep) in add_dependent()
2815 lp->mp = dep; in add_dependent()
2817 if (mp->tail) in add_dependent()
2818 mp->tail->next = lp; in add_dependent()
2820 mp->head = lp; in add_dependent()
2821 mp->tail = lp; in add_dependent()
2828 struct module *mp; in do_dependents() local
2834 mp = modp->mod_mp; in do_dependents()
2836 if ((p = mp->depends_on) == NULL) in do_dependents()
2909 add_dependent(mp, req->mod_mp); in do_dependents()
2934 do_common(struct module *mp) in do_common() argument
2943 if ((err = do_symbols(mp, 0)) < 0) in do_common()
2949 mp->bss_size += mp->bss_align; in do_common()
2950 if (mp->bss_size) { in do_common()
2952 mp->bss = (uintptr_t)kobj_segbrk(&_edata, mp->bss_size, in do_common()
2955 mp->bss = (uintptr_t)vmem_alloc(data_arena, in do_common()
2956 mp->bss_size, VM_SLEEP | VM_BESTFIT); in do_common()
2957 bzero((void *)mp->bss, mp->bss_size); in do_common()
2959 if ((err = do_symbols(mp, ALIGN(mp->bss, mp->bss_align))) < 0) in do_common()
2966 do_symbols(struct module *mp, Elf64_Addr bss_base) in do_symbols() argument
2980 if (mp->flags & KOBJ_RESOLVED) in do_symbols()
2988 for (i = 1; i < mp->nsyms; i++) { in do_symbols()
2989 sp = (Sym *)(mp->symtbl + mp->symhdr->sh_entsize * i); in do_symbols()
2994 name = mp->strings + sp->st_name; in do_symbols()
3004 mp->filename); in do_symbols()
3017 mp->filename); in do_symbols()
3025 if ((sp1 = kobj_lookup_all(mp, name, 0)) != NULL) { in do_symbols()
3044 if (!(mp->flags & KOBJ_PRIM) && in do_symbols()
3047 mp->filename); in do_symbols()
3083 if (assign == 0 && mp->bss == NULL) { in do_symbols()
3084 mp->bss_align = bss_align; in do_symbols()
3085 mp->bss_size = bss_ptr; in do_symbols()
3087 mp->flags |= KOBJ_RESOLVED; in do_symbols()
3115 struct module *mp; in kobj_getsymvalue() local
3127 mp = (struct module *)modp->mod_mp; in kobj_getsymvalue()
3128 if (mp && !(mp->flags & KOBJ_PRIM) && modp->mod_loaded && in kobj_getsymvalue()
3129 (sp = lookup_one(mp, name))) { in kobj_getsymvalue()
3146 struct module *mp; in kobj_getsymname() local
3152 mp = mod(lp); in kobj_getsymname()
3154 if ((name = kobj_searchsym(mp, value, offset)) != NULL) in kobj_getsymname()
3161 mp = (struct module *)modp->mod_mp; in kobj_getsymname()
3162 if (mp && !(mp->flags & KOBJ_PRIM) && modp->mod_loaded && in kobj_getsymname()
3163 (name = kobj_searchsym(mp, value, offset))) in kobj_getsymname()
3173 kobj_getelfsym(char *name, void *mp, int *size) in kobj_getelfsym() argument
3177 if (mp == NULL) in kobj_getelfsym()
3180 sp = lookup_one(mp, name); in kobj_getelfsym()
3203 kobj_searchsym(struct module *mp, uintptr_t value, ulong_t *offset) in kobj_searchsym() argument
3215 if (kobj_addrcheck(mp, (void *)value) != 0) in kobj_searchsym()
3218 strtabptr = mp->strings; in kobj_searchsym()
3219 symtabptr = (Sym *)mp->symtbl; in kobj_searchsym()
3225 symnum < mp->nsyms; symnum++, sym = (Sym *) in kobj_searchsym()
3226 ((uintptr_t)sym + mp->symhdr->sh_entsize)) { in kobj_searchsym()
3273 kobj_lookup_all(struct module *mp, char *name, int include_self) in kobj_lookup_all() argument
3280 if (include_self && (sp = lookup_one(mp, name)) != NULL) in kobj_lookup_all()
3283 for (mlp = mp->head; mlp; mlp = mlp->next) { in kobj_lookup_all()
3284 if ((sp = lookup_one(mlp->mp, name)) != NULL && in kobj_lookup_all()
3295 if (mmp == NULL || mp == mmp) in kobj_lookup_all()
3309 struct module *mp; in kobj_lookup_kernel() local
3316 mp = mod(lp); in kobj_lookup_kernel()
3318 if (mp == NULL) in kobj_lookup_kernel()
3321 if ((sp = lookup_one(mp, name)) != NULL) in kobj_lookup_kernel()
3328 lookup_one(struct module *mp, const char *name) in lookup_one() argument
3334 for (ip = &mp->buckets[kobj_hash_name(name) % mp->hashsize]; *ip; in lookup_one()
3335 ip = &mp->chains[*ip]) { in lookup_one()
3336 sp = (Sym *)(mp->symtbl + in lookup_one()
3337 mp->symhdr->sh_entsize * *ip); in lookup_one()
3338 name1 = mp->strings + sp->st_name; in lookup_one()
3353 sym_lookup(struct module *mp, Sym *ksp) in sym_lookup() argument
3355 char *name = mp->strings + ksp->st_name; in sym_lookup()
3359 for (ip = &mp->buckets[kobj_hash_name(name) % mp->hashsize]; *ip; in sym_lookup()
3360 ip = &mp->chains[*ip]) { in sym_lookup()
3361 sp = (Sym *)(mp->symtbl + mp->symhdr->sh_entsize * *ip); in sym_lookup()
3369 sym_insert(struct module *mp, char *name, symid_t index) in sym_insert() argument
3377 if (lastmp != mp) { in sym_insert()
3380 mp->filename); in sym_insert()
3384 lastmp = mp; in sym_insert()
3386 sp = (Sym *)(mp->symtbl + in sym_insert()
3387 index * mp->symhdr->sh_entsize); in sym_insert()
3394 for (ip = &mp->buckets[kobj_hash_name(name) % mp->hashsize]; *ip; in sym_insert()
3395 ip = &mp->chains[*ip]) { in sym_insert()
4270 kobj_textwin_alloc(struct module *mp) in kobj_textwin_alloc() argument
4274 if (mp->textwin != NULL) in kobj_textwin_alloc()
4284 if (!vmem_contains(heaptext_arena, mp->text, mp->text_size)) { in kobj_textwin_alloc()
4285 uintptr_t text = (uintptr_t)mp->text; in kobj_textwin_alloc()
4286 uintptr_t size = (uintptr_t)mp->text_size; in kobj_textwin_alloc()
4292 va = mp->textwin_base = vmem_alloc(heap_arena, sz, VM_SLEEP); in kobj_textwin_alloc()
4302 mp->textwin = mp->textwin_base + (text & PAGEOFFSET); in kobj_textwin_alloc()
4304 mp->textwin = mp->text; in kobj_textwin_alloc()
4309 kobj_textwin_free(struct module *mp) in kobj_textwin_free() argument
4311 uintptr_t text = (uintptr_t)mp->text; in kobj_textwin_free()
4312 uintptr_t tsize = (uintptr_t)mp->text_size; in kobj_textwin_free()
4316 mp->textwin = NULL; in kobj_textwin_free()
4318 if (mp->textwin_base == NULL) in kobj_textwin_free()
4321 hat_unload(kas.a_hat, mp->textwin_base, size, HAT_UNLOAD_UNLOCK); in kobj_textwin_free()
4322 vmem_free(heap_arena, mp->textwin_base, size); in kobj_textwin_free()
4323 mp->textwin_base = NULL; in kobj_textwin_free()
4474 struct module *mp = mod->mod_mp; in tnf_unsplice_probes() local
4476 if (!(mp->flags & KOBJ_TNF_PROBE)) in tnf_unsplice_probes()
4480 if (kobj_addrcheck(mp, (char *)*p) == 0) in tnf_unsplice_probes()
4486 if (kobj_addrcheck(mp, (char *)*q) == 0) in tnf_unsplice_probes()