1 /* Stack unwinding code based on dwarf2 frame info for GDB, the GNU debugger.
2 Copyright 2001, 2002 Free Software Foundation, Inc.
3 Contributed by Jiri Smid, SuSE Labs.
4 Based on code written by Daniel Berlin (dan@dberlin.org).
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
28 #include "elf/dwarf2.h"
31 #include "dwarf2cfi.h"
33 /* Common Information Entry - holds information that is shared among many
37 /* Offset of this unit in dwarf_frame_buffer. */
40 /* A null-terminated string that identifies the augmentation to this CIE or
41 to the FDEs that use it. */
44 /* A constant that is factored out of all advance location instructions. */
45 unsigned int code_align
;
47 /* A constant that is factored out of all offset instructions. */
50 /* A constant that indicates which regiter represents the return address
54 /* Indicates how addresses are encoded. */
55 unsigned char addr_encoding
;
57 /* Pointer and length of the cie program. */
59 unsigned int data_length
;
61 struct objfile
*objfile
;
64 struct cie_unit
*next
;
67 /* Frame Description Entry. */
70 /* Address of the first location associated with this entry. */
71 CORE_ADDR initial_location
;
73 /* Length of program section described by this entry. */
74 CORE_ADDR address_range
;
76 /* Pointer to asociated CIE. */
77 struct cie_unit
*cie_ptr
;
79 /* Pointer and length of the cie program. */
81 unsigned int data_length
;
86 struct fde_unit
**array
;
103 REG_CTX_SAVED_OFFSET
,
111 /* This is the register and unwind state for a particular frame. */
114 struct context_reg
*reg
;
122 struct frame_state_reg
143 /* Each register save state can be described in terms of a CFA slot,
144 another register, or a location expression. */
145 struct frame_state_regs
147 struct frame_state_reg
*reg
;
149 /* Used to implement DW_CFA_remember_state. */
150 struct frame_state_regs
*prev
;
154 /* The CFA can be described in terms of a reg+offset or a
155 location expression. */
158 unsigned char *cfa_exp
;
167 /* The PC described by the current frame state. */
170 /* The information we care about from the CIE/FDE. */
172 unsigned int code_align
;
173 unsigned char retaddr_column
;
174 unsigned char addr_encoding
;
176 struct objfile
*objfile
;
179 #define UNWIND_CONTEXT(fi) ((struct context *) (fi->context))
182 static struct cie_unit
*cie_chunks
;
183 static struct fde_array fde_chunks
;
184 /* Obstack for allocating temporary storage used during unwind operations. */
185 static struct obstack unwind_tmp_obstack
;
187 extern file_ptr dwarf_frame_offset
;
188 extern unsigned int dwarf_frame_size
;
189 extern file_ptr dwarf_eh_frame_offset
;
190 extern unsigned int dwarf_eh_frame_size
;
192 static char *dwarf_frame_buffer
;
195 extern char *dwarf2_read_section (struct objfile
*objfile
, file_ptr offset
,
198 static struct fde_unit
*fde_unit_alloc (void);
199 static struct cie_unit
*cie_unit_alloc (void);
200 static void fde_chunks_need_space ();
202 static struct context
*context_alloc ();
203 static struct frame_state
*frame_state_alloc ();
204 static void unwind_tmp_obstack_init ();
205 static void unwind_tmp_obstack_free ();
206 static void context_cpy (struct context
*dst
, struct context
*src
);
208 static unsigned int read_1u (bfd
* abfd
, char **p
);
209 static int read_1s (bfd
* abfd
, char **p
);
210 static unsigned int read_2u (bfd
* abfd
, char **p
);
211 static int read_2s (bfd
* abfd
, char **p
);
212 static unsigned int read_4u (bfd
* abfd
, char **p
);
213 static int read_4s (bfd
* abfd
, char **p
);
214 static ULONGEST
read_8u (bfd
* abfd
, char **p
);
215 static LONGEST
read_8s (bfd
* abfd
, char **p
);
217 static ULONGEST
read_uleb128 (bfd
* abfd
, char **p
);
218 static LONGEST
read_sleb128 (bfd
* abfd
, char **p
);
219 static CORE_ADDR
read_pointer (bfd
* abfd
, char **p
);
220 static CORE_ADDR
read_encoded_pointer (bfd
* abfd
, char **p
,
221 unsigned char encoding
);
223 static LONGEST
read_initial_length (bfd
* abfd
, char *buf
, int *bytes_read
);
224 static ULONGEST
read_length (bfd
* abfd
, char *buf
, int *bytes_read
,
227 static int is_cie (ULONGEST cie_id
, int dwarf64
);
228 static int compare_fde_unit (const void *a
, const void *b
);
229 void dwarf2_build_frame_info (struct objfile
*objfile
);
231 static void execute_cfa_program (struct objfile
*objfile
, char *insn_ptr
,
232 char *insn_end
, struct context
*context
,
233 struct frame_state
*fs
);
234 static struct fde_unit
*get_fde_for_addr (CORE_ADDR pc
);
235 static void frame_state_for (struct context
*context
, struct frame_state
*fs
);
236 static void get_reg (char *reg
, struct context
*context
, int regnum
);
237 static CORE_ADDR
execute_stack_op (struct objfile
*objfile
,
238 char *op_ptr
, char *op_end
,
239 struct context
*context
,
241 static void update_context (struct context
*context
, struct frame_state
*fs
,
245 /* Memory allocation functions. */
246 static struct fde_unit
*
247 fde_unit_alloc (void)
249 struct fde_unit
*fde
;
251 fde
= (struct fde_unit
*) xmalloc (sizeof (struct fde_unit
));
252 memset (fde
, 0, sizeof (struct fde_unit
));
256 static struct cie_unit
*
257 cie_unit_alloc (void)
259 struct cie_unit
*cie
;
261 cie
= (struct cie_unit
*) xmalloc (sizeof (struct cie_unit
));
262 memset (cie
, 0, sizeof (struct cie_unit
));
267 fde_chunks_need_space ()
269 if (fde_chunks
.elems
< fde_chunks
.array_size
)
271 fde_chunks
.array_size
=
272 fde_chunks
.array_size
? 2 * fde_chunks
.array_size
: 1024;
274 xrealloc (fde_chunks
.array
,
275 sizeof (struct fde_unit
) * fde_chunks
.array_size
);
278 /* Alocate a new `struct context' on temporary obstack. */
279 static struct context
*
282 struct context
*context
;
284 int regs_size
= sizeof (struct context_reg
) * NUM_REGS
;
286 context
= (struct context
*) obstack_alloc (&unwind_tmp_obstack
,
287 sizeof (struct context
));
288 memset (context
, 0, sizeof (struct context
));
289 context
->reg
= (struct context_reg
*) obstack_alloc (&unwind_tmp_obstack
,
291 memset (context
->reg
, 0, regs_size
);
295 /* Alocate a new `struct frame_state' on temporary obstack. */
296 static struct frame_state
*
299 struct frame_state
*fs
;
301 int regs_size
= sizeof (struct frame_state_reg
) * NUM_REGS
;
303 fs
= (struct frame_state
*) obstack_alloc (&unwind_tmp_obstack
,
304 sizeof (struct frame_state
));
305 memset (fs
, 0, sizeof (struct frame_state
));
307 (struct frame_state_reg
*) obstack_alloc (&unwind_tmp_obstack
, regs_size
);
308 memset (fs
->regs
.reg
, 0, regs_size
);
313 unwind_tmp_obstack_init ()
315 obstack_init (&unwind_tmp_obstack
);
319 unwind_tmp_obstack_free ()
321 obstack_free (&unwind_tmp_obstack
, NULL
);
322 unwind_tmp_obstack_init ();
326 context_cpy (struct context
*dst
, struct context
*src
)
328 int regs_size
= sizeof (struct context_reg
) * NUM_REGS
;
329 struct context_reg
*dreg
;
331 /* Structure dst contains a pointer to an array of
332 * registers of a given frame as well as src does. This
333 * array was already allocated before dst was passed to
334 * context_cpy but the pointer to it was overriden by
335 * '*dst = *src' and the array was lost. This led to the
336 * situation, that we've had a copy of src placed in dst,
337 * but both of them pointed to the same regs array and
338 * thus we've sometimes blindly rewritten it. Now we save
339 * the pointer before copying src to dst, return it back
340 * after that and copy the registers into their new place
341 * finally. --- mludvig@suse.cz */
346 memcpy (dst
->reg
, src
->reg
, regs_size
);
350 read_1u (bfd
* abfd
, char **p
)
354 ret
= bfd_get_8 (abfd
, (bfd_byte
*) * p
);
360 read_1s (bfd
* abfd
, char **p
)
364 ret
= bfd_get_signed_8 (abfd
, (bfd_byte
*) * p
);
370 read_2u (bfd
* abfd
, char **p
)
374 ret
= bfd_get_16 (abfd
, (bfd_byte
*) * p
);
380 read_2s (bfd
* abfd
, char **p
)
384 ret
= bfd_get_signed_16 (abfd
, (bfd_byte
*) * p
);
390 read_4u (bfd
* abfd
, char **p
)
394 ret
= bfd_get_32 (abfd
, (bfd_byte
*) * p
);
400 read_4s (bfd
* abfd
, char **p
)
404 ret
= bfd_get_signed_32 (abfd
, (bfd_byte
*) * p
);
410 read_8u (bfd
* abfd
, char **p
)
414 ret
= bfd_get_64 (abfd
, (bfd_byte
*) * p
);
420 read_8s (bfd
* abfd
, char **p
)
424 ret
= bfd_get_signed_64 (abfd
, (bfd_byte
*) * p
);
430 read_uleb128 (bfd
* abfd
, char **p
)
441 byte
= bfd_get_8 (abfd
, (bfd_byte
*) * p
);
443 ret
|= ((unsigned long) (byte
& 127) << shift
);
444 if ((byte
& 128) == 0)
454 read_sleb128 (bfd
* abfd
, char **p
)
457 int i
, shift
, size
, num_read
;
467 byte
= bfd_get_8 (abfd
, (bfd_byte
*) * p
);
469 ret
|= ((long) (byte
& 127) << shift
);
471 if ((byte
& 128) == 0)
476 if ((shift
< size
) && (byte
& 0x40))
478 ret
|= -(1 << shift
);
484 read_pointer (bfd
* abfd
, char **p
)
486 switch (TARGET_ADDR_BIT
/ TARGET_CHAR_BIT
)
489 return read_4u (abfd
, p
);
491 return read_8u (abfd
, p
);
493 error ("dwarf cfi error: unsupported target address length.");
498 read_encoded_pointer (bfd
* abfd
, char **p
, unsigned char encoding
)
502 switch (encoding
& 0x0f)
504 case DW_EH_PE_absptr
:
505 ret
= read_pointer (abfd
, p
);
508 case DW_EH_PE_uleb128
:
509 ret
= read_uleb128 (abfd
, p
);
511 case DW_EH_PE_sleb128
:
512 ret
= read_sleb128 (abfd
, p
);
515 case DW_EH_PE_udata2
:
516 ret
= read_2u (abfd
, p
);
518 case DW_EH_PE_udata4
:
519 ret
= read_4u (abfd
, p
);
521 case DW_EH_PE_udata8
:
522 ret
= read_8u (abfd
, p
);
525 case DW_EH_PE_sdata2
:
526 ret
= read_2s (abfd
, p
);
528 case DW_EH_PE_sdata4
:
529 ret
= read_4s (abfd
, p
);
531 case DW_EH_PE_sdata8
:
532 ret
= read_8s (abfd
, p
);
536 internal_error (__FILE__
, __LINE__
,
537 "read_encoded_pointer: unknown pointer encoding");
541 switch (encoding
& 0xf0)
543 case DW_EH_PE_absptr
:
546 ret
+= (CORE_ADDR
) * p
;
548 case DW_EH_PE_textrel
:
549 case DW_EH_PE_datarel
:
550 case DW_EH_PE_funcrel
:
552 internal_error (__FILE__
, __LINE__
,
553 "read_encoded_pointer: unknown pointer encoding");
560 read_initial_length (bfd
* abfd
, char *buf
, int *bytes_read
)
564 ret
= bfd_get_32 (abfd
, (bfd_byte
*) buf
);
566 if (ret
== 0xffffffff)
568 ret
= bfd_get_64 (abfd
, (bfd_byte
*) buf
+ 4);
580 read_length (bfd
* abfd
, char *buf
, int *bytes_read
, int dwarf64
)
585 return read_8u (abfd
, &buf
);
590 return read_4u (abfd
, &buf
);
595 execute_cfa_program (struct objfile
*objfile
, char *insn_ptr
, char *insn_end
,
596 struct context
*context
, struct frame_state
*fs
)
598 struct frame_state_regs
*unused_rs
= NULL
;
600 /* Don't allow remember/restore between CIE and FDE programs. */
601 fs
->regs
.prev
= NULL
;
603 while (insn_ptr
< insn_end
&& fs
->pc
< context
->ra
)
605 unsigned char insn
= *insn_ptr
++;
606 ULONGEST reg
, uoffset
;
609 if (insn
& DW_CFA_advance_loc
)
610 fs
->pc
+= (insn
& 0x3f) * fs
->code_align
;
611 else if (insn
& DW_CFA_offset
)
614 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
615 offset
= (long) uoffset
*fs
->data_align
;
616 fs
->regs
.reg
[reg
].how
= REG_SAVED_OFFSET
;
617 fs
->regs
.reg
[reg
].loc
.offset
= offset
;
619 else if (insn
& DW_CFA_restore
)
622 fs
->regs
.reg
[reg
].how
= REG_UNSAVED
;
628 fs
->pc
= read_encoded_pointer (objfile
->obfd
, &insn_ptr
,
632 case DW_CFA_advance_loc1
:
633 fs
->pc
+= read_1u (objfile
->obfd
, &insn_ptr
);
635 case DW_CFA_advance_loc2
:
636 fs
->pc
+= read_2u (objfile
->obfd
, &insn_ptr
);
638 case DW_CFA_advance_loc4
:
639 fs
->pc
+= read_4u (objfile
->obfd
, &insn_ptr
);
642 case DW_CFA_offset_extended
:
643 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
644 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
645 offset
= (long) uoffset
*fs
->data_align
;
646 fs
->regs
.reg
[reg
].how
= REG_SAVED_OFFSET
;
647 fs
->regs
.reg
[reg
].loc
.offset
= offset
;
650 case DW_CFA_restore_extended
:
651 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
652 fs
->regs
.reg
[reg
].how
= REG_UNSAVED
;
655 case DW_CFA_undefined
:
656 case DW_CFA_same_value
:
660 case DW_CFA_register
:
663 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
664 reg2
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
665 fs
->regs
.reg
[reg
].how
= REG_SAVED_REG
;
666 fs
->regs
.reg
[reg
].loc
.reg
= reg2
;
670 case DW_CFA_remember_state
:
672 struct frame_state_regs
*new_rs
;
676 unused_rs
= unused_rs
->prev
;
679 new_rs
= xmalloc (sizeof (struct frame_state_regs
));
682 fs
->regs
.prev
= new_rs
;
686 case DW_CFA_restore_state
:
688 struct frame_state_regs
*old_rs
= fs
->regs
.prev
;
690 old_rs
->prev
= unused_rs
;
696 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
697 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
699 fs
->cfa_offset
= uoffset
;
700 fs
->cfa_how
= CFA_REG_OFFSET
;
703 case DW_CFA_def_cfa_register
:
704 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
706 fs
->cfa_how
= CFA_REG_OFFSET
;
709 case DW_CFA_def_cfa_offset
:
710 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
711 fs
->cfa_offset
= uoffset
;
714 case DW_CFA_def_cfa_expression
:
715 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
716 fs
->cfa_exp
= insn_ptr
;
717 fs
->cfa_how
= CFA_EXP
;
721 case DW_CFA_expression
:
722 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
723 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
724 fs
->regs
.reg
[reg
].how
= REG_SAVED_EXP
;
725 fs
->regs
.reg
[reg
].loc
.exp
= insn_ptr
;
729 /* From the 2.1 draft. */
730 case DW_CFA_offset_extended_sf
:
731 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
732 offset
= read_sleb128 (objfile
->obfd
, &insn_ptr
);
733 offset
*= fs
->data_align
;
734 fs
->regs
.reg
[reg
].how
= REG_SAVED_OFFSET
;
735 fs
->regs
.reg
[reg
].loc
.offset
= offset
;
738 case DW_CFA_def_cfa_sf
:
739 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
740 offset
= read_sleb128 (objfile
->obfd
, &insn_ptr
);
741 fs
->cfa_offset
= offset
;
743 fs
->cfa_how
= CFA_REG_OFFSET
;
746 case DW_CFA_def_cfa_offset_sf
:
747 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
748 fs
->cfa_offset
= uoffset
;
749 /* cfa_how deliberately not set. */
752 case DW_CFA_GNU_window_save
:
753 /* ??? Hardcoded for SPARC register window configuration. */
754 for (reg
= 16; reg
< 32; ++reg
)
756 fs
->regs
.reg
[reg
].how
= REG_SAVED_OFFSET
;
757 fs
->regs
.reg
[reg
].loc
.offset
= (reg
- 16) * sizeof (void *);
761 case DW_CFA_GNU_args_size
:
762 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
763 context
->args_size
= uoffset
;
766 case DW_CFA_GNU_negative_offset_extended
:
767 /* Obsoleted by DW_CFA_offset_extended_sf, but used by
768 older PowerPC code. */
769 reg
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
770 uoffset
= read_uleb128 (objfile
->obfd
, &insn_ptr
);
771 offset
= (long) uoffset
*fs
->data_align
;
772 fs
->regs
.reg
[reg
].how
= REG_SAVED_OFFSET
;
773 fs
->regs
.reg
[reg
].loc
.offset
= -offset
;
777 error ("dwarf cfi error: unknown cfa instruction %d.", insn
);
782 static struct fde_unit
*
783 get_fde_for_addr (CORE_ADDR pc
)
786 struct fde_unit
*fde
= NULL
;
788 hi
= fde_chunks
.elems
;
792 size_t i
= (lo
+ hi
) / 2;
793 fde
= fde_chunks
.array
[i
];
794 if (pc
< fde
->initial_location
)
796 else if (pc
>= fde
->initial_location
+ fde
->address_range
)
805 frame_state_for (struct context
*context
, struct frame_state
*fs
)
807 struct fde_unit
*fde
;
808 struct cie_unit
*cie
;
810 context
->args_size
= 0;
813 fde
= get_fde_for_addr (context
->ra
- 1);
818 fs
->pc
= fde
->initial_location
;
824 fs
->code_align
= cie
->code_align
;
825 fs
->data_align
= cie
->data_align
;
826 fs
->retaddr_column
= cie
->ra
;
827 fs
->addr_encoding
= cie
->addr_encoding
;
828 fs
->objfile
= cie
->objfile
;
830 execute_cfa_program (cie
->objfile
, cie
->data
,
831 cie
->data
+ cie
->data_length
, context
, fs
);
832 execute_cfa_program (cie
->objfile
, fde
->data
,
833 fde
->data
+ fde
->data_length
, context
, fs
);
836 internal_error (__FILE__
, __LINE__
,
837 "%s(): Internal error: fde->cie_ptr==NULL !", __func__
);
841 get_reg (char *reg
, struct context
*context
, int regnum
)
843 switch (context
->reg
[regnum
].how
)
845 case REG_CTX_UNSAVED
:
846 read_register_gen (regnum
, reg
);
848 case REG_CTX_SAVED_OFFSET
:
849 target_read_memory (context
->cfa
+ context
->reg
[regnum
].loc
.offset
,
850 reg
, REGISTER_RAW_SIZE (regnum
));
852 case REG_CTX_SAVED_REG
:
853 read_register_gen (context
->reg
[regnum
].loc
.reg
, reg
);
855 case REG_CTX_SAVED_ADDR
:
856 target_read_memory (context
->reg
[regnum
].loc
.addr
,
857 reg
, REGISTER_RAW_SIZE (regnum
));
860 memcpy (reg
, &context
->reg
[regnum
].loc
.addr
,
861 REGISTER_RAW_SIZE (regnum
));
864 internal_error (__FILE__
, __LINE__
, "get_reg: unknown register rule");
868 /* Decode a DW_OP stack program. Return the top of stack. Push INITIAL
869 onto the stack to start. */
871 execute_stack_op (struct objfile
*objfile
,
872 char *op_ptr
, char *op_end
, struct context
*context
,
875 CORE_ADDR stack
[64]; /* ??? Assume this is enough. */
881 while (op_ptr
< op_end
)
883 enum dwarf_location_atom op
= *op_ptr
++;
922 result
= op
- DW_OP_lit0
;
926 result
= read_pointer (objfile
->obfd
, &op_ptr
);
930 result
= read_1u (objfile
->obfd
, &op_ptr
);
933 result
= read_1s (objfile
->obfd
, &op_ptr
);
936 result
= read_2u (objfile
->obfd
, &op_ptr
);
939 result
= read_2s (objfile
->obfd
, &op_ptr
);
942 result
= read_4u (objfile
->obfd
, &op_ptr
);
945 result
= read_4s (objfile
->obfd
, &op_ptr
);
948 result
= read_8u (objfile
->obfd
, &op_ptr
);
951 result
= read_8s (objfile
->obfd
, &op_ptr
);
954 result
= read_uleb128 (objfile
->obfd
, &op_ptr
);
957 result
= read_sleb128 (objfile
->obfd
, &op_ptr
);
992 get_reg ((char *) &result
, context
, op
- DW_OP_reg0
);
995 reg
= read_uleb128 (objfile
->obfd
, &op_ptr
);
996 get_reg ((char *) &result
, context
, reg
);
1031 offset
= read_sleb128 (objfile
->obfd
, &op_ptr
);
1032 get_reg ((char *) &result
, context
, op
- DW_OP_breg0
);
1036 reg
= read_uleb128 (objfile
->obfd
, &op_ptr
);
1037 offset
= read_sleb128 (objfile
->obfd
, &op_ptr
);
1038 get_reg ((char *) &result
, context
, reg
);
1044 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1045 result
= stack
[stack_elt
- 1];
1049 if (--stack_elt
< 0)
1050 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1055 if (offset
>= stack_elt
- 1)
1056 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1057 result
= stack
[stack_elt
- 1 - offset
];
1062 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1063 result
= stack
[stack_elt
- 2];
1068 CORE_ADDR t1
, t2
, t3
;
1071 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1072 t1
= stack
[stack_elt
- 1];
1073 t2
= stack
[stack_elt
- 2];
1074 t3
= stack
[stack_elt
- 3];
1075 stack
[stack_elt
- 1] = t2
;
1076 stack
[stack_elt
- 2] = t3
;
1077 stack
[stack_elt
- 3] = t1
;
1082 case DW_OP_deref_size
:
1086 case DW_OP_plus_uconst
:
1087 /* Unary operations. */
1088 if (--stack_elt
< 0)
1089 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1090 result
= stack
[stack_elt
];
1096 char *ptr
= (char *) result
;
1097 result
= read_pointer (objfile
->obfd
, &ptr
);
1101 case DW_OP_deref_size
:
1103 char *ptr
= (char *) result
;
1107 result
= read_1u (objfile
->obfd
, &ptr
);
1110 result
= read_2u (objfile
->obfd
, &ptr
);
1113 result
= read_4u (objfile
->obfd
, &ptr
);
1116 result
= read_8u (objfile
->obfd
, &ptr
);
1119 internal_error (__FILE__
, __LINE__
,
1120 "execute_stack_op error");
1135 case DW_OP_plus_uconst
:
1136 result
+= read_uleb128 (objfile
->obfd
, &op_ptr
);
1157 /* Binary operations. */
1158 CORE_ADDR first
, second
;
1159 if ((stack_elt
-= 2) < 0)
1160 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1161 second
= stack
[stack_elt
];
1162 first
= stack
[stack_elt
+ 1];
1167 result
= second
& first
;
1170 result
= (LONGEST
) second
/ (LONGEST
) first
;
1173 result
= second
- first
;
1176 result
= (LONGEST
) second
% (LONGEST
) first
;
1179 result
= second
* first
;
1182 result
= second
| first
;
1185 result
= second
+ first
;
1188 result
= second
<< first
;
1191 result
= second
>> first
;
1194 result
= (LONGEST
) second
>> first
;
1197 result
= second
^ first
;
1200 result
= (LONGEST
) first
<= (LONGEST
) second
;
1203 result
= (LONGEST
) first
>= (LONGEST
) second
;
1206 result
= (LONGEST
) first
== (LONGEST
) second
;
1209 result
= (LONGEST
) first
< (LONGEST
) second
;
1212 result
= (LONGEST
) first
> (LONGEST
) second
;
1215 result
= (LONGEST
) first
!= (LONGEST
) second
;
1217 default: /* This label is here just to avoid warning. */
1224 offset
= read_2s (objfile
->obfd
, &op_ptr
);
1229 if (--stack_elt
< 0)
1230 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1231 offset
= read_2s (objfile
->obfd
, &op_ptr
);
1232 if (stack
[stack_elt
] != 0)
1240 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1243 /* Most things push a result value. */
1244 if ((size_t) stack_elt
>= sizeof (stack
) / sizeof (*stack
))
1245 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1246 stack
[++stack_elt
] = result
;
1250 /* We were executing this program to get a value. It should be
1252 if (--stack_elt
< 0)
1253 internal_error (__FILE__
, __LINE__
, "execute_stack_op error");
1254 return stack
[stack_elt
];
1258 update_context (struct context
*context
, struct frame_state
*fs
, int chain
)
1260 struct context
*orig_context
;
1264 unwind_tmp_obstack_init ();
1266 orig_context
= context_alloc ();
1267 context_cpy (orig_context
, context
);
1269 /* Compute this frame's CFA. */
1270 switch (fs
->cfa_how
)
1272 case CFA_REG_OFFSET
:
1273 get_reg ((char *) &cfa
, context
, fs
->cfa_reg
);
1274 cfa
+= fs
->cfa_offset
;
1278 /* ??? No way of knowing what register number is the stack pointer
1279 to do the same sort of handling as above. Assume that if the
1280 CFA calculation is so complicated as to require a stack program
1281 that this will not be a problem. */
1283 char *exp
= fs
->cfa_exp
;
1286 len
= read_uleb128 (fs
->objfile
->obfd
, &exp
);
1287 cfa
= (CORE_ADDR
) execute_stack_op (fs
->objfile
, exp
,
1288 exp
+ len
, context
, 0);
1297 orig_context
->cfa
= cfa
;
1299 /* Compute the addresses of all registers saved in this frame. */
1300 for (i
= 0; i
< NUM_REGS
; ++i
)
1301 switch (fs
->regs
.reg
[i
].how
)
1306 context
->reg
[i
].how
= REG_CTX_VALUE
;
1307 context
->reg
[i
].loc
.addr
= cfa
;
1310 context
->reg
[i
].how
= REG_CTX_UNSAVED
;
1312 case REG_SAVED_OFFSET
:
1313 context
->reg
[i
].how
= REG_CTX_SAVED_OFFSET
;
1314 context
->reg
[i
].loc
.offset
= fs
->regs
.reg
[i
].loc
.offset
;
1317 switch (orig_context
->reg
[fs
->regs
.reg
[i
].loc
.reg
].how
)
1319 case REG_CTX_UNSAVED
:
1320 context
->reg
[i
].how
= REG_CTX_UNSAVED
;
1322 case REG_CTX_SAVED_OFFSET
:
1323 context
->reg
[i
].how
= REG_CTX_SAVED_OFFSET
;
1324 context
->reg
[i
].loc
.offset
= orig_context
->cfa
- context
->cfa
+
1325 orig_context
->reg
[fs
->regs
.reg
[i
].loc
.reg
].loc
.offset
;
1327 case REG_CTX_SAVED_REG
:
1328 context
->reg
[i
].how
= REG_CTX_SAVED_REG
;
1329 context
->reg
[i
].loc
.reg
=
1330 orig_context
->reg
[fs
->regs
.reg
[i
].loc
.reg
].loc
.reg
;
1332 case REG_CTX_SAVED_ADDR
:
1333 context
->reg
[i
].how
= REG_CTX_SAVED_ADDR
;
1334 context
->reg
[i
].loc
.addr
=
1335 orig_context
->reg
[fs
->regs
.reg
[i
].loc
.reg
].loc
.addr
;
1337 internal_error (__FILE__
, __LINE__
,
1338 "%s: unknown register rule", __func__
);
1343 char *exp
= fs
->regs
.reg
[i
].loc
.exp
;
1347 len
= read_uleb128 (fs
->objfile
->obfd
, &exp
);
1348 val
= execute_stack_op (fs
->objfile
, exp
, exp
+ len
,
1350 context
->reg
[i
].how
= REG_CTX_SAVED_ADDR
;
1351 context
->reg
[i
].loc
.addr
= val
;
1355 internal_error (__FILE__
, __LINE__
,
1356 "%s: unknown register rule", __func__
);
1358 get_reg ((char *) &context
->ra
, context
, fs
->retaddr_column
);
1359 unwind_tmp_obstack_free ();
1363 is_cie (ULONGEST cie_id
, int dwarf64
)
1365 return dwarf64
? (cie_id
== 0xffffffffffffffff) : (cie_id
== 0xffffffff);
1369 compare_fde_unit (const void *a
, const void *b
)
1371 struct fde_unit
**first
, **second
;
1372 first
= (struct fde_unit
**) a
;
1373 second
= (struct fde_unit
**) b
;
1374 if ((*first
)->initial_location
> (*second
)->initial_location
)
1376 else if ((*first
)->initial_location
< (*second
)->initial_location
)
1382 /* Build the cie_chunks and fde_chunks tables from informations
1383 in .debug_frame section. */
1385 dwarf2_build_frame_info (struct objfile
*objfile
)
1387 bfd
*abfd
= objfile
->obfd
;
1392 unwind_tmp_obstack_init ();
1394 dwarf_frame_buffer
= 0;
1396 if (dwarf_frame_offset
)
1398 dwarf_frame_buffer
= dwarf2_read_section (objfile
,
1402 start
= dwarf_frame_buffer
;
1403 end
= dwarf_frame_buffer
+ dwarf_frame_size
;
1405 else if (dwarf_eh_frame_offset
)
1407 dwarf_frame_buffer
= dwarf2_read_section (objfile
,
1408 dwarf_eh_frame_offset
,
1409 dwarf_eh_frame_size
);
1411 start
= dwarf_frame_buffer
;
1412 end
= dwarf_frame_buffer
+ dwarf_eh_frame_size
;
1421 unsigned long length
;
1423 ULONGEST unit_offset
= start
- dwarf_frame_buffer
;
1428 length
= read_initial_length (abfd
, start
, &bytes_read
);
1429 start
+= bytes_read
;
1430 dwarf64
= (bytes_read
== 12);
1431 block_end
= start
+ length
;
1433 cie_id
= read_length (abfd
, start
, &bytes_read
, dwarf64
);
1434 start
+= bytes_read
;
1436 if ((from_eh
&& cie_id
== 0) || is_cie (cie_id
, dwarf64
))
1438 struct cie_unit
*cie
= cie_unit_alloc ();
1441 cie
->objfile
= objfile
;
1442 cie
->next
= cie_chunks
;
1445 cie
->objfile
= objfile
;
1447 cie
->offset
= unit_offset
;
1449 start
++; /* version */
1451 cie
->augmentation
= aug
= start
;
1454 start
++; /* skip past NUL */
1456 cie
->code_align
= read_uleb128 (abfd
, &start
);
1457 cie
->data_align
= read_sleb128 (abfd
, &start
);
1458 cie
->ra
= read_1u (abfd
, &start
);
1462 int xtra
= read_uleb128 (abfd
, &start
);
1467 while (*aug
!= '\0')
1469 if (aug
[0] == 'e' && aug
[1] == 'h')
1471 start
+= sizeof (void *);
1474 else if (aug
[0] == 'R')
1476 cie
->addr_encoding
= *start
++;
1479 else if (aug
[0] == 'P')
1482 ptr
= read_encoded_pointer (abfd
, &start
,
1483 cie
->addr_encoding
);
1487 warning ("%s(): unknown augmentation", __func__
);
1491 cie
->data_length
= block_end
- start
;
1495 struct fde_unit
*fde
;
1496 struct cie_unit
*cie
;
1498 fde_chunks_need_space ();
1499 fde
= fde_unit_alloc ();
1501 fde_chunks
.array
[fde_chunks
.elems
++] = fde
;
1503 fde
->initial_location
= read_pointer (abfd
, &start
)
1504 + ANOFFSET (objfile
->section_offsets
,
1505 SECT_OFF_TEXT (objfile
));
1506 fde
->address_range
= read_pointer (abfd
, &start
);
1511 if (cie
->objfile
== objfile
)
1515 (unit_offset
+ bytes_read
- cie_id
)))
1517 if (!from_eh
&& (cie
->offset
== cie_id
))
1525 error ("%s(): can't find CIE pointer", __func__
);
1528 if (cie
->augmentation
[0] == 'z')
1529 read_uleb128 (abfd
, &start
);
1532 fde
->data_length
= block_end
- start
;
1536 qsort (fde_chunks
.array
, fde_chunks
.elems
,
1537 sizeof (struct fde_unit
*), compare_fde_unit
);
1542 /* Return the frame address. */
1546 struct context
*context
;
1547 struct frame_state
*fs
;
1550 unwind_tmp_obstack_init ();
1552 context
= context_alloc ();
1553 fs
= frame_state_alloc ();
1555 context
->ra
= read_pc () + 1;
1557 frame_state_for (context
, fs
);
1558 update_context (context
, fs
, 0);
1562 unwind_tmp_obstack_free ();
1567 /* Store the frame address. This function is not used. */
1570 cfi_write_fp (CORE_ADDR val
)
1572 struct context
*context
;
1573 struct frame_state
*fs
;
1575 unwind_tmp_obstack_init ();
1577 context
= context_alloc ();
1578 fs
= frame_state_alloc ();
1580 context
->ra
= read_pc () + 1;
1582 frame_state_for (context
, fs
);
1584 if (fs
->cfa_how
== CFA_REG_OFFSET
)
1586 val
-= fs
->cfa_offset
;
1587 write_register_gen (fs
->cfa_reg
, (char *) &val
);
1590 warning ("Can't write fp.");
1592 unwind_tmp_obstack_free ();
1595 /* Restore the machine to the state it had before the current frame
1598 cfi_pop_frame (struct frame_info
*fi
)
1600 char regbuf
[MAX_REGISTER_RAW_SIZE
];
1603 fi
= get_current_frame ();
1605 for (regnum
= 0; regnum
< NUM_REGS
; regnum
++)
1607 get_reg (regbuf
, UNWIND_CONTEXT (fi
), regnum
);
1608 write_register_bytes (REGISTER_BYTE (regnum
), regbuf
,
1609 REGISTER_RAW_SIZE (regnum
));
1611 write_register (PC_REGNUM
, UNWIND_CONTEXT (fi
)->ra
);
1613 flush_cached_frames ();
1616 /* Determine the address of the calling function's frame. */
1618 cfi_frame_chain (struct frame_info
*fi
)
1620 struct context
*context
;
1621 struct frame_state
*fs
;
1624 unwind_tmp_obstack_init ();
1626 context
= context_alloc ();
1627 fs
= frame_state_alloc ();
1628 context_cpy (context
, UNWIND_CONTEXT (fi
));
1630 /* outermost frame */
1631 if (context
->ra
== 0)
1633 unwind_tmp_obstack_free ();
1637 frame_state_for (context
, fs
);
1638 update_context (context
, fs
, 1);
1641 unwind_tmp_obstack_free ();
1646 /* Sets the pc of the frame. */
1648 cfi_init_frame_pc (int fromleaf
, struct frame_info
*fi
)
1651 get_reg ((char *) &(fi
->pc
), UNWIND_CONTEXT (fi
->next
), PC_REGNUM
);
1653 fi
->pc
= read_pc ();
1656 /* Initialize unwind context informations of the frame. */
1658 cfi_init_extra_frame_info (int fromleaf
, struct frame_info
*fi
)
1660 struct frame_state
*fs
;
1662 unwind_tmp_obstack_init ();
1664 fs
= frame_state_alloc ();
1665 fi
->context
= frame_obstack_alloc (sizeof (struct context
));
1666 UNWIND_CONTEXT (fi
)->reg
=
1667 frame_obstack_alloc (sizeof (struct context_reg
) * NUM_REGS
);
1668 memset (UNWIND_CONTEXT (fi
)->reg
, 0,
1669 sizeof (struct context_reg
) * NUM_REGS
);
1673 context_cpy (UNWIND_CONTEXT (fi
), UNWIND_CONTEXT (fi
->next
));
1674 frame_state_for (UNWIND_CONTEXT (fi
), fs
);
1675 update_context (UNWIND_CONTEXT (fi
), fs
, 1);
1679 UNWIND_CONTEXT (fi
)->ra
= fi
->pc
+ 1;
1680 frame_state_for (UNWIND_CONTEXT (fi
), fs
);
1681 update_context (UNWIND_CONTEXT (fi
), fs
, 0);
1684 unwind_tmp_obstack_free ();
1687 /* Obtain return address of the frame. */
1689 cfi_get_ra (struct frame_info
*fi
)
1691 return UNWIND_CONTEXT (fi
)->ra
;
1694 /* Find register number REGNUM relative to FRAME and put its
1695 (raw) contents in *RAW_BUFFER. Set *OPTIMIZED if the variable
1696 was optimized out (and thus can't be fetched). If the variable
1697 was fetched from memory, set *ADDRP to where it was fetched from,
1698 otherwise it was fetched from a register.
1700 The argument RAW_BUFFER must point to aligned memory. */
1702 cfi_get_saved_register (char *raw_buffer
,
1705 struct frame_info
*frame
,
1706 int regnum
, enum lval_type
*lval
)
1708 if (!target_has_registers
)
1709 error ("No registers.");
1711 /* Normal systems don't optimize out things with register numbers. */
1712 if (optimized
!= NULL
)
1715 if (addrp
) /* default assumption: not found in memory */
1720 read_register_gen (regnum
, raw_buffer
);
1722 *lval
= lval_register
;
1724 *addrp
= REGISTER_BYTE (regnum
);
1728 frame
= frame
->next
;
1729 switch (UNWIND_CONTEXT (frame
)->reg
[regnum
].how
)
1731 case REG_CTX_UNSAVED
:
1732 read_register_gen (regnum
, raw_buffer
);
1735 if (optimized
!= NULL
)
1738 case REG_CTX_SAVED_OFFSET
:
1739 target_read_memory (UNWIND_CONTEXT (frame
)->cfa
+
1740 UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.offset
,
1741 raw_buffer
, REGISTER_RAW_SIZE (regnum
));
1743 *lval
= lval_memory
;
1746 UNWIND_CONTEXT (frame
)->cfa
+
1747 UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.offset
;
1749 case REG_CTX_SAVED_REG
:
1750 read_register_gen (UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.reg
,
1753 *lval
= lval_register
;
1756 REGISTER_BYTE (UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.reg
);
1758 case REG_CTX_SAVED_ADDR
:
1759 target_read_memory (UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.addr
,
1760 raw_buffer
, REGISTER_RAW_SIZE (regnum
));
1762 *lval
= lval_memory
;
1764 *addrp
= UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.addr
;
1767 memcpy (raw_buffer
, &UNWIND_CONTEXT (frame
)->reg
[regnum
].loc
.addr
,
1768 REGISTER_RAW_SIZE (regnum
));
1771 if (optimized
!= NULL
)
1775 internal_error (__FILE__
, __LINE__
,
1776 "cfi_get_saved_register: unknown register rule");
1781 /* Return the register that the function uses for a frame pointer,
1782 plus any necessary offset to be applied to the register before
1783 any frame pointer offsets. */
1785 cfi_virtual_frame_pointer (CORE_ADDR pc
, int *frame_reg
,
1786 LONGEST
* frame_offset
)
1788 struct context
*context
;
1789 struct frame_state
*fs
;
1791 unwind_tmp_obstack_init ();
1793 context
= context_alloc ();
1794 fs
= frame_state_alloc ();
1796 context
->ra
= read_pc () + 1;
1798 frame_state_for (context
, fs
);
1800 if (fs
->cfa_how
== CFA_REG_OFFSET
)
1802 *frame_reg
= fs
->cfa_reg
;
1803 *frame_offset
= fs
->cfa_offset
;
1806 error ("dwarf cfi error: CFA is not defined as CFA_REG_OFFSET");
1808 unwind_tmp_obstack_free ();