1 /* 2 * Copyright (C) 2009 Matt Fleming <matt@console-pimps.org> 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file "COPYING" in the main directory of this archive 6 * for more details. 7 * 8 * This is an implementation of a DWARF unwinder. Its main purpose is 9 * for generating stacktrace information. Based on the DWARF 3 10 * specification from http://www.dwarfstd.org. 11 * 12 * TODO: 13 * - DWARF64 doesn't work. 14 * - Registers with DWARF_VAL_OFFSET rules aren't handled properly. 15 */ 16 17 /* #define DEBUG */ 18 #include <linux/kernel.h> 19 #include <linux/io.h> 20 #include <linux/list.h> 21 #include <linux/mempool.h> 22 #include <linux/mm.h> 23 #include <linux/ftrace.h> 24 #include <asm/dwarf.h> 25 #include <asm/unwinder.h> 26 #include <asm/sections.h> 27 #include <asm/unaligned.h> 28 #include <asm/stacktrace.h> 29 30 /* Reserve enough memory for two stack frames */ 31 #define DWARF_FRAME_MIN_REQ 2 32 /* ... with 4 registers per frame. */ 33 #define DWARF_REG_MIN_REQ (DWARF_FRAME_MIN_REQ * 4) 34 35 static struct kmem_cache *dwarf_frame_cachep; 36 static mempool_t *dwarf_frame_pool; 37 38 static struct kmem_cache *dwarf_reg_cachep; 39 static mempool_t *dwarf_reg_pool; 40 41 static LIST_HEAD(dwarf_cie_list); 42 static DEFINE_SPINLOCK(dwarf_cie_lock); 43 44 static LIST_HEAD(dwarf_fde_list); 45 static DEFINE_SPINLOCK(dwarf_fde_lock); 46 47 static struct dwarf_cie *cached_cie; 48 49 /** 50 * dwarf_frame_alloc_reg - allocate memory for a DWARF register 51 * @frame: the DWARF frame whose list of registers we insert on 52 * @reg_num: the register number 53 * 54 * Allocate space for, and initialise, a dwarf reg from 55 * dwarf_reg_pool and insert it onto the (unsorted) linked-list of 56 * dwarf registers for @frame. 57 * 58 * Return the initialised DWARF reg. 59 */ 60 static struct dwarf_reg *dwarf_frame_alloc_reg(struct dwarf_frame *frame, 61 unsigned int reg_num) 62 { 63 struct dwarf_reg *reg; 64 65 reg = mempool_alloc(dwarf_reg_pool, GFP_ATOMIC); 66 if (!reg) { 67 printk(KERN_WARNING "Unable to allocate a DWARF register\n"); 68 /* 69 * Let's just bomb hard here, we have no way to 70 * gracefully recover. 71 */ 72 UNWINDER_BUG(); 73 } 74 75 reg->number = reg_num; 76 reg->addr = 0; 77 reg->flags = 0; 78 79 list_add(®->link, &frame->reg_list); 80 81 return reg; 82 } 83 84 static void dwarf_frame_free_regs(struct dwarf_frame *frame) 85 { 86 struct dwarf_reg *reg, *n; 87 88 list_for_each_entry_safe(reg, n, &frame->reg_list, link) { 89 list_del(®->link); 90 mempool_free(reg, dwarf_reg_pool); 91 } 92 } 93 94 /** 95 * dwarf_frame_reg - return a DWARF register 96 * @frame: the DWARF frame to search in for @reg_num 97 * @reg_num: the register number to search for 98 * 99 * Lookup and return the dwarf reg @reg_num for this frame. Return 100 * NULL if @reg_num is an register invalid number. 101 */ 102 static struct dwarf_reg *dwarf_frame_reg(struct dwarf_frame *frame, 103 unsigned int reg_num) 104 { 105 struct dwarf_reg *reg; 106 107 list_for_each_entry(reg, &frame->reg_list, link) { 108 if (reg->number == reg_num) 109 return reg; 110 } 111 112 return NULL; 113 } 114 115 /** 116 * dwarf_read_addr - read dwarf data 117 * @src: source address of data 118 * @dst: destination address to store the data to 119 * 120 * Read 'n' bytes from @src, where 'n' is the size of an address on 121 * the native machine. We return the number of bytes read, which 122 * should always be 'n'. We also have to be careful when reading 123 * from @src and writing to @dst, because they can be arbitrarily 124 * aligned. Return 'n' - the number of bytes read. 125 */ 126 static inline int dwarf_read_addr(unsigned long *src, unsigned long *dst) 127 { 128 u32 val = get_unaligned(src); 129 put_unaligned(val, dst); 130 return sizeof(unsigned long *); 131 } 132 133 /** 134 * dwarf_read_uleb128 - read unsigned LEB128 data 135 * @addr: the address where the ULEB128 data is stored 136 * @ret: address to store the result 137 * 138 * Decode an unsigned LEB128 encoded datum. The algorithm is taken 139 * from Appendix C of the DWARF 3 spec. For information on the 140 * encodings refer to section "7.6 - Variable Length Data". Return 141 * the number of bytes read. 142 */ 143 static inline unsigned long dwarf_read_uleb128(char *addr, unsigned int *ret) 144 { 145 unsigned int result; 146 unsigned char byte; 147 int shift, count; 148 149 result = 0; 150 shift = 0; 151 count = 0; 152 153 while (1) { 154 byte = __raw_readb(addr); 155 addr++; 156 count++; 157 158 result |= (byte & 0x7f) << shift; 159 shift += 7; 160 161 if (!(byte & 0x80)) 162 break; 163 } 164 165 *ret = result; 166 167 return count; 168 } 169 170 /** 171 * dwarf_read_leb128 - read signed LEB128 data 172 * @addr: the address of the LEB128 encoded data 173 * @ret: address to store the result 174 * 175 * Decode signed LEB128 data. The algorithm is taken from Appendix 176 * C of the DWARF 3 spec. Return the number of bytes read. 177 */ 178 static inline unsigned long dwarf_read_leb128(char *addr, int *ret) 179 { 180 unsigned char byte; 181 int result, shift; 182 int num_bits; 183 int count; 184 185 result = 0; 186 shift = 0; 187 count = 0; 188 189 while (1) { 190 byte = __raw_readb(addr); 191 addr++; 192 result |= (byte & 0x7f) << shift; 193 shift += 7; 194 count++; 195 196 if (!(byte & 0x80)) 197 break; 198 } 199 200 /* The number of bits in a signed integer. */ 201 num_bits = 8 * sizeof(result); 202 203 if ((shift < num_bits) && (byte & 0x40)) 204 result |= (-1 << shift); 205 206 *ret = result; 207 208 return count; 209 } 210 211 /** 212 * dwarf_read_encoded_value - return the decoded value at @addr 213 * @addr: the address of the encoded value 214 * @val: where to write the decoded value 215 * @encoding: the encoding with which we can decode @addr 216 * 217 * GCC emits encoded address in the .eh_frame FDE entries. Decode 218 * the value at @addr using @encoding. The decoded value is written 219 * to @val and the number of bytes read is returned. 220 */ 221 static int dwarf_read_encoded_value(char *addr, unsigned long *val, 222 char encoding) 223 { 224 unsigned long decoded_addr = 0; 225 int count = 0; 226 227 switch (encoding & 0x70) { 228 case DW_EH_PE_absptr: 229 break; 230 case DW_EH_PE_pcrel: 231 decoded_addr = (unsigned long)addr; 232 break; 233 default: 234 pr_debug("encoding=0x%x\n", (encoding & 0x70)); 235 UNWINDER_BUG(); 236 } 237 238 if ((encoding & 0x07) == 0x00) 239 encoding |= DW_EH_PE_udata4; 240 241 switch (encoding & 0x0f) { 242 case DW_EH_PE_sdata4: 243 case DW_EH_PE_udata4: 244 count += 4; 245 decoded_addr += get_unaligned((u32 *)addr); 246 __raw_writel(decoded_addr, val); 247 break; 248 default: 249 pr_debug("encoding=0x%x\n", encoding); 250 UNWINDER_BUG(); 251 } 252 253 return count; 254 } 255 256 /** 257 * dwarf_entry_len - return the length of an FDE or CIE 258 * @addr: the address of the entry 259 * @len: the length of the entry 260 * 261 * Read the initial_length field of the entry and store the size of 262 * the entry in @len. We return the number of bytes read. Return a 263 * count of 0 on error. 264 */ 265 static inline int dwarf_entry_len(char *addr, unsigned long *len) 266 { 267 u32 initial_len; 268 int count; 269 270 initial_len = get_unaligned((u32 *)addr); 271 count = 4; 272 273 /* 274 * An initial length field value in the range DW_LEN_EXT_LO - 275 * DW_LEN_EXT_HI indicates an extension, and should not be 276 * interpreted as a length. The only extension that we currently 277 * understand is the use of DWARF64 addresses. 278 */ 279 if (initial_len >= DW_EXT_LO && initial_len <= DW_EXT_HI) { 280 /* 281 * The 64-bit length field immediately follows the 282 * compulsory 32-bit length field. 283 */ 284 if (initial_len == DW_EXT_DWARF64) { 285 *len = get_unaligned((u64 *)addr + 4); 286 count = 12; 287 } else { 288 printk(KERN_WARNING "Unknown DWARF extension\n"); 289 count = 0; 290 } 291 } else 292 *len = initial_len; 293 294 return count; 295 } 296 297 /** 298 * dwarf_lookup_cie - locate the cie 299 * @cie_ptr: pointer to help with lookup 300 */ 301 static struct dwarf_cie *dwarf_lookup_cie(unsigned long cie_ptr) 302 { 303 struct dwarf_cie *cie; 304 unsigned long flags; 305 306 spin_lock_irqsave(&dwarf_cie_lock, flags); 307 308 /* 309 * We've cached the last CIE we looked up because chances are 310 * that the FDE wants this CIE. 311 */ 312 if (cached_cie && cached_cie->cie_pointer == cie_ptr) { 313 cie = cached_cie; 314 goto out; 315 } 316 317 list_for_each_entry(cie, &dwarf_cie_list, link) { 318 if (cie->cie_pointer == cie_ptr) { 319 cached_cie = cie; 320 break; 321 } 322 } 323 324 /* Couldn't find the entry in the list. */ 325 if (&cie->link == &dwarf_cie_list) 326 cie = NULL; 327 out: 328 spin_unlock_irqrestore(&dwarf_cie_lock, flags); 329 return cie; 330 } 331 332 /** 333 * dwarf_lookup_fde - locate the FDE that covers pc 334 * @pc: the program counter 335 */ 336 struct dwarf_fde *dwarf_lookup_fde(unsigned long pc) 337 { 338 struct dwarf_fde *fde; 339 unsigned long flags; 340 341 spin_lock_irqsave(&dwarf_fde_lock, flags); 342 343 list_for_each_entry(fde, &dwarf_fde_list, link) { 344 unsigned long start, end; 345 346 start = fde->initial_location; 347 end = fde->initial_location + fde->address_range; 348 349 if (pc >= start && pc < end) 350 break; 351 } 352 353 /* Couldn't find the entry in the list. */ 354 if (&fde->link == &dwarf_fde_list) 355 fde = NULL; 356 357 spin_unlock_irqrestore(&dwarf_fde_lock, flags); 358 359 return fde; 360 } 361 362 /** 363 * dwarf_cfa_execute_insns - execute instructions to calculate a CFA 364 * @insn_start: address of the first instruction 365 * @insn_end: address of the last instruction 366 * @cie: the CIE for this function 367 * @fde: the FDE for this function 368 * @frame: the instructions calculate the CFA for this frame 369 * @pc: the program counter of the address we're interested in 370 * 371 * Execute the Call Frame instruction sequence starting at 372 * @insn_start and ending at @insn_end. The instructions describe 373 * how to calculate the Canonical Frame Address of a stackframe. 374 * Store the results in @frame. 375 */ 376 static int dwarf_cfa_execute_insns(unsigned char *insn_start, 377 unsigned char *insn_end, 378 struct dwarf_cie *cie, 379 struct dwarf_fde *fde, 380 struct dwarf_frame *frame, 381 unsigned long pc) 382 { 383 unsigned char insn; 384 unsigned char *current_insn; 385 unsigned int count, delta, reg, expr_len, offset; 386 struct dwarf_reg *regp; 387 388 current_insn = insn_start; 389 390 while (current_insn < insn_end && frame->pc <= pc) { 391 insn = __raw_readb(current_insn++); 392 393 /* 394 * Firstly, handle the opcodes that embed their operands 395 * in the instructions. 396 */ 397 switch (DW_CFA_opcode(insn)) { 398 case DW_CFA_advance_loc: 399 delta = DW_CFA_operand(insn); 400 delta *= cie->code_alignment_factor; 401 frame->pc += delta; 402 continue; 403 /* NOTREACHED */ 404 case DW_CFA_offset: 405 reg = DW_CFA_operand(insn); 406 count = dwarf_read_uleb128(current_insn, &offset); 407 current_insn += count; 408 offset *= cie->data_alignment_factor; 409 regp = dwarf_frame_alloc_reg(frame, reg); 410 regp->addr = offset; 411 regp->flags |= DWARF_REG_OFFSET; 412 continue; 413 /* NOTREACHED */ 414 case DW_CFA_restore: 415 reg = DW_CFA_operand(insn); 416 continue; 417 /* NOTREACHED */ 418 } 419 420 /* 421 * Secondly, handle the opcodes that don't embed their 422 * operands in the instruction. 423 */ 424 switch (insn) { 425 case DW_CFA_nop: 426 continue; 427 case DW_CFA_advance_loc1: 428 delta = *current_insn++; 429 frame->pc += delta * cie->code_alignment_factor; 430 break; 431 case DW_CFA_advance_loc2: 432 delta = get_unaligned((u16 *)current_insn); 433 current_insn += 2; 434 frame->pc += delta * cie->code_alignment_factor; 435 break; 436 case DW_CFA_advance_loc4: 437 delta = get_unaligned((u32 *)current_insn); 438 current_insn += 4; 439 frame->pc += delta * cie->code_alignment_factor; 440 break; 441 case DW_CFA_offset_extended: 442 count = dwarf_read_uleb128(current_insn, ®); 443 current_insn += count; 444 count = dwarf_read_uleb128(current_insn, &offset); 445 current_insn += count; 446 offset *= cie->data_alignment_factor; 447 break; 448 case DW_CFA_restore_extended: 449 count = dwarf_read_uleb128(current_insn, ®); 450 current_insn += count; 451 break; 452 case DW_CFA_undefined: 453 count = dwarf_read_uleb128(current_insn, ®); 454 current_insn += count; 455 regp = dwarf_frame_alloc_reg(frame, reg); 456 regp->flags |= DWARF_UNDEFINED; 457 break; 458 case DW_CFA_def_cfa: 459 count = dwarf_read_uleb128(current_insn, 460 &frame->cfa_register); 461 current_insn += count; 462 count = dwarf_read_uleb128(current_insn, 463 &frame->cfa_offset); 464 current_insn += count; 465 466 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET; 467 break; 468 case DW_CFA_def_cfa_register: 469 count = dwarf_read_uleb128(current_insn, 470 &frame->cfa_register); 471 current_insn += count; 472 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET; 473 break; 474 case DW_CFA_def_cfa_offset: 475 count = dwarf_read_uleb128(current_insn, &offset); 476 current_insn += count; 477 frame->cfa_offset = offset; 478 break; 479 case DW_CFA_def_cfa_expression: 480 count = dwarf_read_uleb128(current_insn, &expr_len); 481 current_insn += count; 482 483 frame->cfa_expr = current_insn; 484 frame->cfa_expr_len = expr_len; 485 current_insn += expr_len; 486 487 frame->flags |= DWARF_FRAME_CFA_REG_EXP; 488 break; 489 case DW_CFA_offset_extended_sf: 490 count = dwarf_read_uleb128(current_insn, ®); 491 current_insn += count; 492 count = dwarf_read_leb128(current_insn, &offset); 493 current_insn += count; 494 offset *= cie->data_alignment_factor; 495 regp = dwarf_frame_alloc_reg(frame, reg); 496 regp->flags |= DWARF_REG_OFFSET; 497 regp->addr = offset; 498 break; 499 case DW_CFA_val_offset: 500 count = dwarf_read_uleb128(current_insn, ®); 501 current_insn += count; 502 count = dwarf_read_leb128(current_insn, &offset); 503 offset *= cie->data_alignment_factor; 504 regp = dwarf_frame_alloc_reg(frame, reg); 505 regp->flags |= DWARF_VAL_OFFSET; 506 regp->addr = offset; 507 break; 508 case DW_CFA_GNU_args_size: 509 count = dwarf_read_uleb128(current_insn, &offset); 510 current_insn += count; 511 break; 512 case DW_CFA_GNU_negative_offset_extended: 513 count = dwarf_read_uleb128(current_insn, ®); 514 current_insn += count; 515 count = dwarf_read_uleb128(current_insn, &offset); 516 offset *= cie->data_alignment_factor; 517 518 regp = dwarf_frame_alloc_reg(frame, reg); 519 regp->flags |= DWARF_REG_OFFSET; 520 regp->addr = -offset; 521 break; 522 default: 523 pr_debug("unhandled DWARF instruction 0x%x\n", insn); 524 UNWINDER_BUG(); 525 break; 526 } 527 } 528 529 return 0; 530 } 531 532 /** 533 * dwarf_unwind_stack - recursively unwind the stack 534 * @pc: address of the function to unwind 535 * @prev: struct dwarf_frame of the previous stackframe on the callstack 536 * 537 * Return a struct dwarf_frame representing the most recent frame 538 * on the callstack. Each of the lower (older) stack frames are 539 * linked via the "prev" member. 540 */ 541 struct dwarf_frame * dwarf_unwind_stack(unsigned long pc, 542 struct dwarf_frame *prev) 543 { 544 struct dwarf_frame *frame; 545 struct dwarf_cie *cie; 546 struct dwarf_fde *fde; 547 struct dwarf_reg *reg; 548 unsigned long addr; 549 550 /* 551 * If this is the first invocation of this recursive function we 552 * need get the contents of a physical register to get the CFA 553 * in order to begin the virtual unwinding of the stack. 554 * 555 * NOTE: the return address is guaranteed to be setup by the 556 * time this function makes its first function call. 557 */ 558 if (!pc && !prev) 559 pc = (unsigned long)current_text_addr(); 560 561 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 562 /* 563 * If our stack has been patched by the function graph tracer 564 * then we might see the address of return_to_handler() where we 565 * expected to find the real return address. 566 */ 567 if (pc == (unsigned long)&return_to_handler) { 568 int index = current->curr_ret_stack; 569 570 /* 571 * We currently have no way of tracking how many 572 * return_to_handler()'s we've seen. If there is more 573 * than one patched return address on our stack, 574 * complain loudly. 575 */ 576 WARN_ON(index > 0); 577 578 pc = current->ret_stack[index].ret; 579 } 580 #endif 581 582 frame = mempool_alloc(dwarf_frame_pool, GFP_ATOMIC); 583 if (!frame) { 584 printk(KERN_ERR "Unable to allocate a dwarf frame\n"); 585 UNWINDER_BUG(); 586 } 587 588 INIT_LIST_HEAD(&frame->reg_list); 589 frame->flags = 0; 590 frame->prev = prev; 591 frame->return_addr = 0; 592 593 fde = dwarf_lookup_fde(pc); 594 if (!fde) { 595 /* 596 * This is our normal exit path - the one that stops the 597 * recursion. There's two reasons why we might exit 598 * here, 599 * 600 * a) pc has no asscociated DWARF frame info and so 601 * we don't know how to unwind this frame. This is 602 * usually the case when we're trying to unwind a 603 * frame that was called from some assembly code 604 * that has no DWARF info, e.g. syscalls. 605 * 606 * b) the DEBUG info for pc is bogus. There's 607 * really no way to distinguish this case from the 608 * case above, which sucks because we could print a 609 * warning here. 610 */ 611 goto bail; 612 } 613 614 cie = dwarf_lookup_cie(fde->cie_pointer); 615 616 frame->pc = fde->initial_location; 617 618 /* CIE initial instructions */ 619 dwarf_cfa_execute_insns(cie->initial_instructions, 620 cie->instructions_end, cie, fde, 621 frame, pc); 622 623 /* FDE instructions */ 624 dwarf_cfa_execute_insns(fde->instructions, fde->end, cie, 625 fde, frame, pc); 626 627 /* Calculate the CFA */ 628 switch (frame->flags) { 629 case DWARF_FRAME_CFA_REG_OFFSET: 630 if (prev) { 631 reg = dwarf_frame_reg(prev, frame->cfa_register); 632 UNWINDER_BUG_ON(!reg); 633 UNWINDER_BUG_ON(reg->flags != DWARF_REG_OFFSET); 634 635 addr = prev->cfa + reg->addr; 636 frame->cfa = __raw_readl(addr); 637 638 } else { 639 /* 640 * Again, this is the first invocation of this 641 * recurisve function. We need to physically 642 * read the contents of a register in order to 643 * get the Canonical Frame Address for this 644 * function. 645 */ 646 frame->cfa = dwarf_read_arch_reg(frame->cfa_register); 647 } 648 649 frame->cfa += frame->cfa_offset; 650 break; 651 default: 652 UNWINDER_BUG(); 653 } 654 655 reg = dwarf_frame_reg(frame, DWARF_ARCH_RA_REG); 656 657 /* 658 * If we haven't seen the return address register or the return 659 * address column is undefined then we must assume that this is 660 * the end of the callstack. 661 */ 662 if (!reg || reg->flags == DWARF_UNDEFINED) 663 goto bail; 664 665 UNWINDER_BUG_ON(reg->flags != DWARF_REG_OFFSET); 666 667 addr = frame->cfa + reg->addr; 668 frame->return_addr = __raw_readl(addr); 669 670 return frame; 671 672 bail: 673 dwarf_frame_free_regs(frame); 674 mempool_free(frame, dwarf_frame_pool); 675 return NULL; 676 } 677 678 static int dwarf_parse_cie(void *entry, void *p, unsigned long len, 679 unsigned char *end) 680 { 681 struct dwarf_cie *cie; 682 unsigned long flags; 683 int count; 684 685 cie = kzalloc(sizeof(*cie), GFP_KERNEL); 686 if (!cie) 687 return -ENOMEM; 688 689 cie->length = len; 690 691 /* 692 * Record the offset into the .eh_frame section 693 * for this CIE. It allows this CIE to be 694 * quickly and easily looked up from the 695 * corresponding FDE. 696 */ 697 cie->cie_pointer = (unsigned long)entry; 698 699 cie->version = *(char *)p++; 700 UNWINDER_BUG_ON(cie->version != 1); 701 702 cie->augmentation = p; 703 p += strlen(cie->augmentation) + 1; 704 705 count = dwarf_read_uleb128(p, &cie->code_alignment_factor); 706 p += count; 707 708 count = dwarf_read_leb128(p, &cie->data_alignment_factor); 709 p += count; 710 711 /* 712 * Which column in the rule table contains the 713 * return address? 714 */ 715 if (cie->version == 1) { 716 cie->return_address_reg = __raw_readb(p); 717 p++; 718 } else { 719 count = dwarf_read_uleb128(p, &cie->return_address_reg); 720 p += count; 721 } 722 723 if (cie->augmentation[0] == 'z') { 724 unsigned int length, count; 725 cie->flags |= DWARF_CIE_Z_AUGMENTATION; 726 727 count = dwarf_read_uleb128(p, &length); 728 p += count; 729 730 UNWINDER_BUG_ON((unsigned char *)p > end); 731 732 cie->initial_instructions = p + length; 733 cie->augmentation++; 734 } 735 736 while (*cie->augmentation) { 737 /* 738 * "L" indicates a byte showing how the 739 * LSDA pointer is encoded. Skip it. 740 */ 741 if (*cie->augmentation == 'L') { 742 p++; 743 cie->augmentation++; 744 } else if (*cie->augmentation == 'R') { 745 /* 746 * "R" indicates a byte showing 747 * how FDE addresses are 748 * encoded. 749 */ 750 cie->encoding = *(char *)p++; 751 cie->augmentation++; 752 } else if (*cie->augmentation == 'P') { 753 /* 754 * "R" indicates a personality 755 * routine in the CIE 756 * augmentation. 757 */ 758 UNWINDER_BUG(); 759 } else if (*cie->augmentation == 'S') { 760 UNWINDER_BUG(); 761 } else { 762 /* 763 * Unknown augmentation. Assume 764 * 'z' augmentation. 765 */ 766 p = cie->initial_instructions; 767 UNWINDER_BUG_ON(!p); 768 break; 769 } 770 } 771 772 cie->initial_instructions = p; 773 cie->instructions_end = end; 774 775 /* Add to list */ 776 spin_lock_irqsave(&dwarf_cie_lock, flags); 777 list_add_tail(&cie->link, &dwarf_cie_list); 778 spin_unlock_irqrestore(&dwarf_cie_lock, flags); 779 780 return 0; 781 } 782 783 static int dwarf_parse_fde(void *entry, u32 entry_type, 784 void *start, unsigned long len, 785 unsigned char *end) 786 { 787 struct dwarf_fde *fde; 788 struct dwarf_cie *cie; 789 unsigned long flags; 790 int count; 791 void *p = start; 792 793 fde = kzalloc(sizeof(*fde), GFP_KERNEL); 794 if (!fde) 795 return -ENOMEM; 796 797 fde->length = len; 798 799 /* 800 * In a .eh_frame section the CIE pointer is the 801 * delta between the address within the FDE 802 */ 803 fde->cie_pointer = (unsigned long)(p - entry_type - 4); 804 805 cie = dwarf_lookup_cie(fde->cie_pointer); 806 fde->cie = cie; 807 808 if (cie->encoding) 809 count = dwarf_read_encoded_value(p, &fde->initial_location, 810 cie->encoding); 811 else 812 count = dwarf_read_addr(p, &fde->initial_location); 813 814 p += count; 815 816 if (cie->encoding) 817 count = dwarf_read_encoded_value(p, &fde->address_range, 818 cie->encoding & 0x0f); 819 else 820 count = dwarf_read_addr(p, &fde->address_range); 821 822 p += count; 823 824 if (fde->cie->flags & DWARF_CIE_Z_AUGMENTATION) { 825 unsigned int length; 826 count = dwarf_read_uleb128(p, &length); 827 p += count + length; 828 } 829 830 /* Call frame instructions. */ 831 fde->instructions = p; 832 fde->end = end; 833 834 /* Add to list. */ 835 spin_lock_irqsave(&dwarf_fde_lock, flags); 836 list_add_tail(&fde->link, &dwarf_fde_list); 837 spin_unlock_irqrestore(&dwarf_fde_lock, flags); 838 839 return 0; 840 } 841 842 static void dwarf_unwinder_dump(struct task_struct *task, 843 struct pt_regs *regs, 844 unsigned long *sp, 845 const struct stacktrace_ops *ops, 846 void *data) 847 { 848 struct dwarf_frame *frame, *_frame; 849 unsigned long return_addr; 850 851 _frame = NULL; 852 return_addr = 0; 853 854 while (1) { 855 frame = dwarf_unwind_stack(return_addr, _frame); 856 857 if (_frame) { 858 dwarf_frame_free_regs(_frame); 859 mempool_free(_frame, dwarf_frame_pool); 860 } 861 862 _frame = frame; 863 864 if (!frame || !frame->return_addr) 865 break; 866 867 return_addr = frame->return_addr; 868 ops->address(data, return_addr, 1); 869 } 870 } 871 872 static struct unwinder dwarf_unwinder = { 873 .name = "dwarf-unwinder", 874 .dump = dwarf_unwinder_dump, 875 .rating = 150, 876 }; 877 878 static void dwarf_unwinder_cleanup(void) 879 { 880 struct dwarf_cie *cie; 881 struct dwarf_fde *fde; 882 883 /* 884 * Deallocate all the memory allocated for the DWARF unwinder. 885 * Traverse all the FDE/CIE lists and remove and free all the 886 * memory associated with those data structures. 887 */ 888 list_for_each_entry(cie, &dwarf_cie_list, link) 889 kfree(cie); 890 891 list_for_each_entry(fde, &dwarf_fde_list, link) 892 kfree(fde); 893 894 kmem_cache_destroy(dwarf_reg_cachep); 895 kmem_cache_destroy(dwarf_frame_cachep); 896 } 897 898 /** 899 * dwarf_unwinder_init - initialise the dwarf unwinder 900 * 901 * Build the data structures describing the .dwarf_frame section to 902 * make it easier to lookup CIE and FDE entries. Because the 903 * .eh_frame section is packed as tightly as possible it is not 904 * easy to lookup the FDE for a given PC, so we build a list of FDE 905 * and CIE entries that make it easier. 906 */ 907 static int __init dwarf_unwinder_init(void) 908 { 909 u32 entry_type; 910 void *p, *entry; 911 int count, err = 0; 912 unsigned long len; 913 unsigned int c_entries, f_entries; 914 unsigned char *end; 915 INIT_LIST_HEAD(&dwarf_cie_list); 916 INIT_LIST_HEAD(&dwarf_fde_list); 917 918 c_entries = 0; 919 f_entries = 0; 920 entry = &__start_eh_frame; 921 922 dwarf_frame_cachep = kmem_cache_create("dwarf_frames", 923 sizeof(struct dwarf_frame), 0, 924 SLAB_PANIC | SLAB_HWCACHE_ALIGN | SLAB_NOTRACK, NULL); 925 926 dwarf_reg_cachep = kmem_cache_create("dwarf_regs", 927 sizeof(struct dwarf_reg), 0, 928 SLAB_PANIC | SLAB_HWCACHE_ALIGN | SLAB_NOTRACK, NULL); 929 930 dwarf_frame_pool = mempool_create(DWARF_FRAME_MIN_REQ, 931 mempool_alloc_slab, 932 mempool_free_slab, 933 dwarf_frame_cachep); 934 935 dwarf_reg_pool = mempool_create(DWARF_REG_MIN_REQ, 936 mempool_alloc_slab, 937 mempool_free_slab, 938 dwarf_reg_cachep); 939 940 while ((char *)entry < __stop_eh_frame) { 941 p = entry; 942 943 count = dwarf_entry_len(p, &len); 944 if (count == 0) { 945 /* 946 * We read a bogus length field value. There is 947 * nothing we can do here apart from disabling 948 * the DWARF unwinder. We can't even skip this 949 * entry and move to the next one because 'len' 950 * tells us where our next entry is. 951 */ 952 goto out; 953 } else 954 p += count; 955 956 /* initial length does not include itself */ 957 end = p + len; 958 959 entry_type = get_unaligned((u32 *)p); 960 p += 4; 961 962 if (entry_type == DW_EH_FRAME_CIE) { 963 err = dwarf_parse_cie(entry, p, len, end); 964 if (err < 0) 965 goto out; 966 else 967 c_entries++; 968 } else { 969 err = dwarf_parse_fde(entry, entry_type, p, len, end); 970 if (err < 0) 971 goto out; 972 else 973 f_entries++; 974 } 975 976 entry = (char *)entry + len + 4; 977 } 978 979 printk(KERN_INFO "DWARF unwinder initialised: read %u CIEs, %u FDEs\n", 980 c_entries, f_entries); 981 982 err = unwinder_register(&dwarf_unwinder); 983 if (err) 984 goto out; 985 986 return 0; 987 988 out: 989 printk(KERN_ERR "Failed to initialise DWARF unwinder: %d\n", err); 990 dwarf_unwinder_cleanup(); 991 return -EINVAL; 992 } 993 early_initcall(dwarf_unwinder_init); 994