1 | /* Copyright (C) 2001-2018 Free Software Foundation, Inc. |
---|---|

2 | This file is part of the GNU C Library. |

3 | |

4 | The GNU C Library is free software; you can redistribute it and/or |

5 | modify it under the terms of the GNU Lesser General Public |

6 | License as published by the Free Software Foundation; either |

7 | version 2.1 of the License, or (at your option) any later version. |

8 | |

9 | The GNU C Library is distributed in the hope that it will be useful, |

10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |

11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |

12 | Lesser General Public License for more details. |

13 | |

14 | You should have received a copy of the GNU Lesser General Public |

15 | License along with the GNU C Library; if not, see |

16 | <http://www.gnu.org/licenses/>. */ |

17 | |

18 | #ifndef _SYS_USER_H |

19 | #define _SYS_USER_H 1 |

20 | |

21 | /* The whole purpose of this file is for GDB and GDB only. Don't read |

22 | too much into it. Don't use it for anything other than GDB unless |

23 | you know what you are doing. */ |

24 | |

25 | #ifdef __x86_64__ |

26 | |

27 | struct user_fpregs_struct |

28 | { |

29 | unsigned short int cwd; |

30 | unsigned short int swd; |

31 | unsigned short int ftw; |

32 | unsigned short int fop; |

33 | __extension__ unsigned long long int rip; |

34 | __extension__ unsigned long long int rdp; |

35 | unsigned int mxcsr; |

36 | unsigned int mxcr_mask; |

37 | unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ |

38 | unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */ |

39 | unsigned int padding[24]; |

40 | }; |

41 | |

42 | struct user_regs_struct |

43 | { |

44 | __extension__ unsigned long long int r15; |

45 | __extension__ unsigned long long int r14; |

46 | __extension__ unsigned long long int r13; |

47 | __extension__ unsigned long long int r12; |

48 | __extension__ unsigned long long int rbp; |

49 | __extension__ unsigned long long int rbx; |

50 | __extension__ unsigned long long int r11; |

51 | __extension__ unsigned long long int r10; |

52 | __extension__ unsigned long long int r9; |

53 | __extension__ unsigned long long int r8; |

54 | __extension__ unsigned long long int rax; |

55 | __extension__ unsigned long long int rcx; |

56 | __extension__ unsigned long long int rdx; |

57 | __extension__ unsigned long long int rsi; |

58 | __extension__ unsigned long long int rdi; |

59 | __extension__ unsigned long long int orig_rax; |

60 | __extension__ unsigned long long int rip; |

61 | __extension__ unsigned long long int cs; |

62 | __extension__ unsigned long long int eflags; |

63 | __extension__ unsigned long long int rsp; |

64 | __extension__ unsigned long long int ss; |

65 | __extension__ unsigned long long int fs_base; |

66 | __extension__ unsigned long long int gs_base; |

67 | __extension__ unsigned long long int ds; |

68 | __extension__ unsigned long long int es; |

69 | __extension__ unsigned long long int fs; |

70 | __extension__ unsigned long long int gs; |

71 | }; |

72 | |

73 | struct user |

74 | { |

75 | struct user_regs_struct regs; |

76 | int u_fpvalid; |

77 | struct user_fpregs_struct i387; |

78 | __extension__ unsigned long long int u_tsize; |

79 | __extension__ unsigned long long int u_dsize; |

80 | __extension__ unsigned long long int u_ssize; |

81 | __extension__ unsigned long long int start_code; |

82 | __extension__ unsigned long long int start_stack; |

83 | __extension__ long long int signal; |

84 | int reserved; |

85 | __extension__ union |

86 | { |

87 | struct user_regs_struct* u_ar0; |

88 | __extension__ unsigned long long int __u_ar0_word; |

89 | }; |

90 | __extension__ union |

91 | { |

92 | struct user_fpregs_struct* u_fpstate; |

93 | __extension__ unsigned long long int __u_fpstate_word; |

94 | }; |

95 | __extension__ unsigned long long int magic; |

96 | char u_comm [32]; |

97 | __extension__ unsigned long long int u_debugreg [8]; |

98 | }; |

99 | |

100 | #else |

101 | /* These are the 32-bit x86 structures. */ |

102 | struct user_fpregs_struct |

103 | { |

104 | long int cwd; |

105 | long int swd; |

106 | long int twd; |

107 | long int fip; |

108 | long int fcs; |

109 | long int foo; |

110 | long int fos; |

111 | long int st_space [20]; |

112 | }; |

113 | |

114 | struct user_fpxregs_struct |

115 | { |

116 | unsigned short int cwd; |

117 | unsigned short int swd; |

118 | unsigned short int twd; |

119 | unsigned short int fop; |

120 | long int fip; |

121 | long int fcs; |

122 | long int foo; |

123 | long int fos; |

124 | long int mxcsr; |

125 | long int reserved; |

126 | long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ |

127 | long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ |

128 | long int padding[56]; |

129 | }; |

130 | |

131 | struct user_regs_struct |

132 | { |

133 | long int ebx; |

134 | long int ecx; |

135 | long int edx; |

136 | long int esi; |

137 | long int edi; |

138 | long int ebp; |

139 | long int eax; |

140 | long int xds; |

141 | long int xes; |

142 | long int xfs; |

143 | long int xgs; |

144 | long int orig_eax; |

145 | long int eip; |

146 | long int xcs; |

147 | long int eflags; |

148 | long int esp; |

149 | long int xss; |

150 | }; |

151 | |

152 | struct user |

153 | { |

154 | struct user_regs_struct regs; |

155 | int u_fpvalid; |

156 | struct user_fpregs_struct i387; |

157 | unsigned long int u_tsize; |

158 | unsigned long int u_dsize; |

159 | unsigned long int u_ssize; |

160 | unsigned long int start_code; |

161 | unsigned long int start_stack; |

162 | long int signal; |

163 | int reserved; |

164 | struct user_regs_struct* u_ar0; |

165 | struct user_fpregs_struct* u_fpstate; |

166 | unsigned long int magic; |

167 | char u_comm [32]; |

168 | int u_debugreg [8]; |

169 | }; |

170 | #endif /* __x86_64__ */ |

171 | |

172 | #define PAGE_SHIFT 12 |

173 | #define PAGE_SIZE (1UL << PAGE_SHIFT) |

174 | #define PAGE_MASK (~(PAGE_SIZE-1)) |

175 | #define NBPG PAGE_SIZE |

176 | #define UPAGES 1 |

177 | #define HOST_TEXT_START_ADDR (u.start_code) |

178 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |

179 | |

180 | #endif /* _SYS_USER_H */ |

181 |