*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / dwarf2cfi.c
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).
5
6 This file is part of GDB.
7
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.
12
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.
17
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. */
22
23 #include "defs.h"
24 #include "gdbcore.h"
25 #include "symtab.h"
26 #include "symfile.h"
27 #include "objfiles.h"
28 #include "target.h"
29 #include "elf/dwarf2.h"
30 #include "inferior.h"
31 #include "regcache.h"
32 #include "dwarf2cfi.h"
33 #include "gdb_assert.h"
34
35 /* Common Information Entry - holds information that is shared among many
36 Frame Descriptors. */
37 struct cie_unit
38 {
39 /* Offset of this unit in .debug_frame or .eh_frame. */
40 ULONGEST offset;
41
42 /* A null-terminated string that identifies the augmentation to this CIE or
43 to the FDEs that use it. */
44 char *augmentation;
45
46 /* A constant that is factored out of all advance location instructions. */
47 unsigned int code_align;
48
49 /* A constant that is factored out of all offset instructions. */
50 int data_align;
51
52 /* A constant that indicates which regiter represents the return address
53 of a function. */
54 unsigned char ra;
55
56 /* Indicates how addresses are encoded. */
57 unsigned char addr_encoding;
58
59 /* Pointer and length of the cie program. */
60 char *data;
61 unsigned int data_length;
62
63 struct objfile *objfile;
64
65 /* Next in chain. */
66 struct cie_unit *next;
67 };
68
69 /* Frame Description Entry. */
70 struct fde_unit
71 {
72 /* Address of the first location associated with this entry. */
73 CORE_ADDR initial_location;
74
75 /* Length of program section described by this entry. */
76 CORE_ADDR address_range;
77
78 /* Pointer to asociated CIE. */
79 struct cie_unit *cie_ptr;
80
81 /* Pointer and length of the cie program. */
82 char *data;
83 unsigned int data_length;
84 };
85
86 struct fde_array
87 {
88 struct fde_unit **array;
89 int elems;
90 int array_size;
91 };
92
93 struct context_reg
94 {
95 union
96 {
97 unsigned int reg;
98 long offset;
99 CORE_ADDR addr;
100 }
101 loc;
102 enum
103 {
104 REG_CTX_UNSAVED,
105 REG_CTX_SAVED_OFFSET,
106 REG_CTX_SAVED_REG,
107 REG_CTX_SAVED_ADDR,
108 REG_CTX_VALUE,
109 }
110 how;
111 };
112
113 /* This is the register and unwind state for a particular frame. */
114 struct context
115 {
116 struct context_reg *reg;
117
118 CORE_ADDR cfa;
119 CORE_ADDR ra;
120 void *lsda;
121 int args_size;
122 };
123
124 struct frame_state_reg
125 {
126 union
127 {
128 unsigned int reg;
129 long offset;
130 unsigned char *exp;
131 }
132 loc;
133 enum
134 {
135 REG_UNSAVED,
136 REG_SAVED_OFFSET,
137 REG_SAVED_REG,
138 REG_SAVED_EXP,
139 }
140 how;
141 };
142
143 struct frame_state
144 {
145 /* Each register save state can be described in terms of a CFA slot,
146 another register, or a location expression. */
147 struct frame_state_regs
148 {
149 struct frame_state_reg *reg;
150
151 /* Used to implement DW_CFA_remember_state. */
152 struct frame_state_regs *prev;
153 }
154 regs;
155
156 /* The CFA can be described in terms of a reg+offset or a
157 location expression. */
158 long cfa_offset;
159 int cfa_reg;
160 unsigned char *cfa_exp;
161 enum
162 {
163 CFA_UNSET,
164 CFA_REG_OFFSET,
165 CFA_EXP,
166 }
167 cfa_how;
168
169 /* The PC described by the current frame state. */
170 CORE_ADDR pc;
171
172 /* The information we care about from the CIE/FDE. */
173 int data_align;
174 unsigned int code_align;
175 unsigned char retaddr_column;
176 unsigned char addr_encoding;
177
178 struct objfile *objfile;
179 };
180
181 enum ptr_encoding
182 {
183 PE_absptr = DW_EH_PE_absptr,
184 PE_pcrel = DW_EH_PE_pcrel,
185 PE_textrel = DW_EH_PE_textrel,
186 PE_datarel = DW_EH_PE_datarel,
187 PE_funcrel = DW_EH_PE_funcrel
188 };
189
190 #define UNWIND_CONTEXT(fi) ((struct context *) (fi->context))
191 \f
192
193 static struct cie_unit *cie_chunks;
194 static struct fde_array fde_chunks;
195 /* Obstack for allocating temporary storage used during unwind operations. */
196 static struct obstack unwind_tmp_obstack;
197
198 extern file_ptr dwarf_frame_offset;
199 extern unsigned int dwarf_frame_size;
200 extern file_ptr dwarf_eh_frame_offset;
201 extern unsigned int dwarf_eh_frame_size;
202 \f
203
204 extern char *dwarf2_read_section (struct objfile *objfile, file_ptr offset,
205 unsigned int size);
206
207 static struct fde_unit *fde_unit_alloc (void);
208 static struct cie_unit *cie_unit_alloc (void);
209 static void fde_chunks_need_space ();
210
211 static struct context *context_alloc ();
212 static struct frame_state *frame_state_alloc ();
213 static void unwind_tmp_obstack_init ();
214 static void unwind_tmp_obstack_free ();
215 static void context_cpy (struct context *dst, struct context *src);
216
217 static unsigned int read_1u (bfd * abfd, char **p);
218 static int read_1s (bfd * abfd, char **p);
219 static unsigned int read_2u (bfd * abfd, char **p);
220 static int read_2s (bfd * abfd, char **p);
221 static unsigned int read_4u (bfd * abfd, char **p);
222 static int read_4s (bfd * abfd, char **p);
223 static ULONGEST read_8u (bfd * abfd, char **p);
224 static LONGEST read_8s (bfd * abfd, char **p);
225
226 static ULONGEST read_uleb128 (bfd * abfd, char **p);
227 static LONGEST read_sleb128 (bfd * abfd, char **p);
228 static CORE_ADDR read_pointer (bfd * abfd, char **p);
229 static CORE_ADDR read_encoded_pointer (bfd * abfd, char **p,
230 unsigned char encoding);
231 static enum ptr_encoding pointer_encoding (unsigned char encoding);
232
233 static LONGEST read_initial_length (bfd * abfd, char *buf, int *bytes_read);
234 static ULONGEST read_length (bfd * abfd, char *buf, int *bytes_read,
235 int dwarf64);
236
237 static int is_cie (ULONGEST cie_id, int dwarf64);
238 static int compare_fde_unit (const void *a, const void *b);
239 void dwarf2_build_frame_info (struct objfile *objfile);
240
241 static void execute_cfa_program (struct objfile *objfile, char *insn_ptr,
242 char *insn_end, struct context *context,
243 struct frame_state *fs);
244 static struct fde_unit *get_fde_for_addr (CORE_ADDR pc);
245 static void frame_state_for (struct context *context, struct frame_state *fs);
246 static void get_reg (char *reg, struct context *context, int regnum);
247 static CORE_ADDR execute_stack_op (struct objfile *objfile,
248 char *op_ptr, char *op_end,
249 struct context *context,
250 CORE_ADDR initial);
251 static void update_context (struct context *context, struct frame_state *fs,
252 int chain);
253 \f
254
255 /* Memory allocation functions. */
256 static struct fde_unit *
257 fde_unit_alloc (void)
258 {
259 struct fde_unit *fde;
260
261 fde = (struct fde_unit *) xmalloc (sizeof (struct fde_unit));
262 memset (fde, 0, sizeof (struct fde_unit));
263 return fde;
264 }
265
266 static struct cie_unit *
267 cie_unit_alloc (void)
268 {
269 struct cie_unit *cie;
270
271 cie = (struct cie_unit *) xmalloc (sizeof (struct cie_unit));
272 memset (cie, 0, sizeof (struct cie_unit));
273 return cie;
274 }
275
276 static void
277 fde_chunks_need_space (void)
278 {
279 if (fde_chunks.elems < fde_chunks.array_size)
280 return;
281 fde_chunks.array_size =
282 fde_chunks.array_size ? 2 * fde_chunks.array_size : 1024;
283 fde_chunks.array =
284 xrealloc (fde_chunks.array,
285 sizeof (struct fde_unit) * fde_chunks.array_size);
286 }
287
288 /* Alocate a new `struct context' on temporary obstack. */
289 static struct context *
290 context_alloc (void)
291 {
292 struct context *context;
293
294 int regs_size = sizeof (struct context_reg) * NUM_REGS;
295
296 context = (struct context *) obstack_alloc (&unwind_tmp_obstack,
297 sizeof (struct context));
298 memset (context, 0, sizeof (struct context));
299 context->reg = (struct context_reg *) obstack_alloc (&unwind_tmp_obstack,
300 regs_size);
301 memset (context->reg, 0, regs_size);
302 return context;
303 }
304
305 /* Alocate a new `struct frame_state' on temporary obstack. */
306 static struct frame_state *
307 frame_state_alloc (void)
308 {
309 struct frame_state *fs;
310
311 int regs_size = sizeof (struct frame_state_reg) * NUM_REGS;
312
313 fs = (struct frame_state *) obstack_alloc (&unwind_tmp_obstack,
314 sizeof (struct frame_state));
315 memset (fs, 0, sizeof (struct frame_state));
316 fs->regs.reg =
317 (struct frame_state_reg *) obstack_alloc (&unwind_tmp_obstack, regs_size);
318 memset (fs->regs.reg, 0, regs_size);
319 return fs;
320 }
321
322 static void
323 unwind_tmp_obstack_init (void)
324 {
325 obstack_init (&unwind_tmp_obstack);
326 }
327
328 static void
329 unwind_tmp_obstack_free (void)
330 {
331 obstack_free (&unwind_tmp_obstack, NULL);
332 unwind_tmp_obstack_init ();
333 }
334
335 static void
336 context_cpy (struct context *dst, struct context *src)
337 {
338 int regs_size = sizeof (struct context_reg) * NUM_REGS;
339 struct context_reg *dreg;
340
341 /* Structure dst contains a pointer to an array of
342 * registers of a given frame as well as src does. This
343 * array was already allocated before dst was passed to
344 * context_cpy but the pointer to it was overriden by
345 * '*dst = *src' and the array was lost. This led to the
346 * situation, that we've had a copy of src placed in dst,
347 * but both of them pointed to the same regs array and
348 * thus we've sometimes blindly rewritten it. Now we save
349 * the pointer before copying src to dst, return it back
350 * after that and copy the registers into their new place
351 * finally. --- mludvig@suse.cz */
352 dreg = dst->reg;
353 *dst = *src;
354 dst->reg = dreg;
355
356 memcpy (dst->reg, src->reg, regs_size);
357 }
358
359 static unsigned int
360 read_1u (bfd * abfd, char **p)
361 {
362 unsigned ret;
363
364 ret = bfd_get_8 (abfd, (bfd_byte *) * p);
365 (*p)++;
366 return ret;
367 }
368
369 static int
370 read_1s (bfd * abfd, char **p)
371 {
372 int ret;
373
374 ret = bfd_get_signed_8 (abfd, (bfd_byte *) * p);
375 (*p)++;
376 return ret;
377 }
378
379 static unsigned int
380 read_2u (bfd * abfd, char **p)
381 {
382 unsigned ret;
383
384 ret = bfd_get_16 (abfd, (bfd_byte *) * p);
385 (*p)++;
386 return ret;
387 }
388
389 static int
390 read_2s (bfd * abfd, char **p)
391 {
392 int ret;
393
394 ret = bfd_get_signed_16 (abfd, (bfd_byte *) * p);
395 (*p) += 2;
396 return ret;
397 }
398
399 static unsigned int
400 read_4u (bfd * abfd, char **p)
401 {
402 unsigned int ret;
403
404 ret = bfd_get_32 (abfd, (bfd_byte *) * p);
405 (*p) += 4;
406 return ret;
407 }
408
409 static int
410 read_4s (bfd * abfd, char **p)
411 {
412 int ret;
413
414 ret = bfd_get_signed_32 (abfd, (bfd_byte *) * p);
415 (*p) += 4;
416 return ret;
417 }
418
419 static ULONGEST
420 read_8u (bfd * abfd, char **p)
421 {
422 ULONGEST ret;
423
424 ret = bfd_get_64 (abfd, (bfd_byte *) * p);
425 (*p) += 8;
426 return ret;
427 }
428
429 static LONGEST
430 read_8s (bfd * abfd, char **p)
431 {
432 LONGEST ret;
433
434 ret = bfd_get_signed_64 (abfd, (bfd_byte *) * p);
435 (*p) += 8;
436 return ret;
437 }
438
439 static ULONGEST
440 read_uleb128 (bfd * abfd, char **p)
441 {
442 ULONGEST ret;
443 int i, shift;
444 unsigned char byte;
445
446 ret = 0;
447 shift = 0;
448 i = 0;
449 while (1)
450 {
451 byte = bfd_get_8 (abfd, (bfd_byte *) * p);
452 (*p)++;
453 ret |= ((unsigned long) (byte & 127) << shift);
454 if ((byte & 128) == 0)
455 {
456 break;
457 }
458 shift += 7;
459 }
460 return ret;
461 }
462
463 static LONGEST
464 read_sleb128 (bfd * abfd, char **p)
465 {
466 LONGEST ret;
467 int i, shift, size, num_read;
468 unsigned char byte;
469
470 ret = 0;
471 shift = 0;
472 size = 32;
473 num_read = 0;
474 i = 0;
475 while (1)
476 {
477 byte = bfd_get_8 (abfd, (bfd_byte *) * p);
478 (*p)++;
479 ret |= ((long) (byte & 127) << shift);
480 shift += 7;
481 if ((byte & 128) == 0)
482 {
483 break;
484 }
485 }
486 if ((shift < size) && (byte & 0x40))
487 {
488 ret |= -(1 << shift);
489 }
490 return ret;
491 }
492
493 static CORE_ADDR
494 read_pointer (bfd * abfd, char **p)
495 {
496 switch (TARGET_ADDR_BIT / TARGET_CHAR_BIT)
497 {
498 case 4:
499 return read_4u (abfd, p);
500 case 8:
501 return read_8u (abfd, p);
502 default:
503 error ("dwarf cfi error: unsupported target address length.");
504 }
505 }
506
507 /* This functions only reads appropriate amount of data from *p
508 * and returns the resulting value. Calling function must handle
509 * different encoding possibilities itself! */
510 static CORE_ADDR
511 read_encoded_pointer (bfd * abfd, char **p, unsigned char encoding)
512 {
513 CORE_ADDR ret;
514
515 switch (encoding & 0x0f)
516 {
517 case DW_EH_PE_absptr:
518 ret = read_pointer (abfd, p);
519 break;
520
521 case DW_EH_PE_uleb128:
522 ret = read_uleb128 (abfd, p);
523 break;
524 case DW_EH_PE_sleb128:
525 ret = read_sleb128 (abfd, p);
526 break;
527
528 case DW_EH_PE_udata2:
529 ret = read_2u (abfd, p);
530 break;
531 case DW_EH_PE_udata4:
532 ret = read_4u (abfd, p);
533 break;
534 case DW_EH_PE_udata8:
535 ret = read_8u (abfd, p);
536 break;
537
538 case DW_EH_PE_sdata2:
539 ret = read_2s (abfd, p);
540 break;
541 case DW_EH_PE_sdata4:
542 ret = read_4s (abfd, p);
543 break;
544 case DW_EH_PE_sdata8:
545 ret = read_8s (abfd, p);
546 break;
547
548 default:
549 internal_error (__FILE__, __LINE__,
550 "read_encoded_pointer: unknown pointer encoding");
551 }
552
553 return ret;
554 }
555
556 /* Variable 'encoding' carries 3 different flags:
557 * - encoding & 0x0f : size of the address (handled in read_encoded_pointer())
558 * - encoding & 0x70 : type (absolute, relative, ...)
559 * - encoding & 0x80 : indirect flag (DW_EH_PE_indirect == 0x80). */
560 enum ptr_encoding
561 pointer_encoding (unsigned char encoding)
562 {
563 int ret;
564
565 if (encoding & DW_EH_PE_indirect)
566 warning ("CFI: Unsupported pointer encoding: DW_EH_PE_indirect");
567
568 switch (encoding & 0x70)
569 {
570 case DW_EH_PE_absptr:
571 case DW_EH_PE_pcrel:
572 case DW_EH_PE_textrel:
573 case DW_EH_PE_datarel:
574 case DW_EH_PE_funcrel:
575 ret = encoding & 0x70;
576 break;
577 default:
578 internal_error (__FILE__, __LINE__, "CFI: unknown pointer encoding");
579 }
580 return ret;
581 }
582
583 static LONGEST
584 read_initial_length (bfd * abfd, char *buf, int *bytes_read)
585 {
586 LONGEST ret = 0;
587
588 ret = bfd_get_32 (abfd, (bfd_byte *) buf);
589
590 if (ret == 0xffffffff)
591 {
592 ret = bfd_get_64 (abfd, (bfd_byte *) buf + 4);
593 *bytes_read = 12;
594 }
595 else
596 {
597 *bytes_read = 4;
598 }
599
600 return ret;
601 }
602
603 static ULONGEST
604 read_length (bfd * abfd, char *buf, int *bytes_read, int dwarf64)
605 {
606 if (dwarf64)
607 {
608 *bytes_read = 8;
609 return read_8u (abfd, &buf);
610 }
611 else
612 {
613 *bytes_read = 4;
614 return read_4u (abfd, &buf);
615 }
616 }
617
618 static void
619 execute_cfa_program (struct objfile *objfile, char *insn_ptr, char *insn_end,
620 struct context *context, struct frame_state *fs)
621 {
622 struct frame_state_regs *unused_rs = NULL;
623
624 /* Don't allow remember/restore between CIE and FDE programs. */
625 fs->regs.prev = NULL;
626
627 while (insn_ptr < insn_end && fs->pc < context->ra)
628 {
629 unsigned char insn = *insn_ptr++;
630 ULONGEST reg, uoffset;
631 LONGEST offset;
632
633 if (insn & DW_CFA_advance_loc)
634 fs->pc += (insn & 0x3f) * fs->code_align;
635 else if (insn & DW_CFA_offset)
636 {
637 reg = insn & 0x3f;
638 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
639 offset = (long) uoffset *fs->data_align;
640 fs->regs.reg[reg].how = REG_SAVED_OFFSET;
641 fs->regs.reg[reg].loc.offset = offset;
642 }
643 else if (insn & DW_CFA_restore)
644 {
645 reg = insn & 0x3f;
646 fs->regs.reg[reg].how = REG_UNSAVED;
647 }
648 else
649 switch (insn)
650 {
651 case DW_CFA_set_loc:
652 fs->pc = read_encoded_pointer (objfile->obfd, &insn_ptr,
653 fs->addr_encoding);
654
655 if (pointer_encoding (fs->addr_encoding) != PE_absptr)
656 warning ("CFI: DW_CFA_set_loc uses relative addressing");
657
658 break;
659
660 case DW_CFA_advance_loc1:
661 fs->pc += read_1u (objfile->obfd, &insn_ptr);
662 break;
663 case DW_CFA_advance_loc2:
664 fs->pc += read_2u (objfile->obfd, &insn_ptr);
665 break;
666 case DW_CFA_advance_loc4:
667 fs->pc += read_4u (objfile->obfd, &insn_ptr);
668 break;
669
670 case DW_CFA_offset_extended:
671 reg = read_uleb128 (objfile->obfd, &insn_ptr);
672 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
673 offset = (long) uoffset *fs->data_align;
674 fs->regs.reg[reg].how = REG_SAVED_OFFSET;
675 fs->regs.reg[reg].loc.offset = offset;
676 break;
677
678 case DW_CFA_restore_extended:
679 reg = read_uleb128 (objfile->obfd, &insn_ptr);
680 fs->regs.reg[reg].how = REG_UNSAVED;
681 break;
682
683 case DW_CFA_undefined:
684 case DW_CFA_same_value:
685 case DW_CFA_nop:
686 break;
687
688 case DW_CFA_register:
689 {
690 ULONGEST reg2;
691 reg = read_uleb128 (objfile->obfd, &insn_ptr);
692 reg2 = read_uleb128 (objfile->obfd, &insn_ptr);
693 fs->regs.reg[reg].how = REG_SAVED_REG;
694 fs->regs.reg[reg].loc.reg = reg2;
695 }
696 break;
697
698 case DW_CFA_remember_state:
699 {
700 struct frame_state_regs *new_rs;
701 if (unused_rs)
702 {
703 new_rs = unused_rs;
704 unused_rs = unused_rs->prev;
705 }
706 else
707 new_rs = xmalloc (sizeof (struct frame_state_regs));
708
709 *new_rs = fs->regs;
710 fs->regs.prev = new_rs;
711 }
712 break;
713
714 case DW_CFA_restore_state:
715 {
716 struct frame_state_regs *old_rs = fs->regs.prev;
717 fs->regs = *old_rs;
718 old_rs->prev = unused_rs;
719 unused_rs = old_rs;
720 }
721 break;
722
723 case DW_CFA_def_cfa:
724 reg = read_uleb128 (objfile->obfd, &insn_ptr);
725 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
726 fs->cfa_reg = reg;
727 fs->cfa_offset = uoffset;
728 fs->cfa_how = CFA_REG_OFFSET;
729 break;
730
731 case DW_CFA_def_cfa_register:
732 reg = read_uleb128 (objfile->obfd, &insn_ptr);
733 fs->cfa_reg = reg;
734 fs->cfa_how = CFA_REG_OFFSET;
735 break;
736
737 case DW_CFA_def_cfa_offset:
738 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
739 fs->cfa_offset = uoffset;
740 break;
741
742 case DW_CFA_def_cfa_expression:
743 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
744 fs->cfa_exp = insn_ptr;
745 fs->cfa_how = CFA_EXP;
746 insn_ptr += uoffset;
747 break;
748
749 case DW_CFA_expression:
750 reg = read_uleb128 (objfile->obfd, &insn_ptr);
751 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
752 fs->regs.reg[reg].how = REG_SAVED_EXP;
753 fs->regs.reg[reg].loc.exp = insn_ptr;
754 insn_ptr += uoffset;
755 break;
756
757 /* From the 2.1 draft. */
758 case DW_CFA_offset_extended_sf:
759 reg = read_uleb128 (objfile->obfd, &insn_ptr);
760 offset = read_sleb128 (objfile->obfd, &insn_ptr);
761 offset *= fs->data_align;
762 fs->regs.reg[reg].how = REG_SAVED_OFFSET;
763 fs->regs.reg[reg].loc.offset = offset;
764 break;
765
766 case DW_CFA_def_cfa_sf:
767 reg = read_uleb128 (objfile->obfd, &insn_ptr);
768 offset = read_sleb128 (objfile->obfd, &insn_ptr);
769 fs->cfa_offset = offset;
770 fs->cfa_reg = reg;
771 fs->cfa_how = CFA_REG_OFFSET;
772 break;
773
774 case DW_CFA_def_cfa_offset_sf:
775 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
776 fs->cfa_offset = uoffset;
777 /* cfa_how deliberately not set. */
778 break;
779
780 case DW_CFA_GNU_window_save:
781 /* ??? Hardcoded for SPARC register window configuration. */
782 for (reg = 16; reg < 32; ++reg)
783 {
784 fs->regs.reg[reg].how = REG_SAVED_OFFSET;
785 fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *);
786 }
787 break;
788
789 case DW_CFA_GNU_args_size:
790 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
791 context->args_size = uoffset;
792 break;
793
794 case DW_CFA_GNU_negative_offset_extended:
795 /* Obsoleted by DW_CFA_offset_extended_sf, but used by
796 older PowerPC code. */
797 reg = read_uleb128 (objfile->obfd, &insn_ptr);
798 uoffset = read_uleb128 (objfile->obfd, &insn_ptr);
799 offset = (long) uoffset *fs->data_align;
800 fs->regs.reg[reg].how = REG_SAVED_OFFSET;
801 fs->regs.reg[reg].loc.offset = -offset;
802 break;
803
804 default:
805 error ("dwarf cfi error: unknown cfa instruction %d.", insn);
806 }
807 }
808 }
809
810 static struct fde_unit *
811 get_fde_for_addr (CORE_ADDR pc)
812 {
813 size_t lo, hi;
814 struct fde_unit *fde = NULL;
815 lo = 0;
816 hi = fde_chunks.elems;
817
818 while (lo < hi)
819 {
820 size_t i = (lo + hi) / 2;
821 fde = fde_chunks.array[i];
822 if (pc < fde->initial_location)
823 hi = i;
824 else if (pc >= fde->initial_location + fde->address_range)
825 lo = i + 1;
826 else
827 return fde;
828 }
829 return 0;
830 }
831
832 static void
833 frame_state_for (struct context *context, struct frame_state *fs)
834 {
835 struct fde_unit *fde;
836 struct cie_unit *cie;
837
838 context->args_size = 0;
839 context->lsda = 0;
840
841 fde = get_fde_for_addr (context->ra - 1);
842
843 if (fde == NULL)
844 return;
845
846 fs->pc = fde->initial_location;
847
848 gdb_assert (fde->cie_ptr != NULL);
849
850 cie = fde->cie_ptr;
851
852 fs->code_align = cie->code_align;
853 fs->data_align = cie->data_align;
854 fs->retaddr_column = cie->ra;
855 fs->addr_encoding = cie->addr_encoding;
856 fs->objfile = cie->objfile;
857
858 execute_cfa_program (cie->objfile, cie->data,
859 cie->data + cie->data_length, context, fs);
860 execute_cfa_program (cie->objfile, fde->data,
861 fde->data + fde->data_length, context, fs);
862 }
863
864 static void
865 get_reg (char *reg, struct context *context, int regnum)
866 {
867 switch (context->reg[regnum].how)
868 {
869 case REG_CTX_UNSAVED:
870 read_register_gen (regnum, reg);
871 break;
872 case REG_CTX_SAVED_OFFSET:
873 target_read_memory (context->cfa + context->reg[regnum].loc.offset,
874 reg, REGISTER_RAW_SIZE (regnum));
875 break;
876 case REG_CTX_SAVED_REG:
877 read_register_gen (context->reg[regnum].loc.reg, reg);
878 break;
879 case REG_CTX_SAVED_ADDR:
880 target_read_memory (context->reg[regnum].loc.addr,
881 reg, REGISTER_RAW_SIZE (regnum));
882 break;
883 case REG_CTX_VALUE:
884 memcpy (reg, &context->reg[regnum].loc.addr,
885 REGISTER_RAW_SIZE (regnum));
886 break;
887 default:
888 internal_error (__FILE__, __LINE__, "get_reg: unknown register rule");
889 }
890 }
891
892 /* Decode a DW_OP stack program. Return the top of stack. Push INITIAL
893 onto the stack to start. */
894 static CORE_ADDR
895 execute_stack_op (struct objfile *objfile,
896 char *op_ptr, char *op_end, struct context *context,
897 CORE_ADDR initial)
898 {
899 CORE_ADDR stack[64]; /* ??? Assume this is enough. */
900 int stack_elt;
901
902 stack[0] = initial;
903 stack_elt = 1;
904
905 while (op_ptr < op_end)
906 {
907 enum dwarf_location_atom op = *op_ptr++;
908 CORE_ADDR result;
909 ULONGEST reg;
910 LONGEST offset;
911
912 switch (op)
913 {
914 case DW_OP_lit0:
915 case DW_OP_lit1:
916 case DW_OP_lit2:
917 case DW_OP_lit3:
918 case DW_OP_lit4:
919 case DW_OP_lit5:
920 case DW_OP_lit6:
921 case DW_OP_lit7:
922 case DW_OP_lit8:
923 case DW_OP_lit9:
924 case DW_OP_lit10:
925 case DW_OP_lit11:
926 case DW_OP_lit12:
927 case DW_OP_lit13:
928 case DW_OP_lit14:
929 case DW_OP_lit15:
930 case DW_OP_lit16:
931 case DW_OP_lit17:
932 case DW_OP_lit18:
933 case DW_OP_lit19:
934 case DW_OP_lit20:
935 case DW_OP_lit21:
936 case DW_OP_lit22:
937 case DW_OP_lit23:
938 case DW_OP_lit24:
939 case DW_OP_lit25:
940 case DW_OP_lit26:
941 case DW_OP_lit27:
942 case DW_OP_lit28:
943 case DW_OP_lit29:
944 case DW_OP_lit30:
945 case DW_OP_lit31:
946 result = op - DW_OP_lit0;
947 break;
948
949 case DW_OP_addr:
950 result = read_pointer (objfile->obfd, &op_ptr);
951 break;
952
953 case DW_OP_const1u:
954 result = read_1u (objfile->obfd, &op_ptr);
955 break;
956 case DW_OP_const1s:
957 result = read_1s (objfile->obfd, &op_ptr);
958 break;
959 case DW_OP_const2u:
960 result = read_2u (objfile->obfd, &op_ptr);
961 break;
962 case DW_OP_const2s:
963 result = read_2s (objfile->obfd, &op_ptr);
964 break;
965 case DW_OP_const4u:
966 result = read_4u (objfile->obfd, &op_ptr);
967 break;
968 case DW_OP_const4s:
969 result = read_4s (objfile->obfd, &op_ptr);
970 break;
971 case DW_OP_const8u:
972 result = read_8u (objfile->obfd, &op_ptr);
973 break;
974 case DW_OP_const8s:
975 result = read_8s (objfile->obfd, &op_ptr);
976 break;
977 case DW_OP_constu:
978 result = read_uleb128 (objfile->obfd, &op_ptr);
979 break;
980 case DW_OP_consts:
981 result = read_sleb128 (objfile->obfd, &op_ptr);
982 break;
983
984 case DW_OP_reg0:
985 case DW_OP_reg1:
986 case DW_OP_reg2:
987 case DW_OP_reg3:
988 case DW_OP_reg4:
989 case DW_OP_reg5:
990 case DW_OP_reg6:
991 case DW_OP_reg7:
992 case DW_OP_reg8:
993 case DW_OP_reg9:
994 case DW_OP_reg10:
995 case DW_OP_reg11:
996 case DW_OP_reg12:
997 case DW_OP_reg13:
998 case DW_OP_reg14:
999 case DW_OP_reg15:
1000 case DW_OP_reg16:
1001 case DW_OP_reg17:
1002 case DW_OP_reg18:
1003 case DW_OP_reg19:
1004 case DW_OP_reg20:
1005 case DW_OP_reg21:
1006 case DW_OP_reg22:
1007 case DW_OP_reg23:
1008 case DW_OP_reg24:
1009 case DW_OP_reg25:
1010 case DW_OP_reg26:
1011 case DW_OP_reg27:
1012 case DW_OP_reg28:
1013 case DW_OP_reg29:
1014 case DW_OP_reg30:
1015 case DW_OP_reg31:
1016 get_reg ((char *) &result, context, op - DW_OP_reg0);
1017 break;
1018 case DW_OP_regx:
1019 reg = read_uleb128 (objfile->obfd, &op_ptr);
1020 get_reg ((char *) &result, context, reg);
1021 break;
1022
1023 case DW_OP_breg0:
1024 case DW_OP_breg1:
1025 case DW_OP_breg2:
1026 case DW_OP_breg3:
1027 case DW_OP_breg4:
1028 case DW_OP_breg5:
1029 case DW_OP_breg6:
1030 case DW_OP_breg7:
1031 case DW_OP_breg8:
1032 case DW_OP_breg9:
1033 case DW_OP_breg10:
1034 case DW_OP_breg11:
1035 case DW_OP_breg12:
1036 case DW_OP_breg13:
1037 case DW_OP_breg14:
1038 case DW_OP_breg15:
1039 case DW_OP_breg16:
1040 case DW_OP_breg17:
1041 case DW_OP_breg18:
1042 case DW_OP_breg19:
1043 case DW_OP_breg20:
1044 case DW_OP_breg21:
1045 case DW_OP_breg22:
1046 case DW_OP_breg23:
1047 case DW_OP_breg24:
1048 case DW_OP_breg25:
1049 case DW_OP_breg26:
1050 case DW_OP_breg27:
1051 case DW_OP_breg28:
1052 case DW_OP_breg29:
1053 case DW_OP_breg30:
1054 case DW_OP_breg31:
1055 offset = read_sleb128 (objfile->obfd, &op_ptr);
1056 get_reg ((char *) &result, context, op - DW_OP_breg0);
1057 result += offset;
1058 break;
1059 case DW_OP_bregx:
1060 reg = read_uleb128 (objfile->obfd, &op_ptr);
1061 offset = read_sleb128 (objfile->obfd, &op_ptr);
1062 get_reg ((char *) &result, context, reg);
1063 result += offset;
1064 break;
1065
1066 case DW_OP_dup:
1067 if (stack_elt < 1)
1068 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1069 result = stack[stack_elt - 1];
1070 break;
1071
1072 case DW_OP_drop:
1073 if (--stack_elt < 0)
1074 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1075 goto no_push;
1076
1077 case DW_OP_pick:
1078 offset = *op_ptr++;
1079 if (offset >= stack_elt - 1)
1080 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1081 result = stack[stack_elt - 1 - offset];
1082 break;
1083
1084 case DW_OP_over:
1085 if (stack_elt < 2)
1086 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1087 result = stack[stack_elt - 2];
1088 break;
1089
1090 case DW_OP_rot:
1091 {
1092 CORE_ADDR t1, t2, t3;
1093
1094 if (stack_elt < 3)
1095 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1096 t1 = stack[stack_elt - 1];
1097 t2 = stack[stack_elt - 2];
1098 t3 = stack[stack_elt - 3];
1099 stack[stack_elt - 1] = t2;
1100 stack[stack_elt - 2] = t3;
1101 stack[stack_elt - 3] = t1;
1102 goto no_push;
1103 }
1104
1105 case DW_OP_deref:
1106 case DW_OP_deref_size:
1107 case DW_OP_abs:
1108 case DW_OP_neg:
1109 case DW_OP_not:
1110 case DW_OP_plus_uconst:
1111 /* Unary operations. */
1112 if (--stack_elt < 0)
1113 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1114 result = stack[stack_elt];
1115
1116 switch (op)
1117 {
1118 case DW_OP_deref:
1119 {
1120 int len = TARGET_ADDR_BIT / TARGET_CHAR_BIT;
1121 if (len != 4 && len != 8)
1122 internal_error (__FILE__, __LINE__,
1123 "execute_stack_op error");
1124 result = read_memory_unsigned_integer (result, len);
1125 }
1126 break;
1127
1128 case DW_OP_deref_size:
1129 {
1130 int len = *op_ptr++;
1131 if (len != 1 && len != 2 && len != 4 && len !=8)
1132 internal_error (__FILE__, __LINE__,
1133 "execute_stack_op error");
1134 result = read_memory_unsigned_integer (result, len);
1135 }
1136 break;
1137
1138 case DW_OP_abs:
1139 if (result < 0)
1140 result = -result;
1141 break;
1142 case DW_OP_neg:
1143 result = -result;
1144 break;
1145 case DW_OP_not:
1146 result = ~result;
1147 break;
1148 case DW_OP_plus_uconst:
1149 result += read_uleb128 (objfile->obfd, &op_ptr);
1150 break;
1151 default:
1152 break;
1153 }
1154 break;
1155
1156 case DW_OP_and:
1157 case DW_OP_div:
1158 case DW_OP_minus:
1159 case DW_OP_mod:
1160 case DW_OP_mul:
1161 case DW_OP_or:
1162 case DW_OP_plus:
1163 case DW_OP_le:
1164 case DW_OP_ge:
1165 case DW_OP_eq:
1166 case DW_OP_lt:
1167 case DW_OP_gt:
1168 case DW_OP_ne:
1169 {
1170 /* Binary operations. */
1171 CORE_ADDR first, second;
1172 if ((stack_elt -= 2) < 0)
1173 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1174 second = stack[stack_elt];
1175 first = stack[stack_elt + 1];
1176
1177 switch (op)
1178 {
1179 case DW_OP_and:
1180 result = second & first;
1181 break;
1182 case DW_OP_div:
1183 result = (LONGEST) second / (LONGEST) first;
1184 break;
1185 case DW_OP_minus:
1186 result = second - first;
1187 break;
1188 case DW_OP_mod:
1189 result = (LONGEST) second % (LONGEST) first;
1190 break;
1191 case DW_OP_mul:
1192 result = second * first;
1193 break;
1194 case DW_OP_or:
1195 result = second | first;
1196 break;
1197 case DW_OP_plus:
1198 result = second + first;
1199 break;
1200 case DW_OP_shl:
1201 result = second << first;
1202 break;
1203 case DW_OP_shr:
1204 result = second >> first;
1205 break;
1206 case DW_OP_shra:
1207 result = (LONGEST) second >> first;
1208 break;
1209 case DW_OP_xor:
1210 result = second ^ first;
1211 break;
1212 case DW_OP_le:
1213 result = (LONGEST) first <= (LONGEST) second;
1214 break;
1215 case DW_OP_ge:
1216 result = (LONGEST) first >= (LONGEST) second;
1217 break;
1218 case DW_OP_eq:
1219 result = (LONGEST) first == (LONGEST) second;
1220 break;
1221 case DW_OP_lt:
1222 result = (LONGEST) first < (LONGEST) second;
1223 break;
1224 case DW_OP_gt:
1225 result = (LONGEST) first > (LONGEST) second;
1226 break;
1227 case DW_OP_ne:
1228 result = (LONGEST) first != (LONGEST) second;
1229 break;
1230 default: /* This label is here just to avoid warning. */
1231 break;
1232 }
1233 }
1234 break;
1235
1236 case DW_OP_skip:
1237 offset = read_2s (objfile->obfd, &op_ptr);
1238 op_ptr += offset;
1239 goto no_push;
1240
1241 case DW_OP_bra:
1242 if (--stack_elt < 0)
1243 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1244 offset = read_2s (objfile->obfd, &op_ptr);
1245 if (stack[stack_elt] != 0)
1246 op_ptr += offset;
1247 goto no_push;
1248
1249 case DW_OP_nop:
1250 goto no_push;
1251
1252 default:
1253 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1254 }
1255
1256 /* Most things push a result value. */
1257 if ((size_t) stack_elt >= sizeof (stack) / sizeof (*stack))
1258 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1259 stack[++stack_elt] = result;
1260 no_push:;
1261 }
1262
1263 /* We were executing this program to get a value. It should be
1264 at top of stack. */
1265 if (--stack_elt < 0)
1266 internal_error (__FILE__, __LINE__, "execute_stack_op error");
1267 return stack[stack_elt];
1268 }
1269
1270 static void
1271 update_context (struct context *context, struct frame_state *fs, int chain)
1272 {
1273 struct context *orig_context;
1274 CORE_ADDR cfa;
1275 long i;
1276
1277 unwind_tmp_obstack_init ();
1278
1279 orig_context = context_alloc ();
1280 context_cpy (orig_context, context);
1281
1282 /* Compute this frame's CFA. */
1283 switch (fs->cfa_how)
1284 {
1285 case CFA_REG_OFFSET:
1286 get_reg ((char *) &cfa, context, fs->cfa_reg);
1287 cfa += fs->cfa_offset;
1288 break;
1289
1290 case CFA_EXP:
1291 /* ??? No way of knowing what register number is the stack pointer
1292 to do the same sort of handling as above. Assume that if the
1293 CFA calculation is so complicated as to require a stack program
1294 that this will not be a problem. */
1295 {
1296 char *exp = fs->cfa_exp;
1297 ULONGEST len;
1298
1299 len = read_uleb128 (fs->objfile->obfd, &exp);
1300 cfa = (CORE_ADDR) execute_stack_op (fs->objfile, exp,
1301 exp + len, context, 0);
1302 break;
1303 }
1304 default:
1305 break;
1306 }
1307 context->cfa = cfa;
1308
1309 if (!chain)
1310 orig_context->cfa = cfa;
1311
1312 /* Compute the addresses of all registers saved in this frame. */
1313 for (i = 0; i < NUM_REGS; ++i)
1314 switch (fs->regs.reg[i].how)
1315 {
1316 case REG_UNSAVED:
1317 if (i == SP_REGNUM)
1318 {
1319 context->reg[i].how = REG_CTX_VALUE;
1320 context->reg[i].loc.addr = cfa;
1321 }
1322 else
1323 context->reg[i].how = REG_CTX_UNSAVED;
1324 break;
1325 case REG_SAVED_OFFSET:
1326 context->reg[i].how = REG_CTX_SAVED_OFFSET;
1327 context->reg[i].loc.offset = fs->regs.reg[i].loc.offset;
1328 break;
1329 case REG_SAVED_REG:
1330 switch (orig_context->reg[fs->regs.reg[i].loc.reg].how)
1331 {
1332 case REG_CTX_UNSAVED:
1333 context->reg[i].how = REG_CTX_UNSAVED;
1334 break;
1335 case REG_CTX_SAVED_OFFSET:
1336 context->reg[i].how = REG_CTX_SAVED_OFFSET;
1337 context->reg[i].loc.offset = orig_context->cfa - context->cfa +
1338 orig_context->reg[fs->regs.reg[i].loc.reg].loc.offset;
1339 break;
1340 case REG_CTX_SAVED_REG:
1341 context->reg[i].how = REG_CTX_SAVED_REG;
1342 context->reg[i].loc.reg =
1343 orig_context->reg[fs->regs.reg[i].loc.reg].loc.reg;
1344 break;
1345 case REG_CTX_SAVED_ADDR:
1346 context->reg[i].how = REG_CTX_SAVED_ADDR;
1347 context->reg[i].loc.addr =
1348 orig_context->reg[fs->regs.reg[i].loc.reg].loc.addr;
1349 break;
1350 default:
1351 internal_error (__FILE__, __LINE__, "bad switch");
1352 }
1353 break;
1354 case REG_SAVED_EXP:
1355 {
1356 char *exp = fs->regs.reg[i].loc.exp;
1357 ULONGEST len;
1358 CORE_ADDR val;
1359
1360 len = read_uleb128 (fs->objfile->obfd, &exp);
1361 val = execute_stack_op (fs->objfile, exp, exp + len,
1362 orig_context, cfa);
1363 context->reg[i].how = REG_CTX_SAVED_ADDR;
1364 context->reg[i].loc.addr = val;
1365 }
1366 break;
1367 default:
1368 internal_error (__FILE__, __LINE__, "bad switch");
1369 }
1370 get_reg ((char *) &context->ra, context, fs->retaddr_column);
1371 unwind_tmp_obstack_free ();
1372 }
1373
1374 static int
1375 is_cie (ULONGEST cie_id, int dwarf64)
1376 {
1377 return dwarf64 ? (cie_id == 0xffffffffffffffff) : (cie_id == 0xffffffff);
1378 }
1379
1380 static int
1381 compare_fde_unit (const void *a, const void *b)
1382 {
1383 struct fde_unit **first, **second;
1384 first = (struct fde_unit **) a;
1385 second = (struct fde_unit **) b;
1386 if ((*first)->initial_location > (*second)->initial_location)
1387 return 1;
1388 else if ((*first)->initial_location < (*second)->initial_location)
1389 return -1;
1390 else
1391 return 0;
1392 }
1393
1394 /* Build the cie_chunks and fde_chunks tables from informations
1395 found in .debug_frame and .eh_frame sections. */
1396 /* We can handle both of these sections almost in the same way, however there
1397 are some exceptions:
1398 - CIE ID is -1 in debug_frame, but 0 in eh_frame
1399 - eh_frame may contain some more information that are used only by gcc
1400 (eg. personality pointer, LSDA pointer, ...). Most of them we can ignore.
1401 - In debug_frame FDE's item cie_id contains offset of it's parent CIE.
1402 In eh_frame FDE's item cie_id is a relative pointer to the parent CIE.
1403 Anyway we don't need to bother with this, because we are smart enough
1404 to keep the pointer to the parent CIE of oncomming FDEs in 'last_cie'.
1405 - Although debug_frame items can contain Augmentation as well as
1406 eh_frame ones, I have never seen them non-empty. Thus only in eh_frame
1407 we can encounter for example non-absolute pointers (Aug. 'R').
1408 -- mludvig */
1409 static void
1410 parse_frame_info (struct objfile *objfile, file_ptr frame_offset,
1411 unsigned int frame_size, int eh_frame)
1412 {
1413 bfd *abfd = objfile->obfd;
1414 asection *curr_section_ptr;
1415 char *start = NULL;
1416 char *end = NULL;
1417 char *frame_buffer = NULL;
1418 char *curr_section_name, *aug_data;
1419 struct cie_unit *last_cie = NULL;
1420 int last_dup_fde = 0;
1421 int aug_len, i;
1422 CORE_ADDR curr_section_vma = 0;
1423
1424 unwind_tmp_obstack_init ();
1425
1426 frame_buffer = dwarf2_read_section (objfile, frame_offset, frame_size);
1427
1428 start = frame_buffer;
1429 end = frame_buffer + frame_size;
1430
1431 curr_section_name = eh_frame ? ".eh_frame" : ".debug_frame";
1432 curr_section_ptr = bfd_get_section_by_name (abfd, curr_section_name);
1433 if (curr_section_ptr)
1434 curr_section_vma = curr_section_ptr->vma;
1435
1436 if (start)
1437 {
1438 while (start < end)
1439 {
1440 unsigned long length;
1441 ULONGEST cie_id;
1442 ULONGEST unit_offset = start - frame_buffer;
1443 int bytes_read, dwarf64;
1444 char *block_end;
1445
1446 length = read_initial_length (abfd, start, &bytes_read);
1447 start += bytes_read;
1448 dwarf64 = (bytes_read == 12);
1449 block_end = start + length;
1450
1451 if (length == 0)
1452 {
1453 start = block_end;
1454 continue;
1455 }
1456
1457 cie_id = read_length (abfd, start, &bytes_read, dwarf64);
1458 start += bytes_read;
1459
1460 if ((eh_frame && cie_id == 0) || is_cie (cie_id, dwarf64))
1461 {
1462 struct cie_unit *cie = cie_unit_alloc ();
1463 char *aug;
1464
1465 cie->objfile = objfile;
1466 cie->next = cie_chunks;
1467 cie_chunks = cie;
1468
1469 cie->objfile = objfile;
1470
1471 cie->offset = unit_offset;
1472
1473 start++; /* version */
1474
1475 cie->augmentation = aug = start;
1476 while (*start++); /* Skips last NULL as well */
1477
1478 cie->code_align = read_uleb128 (abfd, &start);
1479 cie->data_align = read_sleb128 (abfd, &start);
1480 cie->ra = read_1u (abfd, &start);
1481
1482 /* Augmentation:
1483 z Indicates that a uleb128 is present to size the
1484 augmentation section.
1485 L Indicates the encoding (and thus presence) of
1486 an LSDA pointer in the FDE augmentation.
1487 R Indicates a non-default pointer encoding for
1488 FDE code pointers.
1489 P Indicates the presence of an encoding + language
1490 personality routine in the CIE augmentation.
1491
1492 [This info comes from GCC's dwarf2out.c]
1493 */
1494 if (*aug == 'z')
1495 {
1496 aug_len = read_uleb128 (abfd, &start);
1497 aug_data = start;
1498 start += aug_len;
1499 ++aug;
1500 }
1501
1502 cie->data = start;
1503 cie->data_length = block_end - cie->data;
1504
1505 while (*aug != '\0')
1506 {
1507 if (aug[0] == 'e' && aug[1] == 'h')
1508 {
1509 aug_data += sizeof (void *);
1510 aug++;
1511 }
1512 else if (aug[0] == 'R')
1513 cie->addr_encoding = *aug_data++;
1514 else if (aug[0] == 'P')
1515 {
1516 CORE_ADDR pers_addr;
1517 int pers_addr_enc;
1518
1519 pers_addr_enc = *aug_data++;
1520 /* We don't need pers_addr value and so we
1521 don't care about it's encoding. */
1522 pers_addr = read_encoded_pointer (abfd, &aug_data,
1523 pers_addr_enc);
1524 }
1525 else if (aug[0] == 'L' && eh_frame)
1526 {
1527 int lsda_addr_enc;
1528
1529 /* Perhaps we should save this to CIE for later use?
1530 Do we need it for something in GDB? */
1531 lsda_addr_enc = *aug_data++;
1532 }
1533 else
1534 warning ("CFI warning: unknown augmentation \"%c\""
1535 " in \"%s\" of\n"
1536 "\t%s", aug[0], curr_section_name,
1537 objfile->name);
1538 aug++;
1539 }
1540
1541 last_cie = cie;
1542 }
1543 else
1544 {
1545 struct fde_unit *fde;
1546 struct cie_unit *cie;
1547 int dup = 0;
1548 CORE_ADDR init_loc;
1549
1550 /* We assume that debug_frame is in order
1551 CIE,FDE,CIE,FDE,FDE,... and thus the CIE for this FDE
1552 should be stored in last_cie pointer. If not, we'll
1553 try to find it by the older way. */
1554 if (last_cie)
1555 cie = last_cie;
1556 else
1557 {
1558 warning ("CFI: last_cie == NULL. "
1559 "Perhaps a malformed %s section in '%s'...?\n",
1560 curr_section_name, objfile->name);
1561
1562 cie = cie_chunks;
1563 while (cie)
1564 {
1565 if (cie->objfile == objfile)
1566 {
1567 if (eh_frame &&
1568 (cie->offset ==
1569 (unit_offset + bytes_read - cie_id)))
1570 break;
1571 if (!eh_frame && (cie->offset == cie_id))
1572 break;
1573 }
1574
1575 cie = cie->next;
1576 }
1577 if (!cie)
1578 error ("CFI: can't find CIE pointer");
1579 }
1580
1581 init_loc = read_encoded_pointer (abfd, &start,
1582 cie->addr_encoding);
1583
1584 switch (pointer_encoding (cie->addr_encoding))
1585 {
1586 case PE_absptr:
1587 break;
1588 case PE_pcrel:
1589 /* start-frame_buffer gives offset from
1590 the beginning of actual section. */
1591 init_loc += curr_section_vma + start - frame_buffer;
1592 break;
1593 default:
1594 warning ("CFI: Unsupported pointer encoding\n");
1595 }
1596
1597 /* For relocatable objects we must add an offset telling
1598 where the section is actually mapped in the memory. */
1599 init_loc += ANOFFSET (objfile->section_offsets,
1600 SECT_OFF_TEXT (objfile));
1601
1602 /* If we have both .debug_frame and .eh_frame present in
1603 a file, we must eliminate duplicate FDEs. For now we'll
1604 run through all entries in fde_chunks and check it one
1605 by one. Perhaps in the future we can implement a faster
1606 searching algorithm. */
1607 /* eh_frame==2 indicates, that this file has an already
1608 parsed .debug_frame too. When eh_frame==1 it means, that no
1609 .debug_frame is present and thus we don't need to check for
1610 duplicities. eh_frame==0 means, that we parse .debug_frame
1611 and don't need to care about duplicate FDEs, because
1612 .debug_frame is parsed first. */
1613 if (eh_frame == 2)
1614 for (i = 0; eh_frame == 2 && i < fde_chunks.elems; i++)
1615 {
1616 /* We assume that FDEs in .debug_frame and .eh_frame
1617 have the same order (if they are present, of course).
1618 If we find a duplicate entry for one FDE and save
1619 it's index to last_dup_fde it's very likely, that
1620 we'll find an entry for the following FDE right after
1621 the previous one. Thus in many cases we'll run this
1622 loop only once. */
1623 last_dup_fde = (last_dup_fde + i) % fde_chunks.elems;
1624 if (fde_chunks.array[last_dup_fde]->initial_location
1625 == init_loc)
1626 {
1627 dup = 1;
1628 break;
1629 }
1630 }
1631
1632 /* Allocate a new entry only if this FDE isn't a duplicate of
1633 something we have already seen. */
1634 if (!dup)
1635 {
1636 fde_chunks_need_space ();
1637 fde = fde_unit_alloc ();
1638
1639 fde_chunks.array[fde_chunks.elems++] = fde;
1640
1641 fde->initial_location = init_loc;
1642 fde->address_range = read_encoded_pointer (abfd, &start,
1643 cie->
1644 addr_encoding);
1645
1646 fde->cie_ptr = cie;
1647
1648 /* Here we intentionally ignore augmentation data
1649 from FDE, because we don't need them. */
1650 if (cie->augmentation[0] == 'z')
1651 start += read_uleb128 (abfd, &start);
1652
1653 fde->data = start;
1654 fde->data_length = block_end - start;
1655 }
1656 }
1657 start = block_end;
1658 }
1659 qsort (fde_chunks.array, fde_chunks.elems,
1660 sizeof (struct fde_unit *), compare_fde_unit);
1661 }
1662 }
1663
1664 /* We must parse both .debug_frame section and .eh_frame because
1665 * not all frames must be present in both of these sections. */
1666 void
1667 dwarf2_build_frame_info (struct objfile *objfile)
1668 {
1669 int after_debug_frame = 0;
1670
1671 /* If we have .debug_frame then the parser is called with
1672 eh_frame==0 for .debug_frame and eh_frame==2 for .eh_frame,
1673 otherwise it's only called once for .eh_frame with argument
1674 eh_frame==1. */
1675
1676 if (dwarf_frame_offset)
1677 {
1678 parse_frame_info (objfile, dwarf_frame_offset,
1679 dwarf_frame_size, 0 /* = debug_frame */ );
1680 after_debug_frame = 1;
1681 }
1682
1683 if (dwarf_eh_frame_offset)
1684 parse_frame_info (objfile, dwarf_eh_frame_offset, dwarf_eh_frame_size,
1685 1 /* = eh_frame */ + after_debug_frame);
1686 }
1687
1688 /* Return the frame address. */
1689 CORE_ADDR
1690 cfi_read_fp (void)
1691 {
1692 struct context *context;
1693 struct frame_state *fs;
1694 CORE_ADDR cfa;
1695
1696 unwind_tmp_obstack_init ();
1697
1698 context = context_alloc ();
1699 fs = frame_state_alloc ();
1700
1701 context->ra = read_pc () + 1;
1702
1703 frame_state_for (context, fs);
1704 update_context (context, fs, 0);
1705
1706 cfa = context->cfa;
1707
1708 unwind_tmp_obstack_free ();
1709
1710 return cfa;
1711 }
1712
1713 /* Store the frame address. This function is not used. */
1714
1715 void
1716 cfi_write_fp (CORE_ADDR val)
1717 {
1718 struct context *context;
1719 struct frame_state *fs;
1720
1721 unwind_tmp_obstack_init ();
1722
1723 context = context_alloc ();
1724 fs = frame_state_alloc ();
1725
1726 context->ra = read_pc () + 1;
1727
1728 frame_state_for (context, fs);
1729
1730 if (fs->cfa_how == CFA_REG_OFFSET)
1731 {
1732 val -= fs->cfa_offset;
1733 write_register_gen (fs->cfa_reg, (char *) &val);
1734 }
1735 else
1736 warning ("Can't write fp.");
1737
1738 unwind_tmp_obstack_free ();
1739 }
1740
1741 /* Restore the machine to the state it had before the current frame
1742 was created. */
1743 void
1744 cfi_pop_frame (struct frame_info *fi)
1745 {
1746 char *regbuf = alloca (MAX_REGISTER_RAW_SIZE);
1747 int regnum;
1748
1749 for (regnum = 0; regnum < NUM_REGS; regnum++)
1750 {
1751 get_reg (regbuf, UNWIND_CONTEXT (fi), regnum);
1752 write_register_bytes (REGISTER_BYTE (regnum), regbuf,
1753 REGISTER_RAW_SIZE (regnum));
1754 }
1755 write_register (PC_REGNUM, UNWIND_CONTEXT (fi)->ra);
1756
1757 flush_cached_frames ();
1758 }
1759
1760 /* Determine the address of the calling function's frame. */
1761 CORE_ADDR
1762 cfi_frame_chain (struct frame_info *fi)
1763 {
1764 struct context *context;
1765 struct frame_state *fs;
1766 CORE_ADDR cfa;
1767
1768 unwind_tmp_obstack_init ();
1769
1770 context = context_alloc ();
1771 fs = frame_state_alloc ();
1772 context_cpy (context, UNWIND_CONTEXT (fi));
1773
1774 /* outermost frame */
1775 if (context->ra == 0)
1776 {
1777 unwind_tmp_obstack_free ();
1778 return 0;
1779 }
1780
1781 frame_state_for (context, fs);
1782 update_context (context, fs, 1);
1783
1784 cfa = context->cfa;
1785 unwind_tmp_obstack_free ();
1786
1787 return cfa;
1788 }
1789
1790 /* Sets the pc of the frame. */
1791 void
1792 cfi_init_frame_pc (int fromleaf, struct frame_info *fi)
1793 {
1794 if (fi->next)
1795 get_reg ((char *) &(fi->pc), UNWIND_CONTEXT (fi->next), PC_REGNUM);
1796 else
1797 fi->pc = read_pc ();
1798 }
1799
1800 /* Initialize unwind context informations of the frame. */
1801 void
1802 cfi_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1803 {
1804 struct frame_state *fs;
1805
1806 unwind_tmp_obstack_init ();
1807
1808 fs = frame_state_alloc ();
1809 fi->context = frame_obstack_alloc (sizeof (struct context));
1810 UNWIND_CONTEXT (fi)->reg =
1811 frame_obstack_alloc (sizeof (struct context_reg) * NUM_REGS);
1812 memset (UNWIND_CONTEXT (fi)->reg, 0,
1813 sizeof (struct context_reg) * NUM_REGS);
1814
1815 if (fi->next)
1816 {
1817 context_cpy (UNWIND_CONTEXT (fi), UNWIND_CONTEXT (fi->next));
1818 frame_state_for (UNWIND_CONTEXT (fi), fs);
1819 update_context (UNWIND_CONTEXT (fi), fs, 1);
1820 }
1821 else
1822 {
1823 UNWIND_CONTEXT (fi)->ra = fi->pc + 1;
1824 frame_state_for (UNWIND_CONTEXT (fi), fs);
1825 update_context (UNWIND_CONTEXT (fi), fs, 0);
1826 }
1827
1828 unwind_tmp_obstack_free ();
1829 }
1830
1831 /* Obtain return address of the frame. */
1832 CORE_ADDR
1833 cfi_get_ra (struct frame_info *fi)
1834 {
1835 return UNWIND_CONTEXT (fi)->ra;
1836 }
1837
1838 /* Find register number REGNUM relative to FRAME and put its
1839 (raw) contents in *RAW_BUFFER. Set *OPTIMIZED if the variable
1840 was optimized out (and thus can't be fetched). If the variable
1841 was fetched from memory, set *ADDRP to where it was fetched from,
1842 otherwise it was fetched from a register.
1843
1844 The argument RAW_BUFFER must point to aligned memory. */
1845 void
1846 cfi_get_saved_register (char *raw_buffer,
1847 int *optimized,
1848 CORE_ADDR *addrp,
1849 struct frame_info *frame,
1850 int regnum, enum lval_type *lval)
1851 {
1852 if (!target_has_registers)
1853 error ("No registers.");
1854
1855 /* Normal systems don't optimize out things with register numbers. */
1856 if (optimized != NULL)
1857 *optimized = 0;
1858
1859 if (addrp) /* default assumption: not found in memory */
1860 *addrp = 0;
1861
1862 if (!frame->next)
1863 {
1864 read_register_gen (regnum, raw_buffer);
1865 if (lval != NULL)
1866 *lval = lval_register;
1867 if (addrp != NULL)
1868 *addrp = REGISTER_BYTE (regnum);
1869 }
1870 else
1871 {
1872 frame = frame->next;
1873 switch (UNWIND_CONTEXT (frame)->reg[regnum].how)
1874 {
1875 case REG_CTX_UNSAVED:
1876 read_register_gen (regnum, raw_buffer);
1877 if (lval != NULL)
1878 *lval = not_lval;
1879 if (optimized != NULL)
1880 *optimized = 1;
1881 break;
1882 case REG_CTX_SAVED_OFFSET:
1883 target_read_memory (UNWIND_CONTEXT (frame)->cfa +
1884 UNWIND_CONTEXT (frame)->reg[regnum].loc.offset,
1885 raw_buffer, REGISTER_RAW_SIZE (regnum));
1886 if (lval != NULL)
1887 *lval = lval_memory;
1888 if (addrp != NULL)
1889 *addrp =
1890 UNWIND_CONTEXT (frame)->cfa +
1891 UNWIND_CONTEXT (frame)->reg[regnum].loc.offset;
1892 break;
1893 case REG_CTX_SAVED_REG:
1894 read_register_gen (UNWIND_CONTEXT (frame)->reg[regnum].loc.reg,
1895 raw_buffer);
1896 if (lval != NULL)
1897 *lval = lval_register;
1898 if (addrp != NULL)
1899 *addrp =
1900 REGISTER_BYTE (UNWIND_CONTEXT (frame)->reg[regnum].loc.reg);
1901 break;
1902 case REG_CTX_SAVED_ADDR:
1903 target_read_memory (UNWIND_CONTEXT (frame)->reg[regnum].loc.addr,
1904 raw_buffer, REGISTER_RAW_SIZE (regnum));
1905 if (lval != NULL)
1906 *lval = lval_memory;
1907 if (addrp != NULL)
1908 *addrp = UNWIND_CONTEXT (frame)->reg[regnum].loc.addr;
1909 break;
1910 case REG_CTX_VALUE:
1911 memcpy (raw_buffer, &UNWIND_CONTEXT (frame)->reg[regnum].loc.addr,
1912 REGISTER_RAW_SIZE (regnum));
1913 if (lval != NULL)
1914 *lval = not_lval;
1915 if (optimized != NULL)
1916 *optimized = 0;
1917 break;
1918 default:
1919 internal_error (__FILE__, __LINE__,
1920 "cfi_get_saved_register: unknown register rule");
1921 }
1922 }
1923 }
1924
1925 /* Return the register that the function uses for a frame pointer,
1926 plus any necessary offset to be applied to the register before
1927 any frame pointer offsets. */
1928 void
1929 cfi_virtual_frame_pointer (CORE_ADDR pc, int *frame_reg,
1930 LONGEST * frame_offset)
1931 {
1932 struct context *context;
1933 struct frame_state *fs;
1934
1935 unwind_tmp_obstack_init ();
1936
1937 context = context_alloc ();
1938 fs = frame_state_alloc ();
1939
1940 context->ra = read_pc () + 1;
1941
1942 frame_state_for (context, fs);
1943
1944 if (fs->cfa_how == CFA_REG_OFFSET)
1945 {
1946 *frame_reg = fs->cfa_reg;
1947 *frame_offset = fs->cfa_offset;
1948 }
1949 else
1950 error ("dwarf cfi error: CFA is not defined as CFA_REG_OFFSET");
1951
1952 unwind_tmp_obstack_free ();
1953 }
This page took 0.067804 seconds and 4 git commands to generate.