]>
Commit | Line | Data |
---|---|---|
4877a06f JM |
1 | /* Copyright (C) 1997 Free Software Foundation, Inc. |
2 | This file is part of GNU CC. */ | |
3 | ||
4 | typedef struct frame_state | |
5 | { | |
6 | void *cfa; | |
7 | void *eh_ptr; | |
8 | long cfa_offset; | |
9 | long args_size; | |
10 | long reg_or_offset[FIRST_PSEUDO_REGISTER+1]; | |
11 | unsigned short cfa_reg; | |
12 | unsigned short retaddr_column; | |
13 | char saved[FIRST_PSEUDO_REGISTER+1]; | |
14 | } frame_state; | |
15 | ||
16 | /* Values for 'saved' above. */ | |
17 | #define REG_UNSAVED 0 | |
18 | #define REG_SAVED_OFFSET 1 | |
19 | #define REG_SAVED_REG 2 | |
20 | ||
956d6950 JL |
21 | /* The representation for an "object" to be searched for frame unwind info. |
22 | For targets with named sections, one object is an executable or shared | |
23 | library; for other targets, one object is one translation unit. | |
24 | ||
25 | A copy of this structure declaration is printed by collect2.c; | |
26 | keep the copies synchronized! */ | |
27 | ||
28 | struct object { | |
29 | void *pc_begin; | |
30 | void *pc_end; | |
31 | struct dwarf_fde *fde_begin; | |
32 | struct dwarf_fde **fde_array; | |
33 | size_t count; | |
34 | struct object *next; | |
35 | }; | |
36 | ||
4877a06f JM |
37 | /* Called either from crtbegin.o or a static constructor to register the |
38 | unwind info for an object or translation unit, respectively. */ | |
39 | ||
956d6950 | 40 | extern void __register_frame (void *, struct object *); |
4877a06f JM |
41 | |
42 | /* Called from crtend.o to deregister the unwind info for an object. */ | |
43 | ||
44 | extern void __deregister_frame (void *); | |
45 | ||
46 | /* Called from __throw to find the registers to restore for a given | |
47 | PC_TARGET. The caller should allocate a local variable of `struct | |
48 | frame_state' (declared in frame.h) and pass its address to STATE_IN. | |
49 | Returns NULL on failure, otherwise returns STATE_IN. */ | |
50 | ||
51 | extern struct frame_state *__frame_state_for (void *, struct frame_state *); |