Commit 236556ce authored by Joshua Peraza's avatar Joshua Peraza Committed by Commit Bot

Update Crashpad to 71e8ec79870b5d7fe54327180f00c9dd26688280

865ba27672fe Remove unnecessary macro from CaptureContext code
e6b525a4be28 Update config adjustments for moved build config in
             mini_chromium
f3aad4921621 Roll mini_chromium to 71a7fdb
74b38694fa86 Roll mini_chromium to 2b6cfa3
0b240a5347e7 Update mini_chromium to 1dbeb82e0452
0e03f8e7fa3f Remove now-no-op set_sources_assignment_filter calls
79d43b8ac37b Add noexcept to no_cfi_icall templates
c4c71b80c6a2 linux: Fix tests with UBSan
71e8ec79870b Initialize logging

This change also updates base/logging.cc to conditionally access
CommandLine because crashpad doesn't initialize one.

Bug: chromium:711159
Change-Id: I0056d71ae2281329d21fb6f58eba3ebb34beaf1b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2490880Reviewed-by: default avatarMark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820052}
parent 73fc96e4
...@@ -369,21 +369,23 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) { ...@@ -369,21 +369,23 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
g_log_format = settings.log_format; g_log_format = settings.log_format;
#endif #endif
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (base::CommandLine::InitializedForCurrentProcess()) {
// Don't bother initializing |g_vlog_info| unless we use one of the base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
// vlog switches. // Don't bother initializing |g_vlog_info| unless we use one of the
if (command_line->HasSwitch(switches::kV) || // vlog switches.
command_line->HasSwitch(switches::kVModule)) { if (command_line->HasSwitch(switches::kV) ||
// NOTE: If |g_vlog_info| has already been initialized, it might be in use command_line->HasSwitch(switches::kVModule)) {
// by another thread. Don't delete the old VLogInfo, just create a second // NOTE: If |g_vlog_info| has already been initialized, it might be in use
// one. We keep track of both to avoid memory leak warnings. // by another thread. Don't delete the old VLogInfo, just create a second
CHECK(!g_vlog_info_prev); // one. We keep track of both to avoid memory leak warnings.
g_vlog_info_prev = g_vlog_info; CHECK(!g_vlog_info_prev);
g_vlog_info_prev = g_vlog_info;
g_vlog_info =
new VlogInfo(command_line->GetSwitchValueASCII(switches::kV), g_vlog_info =
command_line->GetSwitchValueASCII(switches::kVModule), new VlogInfo(command_line->GetSwitchValueASCII(switches::kV),
&g_min_log_level); command_line->GetSwitchValueASCII(switches::kVModule),
&g_min_log_level);
}
} }
g_logging_destination = settings.logging_dest; g_logging_destination = settings.logging_dest;
...@@ -394,7 +396,10 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) { ...@@ -394,7 +396,10 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
config.min_severity = FX_LOG_INFO; config.min_severity = FX_LOG_INFO;
config.console_fd = -1; config.console_fd = -1;
config.log_service_channel = ZX_HANDLE_INVALID; config.log_service_channel = ZX_HANDLE_INVALID;
std::string log_tag = command_line->GetProgram().BaseName().AsUTF8Unsafe(); std::string log_tag = base::CommandLine::ForCurrentProcess()
->GetProgram()
.BaseName()
.AsUTF8Unsafe();
const char* log_tag_data = log_tag.data(); const char* log_tag_data = log_tag.data();
config.tags = &log_tag_data; config.tags = &log_tag_data;
config.num_tags = 1; config.num_tags = 1;
......
...@@ -2,7 +2,7 @@ Name: Crashpad ...@@ -2,7 +2,7 @@ Name: Crashpad
Short Name: crashpad Short Name: crashpad
URL: https://crashpad.chromium.org/ URL: https://crashpad.chromium.org/
Version: unknown Version: unknown
Revision: 36d4bb83b3d79dc85c35c258a9364f7d6ec0f6b3 Revision: 71e8ec79870b5d7fe54327180f00c9dd26688280
License: Apache 2.0 License: Apache 2.0
License File: crashpad/LICENSE License File: crashpad/LICENSE
Security Critical: yes Security Critical: yes
......
...@@ -42,7 +42,7 @@ deps = { ...@@ -42,7 +42,7 @@ deps = {
'7bde79cc274d06451bf65ae82c012a5d3e476b5a', '7bde79cc274d06451bf65ae82c012a5d3e476b5a',
'crashpad/third_party/mini_chromium/mini_chromium': 'crashpad/third_party/mini_chromium/mini_chromium':
Var('chromium_git') + '/chromium/mini_chromium@' + Var('chromium_git') + '/chromium/mini_chromium@' +
'76a9bb7475f6217eaf108789246379d3972b4e6a', '5fc64bfbf1c000161445c586de45e40464ff2314',
'crashpad/third_party/libfuzzer/src': 'crashpad/third_party/libfuzzer/src':
Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' + Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' +
'fda403cf93ecb8792cb1d061564d89a6553ca020', 'fda403cf93ecb8792cb1d061564d89a6553ca020',
......
...@@ -52,7 +52,7 @@ if (crashpad_is_ios) { ...@@ -52,7 +52,7 @@ if (crashpad_is_ios) {
public_configs = [ "//build/config/compiler:enable_arc" ] public_configs = [ "//build/config/compiler:enable_arc" ]
} else if (crashpad_is_standalone) { } else if (crashpad_is_standalone) {
public_configs = public_configs =
[ "//third_party/mini_chromium/mini_chromium/build:ios_enable_arc" ] [ "//third_party/mini_chromium/mini_chromium/build/config:ios_enable_arc" ]
} }
} }
......
...@@ -42,9 +42,10 @@ if (crashpad_is_standalone) { ...@@ -42,9 +42,10 @@ if (crashpad_is_standalone) {
} }
if (current_os == "win") { if (current_os == "win") {
set_default_toolchain("$_mini_chromium_dir/build:msvc_toolchain_$current_cpu") set_default_toolchain(
"$_mini_chromium_dir/build/config:msvc_toolchain_$current_cpu")
} else { } else {
set_default_toolchain("$_mini_chromium_dir/build:gcc_like_toolchain") set_default_toolchain("$_mini_chromium_dir/build/config:gcc_like_toolchain")
} }
declare_args() { declare_args() {
...@@ -59,18 +60,18 @@ declare_args() { ...@@ -59,18 +60,18 @@ declare_args() {
} }
_default_configs = [ _default_configs = [
"$_mini_chromium_dir/build:default", "$_mini_chromium_dir/build/config:default",
"$_mini_chromium_dir/build:Wexit_time_destructors", "$_mini_chromium_dir/build/config:Wexit_time_destructors",
"$_mini_chromium_dir/build:Wimplicit_fallthrough", "$_mini_chromium_dir/build/config:Wimplicit_fallthrough",
] ]
if (crashpad_use_libfuzzer) { if (crashpad_use_libfuzzer) {
_default_configs += [ "//build:crashpad_fuzzer_flags" ] _default_configs += [ "//build/config:crashpad_fuzzer_flags" ]
} }
_default_executable_configs = _default_configs + [ _default_executable_configs = _default_configs + [
"$_mini_chromium_dir/build:executable", "$_mini_chromium_dir/build/config:executable",
"$_mini_chromium_dir/build:win_console", "$_mini_chromium_dir/build/config:win_console",
] ]
set_defaults("source_set") { set_defaults("source_set") {
......
...@@ -427,7 +427,8 @@ TEST_P(StartHandlerForSelfTest, StartHandlerInChild) { ...@@ -427,7 +427,8 @@ TEST_P(StartHandlerForSelfTest, StartHandlerInChild) {
// TODO(jperaza): test first chance handlers with real crashes. // TODO(jperaza): test first chance handlers with real crashes.
return; return;
} }
#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) #if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
defined(UNDEFINED_SANITIZER)
if (Options().crash_type == CrashType::kInfiniteRecursion) { if (Options().crash_type == CrashType::kInfiniteRecursion) {
GTEST_SKIP(); GTEST_SKIP();
} }
......
...@@ -145,10 +145,12 @@ if (!crashpad_is_ios) { ...@@ -145,10 +145,12 @@ if (!crashpad_is_ios) {
remove_configs = [ "//build/config/win:console" ] remove_configs = [ "//build/config/win:console" ]
configs = [ "//build/config/win:windowed" ] configs = [ "//build/config/win:windowed" ]
} else { } else {
remove_configs = remove_configs = [
[ "//third_party/mini_chromium/mini_chromium/build:win_console" ] "//third_party/mini_chromium/mini_chromium/build/config:win_console",
configs = ]
[ "//third_party/mini_chromium/mini_chromium/build:win_windowed" ] configs = [
"//third_party/mini_chromium/mini_chromium/build/config:win_windowed",
]
} }
} }
......
...@@ -504,16 +504,26 @@ class ScopedStoppable { ...@@ -504,16 +504,26 @@ class ScopedStoppable {
DISALLOW_COPY_AND_ASSIGN(ScopedStoppable); DISALLOW_COPY_AND_ASSIGN(ScopedStoppable);
}; };
void InitCrashpadLogging() {
logging::LoggingSettings settings;
#if defined(OS_CHROMEOS)
settings.logging_dest = logging::LOG_TO_FILE;
settings.log_file_path = "/var/log/chrome/chrome";
#elif defined(OS_WIN)
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
#else
settings.logging_dest =
logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
#endif
logging::InitLogging(settings);
}
} // namespace } // namespace
int HandlerMain(int argc, int HandlerMain(int argc,
char* argv[], char* argv[],
const UserStreamDataSources* user_stream_sources) { const UserStreamDataSources* user_stream_sources) {
#if defined(OS_CHROMEOS) InitCrashpadLogging();
if (freopen("/var/log/chrome/chrome", "a", stderr) == nullptr) {
PLOG(ERROR) << "Failed to redirect stderr to /var/log/chrome/chrome";
}
#endif
InstallCrashHandler(); InstallCrashHandler();
CallMetricsRecordNormalExit metrics_record_normal_exit; CallMetricsRecordNormalExit metrics_record_normal_exit;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#include "base/logging.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "test/main_arguments.h" #include "test/main_arguments.h"
...@@ -99,6 +100,12 @@ int main(int argc, char* argv[]) { ...@@ -99,6 +100,12 @@ int main(int argc, char* argv[]) {
#endif // CRASHPAD_IS_IN_CHROMIUM #endif // CRASHPAD_IS_IN_CHROMIUM
// base::TestSuite initializes logging when using Chromium's test launcher.
logging::LoggingSettings settings;
settings.logging_dest =
logging::LOG_TO_STDERR | logging::LOG_TO_SYSTEM_DEBUG_LOG;
logging::InitLogging(settings);
#if defined(CRASHPAD_TEST_LAUNCHER_GOOGLEMOCK) #if defined(CRASHPAD_TEST_LAUNCHER_GOOGLEMOCK)
testing::InitGoogleMock(&argc, argv); testing::InitGoogleMock(&argc, argv);
#elif defined(CRASHPAD_TEST_LAUNCHER_GOOGLETEST) #elif defined(CRASHPAD_TEST_LAUNCHER_GOOGLETEST)
......
...@@ -91,7 +91,7 @@ if (crashpad_is_in_chromium) { ...@@ -91,7 +91,7 @@ if (crashpad_is_in_chromium) {
] ]
sources -= [ "$googletest_dir/googletest/src/gtest-all.cc" ] sources -= [ "$googletest_dir/googletest/src/gtest-all.cc" ]
public_configs = [ ":googletest_public_config" ] public_configs = [ ":googletest_public_config" ]
configs -= [ "$mini_chromium_dir/build:Wexit_time_destructors" ] configs -= [ "$mini_chromium_dir/build/config:Wexit_time_destructors" ]
configs += [ ":googletest_private_config" ] configs += [ ":googletest_private_config" ]
if (crashpad_is_fuchsia) { if (crashpad_is_fuchsia) {
deps = [ "../fuchsia" ] deps = [ "../fuchsia" ]
...@@ -127,7 +127,7 @@ if (crashpad_is_in_chromium) { ...@@ -127,7 +127,7 @@ if (crashpad_is_in_chromium) {
"$googletest_dir/googletest/test/production.cc", "$googletest_dir/googletest/test/production.cc",
"$googletest_dir/googletest/test/production.h", "$googletest_dir/googletest/test/production.h",
] ]
configs -= [ "$mini_chromium_dir/build:Wexit_time_destructors" ] configs -= [ "$mini_chromium_dir/build/config:Wexit_time_destructors" ]
configs += [ ":googletest_private_config" ] configs += [ ":googletest_private_config" ]
deps = [ deps = [
":googletest", ":googletest",
...@@ -166,7 +166,7 @@ if (crashpad_is_in_chromium) { ...@@ -166,7 +166,7 @@ if (crashpad_is_in_chromium) {
"$googletest_dir/googletest/test/googletest-param-test-test.h", "$googletest_dir/googletest/test/googletest-param-test-test.h",
"$googletest_dir/googletest/test/googletest-param-test2-test.cc", "$googletest_dir/googletest/test/googletest-param-test2-test.cc",
] ]
configs -= [ "$mini_chromium_dir/build:Wexit_time_destructors" ] configs -= [ "$mini_chromium_dir/build/config:Wexit_time_destructors" ]
configs += [ ":googletest_private_config" ] configs += [ ":googletest_private_config" ]
deps = [ ":googletest" ] deps = [ ":googletest" ]
...@@ -282,7 +282,7 @@ if (crashpad_is_in_chromium) { ...@@ -282,7 +282,7 @@ if (crashpad_is_in_chromium) {
] ]
sources -= [ "$googletest_dir/googlemock/src/gmock-all.cc" ] sources -= [ "$googletest_dir/googlemock/src/gmock-all.cc" ]
public_configs = [ ":googlemock_public_config" ] public_configs = [ ":googlemock_public_config" ]
configs -= [ "$mini_chromium_dir/build:Wexit_time_destructors" ] configs -= [ "$mini_chromium_dir/build/config:Wexit_time_destructors" ]
configs += [ ":googlemock_private_config" ] configs += [ ":googlemock_private_config" ]
deps = [ ":googletest" ] deps = [ ":googletest" ]
} }
...@@ -350,7 +350,7 @@ if (crashpad_is_in_chromium) { ...@@ -350,7 +350,7 @@ if (crashpad_is_in_chromium) {
test("gmock_stress_test") { test("gmock_stress_test") {
sources = [ "$googletest_dir/googlemock/test/gmock_stress_test.cc" ] sources = [ "$googletest_dir/googlemock/test/gmock_stress_test.cc" ]
configs -= [ "$mini_chromium_dir/build:Wexit_time_destructors" ] configs -= [ "$mini_chromium_dir/build/config:Wexit_time_destructors" ]
configs += [ ":googlemock_private_config" ] configs += [ ":googlemock_private_config" ]
deps = [ deps = [
":googlemock", ":googlemock",
......
...@@ -113,12 +113,9 @@ if (zlib_source == "external") { ...@@ -113,12 +113,9 @@ if (zlib_source == "external") {
} }
if (crashpad_is_standalone) { if (crashpad_is_standalone) {
configs -= [ configs -= [ "//third_party/mini_chromium/mini_chromium/build/config:Wimplicit_fallthrough" ]
"//third_party/mini_chromium/mini_chromium/build:Wimplicit_fallthrough",
]
} else if (crashpad_is_external) { } else if (crashpad_is_external) {
configs -= configs -= [ "//../../mini_chromium/mini_chromium/build/config:Wimplicit_fallthrough" ]
[ "//../../mini_chromium/mini_chromium/build:Wimplicit_fallthrough" ]
} }
if (zlib_source == "embedded") { if (zlib_source == "embedded") {
......
...@@ -637,10 +637,9 @@ if (!crashpad_is_android && !crashpad_is_ios) { ...@@ -637,10 +637,9 @@ if (!crashpad_is_android && !crashpad_is_ios) {
] ]
if (crashpad_is_standalone) { if (crashpad_is_standalone) {
remove_configs = [ "//third_party/mini_chromium/mini_chromium/build:Wexit_time_destructors" ] remove_configs = [ "//third_party/mini_chromium/mini_chromium/build/config:Wexit_time_destructors" ]
} else if (crashpad_is_external) { } else if (crashpad_is_external) {
remove_configs = remove_configs = [ "//../../mini_chromium/mini_chromium/build/config:Wexit_time_destructors" ]
[ "//../../mini_chromium/mini_chromium/build:Wexit_time_destructors" ]
} }
if (crashpad_is_win) { if (crashpad_is_win) {
......
...@@ -25,10 +25,6 @@ ifdef _M_IX86 ...@@ -25,10 +25,6 @@ ifdef _M_IX86
.model flat .model flat
endif endif
offsetof macro structure, field
exitm <structure.&field>
endm
; The CONTEXT structure definitions that follow are based on those in <winnt.h>. ; The CONTEXT structure definitions that follow are based on those in <winnt.h>.
; Field names are prefixed (as in c_Rax) to avoid colliding with the predefined ; Field names are prefixed (as in c_Rax) to avoid colliding with the predefined
; register names (such as Rax). ; register names (such as Rax).
...@@ -481,8 +477,7 @@ CAPTURECONTEXT_SYMBOL proc frame ...@@ -481,8 +477,7 @@ CAPTURECONTEXT_SYMBOL proc frame
cld cld
lea rdi, [rcx.CONTEXT].c_FltSave lea rdi, [rcx.CONTEXT].c_FltSave
xor rax, rax xor rax, rax
mov rcx, (sizeof(CONTEXT) - offsetof(CONTEXT, c_FltSave)) / \ mov rcx, (sizeof(CONTEXT) - CONTEXT.c_FltSave) / sizeof(qword) ; 122
sizeof(qword) ; 122
rep stosq rep stosq
mov rcx, rbx mov rcx, rbx
......
...@@ -50,7 +50,7 @@ template <typename Functor> ...@@ -50,7 +50,7 @@ template <typename Functor>
struct FunctorTraits; struct FunctorTraits;
template <typename R, typename... Args> template <typename R, typename... Args>
struct FunctorTraits<R (*)(Args...)> { struct FunctorTraits<R (*)(Args...) noexcept> {
template <typename Function, typename... RunArgs> template <typename Function, typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) { DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) {
return std::forward<Function>(function)(std::forward<RunArgs>(args)...); return std::forward<Function>(function)(std::forward<RunArgs>(args)...);
...@@ -58,7 +58,7 @@ struct FunctorTraits<R (*)(Args...)> { ...@@ -58,7 +58,7 @@ struct FunctorTraits<R (*)(Args...)> {
}; };
template <typename R, typename... Args> template <typename R, typename... Args>
struct FunctorTraits<R (*)(Args..., ...)> { struct FunctorTraits<R (*)(Args..., ...) noexcept> {
template <typename Function, typename... RunArgs> template <typename Function, typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) { DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) {
return std::forward<Function>(function)(std::forward<RunArgs>(args)...); return std::forward<Function>(function)(std::forward<RunArgs>(args)...);
...@@ -67,7 +67,7 @@ struct FunctorTraits<R (*)(Args..., ...)> { ...@@ -67,7 +67,7 @@ struct FunctorTraits<R (*)(Args..., ...)> {
#if defined(OS_WIN) && defined(ARCH_CPU_X86) #if defined(OS_WIN) && defined(ARCH_CPU_X86)
template <typename R, typename... Args> template <typename R, typename... Args>
struct FunctorTraits<R(__stdcall*)(Args...)> { struct FunctorTraits<R(__stdcall*)(Args...) noexcept> {
template <typename... RunArgs> template <typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(R(__stdcall* function)(Args...), DISABLE_CFI_ICALL static R Invoke(R(__stdcall* function)(Args...),
RunArgs&&... args) { RunArgs&&... args) {
......
...@@ -34,13 +34,16 @@ namespace test { ...@@ -34,13 +34,16 @@ namespace test {
namespace { namespace {
TEST(NoCfiIcall, NullptrIsFalse) { TEST(NoCfiIcall, NullptrIsFalse) {
NoCfiIcall<void (*)(void)> call(nullptr); NoCfiIcall<void (*)(void) noexcept> call(nullptr);
ASSERT_FALSE(call); ASSERT_FALSE(call);
} }
int TestFunc() noexcept {
return 42;
}
TEST(NoCfiIcall, SameDSOICall) { TEST(NoCfiIcall, SameDSOICall) {
static int (*func)() = []() { return 42; }; NoCfiIcall<decltype(TestFunc)*> call(&TestFunc);
NoCfiIcall<decltype(func)> call(func);
ASSERT_TRUE(call); ASSERT_TRUE(call);
ASSERT_EQ(call(), 42); ASSERT_EQ(call(), 42);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment