Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: snapshot/cpu_context.h

Issue 623343004: Use the correct fxsave type for x86_64 (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Update comment Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | snapshot/system_snapshot_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 uint32_t dr6; 89 uint32_t dr6;
90 uint32_t dr7; 90 uint32_t dr7;
91 }; 91 };
92 92
93 //! \brief A context structure carrying x86_64 CPU state. 93 //! \brief A context structure carrying x86_64 CPU state.
94 struct CPUContextX86_64 { 94 struct CPUContextX86_64 {
95 typedef CPUContextX86::X87Register X87Register; 95 typedef CPUContextX86::X87Register X87Register;
96 typedef CPUContextX86::X87OrMMXRegister X87OrMMXRegister; 96 typedef CPUContextX86::X87OrMMXRegister X87OrMMXRegister;
97 typedef CPUContextX86::XMMRegister XMMRegister; 97 typedef CPUContextX86::XMMRegister XMMRegister;
98 98
99 struct Fxsave64 { 99 struct Fxsave {
100 uint16_t fcw; // FPU control word 100 uint16_t fcw; // FPU control word
101 uint16_t fsw; // FPU status word 101 uint16_t fsw; // FPU status word
102 uint8_t ftw; // abridged FPU tag word 102 uint8_t ftw; // abridged FPU tag word
103 uint8_t reserved_1; 103 uint8_t reserved_1;
104 uint16_t fop; // FPU opcode 104 uint16_t fop; // FPU opcode
105 uint64_t fpu_ip; // FPU instruction pointer 105 union {
106 uint64_t fpu_dp; // FPU data pointer 106 // The expression of these union members is determined by the use of
107 // fxsave/fxrstor or fxsave64/fxrstor64 (fxsaveq/fxrstorq). Mac OS X and
108 // Windows systems use the traditional fxsave/fxrstor structure.
109 struct {
110 // fxsave/fxrstor
111 uint32_t fpu_ip; // FPU instruction pointer offset
112 uint16_t fpu_cs; // FPU instruction pointer segment selector
113 uint16_t reserved_2;
114 uint32_t fpu_dp; // FPU data pointer offset
115 uint16_t fpu_ds; // FPU data pointer segment selector
116 uint16_t reserved_3;
117 };
118 struct {
119 // fxsave64/fxrstor64 (fxsaveq/fxrstorq)
120 uint64_t fpu_ip_64; // FPU instruction pointer
121 uint64_t fpu_dp_64; // FPU data pointer
122 };
123 };
107 uint32_t mxcsr; // multimedia extensions status and control register 124 uint32_t mxcsr; // multimedia extensions status and control register
108 uint32_t mxcsr_mask; // valid bits in mxcsr 125 uint32_t mxcsr_mask; // valid bits in mxcsr
109 X87OrMMXRegister st_mm[8]; 126 X87OrMMXRegister st_mm[8];
110 XMMRegister xmm[16]; 127 XMMRegister xmm[16];
111 uint8_t reserved_2[48]; 128 uint8_t reserved_4[48];
112 uint8_t available[48]; 129 uint8_t available[48];
113 }; 130 };
114 131
115 // Integer registers. 132 // Integer registers.
116 uint64_t rax; 133 uint64_t rax;
117 uint64_t rbx; 134 uint64_t rbx;
118 uint64_t rcx; 135 uint64_t rcx;
119 uint64_t rdx; 136 uint64_t rdx;
120 uint64_t rdi; // destination index 137 uint64_t rdi; // destination index
121 uint64_t rsi; // source index 138 uint64_t rsi; // source index
122 uint64_t rbp; // base pointer 139 uint64_t rbp; // base pointer
123 uint64_t rsp; // stack pointer 140 uint64_t rsp; // stack pointer
124 uint64_t r8; 141 uint64_t r8;
125 uint64_t r9; 142 uint64_t r9;
126 uint64_t r10; 143 uint64_t r10;
127 uint64_t r11; 144 uint64_t r11;
128 uint64_t r12; 145 uint64_t r12;
129 uint64_t r13; 146 uint64_t r13;
130 uint64_t r14; 147 uint64_t r14;
131 uint64_t r15; 148 uint64_t r15;
132 uint64_t rip; // instruction pointer 149 uint64_t rip; // instruction pointer
133 uint64_t rflags; 150 uint64_t rflags;
134 uint16_t cs; // code segment selector 151 uint16_t cs; // code segment selector
135 uint16_t fs; 152 uint16_t fs;
136 uint16_t gs; 153 uint16_t gs;
137 154
138 // Floating-point and vector registers. 155 // Floating-point and vector registers.
139 Fxsave64 fxsave64; 156 Fxsave fxsave;
140 157
141 // Debug registers. 158 // Debug registers.
142 uint64_t dr0; 159 uint64_t dr0;
143 uint64_t dr1; 160 uint64_t dr1;
144 uint64_t dr2; 161 uint64_t dr2;
145 uint64_t dr3; 162 uint64_t dr3;
146 uint64_t dr4; // obsolete, normally an alias for dr6 163 uint64_t dr4; // obsolete, normally an alias for dr6
147 uint64_t dr5; // obsolete, normally an alias for dr7 164 uint64_t dr5; // obsolete, normally an alias for dr7
148 uint64_t dr6; 165 uint64_t dr6;
149 uint64_t dr7; 166 uint64_t dr7;
(...skipping 14 matching lines...) Expand all
164 CPUArchitecture architecture; 181 CPUArchitecture architecture;
165 union { 182 union {
166 CPUContextX86* x86; 183 CPUContextX86* x86;
167 CPUContextX86_64* x86_64; 184 CPUContextX86_64* x86_64;
168 }; 185 };
169 }; 186 };
170 187
171 } // namespace crashpad 188 } // namespace crashpad
172 189
173 #endif // CRASHPAD_SNAPSHOT_SNAPSHOT_CPU_CONTEXT_H_ 190 #endif // CRASHPAD_SNAPSHOT_SNAPSHOT_CPU_CONTEXT_H_
OLDNEW
« no previous file with comments | « no previous file | snapshot/system_snapshot_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698