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