1 /* Get previous frame state for an existing frame state.
2 Copyright (C) 2013, 2014 Red Hat, Inc.
3 This file is part of elfutils.
5 This file is free software; you can redistribute it and/or modify
6 it under the terms of either
8 * the GNU Lesser General Public License as published by the Free
9 Software Foundation; either version 3 of the License, or (at
10 your option) any later version
14 * the GNU General Public License as published by the Free
15 Software Foundation; either version 2 of the License, or (at
16 your option) any later version
18 or both in parallel, as here.
20 elfutils is distributed in the hope that it will be useful, but
21 WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 General Public License for more details.
25 You should have received copies of the GNU General Public License and
26 the GNU Lesser General Public License along with this program. If
27 not, see <http://www.gnu.org/licenses/>. */
36 #include "../libdw/dwarf.h"
37 #include <sys/ptrace.h>
39 /* Maximum number of DWARF expression stack slots before returning an error. */
40 #define DWARF_EXPR_STACK_MAX 0x100
42 /* Maximum number of DWARF expression executed operations before returning an
44 #define DWARF_EXPR_STEPS_MAX 0x1000
47 # define MAX(a, b) ((a) > (b) ? (a) : (b))
52 __libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val)
54 Ebl *ebl = state->thread->process->ebl;
55 if (! ebl_dwarf_to_regno (ebl, ®no))
57 if (regno >= ebl_frame_nregs (ebl))
59 if ((state->regs_set[regno / sizeof (*state->regs_set) / 8]
60 & ((uint64_t) 1U << (regno % (sizeof (*state->regs_set) * 8)))) == 0)
63 *val = state->regs[regno];
69 __libdwfl_frame_reg_set (Dwfl_Frame *state, unsigned regno, Dwarf_Addr val)
71 Ebl *ebl = state->thread->process->ebl;
72 if (! ebl_dwarf_to_regno (ebl, ®no))
74 if (regno >= ebl_frame_nregs (ebl))
76 /* For example i386 user_regs_struct has signed fields. */
77 if (ebl_get_elfclass (ebl) == ELFCLASS32)
79 state->regs_set[regno / sizeof (*state->regs_set) / 8] |=
80 ((uint64_t) 1U << (regno % (sizeof (*state->regs_set) * 8)));
81 state->regs[regno] = val;
86 state_get_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val)
88 if (! __libdwfl_frame_reg_get (state, regno, val))
90 __libdwfl_seterrno (DWFL_E_INVALID_REGISTER);
97 bra_compar (const void *key_voidp, const void *elem_voidp)
99 Dwarf_Word offset = (uintptr_t) key_voidp;
100 const Dwarf_Op *op = elem_voidp;
101 return (offset > op->offset) - (offset < op->offset);
111 do_push (struct eval_stack *stack, Dwarf_Addr val)
113 if (stack->used >= DWARF_EXPR_STACK_MAX)
115 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
118 if (stack->used == stack->allocated)
120 stack->allocated = MAX (stack->allocated * 2, 32);
121 Dwarf_Addr *new_addrs;
122 new_addrs = realloc (stack->addrs,
123 stack->allocated * sizeof (*stack->addrs));
124 if (new_addrs == NULL)
126 __libdwfl_seterrno (DWFL_E_NOMEM);
129 stack->addrs = new_addrs;
131 stack->addrs[stack->used++] = val;
136 do_pop (struct eval_stack *stack, Dwarf_Addr *val)
138 if (stack->used == 0)
140 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
143 *val = stack->addrs[--stack->used];
147 /* If FRAME is NULL is are computing CFI frame base. In such case another
148 DW_OP_call_frame_cfa is no longer permitted. */
151 expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops,
152 size_t nops, Dwarf_Addr *result, Dwarf_Addr bias)
154 Dwfl_Process *process = state->thread->process;
157 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
160 struct eval_stack stack =
167 #define pop(x) do_pop(&stack, x)
168 #define push(x) do_push(&stack, x)
170 Dwarf_Addr val1, val2;
171 bool is_location = false;
172 size_t steps_count = 0;
173 for (const Dwarf_Op *op = ops; op < ops + nops; op++)
175 if (++steps_count > DWARF_EXPR_STEPS_MAX)
177 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
182 /* DW_OP_* order matches libgcc/unwind-dw2.c execute_stack_op: */
183 case DW_OP_lit0 ... DW_OP_lit31:
184 if (! push (op->atom - DW_OP_lit0))
191 if (! push (op->number + bias))
197 case DW_OP_GNU_encoded_addr:
198 /* Missing support in the rest of elfutils. */
199 __libdwfl_seterrno (DWFL_E_UNSUPPORTED_DWARF);
211 if (! push (op->number))
217 case DW_OP_reg0 ... DW_OP_reg31:
218 if (! state_get_reg (state, op->atom - DW_OP_reg0, &val1)
226 if (! state_get_reg (state, op->number, &val1) || ! push (val1))
232 case DW_OP_breg0 ... DW_OP_breg31:
233 if (! state_get_reg (state, op->atom - DW_OP_breg0, &val1))
246 if (! state_get_reg (state, op->number, &val1))
259 if (! pop (&val1) || ! push (val1) || ! push (val1))
273 if (stack.used <= op->number)
276 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
279 if (! push (stack.addrs[stack.used - 1 - op->number]))
286 if (! pop (&val1) || ! pop (&val2)
287 || ! push (val2) || ! push (val1) || ! push (val2))
294 if (! pop (&val1) || ! pop (&val2) || ! push (val1) || ! push (val2))
303 if (! pop (&val1) || ! pop (&val2) || ! pop (&val3)
304 || ! push (val1) || ! push (val3) || ! push (val2))
312 case DW_OP_deref_size:
313 if (process->callbacks->memory_read == NULL)
316 __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT);
320 || ! process->callbacks->memory_read (process->dwfl, val1, &val1,
321 process->callbacks_arg))
326 if (op->atom == DW_OP_deref_size)
328 const int elfclass = frame->cache->e_ident[EI_CLASS];
329 const unsigned addr_bytes = elfclass == ELFCLASS32 ? 4 : 8;
330 if (op->number > addr_bytes)
333 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
336 #if BYTE_ORDER == BIG_ENDIAN
340 val1 >>= (addr_bytes - op->number) * 8;
343 val1 &= (1 << (op->number * 8)) - 1;
352 #define UNOP(atom, expr) \
354 if (! pop (&val1) || ! push (expr)) \
356 free (stack.addrs); \
360 UNOP (DW_OP_abs, llabs ((int64_t) val1))
361 UNOP (DW_OP_neg, -(int64_t) val1)
362 UNOP (DW_OP_not, ~val1)
364 case DW_OP_plus_uconst:
365 if (! pop (&val1) || ! push (val1 + op->number))
371 #define BINOP(atom, op) \
373 if (! pop (&val2) || ! pop (&val1) || ! push (val1 op val2)) \
375 free (stack.addrs); \
379 #define BINOP_SIGNED(atom, op) \
381 if (! pop (&val2) || ! pop (&val1) \
382 || ! push ((int64_t) val1 op (int64_t) val2)) \
384 free (stack.addrs); \
390 if (! pop (&val2) || ! pop (&val1))
398 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
401 if (! push ((int64_t) val1 / (int64_t) val2))
407 BINOP (DW_OP_minus, -)
409 if (! pop (&val2) || ! pop (&val1))
417 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
420 if (! push (val1 % val2))
428 BINOP (DW_OP_plus, +)
429 BINOP (DW_OP_shl, <<)
430 BINOP (DW_OP_shr, >>)
431 BINOP_SIGNED (DW_OP_shra, >>)
433 BINOP_SIGNED (DW_OP_le, <=)
434 BINOP_SIGNED (DW_OP_ge, >=)
435 BINOP_SIGNED (DW_OP_eq, ==)
436 BINOP_SIGNED (DW_OP_lt, <)
437 BINOP_SIGNED (DW_OP_gt, >)
438 BINOP_SIGNED (DW_OP_ne, !=)
451 Dwarf_Word offset = op->offset + 1 + 2 + (int16_t) op->number;
452 const Dwarf_Op *found = bsearch ((void *) (uintptr_t) offset, ops, nops,
453 sizeof (*ops), bra_compar);
457 /* PPC32 vDSO has such invalid operations. */
458 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
461 /* Undo the 'for' statement increment. */
466 /* DW_OP_* not listed in libgcc/unwind-dw2.c execute_stack_op: */
467 case DW_OP_call_frame_cfa:;
468 // Not used by CFI itself but it is synthetized by elfutils internation.
473 || dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops) != 0
474 || ! expr_eval (state, NULL, cfa_ops, cfa_nops, &cfa, bias)
477 __libdwfl_seterrno (DWFL_E_LIBDW);
483 case DW_OP_stack_value:
484 // Not used by CFI itself but it is synthetized by elfutils internation.
488 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
500 if (process->callbacks->memory_read == NULL)
502 __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT);
505 if (! process->callbacks->memory_read (process->dwfl, *result, result,
506 process->callbacks_arg))
515 new_unwound (Dwfl_Frame *state)
517 assert (state->unwound == NULL);
518 Dwfl_Thread *thread = state->thread;
519 Dwfl_Process *process = thread->process;
520 Ebl *ebl = process->ebl;
521 size_t nregs = ebl_frame_nregs (ebl);
524 unwound = malloc (sizeof (*unwound) + sizeof (*unwound->regs) * nregs);
525 state->unwound = unwound;
526 unwound->thread = thread;
527 unwound->unwound = NULL;
528 unwound->signal_frame = false;
529 unwound->initial_frame = false;
530 unwound->pc_state = DWFL_FRAME_STATE_ERROR;
531 memset (unwound->regs_set, 0, sizeof (unwound->regs_set));
534 /* The logic is to call __libdwfl_seterrno for any CFI bytecode interpretation
535 error so one can easily catch the problem with a debugger. Still there are
536 archs with invalid CFI for some registers where the registers are never used
537 later. Therefore we continue unwinding leaving the registers undefined. */
540 handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias)
543 if (INTUSE(dwarf_cfi_addrframe) (cfi, pc, &frame) != 0)
545 __libdwfl_seterrno (DWFL_E_LIBDW);
549 Dwfl_Frame *unwound = state->unwound;
550 unwound->signal_frame = frame->fde->cie->signal_frame;
551 Dwfl_Thread *thread = state->thread;
552 Dwfl_Process *process = thread->process;
553 Ebl *ebl = process->ebl;
554 size_t nregs = ebl_frame_nregs (ebl);
557 /* The return register is special for setting the unwound->pc_state. */
558 unsigned ra = frame->fde->cie->return_address_register;
560 ebl_dwarf_to_regno (ebl, &ra);
562 for (unsigned regno = 0; regno < nregs; regno++)
564 Dwarf_Op reg_ops_mem[3], *reg_ops;
566 if (dwarf_frame_register (frame, regno, reg_ops_mem, ®_ops,
569 __libdwfl_seterrno (DWFL_E_LIBDW);
575 if (reg_ops == reg_ops_mem)
577 /* REGNO is undefined. */
579 unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED;
582 else if (reg_ops == NULL)
584 /* REGNO is same-value. */
585 if (! state_get_reg (state, regno, ®val))
590 __libdwfl_seterrno (DWFL_E_INVALID_DWARF);
594 else if (! expr_eval (state, frame, reg_ops, reg_nops, ®val, bias))
596 /* PPC32 vDSO has various invalid operations, ignore them. The
597 register will look as unset causing an error later, if used.
598 But PPC32 does not use such registers. */
602 /* Some architectures encode some extra info in the return address. */
603 if (regno == frame->fde->cie->return_address_register)
604 regval &= ebl_func_addr_mask (ebl);
606 /* This is another strange PPC[64] case. There are two
607 registers numbers that can represent the same DWARF return
608 register number. We only want one to actually set the return
609 register value. But we always want to override the value if
610 the register is the actual CIE return address register. */
611 if (ra_set && regno != frame->fde->cie->return_address_register)
614 if (ebl_dwarf_to_regno (ebl, &r) && r == ra)
618 if (! __libdwfl_frame_reg_set (unwound, regno, regval))
620 __libdwfl_seterrno (DWFL_E_INVALID_REGISTER);
626 if (ebl_dwarf_to_regno (ebl, &r) && r == ra)
630 if (unwound->pc_state == DWFL_FRAME_STATE_ERROR
631 && __libdwfl_frame_reg_get (unwound,
632 frame->fde->cie->return_address_register,
635 /* PPC32 __libc_start_main properly CFI-unwinds PC as zero. Currently
636 none of the archs supported for unwinding have zero as a valid PC. */
637 if (unwound->pc == 0)
638 unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED;
641 unwound->pc_state = DWFL_FRAME_STATE_PC_SET;
642 /* In SPARC the return address register actually contains
643 the address of the call instruction instead of the return
644 address. Therefore we add here an offset defined by the
645 backend. Most likely 0. */
646 unwound->pc += ebl_ra_offset (ebl);
653 setfunc (int firstreg, unsigned nregs, const Dwarf_Word *regs, void *arg)
655 Dwfl_Frame *state = arg;
656 Dwfl_Frame *unwound = state->unwound;
659 assert (firstreg == -1);
661 assert (unwound->pc_state == DWFL_FRAME_STATE_PC_UNDEFINED);
663 unwound->pc_state = DWFL_FRAME_STATE_PC_SET;
667 if (! __libdwfl_frame_reg_set (unwound, firstreg++, *regs++))
673 getfunc (int firstreg, unsigned nregs, Dwarf_Word *regs, void *arg)
675 Dwfl_Frame *state = arg;
676 assert (firstreg >= 0);
678 if (! __libdwfl_frame_reg_get (state, firstreg++, regs++))
684 readfunc (Dwarf_Addr addr, Dwarf_Word *datap, void *arg)
686 Dwfl_Frame *state = arg;
687 Dwfl_Thread *thread = state->thread;
688 Dwfl_Process *process = thread->process;
689 return process->callbacks->memory_read (process->dwfl, addr, datap,
690 process->callbacks_arg);
695 __libdwfl_frame_unwind (Dwfl_Frame *state)
699 /* Do not ask dwfl_frame_pc for ISACTIVATION, it would try to unwind STATE
700 which would deadlock us. */
702 bool ok = INTUSE(dwfl_frame_pc) (state, &pc, NULL);
704 /* Check whether this is the initial frame or a signal frame.
705 Then we need to unwind from the original, unadjusted PC. */
706 if (! state->initial_frame && ! state->signal_frame)
708 Dwfl_Module *mod = INTUSE(dwfl_addrmodule) (state->thread->process->dwfl, pc);
710 __libdwfl_seterrno (DWFL_E_NO_DWARF);
714 Dwarf_CFI *cfi_eh = INTUSE(dwfl_module_eh_cfi) (mod, &bias);
717 handle_cfi (state, pc - bias, cfi_eh, bias);
721 Dwarf_CFI *cfi_dwarf = INTUSE(dwfl_module_dwarf_cfi) (mod, &bias);
724 handle_cfi (state, pc - bias, cfi_dwarf, bias);
729 assert (state->unwound == NULL);
730 Dwfl_Thread *thread = state->thread;
731 Dwfl_Process *process = thread->process;
732 Ebl *ebl = process->ebl;
734 state->unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED;
735 // &Dwfl_Frame.signal_frame cannot be passed as it is a bitfield.
736 bool signal_frame = false;
737 if (! ebl_unwind (ebl, pc, setfunc, getfunc, readfunc, state, &signal_frame))
739 // Discard the unwind attempt. During next __libdwfl_frame_unwind call
740 // we may have for example the appropriate Dwfl_Module already mapped.
741 assert (state->unwound->unwound == NULL);
742 free (state->unwound);
743 state->unwound = NULL;
744 // __libdwfl_seterrno has been called above.
747 assert (state->unwound->pc_state == DWFL_FRAME_STATE_PC_SET);
748 state->unwound->signal_frame = signal_frame;