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

Side by Side Diff: src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc

Issue 1688743002: Switch the Linux minidump writer to use MDCVInfoELF for CV data. (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Created 4 years, 10 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
OLDNEW
1 // Copyright (c) 2009, Google Inc. 1 // Copyright (c) 2009, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 if (!strcmp(mappings[i]->name, kLinuxGateLibraryName)) { 303 if (!strcmp(mappings[i]->name, kLinuxGateLibraryName)) {
304 found_linux_gate = true; 304 found_linux_gate = true;
305 index = i; 305 index = i;
306 break; 306 break;
307 } 307 }
308 } 308 }
309 ASSERT_TRUE(found_linux_gate); 309 ASSERT_TRUE(found_linux_gate);
310 310
311 // Need to suspend the child so ptrace actually works. 311 // Need to suspend the child so ptrace actually works.
312 ASSERT_TRUE(dumper.ThreadsSuspend()); 312 ASSERT_TRUE(dumper.ThreadsSuspend());
313 uint8_t identifier[sizeof(MDGUID)]; 313 uint8_t identifier[kMaxBuildID];
314 size_t identifier_length;
314 ASSERT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[index], 315 ASSERT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[index],
315 true, 316 true,
316 index, 317 index,
317 identifier)); 318 identifier,
318 uint8_t empty_identifier[sizeof(MDGUID)]; 319 &identifier_length));
320 uint8_t empty_identifier[kMaxBuildID];
319 memset(empty_identifier, 0, sizeof(empty_identifier)); 321 memset(empty_identifier, 0, sizeof(empty_identifier));
320 EXPECT_NE(0, memcmp(empty_identifier, identifier, sizeof(identifier))); 322 EXPECT_NE(0, memcmp(empty_identifier, identifier, sizeof(identifier)));
321 EXPECT_TRUE(dumper.ThreadsResume()); 323 EXPECT_TRUE(dumper.ThreadsResume());
322 } 324 }
323 #endif 325 #endif
324 326
325 TEST_F(LinuxPtraceDumperChildTest, FileIDsMatch) { 327 TEST_F(LinuxPtraceDumperChildTest, FileIDsMatch) {
326 // Calculate the File ID of our binary using both 328 // Calculate the File ID of our binary using both
327 // FileID::ElfFileIdentifier and LinuxDumper::ElfFileIdentifierForMapping 329 // FileID::ElfFileIdentifier and LinuxDumper::ElfFileIdentifierForMapping
328 // and ensure that we get the same result from both. 330 // and ensure that we get the same result from both.
329 char exe_name[PATH_MAX]; 331 char exe_name[PATH_MAX];
330 ASSERT_TRUE(SafeReadLink("/proc/self/exe", exe_name)); 332 ASSERT_TRUE(SafeReadLink("/proc/self/exe", exe_name));
331 333
332 LinuxPtraceDumper dumper(getppid()); 334 LinuxPtraceDumper dumper(getppid());
333 ASSERT_TRUE(dumper.Init()); 335 ASSERT_TRUE(dumper.Init());
334 const wasteful_vector<MappingInfo*> mappings = dumper.mappings(); 336 const wasteful_vector<MappingInfo*> mappings = dumper.mappings();
335 bool found_exe = false; 337 bool found_exe = false;
336 unsigned i; 338 unsigned i;
337 for (i = 0; i < mappings.size(); ++i) { 339 for (i = 0; i < mappings.size(); ++i) {
338 const MappingInfo* mapping = mappings[i]; 340 const MappingInfo* mapping = mappings[i];
339 if (!strcmp(mapping->name, exe_name)) { 341 if (!strcmp(mapping->name, exe_name)) {
340 found_exe = true; 342 found_exe = true;
341 break; 343 break;
342 } 344 }
343 } 345 }
344 ASSERT_TRUE(found_exe); 346 ASSERT_TRUE(found_exe);
345 347
346 uint8_t identifier1[sizeof(MDGUID)]; 348 uint8_t identifier1[kMaxBuildID];
347 uint8_t identifier2[sizeof(MDGUID)]; 349 size_t identifier1_length;
350 uint8_t identifier2[kMaxBuildID];
351 size_t identifier2_length;
348 EXPECT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[i], true, i, 352 EXPECT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[i], true, i,
349 identifier1)); 353 identifier1,
354 &identifier1_length));
350 FileID fileid(exe_name); 355 FileID fileid(exe_name);
351 EXPECT_TRUE(fileid.ElfFileIdentifier(identifier2)); 356 EXPECT_TRUE(fileid.ElfFileIdentifier(identifier2, &identifier2_length));
352 char identifier_string1[37]; 357 char identifier_string1[37];
353 char identifier_string2[37]; 358 char identifier_string2[37];
354 FileID::ConvertIdentifierToString(identifier1, identifier_string1, 359 FileID::ConvertIdentifierToString(identifier1, identifier_string1,
355 37); 360 37);
356 FileID::ConvertIdentifierToString(identifier2, identifier_string2, 361 FileID::ConvertIdentifierToString(identifier2, identifier_string2,
357 37); 362 37);
358 EXPECT_STREQ(identifier_string1, identifier_string2); 363 EXPECT_STREQ(identifier_string1, identifier_string2);
359 } 364 }
360 365
361 /* Get back to normal behavior of TEST*() macros wrt TestBody. */ 366 /* Get back to normal behavior of TEST*() macros wrt TestBody. */
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 } 459 }
455 EXPECT_TRUE(dumper.ThreadsResume()); 460 EXPECT_TRUE(dumper.ThreadsResume());
456 kill(child_pid, SIGKILL); 461 kill(child_pid, SIGKILL);
457 462
458 // Reap child 463 // Reap child
459 int status; 464 int status;
460 ASSERT_NE(-1, HANDLE_EINTR(waitpid(child_pid, &status, 0))); 465 ASSERT_NE(-1, HANDLE_EINTR(waitpid(child_pid, &status, 0)));
461 ASSERT_TRUE(WIFSIGNALED(status)); 466 ASSERT_TRUE(WIFSIGNALED(status));
462 ASSERT_EQ(SIGKILL, WTERMSIG(status)); 467 ASSERT_EQ(SIGKILL, WTERMSIG(status));
463 } 468 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698