Lines Matching refs:table
161 struct unwind_table *table; in find_table() local
163 for (table = &root_table; table; table = table->link) in find_table()
164 if ((pc >= table->core.pc in find_table()
165 && pc < table->core.pc + table->core.range) in find_table()
166 || (pc >= table->init.pc in find_table()
167 && pc < table->init.pc + table->init.range)) in find_table()
170 return table; in find_table()
175 static void init_unwind_hdr(struct unwind_table *table,
188 static void init_unwind_table(struct unwind_table *table, const char *name, in init_unwind_table() argument
197 table->core.pc = (unsigned long)core_start; in init_unwind_table()
198 table->core.range = core_size; in init_unwind_table()
199 table->init.pc = (unsigned long)init_start; in init_unwind_table()
200 table->init.range = init_size; in init_unwind_table()
201 table->address = table_start; in init_unwind_table()
202 table->size = table_size; in init_unwind_table()
213 table->hdrsz = header_size; in init_unwind_table()
215 table->header = header_start; in init_unwind_table()
216 table->link = NULL; in init_unwind_table()
217 table->name = name; in init_unwind_table()
261 static void init_unwind_hdr(struct unwind_table *table, in init_unwind_hdr() argument
265 unsigned long tableSize = table->size, hdrSize; in init_unwind_hdr()
275 struct eh_frame_hdr_table_entry table[]; in init_unwind_hdr() member
278 if (table->header) in init_unwind_hdr()
281 if (table->hdrsz) in init_unwind_hdr()
283 table->name); in init_unwind_hdr()
288 for (fde = table->address, n = 0; in init_unwind_hdr()
291 const u32 *cie = cie_for_fde(fde, table); in init_unwind_hdr()
329 put_unaligned((unsigned long)table->address, &header->eh_frame_ptr); in init_unwind_hdr()
334 BUILD_BUG_ON(offsetof(typeof(*header), table) in init_unwind_hdr()
335 % __alignof(typeof(*header->table))); in init_unwind_hdr()
336 for (fde = table->address, tableSize = table->size, n = 0; in init_unwind_hdr()
344 header->table[n].start = read_pointer(&ptr, in init_unwind_hdr()
348 header->table[n].fde = (unsigned long)fde; in init_unwind_hdr()
353 sort(header->table, in init_unwind_hdr()
355 sizeof(*header->table), in init_unwind_hdr()
358 table->hdrsz = hdrSize; in init_unwind_hdr()
360 table->header = (const void *)header; in init_unwind_hdr()
379 struct unwind_table *table; in unwind_add_table() local
384 table = kmalloc(sizeof(*table), GFP_KERNEL); in unwind_add_table()
385 if (!table) in unwind_add_table()
388 init_unwind_table(table, module->name, in unwind_add_table()
394 init_unwind_hdr(table, unw_hdr_alloc); in unwind_add_table()
398 module->name, table->core.pc, table->core.range); in unwind_add_table()
401 last_table->link = table; in unwind_add_table()
403 root_table.link = table; in unwind_add_table()
404 last_table = table; in unwind_add_table()
406 return table; in unwind_add_table()
410 struct unwind_table *table; member
417 struct unwind_table *table = info->table, *prev; in unlink_table() local
419 for (prev = &root_table; prev->link && prev->link != table; in unlink_table()
425 table->init.pc = 0; in unlink_table()
426 table->init.range = 0; in unlink_table()
427 info->table = NULL; in unlink_table()
429 prev->link = table->link; in unlink_table()
434 info->table = NULL; in unlink_table()
442 struct unwind_table *table = handle; in unwind_remove_table() local
445 if (!table || table == &root_table) in unwind_remove_table()
448 if (init_only && table == last_table) { in unwind_remove_table()
449 table->init.pc = 0; in unwind_remove_table()
450 table->init.range = 0; in unwind_remove_table()
454 info.table = table; in unwind_remove_table()
458 kfree(table->header); in unwind_remove_table()
459 kfree(table); in unwind_remove_table()
517 static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *table) in cie_for_fde() argument
912 const struct unwind_table *table; in arc_unwind() local
935 table = find_table(pc); in arc_unwind()
936 if (table != NULL in arc_unwind()
937 && !(table->size & (sizeof(*fde) - 1))) { in arc_unwind()
938 const u8 *hdr = table->header; in arc_unwind()
961 end = hdr + table->hdrsz; in arc_unwind()
963 == (unsigned long)table->address in arc_unwind()
994 cie = cie_for_fde(fde, table); in arc_unwind()