Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
parisc
include
asm
unwind.h
Go to the documentation of this file.
1
#ifndef _UNWIND_H_
2
#define _UNWIND_H_
3
4
#include <linux/list.h>
5
6
/* From ABI specifications */
7
struct
unwind_table_entry
{
8
unsigned
int
region_start
;
9
unsigned
int
region_end
;
10
unsigned
int
Cannot_unwind
:1;
/* 0 */
11
unsigned
int
Millicode
:1;
/* 1 */
12
unsigned
int
Millicode_save_sr0
:1;
/* 2 */
13
unsigned
int
Region_description
:2;
/* 3..4 */
14
unsigned
int
reserved1
:1;
/* 5 */
15
unsigned
int
Entry_SR
:1;
/* 6 */
16
unsigned
int
Entry_FR
:4;
/* number saved */
/* 7..10 */
17
unsigned
int
Entry_GR
:5;
/* number saved */
/* 11..15 */
18
unsigned
int
Args_stored
:1;
/* 16 */
19
unsigned
int
Variable_Frame
:1;
/* 17 */
20
unsigned
int
Separate_Package_Body
:1;
/* 18 */
21
unsigned
int
Frame_Extension_Millicode
:1;
/* 19 */
22
unsigned
int
Stack_Overflow_Check
:1;
/* 20 */
23
unsigned
int
Two_Instruction_SP_Increment
:1;
/* 21 */
24
unsigned
int
Ada_Region
:1;
/* 22 */
25
unsigned
int
cxx_info
:1;
/* 23 */
26
unsigned
int
cxx_try_catch
:1;
/* 24 */
27
unsigned
int
sched_entry_seq
:1;
/* 25 */
28
unsigned
int
reserved2
:1;
/* 26 */
29
unsigned
int
Save_SP
:1;
/* 27 */
30
unsigned
int
Save_RP
:1;
/* 28 */
31
unsigned
int
Save_MRP_in_frame
:1;
/* 29 */
32
unsigned
int
extn_ptr_defined
:1;
/* 30 */
33
unsigned
int
Cleanup_defined
:1;
/* 31 */
34
35
unsigned
int
MPE_XL_interrupt_marker
:1;
/* 0 */
36
unsigned
int
HP_UX_interrupt_marker
:1;
/* 1 */
37
unsigned
int
Large_frame
:1;
/* 2 */
38
unsigned
int
Pseudo_SP_Set
:1;
/* 3 */
39
unsigned
int
reserved4
:1;
/* 4 */
40
unsigned
int
Total_frame_size
:27;
/* 5..31 */
41
};
42
43
struct
unwind_table
{
44
struct
list_head
list;
45
const
char
*
name
;
46
unsigned
long
gp
;
47
unsigned
long
base_addr
;
48
unsigned
long
start
;
49
unsigned
long
end
;
50
const
struct
unwind_table_entry
*
table
;
51
unsigned
long
length
;
52
};
53
54
struct
unwind_frame_info
{
55
struct
task_struct
*
t
;
56
/* Eventually we would like to be able to get at any of the registers
57
available; but for now we only try to get the sp and ip for each
58
frame */
59
/* struct pt_regs regs; */
60
unsigned
long
sp
,
ip
,
rp
,
r31
;
61
unsigned
long
prev_sp
,
prev_ip
;
62
};
63
64
struct
unwind_table
*
65
unwind_table_add
(
const
char
*
name
,
unsigned
long
base_addr
,
66
unsigned
long
gp
,
void
*
start
,
void
*
end
);
67
void
68
unwind_table_remove
(
struct
unwind_table
*
table
);
69
70
void
unwind_frame_init
(
struct
unwind_frame_info
*
info
,
struct
task_struct
*
t
,
71
struct
pt_regs
*
regs
);
72
void
unwind_frame_init_from_blocked_task
(
struct
unwind_frame_info
*
info
,
struct
task_struct
*
t
);
73
void
unwind_frame_init_running
(
struct
unwind_frame_info
*
info
,
struct
pt_regs
*
regs
);
74
int
unwind_once
(
struct
unwind_frame_info
*
info
);
75
int
unwind_to_user
(
struct
unwind_frame_info
*
info
);
76
77
int
unwind_init
(
void
);
78
79
#endif
Generated on Thu Jan 10 2013 12:55:25 for Linux Kernel by
1.8.2