Differences From Artifact [7ee8175e8f]:
- File src/runtime/selector.m — part of check-in [2d8aa8b1e6] at 2018-04-29 19:26:23 on branch trunk — runtime: Specify m68k registers for most functions (user: js, size: 3544) [annotate] [blame] [check-ins using]
To Artifact [7ad9a1d734]:
- File
src/runtime/selector.m
— part of check-in
[482698c5be]
at
2018-05-06 21:39:06
on branch trunk
— runtime: Make Amiga library work with -fbaserel
This currently uses __saveds on all exported functions for simplicity.
As an optimization, __saveds can be removed from some functions later
after careful verification that no code path starting from that function
accesses any data. (user: js, size: 3570) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
36 37 38 39 40 41 42 | static struct objc_hashtable *selectors = NULL; static uint32_t selectors_cnt = 0; static struct objc_sparsearray *selector_names = NULL; static void **free_list = NULL; static size_t free_list_cnt = 0; | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | static struct objc_hashtable *selectors = NULL; static uint32_t selectors_cnt = 0; static struct objc_sparsearray *selector_names = NULL; static void **free_list = NULL; static size_t free_list_cnt = 0; void __saveds objc_register_selector(struct objc_abi_selector *sel) { struct objc_selector *rsel; const char *name; if (selectors_cnt > SEL_MAX) OBJC_ERROR("Out of selector slots!"); |
︙ | ︙ | |||
111 112 113 114 115 116 117 | if (symtab->sel_refs == NULL) return; for (sel = symtab->sel_refs; sel->name != NULL; sel++) objc_register_selector(sel); } | | | | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | if (symtab->sel_refs == NULL) return; for (sel = symtab->sel_refs; sel->name != NULL; sel++) objc_register_selector(sel); } const char *__saveds sel_getName(SEL sel OBJC_M68K_REG("a0")) { const char *ret; objc_global_mutex_lock(); ret = objc_sparsearray_get(selector_names, (uint32_t)sel->uid); objc_global_mutex_unlock(); return ret; } bool __saveds sel_isEqual(SEL sel1 OBJC_M68K_REG("a0"), SEL sel2 OBJC_M68K_REG("a1")) { return (sel1->uid == sel2->uid); } void objc_unregister_all_selectors(void) |
︙ | ︙ |