Lines Matching defs:sym

56 static kern_return_t init_predicates(KXLDSym *sym, u_char n_type, u_short n_desc)
58 static void init_sym_sectnum(KXLDSym *sym, u_int n_sect)
67 kxld_sym_init_from_macho32(KXLDSym *sym, char *strtab, const struct nlist *src)
71 check(sym);
75 bzero(sym, sizeof(*sym));
76 sym->name = strtab + src->n_un.n_strx;
77 sym->type = src->n_type;
78 sym->desc = src->n_desc;
79 sym->base_addr = src->n_value;
80 sym->link_addr = sym->base_addr;
82 rval = init_predicates(sym, src->n_type, src->n_desc);
85 (void) init_sym_sectnum(sym, src->n_sect);
87 if (kxld_sym_is_indirect(sym)) {
88 sym->alias = strtab + src->n_value;
102 kxld_sym_init_from_macho64(KXLDSym *sym, char *strtab, const struct nlist_64 *src)
106 check(sym);
110 bzero(sym, sizeof(*sym));
111 sym->name = strtab + src->n_un.n_strx;
112 sym->type = src->n_type;
113 sym->desc = src->n_desc;
114 sym->base_addr = src->n_value;
115 sym->link_addr = sym->base_addr;
117 rval = init_predicates(sym, src->n_type, src->n_desc);
120 (void) init_sym_sectnum(sym, src->n_sect);
122 if (kxld_sym_is_indirect(sym)) {
123 sym->alias = strtab + src->n_value;
136 kxld_sym_init_absolute(KXLDSym *sym, char *name, kxld_addr_t link_addr)
138 check(sym);
141 bzero(sym, sizeof(*sym));
143 sym->name = name;
144 sym->link_addr = link_addr;
145 sym->type = N_ABS | N_EXT;
146 sym->sectnum = NO_SECT;
148 init_predicates(sym, N_ABS | N_EXT, 0);
149 sym->is_resolved = TRUE;
155 init_predicates(KXLDSym *sym, u_char n_type, u_short n_desc)
159 check(sym);
163 sym->is_stab = 1;
183 sym->is_absolute = 1;
203 sym->is_section = 1;
222 sym->is_absolute = 1;
225 sym->is_section = 1;
228 if (sym->base_addr) {
229 sym->is_common = 1;
231 sym->is_undefined = 1;
235 sym->is_indirect = 1;
246 sym->is_external = 1;
250 sym->is_obsolete = 1;
254 sym->is_weak = 1;
258 sym->is_thumb = 1;
259 sym->base_addr |= 1;
260 sym->link_addr |= 1;
264 if ((streq_safe(CXX_PREFIX, sym->name, const_strlen(CXX_PREFIX)))) {
265 sym->is_cxx = 1;
267 if (streq_safe(sym->name, METACLASS_VTABLE_PREFIX,
270 sym->is_meta_vtable = 1;
271 } else if (streq_safe(sym->name, VTABLE_PREFIX,
274 sym->is_class_vtable = 1;
275 } else if (kxld_strstr(sym->name, RESERVED_TOKEN)) {
276 sym->is_padslot = 1;
277 } else if (kxld_strstr(sym->name, METACLASS_TOKEN)) {
278 sym->is_metaclass = 1;
279 } else if (kxld_strstr(sym->name, SUPER_METACLASS_POINTER_TOKEN)) {
280 sym->is_super_metaclass_pointer = 1;
282 } else if (kxld_sym_name_is_pure_virtual(sym->name)) {
283 sym->is_cxx = 1;
284 sym->is_pure_virtual = 1;
297 init_sym_sectnum(KXLDSym *sym, u_int n_sect)
305 if (kxld_sym_is_section(sym)) {
308 sym->sectnum = n_sect - 1;
310 sym->is_absolute = 1;
311 sym->is_section = 0;
320 kxld_sym_deinit(KXLDSym *sym __unused)
322 check(sym);
328 kxld_sym_destroy(KXLDSym *sym)
330 check(sym);
331 kxld_sym_deinit(sym);
332 kxld_free(sym, sizeof(*sym));
339 kxld_sym_is_absolute(const KXLDSym *sym)
341 check(sym);
343 return (0 != sym->is_absolute);
349 kxld_sym_is_section(const KXLDSym *sym)
351 check(sym);
353 return (0 != sym->is_section);
359 kxld_sym_is_defined(const KXLDSym *sym)
361 check(sym);
363 return ((kxld_sym_is_absolute(sym) || kxld_sym_is_section(sym)) &&
364 !kxld_sym_is_replaced(sym));
371 kxld_sym_is_defined_locally(const KXLDSym *sym)
373 check(sym);
375 return (kxld_sym_is_defined(sym) && !sym->is_resolved);
381 kxld_sym_is_external(const KXLDSym *sym)
383 check(sym);
385 return (0 != sym->is_external);
391 kxld_sym_is_exported(const KXLDSym *sym)
393 check(sym);
395 return (kxld_sym_is_defined_locally(sym) && kxld_sym_is_external(sym));
401 kxld_sym_is_undefined(const KXLDSym *sym)
403 check(sym);
405 return (0 != sym->is_undefined);
411 kxld_sym_is_indirect(const KXLDSym *sym)
413 check(sym);
415 return (0 != sym->is_indirect);
421 kxld_sym_is_replaced(const KXLDSym *sym)
423 check(sym);
425 return (0 != sym->is_replaced);
431 kxld_sym_is_common(const KXLDSym *sym)
433 check(sym);
435 return (0 != sym->is_common);
441 kxld_sym_is_unresolved(const KXLDSym *sym)
443 return ((kxld_sym_is_undefined(sym) && !kxld_sym_is_replaced(sym)) ||
444 kxld_sym_is_indirect(sym) || kxld_sym_is_common(sym));
450 kxld_sym_is_obsolete(const KXLDSym *sym)
452 return (0 != sym->is_obsolete);
459 kxld_sym_is_got(const KXLDSym *sym)
461 check(sym);
463 return (0 != sym->is_got);
470 kxld_sym_is_stab(const KXLDSym *sym)
472 check(sym);
474 return (0 != sym->is_stab);
480 kxld_sym_is_weak(const KXLDSym *sym)
482 check(sym);
484 return (0 != sym->is_weak);
490 kxld_sym_is_cxx(const KXLDSym *sym)
492 check(sym);
494 return (0 != sym->is_cxx);
500 kxld_sym_is_pure_virtual(const KXLDSym *sym)
502 return (0 != sym->is_pure_virtual);
508 kxld_sym_is_vtable(const KXLDSym *sym)
510 check(sym);
512 return kxld_sym_is_class_vtable(sym) || kxld_sym_is_metaclass_vtable(sym);
518 kxld_sym_is_class_vtable(const KXLDSym *sym)
520 check(sym);
522 return (0 != sym->is_class_vtable);
528 kxld_sym_is_metaclass_vtable(const KXLDSym *sym)
530 check(sym);
532 return (0 != sym->is_meta_vtable);
538 kxld_sym_is_padslot(const KXLDSym *sym)
540 check(sym);
542 return (0 != sym->is_padslot);
548 kxld_sym_is_metaclass(const KXLDSym *sym)
550 check(sym);
552 return (0 != sym->is_metaclass);
558 kxld_sym_is_super_metaclass_pointer(const KXLDSym *sym)
560 check(sym);
562 return (0 != sym->is_super_metaclass_pointer);
586 kxld_sym_get_section_offset(const KXLDSym *sym, const KXLDSect *sect)
588 check(sym);
590 return (u_int) (sym->base_addr - sect->base_addr);
597 kxld_sym_get_common_size(const KXLDSym *sym)
599 return sym->base_addr;
605 kxld_sym_get_common_align(const KXLDSym *sym)
607 u_int align = GET_COMM_ALIGN(sym->desc);
617 kxld_sym_get_class_name_from_metaclass(const KXLDSym *sym,
622 check(sym);
623 require_action(kxld_sym_is_metaclass(sym), finish, rval=KERN_FAILURE);
625 rval = extract_inner_string(sym->name, OSOBJ_PREFIX, METACLASS_TOKEN,
637 kxld_sym_get_class_name_from_super_metaclass_pointer(const KXLDSym *sym,
642 check(sym);
643 require_action(kxld_sym_is_super_metaclass_pointer(sym), finish,
646 rval = extract_inner_string(sym->name, OSOBJ_PREFIX,
658 kxld_sym_get_class_name_from_vtable(const KXLDSym *sym,
663 check(sym);
664 require_action(kxld_sym_is_class_vtable(sym), finish, rval=KERN_FAILURE);
666 rval = kxld_sym_get_class_name_from_vtable_name(sym->name,
834 kxld_sym_set_got(KXLDSym *sym)
836 sym->is_got = 1;
843 kxld_sym_relocate(KXLDSym *sym, const KXLDSect *sect)
845 if (kxld_sym_is_section(sym)) {
846 sym->link_addr = sym->base_addr - sect->base_addr + sect->link_addr;
847 sym->relocated_sectnum = sect->sectnum;
855 kxld_sym_export_macho_32(const KXLDSym *sym, u_char *_nl, char *strtab,
863 check(sym);
868 bytes = strlen(sym->name) + 1;
872 nl->n_type = sym->type;
873 nl->n_sect = (kxld_sym_is_section(sym)) ? sym->relocated_sectnum + 1 : 0;
874 nl->n_desc = sym->desc;
876 nl->n_value = (uint32_t) sym->link_addr;
877 if (sym->is_thumb) {
882 strlcpy(str, sym->name, strsize - *stroff);
896 kxld_sym_export_macho_64(const KXLDSym *sym, u_char *_nl, char *strtab,
904 check(sym);
909 bytes = strlen(sym->name) + 1;
913 nl->n_type = sym->type;
914 nl->n_sect = (kxld_sym_is_section(sym)) ? sym->relocated_sectnum + 1 : 0;
915 nl->n_desc = sym->desc;
917 nl->n_value = (uint64_t) sym->link_addr;
918 if (sym->is_thumb) {
923 strlcpy(str, sym->name, strsize - *stroff);
936 kxld_sym_resolve(KXLDSym *sym, kxld_addr_t addr)
940 check(sym);
942 require_action(kxld_sym_is_undefined(sym) || kxld_sym_is_indirect(sym),
947 sym->link_addr = addr;
948 sym->type = N_ABS | N_EXT;
949 sym->sectnum = NO_SECT;
953 sym->is_external = TRUE;
954 sym->is_absolute = TRUE;
955 sym->is_resolved = TRUE;
959 sym->is_undefined = FALSE;
960 sym->is_indirect = FALSE;
973 kxld_sym_resolve_common(KXLDSym *sym, u_int sectnum, kxld_addr_t base_addr)
977 check(sym);
979 require_action(kxld_sym_is_common(sym), finish,
982 sym->base_addr = base_addr;
983 sym->link_addr = base_addr;
984 sym->type = N_SECT | N_EXT;
985 sym->sectnum = sectnum;
986 sym->desc = 0;
988 sym->is_absolute = FALSE;
989 sym->is_section = TRUE;
990 sym->is_undefined = FALSE;
991 sym->is_indirect = FALSE;
992 sym->is_common = FALSE;
993 sym->is_external = TRUE;
1006 kxld_sym_delete(KXLDSym *sym)
1008 check(sym);
1010 bzero(sym, sizeof(*sym));
1011 sym->is_replaced = TRUE;
1018 kxld_sym_patch(KXLDSym *sym)
1020 check(sym);
1022 sym->is_replaced = TRUE;
1028 kxld_sym_mark_private(KXLDSym *sym)
1030 check(sym);
1032 sym->type |= N_PEXT;
1033 sym->is_external = FALSE;