| OLD | NEW |
| 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, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include "snapshot/mac/process_types.h" | 15 #include "snapshot/mac/process_types.h" |
| 16 | 16 |
| 17 #include <AvailabilityMacros.h> | 17 #include <AvailabilityMacros.h> |
| 18 #include <mach/mach.h> | 18 #include <mach/mach.h> |
| 19 #include <string.h> | 19 #include <string.h> |
| 20 | 20 |
| 21 #include <vector> | 21 #include <vector> |
| 22 | 22 |
| 23 #include "base/basictypes.h" |
| 23 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
| 24 #include "gtest/gtest.h" | 25 #include "gtest/gtest.h" |
| 25 #include "util/mac/mac_util.h" | 26 #include "util/mac/mac_util.h" |
| 26 #include "util/test/mac/dyld.h" | 27 #include "util/test/mac/dyld.h" |
| 27 | 28 |
| 28 namespace crashpad { | 29 namespace crashpad { |
| 29 namespace test { | 30 namespace test { |
| 30 namespace { | 31 namespace { |
| 31 | 32 |
| 32 #define TEST_STRING(process_reader, self_view, proctype_view, field) \ | 33 #define TEST_STRING(process_reader, self_view, proctype_view, field) \ |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 } | 115 } |
| 115 if (proctype_image_infos.version >= 3) { | 116 if (proctype_image_infos.version >= 3) { |
| 116 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->jitInfo), | 117 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->jitInfo), |
| 117 proctype_image_infos.jitInfo); | 118 proctype_image_infos.jitInfo); |
| 118 } | 119 } |
| 119 if (proctype_image_infos.version >= 5) { | 120 if (proctype_image_infos.version >= 5) { |
| 120 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->dyldVersion), | 121 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->dyldVersion), |
| 121 proctype_image_infos.dyldVersion); | 122 proctype_image_infos.dyldVersion); |
| 122 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorMessage), | 123 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorMessage), |
| 123 proctype_image_infos.errorMessage); | 124 proctype_image_infos.errorMessage); |
| 124 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->terminationFlags), | 125 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->terminationFlags), |
| 125 proctype_image_infos.terminationFlags); | 126 proctype_image_infos.terminationFlags); |
| 126 | 127 |
| 127 TEST_STRING( | 128 TEST_STRING( |
| 128 process_reader, self_image_infos, proctype_image_infos, dyldVersion); | 129 process_reader, self_image_infos, proctype_image_infos, dyldVersion); |
| 129 TEST_STRING( | 130 TEST_STRING( |
| 130 process_reader, self_image_infos, proctype_image_infos, errorMessage); | 131 process_reader, self_image_infos, proctype_image_infos, errorMessage); |
| 131 } | 132 } |
| 132 if (proctype_image_infos.version >= 6) { | 133 if (proctype_image_infos.version >= 6) { |
| 133 EXPECT_EQ( | 134 EXPECT_EQ( |
| 134 reinterpret_cast<uint64_t>(self_image_infos->coreSymbolicationShmPage), | 135 reinterpret_cast<uint64_t>(self_image_infos->coreSymbolicationShmPage), |
| 135 proctype_image_infos.coreSymbolicationShmPage); | 136 proctype_image_infos.coreSymbolicationShmPage); |
| 136 } | 137 } |
| 137 if (proctype_image_infos.version >= 7) { | 138 if (proctype_image_infos.version >= 7) { |
| 138 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->systemOrderFlag), | 139 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->systemOrderFlag), |
| 139 proctype_image_infos.systemOrderFlag); | 140 proctype_image_infos.systemOrderFlag); |
| 140 } | 141 } |
| 141 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 | 142 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 |
| 142 if (proctype_image_infos.version >= 8) { | 143 if (proctype_image_infos.version >= 8) { |
| 143 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->uuidArrayCount), | 144 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->uuidArrayCount), |
| 144 proctype_image_infos.uuidArrayCount); | 145 proctype_image_infos.uuidArrayCount); |
| 145 } | 146 } |
| 146 if (proctype_image_infos.version >= 9) { | 147 if (proctype_image_infos.version >= 9) { |
| 147 EXPECT_EQ( | 148 EXPECT_EQ( |
| 148 reinterpret_cast<uint64_t>(self_image_infos->dyldAllImageInfosAddress), | 149 reinterpret_cast<uint64_t>(self_image_infos->dyldAllImageInfosAddress), |
| 149 proctype_image_infos.dyldAllImageInfosAddress); | 150 proctype_image_infos.dyldAllImageInfosAddress); |
| 150 } | 151 } |
| 151 if (proctype_image_infos.version >= 10) { | 152 if (proctype_image_infos.version >= 10) { |
| 152 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->initialImageCount), | 153 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->initialImageCount), |
| 153 proctype_image_infos.initialImageCount); | 154 proctype_image_infos.initialImageCount); |
| 154 } | 155 } |
| 155 if (proctype_image_infos.version >= 11) { | 156 if (proctype_image_infos.version >= 11) { |
| 156 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->errorKind), | 157 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->errorKind), |
| 157 proctype_image_infos.errorKind); | 158 proctype_image_infos.errorKind); |
| 158 EXPECT_EQ( | 159 EXPECT_EQ( |
| 159 reinterpret_cast<uint64_t>(self_image_infos->errorClientOfDylibPath), | 160 reinterpret_cast<uint64_t>(self_image_infos->errorClientOfDylibPath), |
| 160 proctype_image_infos.errorClientOfDylibPath); | 161 proctype_image_infos.errorClientOfDylibPath); |
| 161 EXPECT_EQ( | 162 EXPECT_EQ( |
| 162 reinterpret_cast<uint64_t>(self_image_infos->errorTargetDylibPath), | 163 reinterpret_cast<uint64_t>(self_image_infos->errorTargetDylibPath), |
| 163 proctype_image_infos.errorTargetDylibPath); | 164 proctype_image_infos.errorTargetDylibPath); |
| 164 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorSymbol), | 165 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_infos->errorSymbol), |
| 165 proctype_image_infos.errorSymbol); | 166 proctype_image_infos.errorSymbol); |
| 166 | 167 |
| 167 TEST_STRING(process_reader, | 168 TEST_STRING(process_reader, |
| 168 self_image_infos, | 169 self_image_infos, |
| 169 proctype_image_infos, | 170 proctype_image_infos, |
| 170 errorClientOfDylibPath); | 171 errorClientOfDylibPath); |
| 171 TEST_STRING(process_reader, | 172 TEST_STRING(process_reader, |
| 172 self_image_infos, | 173 self_image_infos, |
| 173 proctype_image_infos, | 174 proctype_image_infos, |
| 174 errorTargetDylibPath); | 175 errorTargetDylibPath); |
| 175 TEST_STRING( | 176 TEST_STRING( |
| 176 process_reader, self_image_infos, proctype_image_infos, errorSymbol); | 177 process_reader, self_image_infos, proctype_image_infos, errorSymbol); |
| 177 } | 178 } |
| 178 if (proctype_image_infos.version >= 12) { | 179 if (proctype_image_infos.version >= 12) { |
| 179 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->sharedCacheSlide), | 180 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->sharedCacheSlide), |
| 180 proctype_image_infos.sharedCacheSlide); | 181 proctype_image_infos.sharedCacheSlide); |
| 181 } | 182 } |
| 182 #endif | 183 #endif |
| 183 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 | 184 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 |
| 184 if (proctype_image_infos.version >= 13) { | 185 if (proctype_image_infos.version >= 13) { |
| 185 EXPECT_EQ(0, | 186 EXPECT_EQ(0, |
| 186 memcmp(self_image_infos->sharedCacheUUID, | 187 memcmp(self_image_infos->sharedCacheUUID, |
| 187 proctype_image_infos.sharedCacheUUID, | 188 proctype_image_infos.sharedCacheUUID, |
| 188 sizeof(self_image_infos->sharedCacheUUID))); | 189 sizeof(self_image_infos->sharedCacheUUID))); |
| 189 } | 190 } |
| 190 if (proctype_image_infos.version >= 14) { | 191 if (proctype_image_infos.version >= 14) { |
| 191 for (size_t index = 0; index < arraysize(self_image_infos->reserved); | 192 for (size_t index = 0; index < arraysize(self_image_infos->reserved); |
| 192 ++index) { | 193 ++index) { |
| 193 EXPECT_EQ(static_cast<uint64_t>(self_image_infos->reserved[index]), | 194 EXPECT_EQ(implicit_cast<uint64_t>(self_image_infos->reserved[index]), |
| 194 proctype_image_infos.reserved[index]) | 195 proctype_image_infos.reserved[index]) |
| 195 << "index " << index; | 196 << "index " << index; |
| 196 } | 197 } |
| 197 } | 198 } |
| 198 #endif | 199 #endif |
| 199 | 200 |
| 200 if (proctype_image_infos.version >= 1) { | 201 if (proctype_image_infos.version >= 1) { |
| 201 std::vector<process_types::dyld_image_info> proctype_image_info_vector( | 202 std::vector<process_types::dyld_image_info> proctype_image_info_vector( |
| 202 proctype_image_infos.infoArrayCount); | 203 proctype_image_infos.infoArrayCount); |
| 203 ASSERT_TRUE(process_types::dyld_image_info::ReadArrayInto( | 204 ASSERT_TRUE(process_types::dyld_image_info::ReadArrayInto( |
| 204 &process_reader, | 205 &process_reader, |
| 205 proctype_image_infos.infoArray, | 206 proctype_image_infos.infoArray, |
| 206 proctype_image_info_vector.size(), | 207 proctype_image_info_vector.size(), |
| 207 &proctype_image_info_vector[0])); | 208 &proctype_image_info_vector[0])); |
| 208 | 209 |
| 209 for (size_t index = 0; index < proctype_image_infos.infoArrayCount; | 210 for (size_t index = 0; index < proctype_image_infos.infoArrayCount; |
| 210 ++index) { | 211 ++index) { |
| 211 const dyld_image_info* self_image_info = | 212 const dyld_image_info* self_image_info = |
| 212 &self_image_infos->infoArray[index]; | 213 &self_image_infos->infoArray[index]; |
| 213 const process_types::dyld_image_info& proctype_image_info = | 214 const process_types::dyld_image_info& proctype_image_info = |
| 214 proctype_image_info_vector[index]; | 215 proctype_image_info_vector[index]; |
| 215 | 216 |
| 216 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageLoadAddress), | 217 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageLoadAddress), |
| 217 proctype_image_info.imageLoadAddress) | 218 proctype_image_info.imageLoadAddress) |
| 218 << "index " << index; | 219 << "index " << index; |
| 219 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageFilePath), | 220 EXPECT_EQ(reinterpret_cast<uint64_t>(self_image_info->imageFilePath), |
| 220 proctype_image_info.imageFilePath) | 221 proctype_image_info.imageFilePath) |
| 221 << "index " << index; | 222 << "index " << index; |
| 222 EXPECT_EQ(static_cast<uint64_t>(self_image_info->imageFileModDate), | 223 EXPECT_EQ(implicit_cast<uint64_t>(self_image_info->imageFileModDate), |
| 223 proctype_image_info.imageFileModDate) | 224 proctype_image_info.imageFileModDate) |
| 224 << "index " << index; | 225 << "index " << index; |
| 225 | 226 |
| 226 TEST_STRING( | 227 TEST_STRING( |
| 227 process_reader, self_image_info, proctype_image_info, imageFilePath); | 228 process_reader, self_image_info, proctype_image_info, imageFilePath); |
| 228 } | 229 } |
| 229 } | 230 } |
| 230 | 231 |
| 231 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 | 232 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 |
| 232 if (proctype_image_infos.version >= 8) { | 233 if (proctype_image_infos.version >= 8) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 254 sizeof(self_uuid_info->imageUUID))) | 255 sizeof(self_uuid_info->imageUUID))) |
| 255 << "index " << index; | 256 << "index " << index; |
| 256 } | 257 } |
| 257 } | 258 } |
| 258 #endif | 259 #endif |
| 259 } | 260 } |
| 260 | 261 |
| 261 } // namespace | 262 } // namespace |
| 262 } // namespace test | 263 } // namespace test |
| 263 } // namespace crashpad | 264 } // namespace crashpad |
| OLD | NEW |