xref: /aosp_15_r20/external/cronet/base/apple/mach_logging.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/apple/mach_logging.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <iomanip>
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/immediate_crash.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/strings/stringprintf.h"
12*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(USE_BLINK)
15*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_IOS)
16*6777b538SAndroid Build Coastguard Worker #include "base/ios/sim_header_shims.h"
17*6777b538SAndroid Build Coastguard Worker #else
18*6777b538SAndroid Build Coastguard Worker #include <servers/bootstrap.h>
19*6777b538SAndroid Build Coastguard Worker #endif  // BUILDFLAG(IS_IOS)
20*6777b538SAndroid Build Coastguard Worker #endif  // BUILDFLAG(USE_BLINK)
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker namespace {
23*6777b538SAndroid Build Coastguard Worker 
FormatMachErrorNumber(mach_error_t mach_err)24*6777b538SAndroid Build Coastguard Worker std::string FormatMachErrorNumber(mach_error_t mach_err) {
25*6777b538SAndroid Build Coastguard Worker   // For the os/kern subsystem, give the error number in decimal as in
26*6777b538SAndroid Build Coastguard Worker   // <mach/kern_return.h>. Otherwise, give it in hexadecimal to make it easier
27*6777b538SAndroid Build Coastguard Worker   // to visualize the various bits. See <mach/error.h>.
28*6777b538SAndroid Build Coastguard Worker   if (mach_err >= 0 && mach_err < KERN_RETURN_MAX) {
29*6777b538SAndroid Build Coastguard Worker     return base::StringPrintf(" (%d)", mach_err);
30*6777b538SAndroid Build Coastguard Worker   }
31*6777b538SAndroid Build Coastguard Worker   return base::StringPrintf(" (0x%08x)", mach_err);
32*6777b538SAndroid Build Coastguard Worker }
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker }  // namespace
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker namespace logging {
37*6777b538SAndroid Build Coastguard Worker 
MachLogMessage(const char * file_path,int line,LogSeverity severity,mach_error_t mach_err)38*6777b538SAndroid Build Coastguard Worker MachLogMessage::MachLogMessage(const char* file_path,
39*6777b538SAndroid Build Coastguard Worker                                int line,
40*6777b538SAndroid Build Coastguard Worker                                LogSeverity severity,
41*6777b538SAndroid Build Coastguard Worker                                mach_error_t mach_err)
42*6777b538SAndroid Build Coastguard Worker     : LogMessage(file_path, line, severity), mach_err_(mach_err) {}
43*6777b538SAndroid Build Coastguard Worker 
~MachLogMessage()44*6777b538SAndroid Build Coastguard Worker MachLogMessage::~MachLogMessage() {
45*6777b538SAndroid Build Coastguard Worker   AppendError();
46*6777b538SAndroid Build Coastguard Worker }
47*6777b538SAndroid Build Coastguard Worker 
AppendError()48*6777b538SAndroid Build Coastguard Worker void MachLogMessage::AppendError() {
49*6777b538SAndroid Build Coastguard Worker   stream() << ": " << mach_error_string(mach_err_)
50*6777b538SAndroid Build Coastguard Worker            << FormatMachErrorNumber(mach_err_);
51*6777b538SAndroid Build Coastguard Worker }
52*6777b538SAndroid Build Coastguard Worker 
~MachLogMessageFatal()53*6777b538SAndroid Build Coastguard Worker MachLogMessageFatal::~MachLogMessageFatal() {
54*6777b538SAndroid Build Coastguard Worker   AppendError();
55*6777b538SAndroid Build Coastguard Worker   Flush();
56*6777b538SAndroid Build Coastguard Worker   base::ImmediateCrash();
57*6777b538SAndroid Build Coastguard Worker }
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(USE_BLINK)
60*6777b538SAndroid Build Coastguard Worker 
BootstrapLogMessage(const char * file_path,int line,LogSeverity severity,kern_return_t bootstrap_err)61*6777b538SAndroid Build Coastguard Worker BootstrapLogMessage::BootstrapLogMessage(const char* file_path,
62*6777b538SAndroid Build Coastguard Worker                                          int line,
63*6777b538SAndroid Build Coastguard Worker                                          LogSeverity severity,
64*6777b538SAndroid Build Coastguard Worker                                          kern_return_t bootstrap_err)
65*6777b538SAndroid Build Coastguard Worker     : LogMessage(file_path, line, severity), bootstrap_err_(bootstrap_err) {}
66*6777b538SAndroid Build Coastguard Worker 
~BootstrapLogMessage()67*6777b538SAndroid Build Coastguard Worker BootstrapLogMessage::~BootstrapLogMessage() {
68*6777b538SAndroid Build Coastguard Worker   AppendError();
69*6777b538SAndroid Build Coastguard Worker }
70*6777b538SAndroid Build Coastguard Worker 
AppendError()71*6777b538SAndroid Build Coastguard Worker void BootstrapLogMessage::AppendError() {
72*6777b538SAndroid Build Coastguard Worker   stream() << ": " << bootstrap_strerror(bootstrap_err_);
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker   switch (bootstrap_err_) {
75*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_SUCCESS:
76*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_NOT_PRIVILEGED:
77*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_NAME_IN_USE:
78*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_UNKNOWN_SERVICE:
79*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_SERVICE_ACTIVE:
80*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_BAD_COUNT:
81*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_NO_MEMORY:
82*6777b538SAndroid Build Coastguard Worker     case BOOTSTRAP_NO_CHILDREN: {
83*6777b538SAndroid Build Coastguard Worker       // Show known bootstrap errors in decimal because that's how they're
84*6777b538SAndroid Build Coastguard Worker       // defined in <servers/bootstrap.h>.
85*6777b538SAndroid Build Coastguard Worker       stream() << " (" << bootstrap_err_ << ")";
86*6777b538SAndroid Build Coastguard Worker       break;
87*6777b538SAndroid Build Coastguard Worker     }
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker     default: {
90*6777b538SAndroid Build Coastguard Worker       // bootstrap_strerror passes unknown errors to mach_error_string, so
91*6777b538SAndroid Build Coastguard Worker       // format them as they would be if they were handled by
92*6777b538SAndroid Build Coastguard Worker       // MachErrorMessage.
93*6777b538SAndroid Build Coastguard Worker       stream() << FormatMachErrorNumber(bootstrap_err_);
94*6777b538SAndroid Build Coastguard Worker       break;
95*6777b538SAndroid Build Coastguard Worker     }
96*6777b538SAndroid Build Coastguard Worker   }
97*6777b538SAndroid Build Coastguard Worker }
98*6777b538SAndroid Build Coastguard Worker 
~BootstrapLogMessageFatal()99*6777b538SAndroid Build Coastguard Worker BootstrapLogMessageFatal::~BootstrapLogMessageFatal() {
100*6777b538SAndroid Build Coastguard Worker   AppendError();
101*6777b538SAndroid Build Coastguard Worker   Flush();
102*6777b538SAndroid Build Coastguard Worker   base::ImmediateCrash();
103*6777b538SAndroid Build Coastguard Worker }
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker #endif  // BUILDFLAG(USE_BLINK)
106*6777b538SAndroid Build Coastguard Worker 
107*6777b538SAndroid Build Coastguard Worker }  // namespace logging
108