Lines Matching refs:unwind
8 * This file implements call frame unwind support for the Linux
9 * kernel. Parsing and processing the unwind information is
10 * time-consuming, so this implementation translates the unwind
11 * descriptors into unwind scripts. These scripts are very simple
15 * that the script depends on (most unwind descriptors are
17 * all). This code is based on the unwind conventions described in
21 * o updates to the global unwind data (in structure "unw") are serialized
23 * o each unwind script has its own read-write lock; a thread must acquire
36 #include <asm/unwind.h>
85 spinlock_t lock; /* spinlock for unwind data */
87 /* list of unwind tables (one per load-module) */
106 /* unwind table for the kernel: */
109 /* unwind table describing the gate page (kernel code that is mapped into user space): */
260 UNW_DPRINT(0, "unwind.%s: bad scratch reg r%lu\n", __FUNCTION__, reg);
270 /* This should not happen with valid unwind info. */
271 UNW_DPRINT(0, "unwind.%s: bad unwind info: resetting info->pt\n", __FUNCTION__);
277 UNW_DPRINT(3, "unwind.%s: sp 0x%lx pt 0x%lx\n", __FUNCTION__, info->sp, info->pt);
296 UNW_DPRINT(0, "unwind.%s: trying to access non-existent r%u\n",
342 UNW_DPRINT(0, "unwind.%s: %p outside of regstk "
376 UNW_DPRINT(0, "unwind.%s: ignoring attempt to access register outside "
387 UNW_DPRINT(0, "unwind.%s: ignoring attempt to write read-only location\n",
429 UNW_DPRINT(0, "unwind.%s: trying to access non-existent b%u\n",
435 UNW_DPRINT(0, "unwind.%s: ignoring attempt to write read-only location\n",
452 UNW_DPRINT(0, "unwind.%s: trying to access non-existent f%u\n",
484 UNW_DPRINT(0, "unwind.%s: ignoring attempt to write read-only location\n",
574 UNW_DPRINT(0, "unwind.%s: trying to access non-existent ar%u\n",
581 UNW_DPRINT(0, "unwind.%s: ignoring attempt to write read-only location\n",
602 UNW_DPRINT(0, "unwind.%s: ignoring attempt to write read-only location\n",
623 printk(KERN_ERR "unwind: cannot stack reg state!\n");
636 printk(KERN_ERR "unwind: stack underflow!\n");
652 printk(KERN_ERR "unwind.dup_state_stack: out of memory\n");
704 UNW_DPRINT(0, "unwind.%s: bad abreg=0x%x\n", __FUNCTION__, abreg);
744 UNW_DPRINT(0, "unwind.%s: excess spill!\n", __FUNCTION__);
860 UNW_DPRINT(3, "unwind.%s: interrupt frame\n", __FUNCTION__);
863 UNW_DPRINT(0, "unwind%s: ignoring unwabi(abi=0x%x,context=0x%x)\n",
1047 printk(KERN_ERR "unwind: failed to find state labeled 0x%lx\n", label);
1057 printk(KERN_ERR "unwind.desc_label_state(): out of memory\n");
1151 #define UNW_DEC_BAD_CODE(code) printk(KERN_ERR "unwind: unknown code 0x%02x\n", \
1190 * general unwind descriptors:
1352 UNW_DPRINT(0, "unwind.%s: script exceeds maximum size of %u instructions!\n",
1394 UNW_DPRINT(0, "unwind.%s: don't know how to emit nat info for where = %u\n",
1451 UNW_DPRINT(0, "unwind.%s: kernel may not touch f%lu\n",
1479 UNW_DPRINT(0, "unwind%s: register %u has unexpected `where' value of %u\n",
1526 * Build an unwind script that unwinds from state OLD_STATE to the
1553 UNW_DPRINT(3, "unwind.%s: ip 0x%lx\n", __FUNCTION__, ip);
1556 UNW_DPRINT(0, "unwind.%s: failed to create unwind script\n", __FUNCTION__);
1562 /* search the kernels and the modules' unwind tables for IP: */
1574 UNW_DPRINT(1, "unwind.%s: no unwind info for ip=0x%lx (prev ip=0x%lx)\n",
1623 UNW_DPRINT(1, "unwind.%s: using default for rp at ip=0x%lx where=%d val=0x%lx\n",
1629 UNW_DPRINT(1, "unwind.%s: state record for func 0x%lx, t=%u:\n",
1751 UNW_DPRINT(0, "unwind.%s: no state->pt, dst=%ld, val=%ld\n",
1761 UNW_DPRINT(0, "unwind.%s: UNW_INSN_MOVE_CONST bad val=%ld\n",
1796 UNW_DPRINT(0, "unwind.%s: rejecting bad psp=0x%lx\n",
1830 UNW_DPRINT(1, "unwind.%s: rejecting bad ip=0x%lx\n", __FUNCTION__, info->ip);
1842 "unwind.%s: failed to locate/build unwind script for ip %lx\n",
1885 UNW_DPRINT(1, "unwind.%s: failed to locate return link (ip=0x%lx)!\n",
1893 UNW_DPRINT(2, "unwind.%s: reached user-space (ip=0x%lx)\n", __FUNCTION__, ip);
1900 UNW_DPRINT(0, "unwind.%s: failed to locate ar.pfs!\n", __FUNCTION__);
1916 UNW_DPRINT(3, "unwind.%s: interrupt_frame pt 0x%lx\n", __FUNCTION__, info->pt);
1921 UNW_DPRINT(0, "unwind.%s: bsp (0x%lx) out of range [0x%lx-0x%lx]\n",
1930 UNW_DPRINT(0, "unwind.%s: sp (0x%lx) out of range [0x%lx-0x%lx]\n",
1937 UNW_DPRINT(0, "unwind.%s: ip, sp, bsp unchanged; stopping here (ip=0x%lx)\n",
1943 /* as we unwind, the saved ar.unat becomes the primary unat: */
1964 UNW_DPRINT(0, "unwind.%s: ran off the top of the kernel stack\n",
1973 UNW_DPRINT(0, "unwind.%s: failed to read "
1980 UNW_DPRINT(0, "unwind.%s: failed to unwind to user-level (ip=0x%lx)\n",
1996 * Subtle stuff here: we _could_ unwind through the switch_stack frame but we
1999 * start the unwind process at the function that created the switch_stack frame.
2025 UNW_DPRINT(3, "unwind.%s:\n"
2047 UNW_DPRINT(3, "unwind.%s:\n"
2062 UNW_DPRINT(1, "unwind.%s\n", __FUNCTION__);
2091 UNW_DPRINT(0, "unwind.%s: ignoring attempt to insert empty unwind table\n",
2104 /* keep kernel unwind table at the front (it's searched most commonly): */
2122 UNW_DPRINT(0, "unwind.%s: ignoring attempt to remove non-existent unwind table\n",
2129 UNW_DPRINT(0, "unwind.%s: sorry, freeing the kernel's unwind table is a "
2142 UNW_DPRINT(0, "unwind.%s: failed to find unwind table %p\n",
2189 printk("%s: failed to find gate DSO's unwind table!\n", __FUNCTION__);
2206 printk(KERN_ERR "%s: unable to create unwind data for gate page!\n", __FUNCTION__);
2273 * at the kernel's unwind info is via the gate DSO. The address of the
2278 * This system call copies the unwind data into the buffer pointed to by BUF and returns
2279 * the size of the unwind data. If BUF_SIZE is smaller than the size of the unwind data
2281 * unwind data.
2283 * The first portion of the unwind data contains an unwind table and rest contains the
2284 * associated unwind info (in no particular order). The unwind table consists of a table
2289 * u64 info; (BUF-relative offset to unwind info)
2291 * The end of the unwind table is indicated by an entry with a START address of zero.
2294 * on the format of the unwind info.