Skip to content

Commit

Permalink
Update Crashpad to 71e8ec79870b5d7fe54327180f00c9dd26688280
Browse files Browse the repository at this point in the history
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/+/2490880
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820052}
  • Loading branch information
Joshua Peraza authored and Commit Bot committed Oct 22, 2020
1 parent 73fc96e commit 236556c
Show file tree
Hide file tree
Showing 15 changed files with 82 additions and 62 deletions.
37 changes: 21 additions & 16 deletions base/logging.cc
Original file line number Diff line number Diff line change
Expand Up @@ -369,21 +369,23 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
g_log_format = settings.log_format;
#endif

base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
// Don't bother initializing |g_vlog_info| unless we use one of the
// vlog switches.
if (command_line->HasSwitch(switches::kV) ||
command_line->HasSwitch(switches::kVModule)) {
// NOTE: If |g_vlog_info| has already been initialized, it might be in use
// by another thread. Don't delete the old VLogInfo, just create a second
// one. We keep track of both to avoid memory leak warnings.
CHECK(!g_vlog_info_prev);
g_vlog_info_prev = g_vlog_info;

g_vlog_info =
new VlogInfo(command_line->GetSwitchValueASCII(switches::kV),
command_line->GetSwitchValueASCII(switches::kVModule),
&g_min_log_level);
if (base::CommandLine::InitializedForCurrentProcess()) {
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
// Don't bother initializing |g_vlog_info| unless we use one of the
// vlog switches.
if (command_line->HasSwitch(switches::kV) ||
command_line->HasSwitch(switches::kVModule)) {
// NOTE: If |g_vlog_info| has already been initialized, it might be in use
// by another thread. Don't delete the old VLogInfo, just create a second
// one. We keep track of both to avoid memory leak warnings.
CHECK(!g_vlog_info_prev);
g_vlog_info_prev = g_vlog_info;

g_vlog_info =
new VlogInfo(command_line->GetSwitchValueASCII(switches::kV),
command_line->GetSwitchValueASCII(switches::kVModule),
&g_min_log_level);
}
}

g_logging_destination = settings.logging_dest;
Expand All @@ -394,7 +396,10 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
config.min_severity = FX_LOG_INFO;
config.console_fd = -1;
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();
config.tags = &log_tag_data;
config.num_tags = 1;
Expand Down
2 changes: 1 addition & 1 deletion third_party/crashpad/README.chromium
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Name: Crashpad
Short Name: crashpad
URL: https://crashpad.chromium.org/
Version: unknown
Revision: 36d4bb83b3d79dc85c35c258a9364f7d6ec0f6b3
Revision: 71e8ec79870b5d7fe54327180f00c9dd26688280
License: Apache 2.0
License File: crashpad/LICENSE
Security Critical: yes
Expand Down
2 changes: 1 addition & 1 deletion third_party/crashpad/crashpad/DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ deps = {
'7bde79cc274d06451bf65ae82c012a5d3e476b5a',
'crashpad/third_party/mini_chromium/mini_chromium':
Var('chromium_git') + '/chromium/mini_chromium@' +
'76a9bb7475f6217eaf108789246379d3972b4e6a',
'5fc64bfbf1c000161445c586de45e40464ff2314',
'crashpad/third_party/libfuzzer/src':
Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' +
'fda403cf93ecb8792cb1d061564d89a6553ca020',
Expand Down
2 changes: 1 addition & 1 deletion third_party/crashpad/crashpad/build/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ if (crashpad_is_ios) {
public_configs = [ "//build/config/compiler:enable_arc" ]
} else if (crashpad_is_standalone) {
public_configs =
[ "//third_party/mini_chromium/mini_chromium/build:ios_enable_arc" ]
[ "//third_party/mini_chromium/mini_chromium/build/config:ios_enable_arc" ]
}
}

Expand Down
17 changes: 9 additions & 8 deletions third_party/crashpad/crashpad/build/BUILDCONFIG.gn
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ if (crashpad_is_standalone) {
}

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 {
set_default_toolchain("$_mini_chromium_dir/build:gcc_like_toolchain")
set_default_toolchain("$_mini_chromium_dir/build/config:gcc_like_toolchain")
}

declare_args() {
Expand All @@ -59,18 +60,18 @@ declare_args() {
}

_default_configs = [
"$_mini_chromium_dir/build:default",
"$_mini_chromium_dir/build:Wexit_time_destructors",
"$_mini_chromium_dir/build:Wimplicit_fallthrough",
"$_mini_chromium_dir/build/config:default",
"$_mini_chromium_dir/build/config:Wexit_time_destructors",
"$_mini_chromium_dir/build/config:Wimplicit_fallthrough",
]

if (crashpad_use_libfuzzer) {
_default_configs += [ "//build:crashpad_fuzzer_flags" ]
_default_configs += [ "//build/config:crashpad_fuzzer_flags" ]
}

_default_executable_configs = _default_configs + [
"$_mini_chromium_dir/build:executable",
"$_mini_chromium_dir/build:win_console",
"$_mini_chromium_dir/build/config:executable",
"$_mini_chromium_dir/build/config:win_console",
]

set_defaults("source_set") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,8 @@ TEST_P(StartHandlerForSelfTest, StartHandlerInChild) {
// TODO(jperaza): test first chance handlers with real crashes.
return;
}
#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER)
#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
defined(UNDEFINED_SANITIZER)
if (Options().crash_type == CrashType::kInfiniteRecursion) {
GTEST_SKIP();
}
Expand Down
10 changes: 6 additions & 4 deletions third_party/crashpad/crashpad/handler/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -145,10 +145,12 @@ if (!crashpad_is_ios) {
remove_configs = [ "//build/config/win:console" ]
configs = [ "//build/config/win:windowed" ]
} else {
remove_configs =
[ "//third_party/mini_chromium/mini_chromium/build:win_console" ]
configs =
[ "//third_party/mini_chromium/mini_chromium/build:win_windowed" ]
remove_configs = [
"//third_party/mini_chromium/mini_chromium/build/config:win_console",
]
configs = [
"//third_party/mini_chromium/mini_chromium/build/config:win_windowed",
]
}
}

Expand Down
20 changes: 15 additions & 5 deletions third_party/crashpad/crashpad/handler/handler_main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -504,16 +504,26 @@ class 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

int HandlerMain(int argc,
char* argv[],
const UserStreamDataSources* user_stream_sources) {
#if defined(OS_CHROMEOS)
if (freopen("/var/log/chrome/chrome", "a", stderr) == nullptr) {
PLOG(ERROR) << "Failed to redirect stderr to /var/log/chrome/chrome";
}
#endif
InitCrashpadLogging();

InstallCrashHandler();
CallMetricsRecordNormalExit metrics_record_normal_exit;
Expand Down
7 changes: 7 additions & 0 deletions third_party/crashpad/crashpad/test/gtest_main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "base/logging.h"
#include "build/build_config.h"
#include "gtest/gtest.h"
#include "test/main_arguments.h"
Expand Down Expand Up @@ -99,6 +100,12 @@ int main(int argc, char* argv[]) {

#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)
testing::InitGoogleMock(&argc, argv);
#elif defined(CRASHPAD_TEST_LAUNCHER_GOOGLETEST)
Expand Down
10 changes: 5 additions & 5 deletions third_party/crashpad/crashpad/third_party/googletest/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ if (crashpad_is_in_chromium) {
]
sources -= [ "$googletest_dir/googletest/src/gtest-all.cc" ]
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" ]
if (crashpad_is_fuchsia) {
deps = [ "../fuchsia" ]
Expand Down Expand Up @@ -127,7 +127,7 @@ if (crashpad_is_in_chromium) {
"$googletest_dir/googletest/test/production.cc",
"$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" ]
deps = [
":googletest",
Expand Down Expand Up @@ -166,7 +166,7 @@ if (crashpad_is_in_chromium) {
"$googletest_dir/googletest/test/googletest-param-test-test.h",
"$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" ]
deps = [ ":googletest" ]

Expand Down Expand Up @@ -282,7 +282,7 @@ if (crashpad_is_in_chromium) {
]
sources -= [ "$googletest_dir/googlemock/src/gmock-all.cc" ]
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" ]
deps = [ ":googletest" ]
}
Expand Down Expand Up @@ -350,7 +350,7 @@ if (crashpad_is_in_chromium) {

test("gmock_stress_test") {
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" ]
deps = [
":googlemock",
Expand Down
7 changes: 2 additions & 5 deletions third_party/crashpad/crashpad/third_party/zlib/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,9 @@ if (zlib_source == "external") {
}

if (crashpad_is_standalone) {
configs -= [
"//third_party/mini_chromium/mini_chromium/build:Wimplicit_fallthrough",
]
configs -= [ "//third_party/mini_chromium/mini_chromium/build/config:Wimplicit_fallthrough" ]
} else if (crashpad_is_external) {
configs -=
[ "//../../mini_chromium/mini_chromium/build:Wimplicit_fallthrough" ]
configs -= [ "//../../mini_chromium/mini_chromium/build/config:Wimplicit_fallthrough" ]
}

if (zlib_source == "embedded") {
Expand Down
5 changes: 2 additions & 3 deletions third_party/crashpad/crashpad/util/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -637,10 +637,9 @@ if (!crashpad_is_android && !crashpad_is_ios) {
]

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) {
remove_configs =
[ "//../../mini_chromium/mini_chromium/build:Wexit_time_destructors" ]
remove_configs = [ "//../../mini_chromium/mini_chromium/build/config:Wexit_time_destructors" ]
}

if (crashpad_is_win) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ ifdef _M_IX86
.model flat
endif

offsetof macro structure, field
exitm <structure.&field>
endm

; 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
; register names (such as Rax).
Expand Down Expand Up @@ -481,8 +477,7 @@ CAPTURECONTEXT_SYMBOL proc frame
cld
lea rdi, [rcx.CONTEXT].c_FltSave
xor rax, rax
mov rcx, (sizeof(CONTEXT) - offsetof(CONTEXT, c_FltSave)) / \
sizeof(qword) ; 122
mov rcx, (sizeof(CONTEXT) - CONTEXT.c_FltSave) / sizeof(qword) ; 122
rep stosq
mov rcx, rbx

Expand Down
6 changes: 3 additions & 3 deletions third_party/crashpad/crashpad/util/misc/no_cfi_icall.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ template <typename Functor>
struct FunctorTraits;

template <typename R, typename... Args>
struct FunctorTraits<R (*)(Args...)> {
struct FunctorTraits<R (*)(Args...) noexcept> {
template <typename Function, typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) {
return std::forward<Function>(function)(std::forward<RunArgs>(args)...);
}
};

template <typename R, typename... Args>
struct FunctorTraits<R (*)(Args..., ...)> {
struct FunctorTraits<R (*)(Args..., ...) noexcept> {
template <typename Function, typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(Function&& function, RunArgs&&... args) {
return std::forward<Function>(function)(std::forward<RunArgs>(args)...);
Expand All @@ -67,7 +67,7 @@ struct FunctorTraits<R (*)(Args..., ...)> {

#if defined(OS_WIN) && defined(ARCH_CPU_X86)
template <typename R, typename... Args>
struct FunctorTraits<R(__stdcall*)(Args...)> {
struct FunctorTraits<R(__stdcall*)(Args...) noexcept> {
template <typename... RunArgs>
DISABLE_CFI_ICALL static R Invoke(R(__stdcall* function)(Args...),
RunArgs&&... args) {
Expand Down
9 changes: 6 additions & 3 deletions third_party/crashpad/crashpad/util/misc/no_cfi_icall_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,16 @@ namespace test {
namespace {

TEST(NoCfiIcall, NullptrIsFalse) {
NoCfiIcall<void (*)(void)> call(nullptr);
NoCfiIcall<void (*)(void) noexcept> call(nullptr);
ASSERT_FALSE(call);
}

int TestFunc() noexcept {
return 42;
}

TEST(NoCfiIcall, SameDSOICall) {
static int (*func)() = []() { return 42; };
NoCfiIcall<decltype(func)> call(func);
NoCfiIcall<decltype(TestFunc)*> call(&TestFunc);
ASSERT_TRUE(call);
ASSERT_EQ(call(), 42);
}
Expand Down

0 comments on commit 236556c

Please sign in to comment.