Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab4e2362 authored by Hui Peng's avatar Hui Peng Committed by Automerger Merge Worker
Browse files

Merge changes I8d0816af,Ib373d501 am: e954cc27

parents 9ccc3655 e954cc27
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -21,26 +21,26 @@
#include "os/log.h"

namespace {
#if defined(__ANDROID__)
#if defined(__ANDROID__) && !defined (FUZZ_TARGET)

// Tags for security logging, should be in sync with
// frameworks/base/core/java/android/app/admin/SecurityLogTags.logtags
constexpr int SEC_TAG_BLUETOOTH_CONNECTION = 210039;

#endif /* defined(__ANDROID__) */
#endif /* defined(__ANDROID__) && !defined (FUZZ_TARGET) */
}  // namespace

namespace bluetooth {
namespace common {

void LogConnectionAdminAuditEvent(const char* action, const hci::Address& address, hci::ErrorCode status) {
#if defined(__ANDROID__)
#if defined(__ANDROID__) && !defined (FUZZ_TARGET)

  android_log_event_list(SEC_TAG_BLUETOOTH_CONNECTION)
      << ADDRESS_TO_LOGGABLE_CSTR(address) << /* success */ int32_t(status == hci::ErrorCode::SUCCESS)
      << common::StringFormat("%s: %s", action, ErrorCodeText(status).c_str()).c_str() << LOG_ID_SECURITY;

#endif /* defined(__ANDROID__) */
#endif /* defined(__ANDROID__) && !defined (FUZZ_TARGET) */
}

}  // namespace common
+94 −60
Original line number Diff line number Diff line
@@ -31,99 +31,108 @@ static_assert(LOG_TAG != nullptr, "LOG_TAG should never be NULL");
#include "os/log_tags.h"
#include "os/logging/log_adapter.h"

#if defined(FUZZ_TARGET)

#define LOG_VERBOSE_INT(...)
#define LOG_DEBUG_INT(...)
#define LOG_INFO_INT(...)
#define LOG_WARN_INT(...)

#define LOG_ERROR_INT(...) do {     \
  fprintf(stderr, __VA_ARGS__);     \
} while (false)

// for fuzz targets, we just
// need to abort in this statement
// to catch the bug
#define LOG_ALWAYS_FATAL_INT(...) do {  \
    fprintf(stderr, __VA_ARGS__);       \
    abort();                            \
  } while (false)

#else /* end of defined(FUZZ_TARGET) */

#if defined(__ANDROID__)

#include <log/log.h>
#include <log/log_event_list.h>

#ifdef FUZZ_TARGET
#define LOG_VERBOSE(...)
#define LOG_DEBUG(...)
#define LOG_INFO(...)
#define LOG_WARN(...)
#else

static_assert(LOG_TAG != nullptr, "LOG_TAG is null after header inclusion");

#if __has_include("src/init_flags.rs.h")

#include "common/init_flags.h"

#define LOG_VERBOSE(fmt, args...)                                                      \
#define LOG_VERBOSE_INT(fmt, args...)                                                  \
  do {                                                                                 \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_VERBOSE) { \
      ALOGV("%s:%d %s: " fmt, __FILE__, __LINE__, __func__, ##args);                   \
      ALOGV(fmt, ##args);                                                              \
    }                                                                                  \
  } while (false)

#define LOG_DEBUG(fmt, args...)                                                      \
#define LOG_DEBUG_INT(fmt, args...)                                                  \
  do {                                                                               \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_DEBUG) { \
      ALOGD("%s:%d %s: " fmt, __FILE__, __LINE__, __func__, ##args);                 \
      ALOGD(fmt, ##args);                                                            \
    }                                                                                \
  } while (false)
#endif /* __has_include("src/init_flags.rs.h") */

#define LOG_INFO(fmt, args...) ALOGI("%s:%d %s: " fmt, __FILE__, __LINE__, __func__, ##args)
#define LOG_WARN(fmt, args...) ALOGW("%s:%d %s: " fmt, __FILE__, __LINE__, __func__, ##args)
#endif /* FUZZ_TARGET */
#define LOG_ERROR(fmt, args...) ALOGE("%s:%d %s: " fmt, __FILE__, __LINE__, __func__, ##args)
#define LOG_INFO_INT(fmt, args...) ALOGI(fmt, ##args)
#define LOG_WARN_INT(fmt, args...) ALOGW(fmt, ##args)
#define LOG_ERROR_INT(fmt, args...) ALOGE(fmt, ##args)
#define LOG_ALWAYS_FATAL_INT(fmt, args...) do { \
  ALOGE(fmt, ##args);                           \
  abort();                                      \
} while (false)

#elif defined (ANDROID_EMULATOR)
#elif defined (ANDROID_EMULATOR)  /* end of defined(__ANDROID__) */
// Log using android emulator logging mechanism
#include "android/utils/debug.h"

#define LOGWRAPPER(fmt, args...) VERBOSE_INFO(bluetooth, "bluetooth: %s:%d - %s: " fmt, \
                                              __FILE__, __LINE__, __func__, ##args)
#define LOGWRAPPER(fmt, args...) VERBOSE_INFO(bluetooth, "bluetooth: " fmt, \
                                               ##args)

#define LOG_VEBOSE(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_DEBUG(...)  LOGWRAPPER(__VA_ARGS__)
#define LOG_INFO(...)   LOGWRAPPER(__VA_ARGS__)
#define LOG_WARN(...)   LOGWRAPPER(__VA_ARGS__)
#define LOG_ERROR(...)  LOGWRAPPER(__VA_ARGS__)
#define LOG_ALWAYS_FATAL(fmt, args...)                                              \
#define LOG_VEBOSE_INT(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_DEBUG_INT(...)  LOGWRAPPER(__VA_ARGS__)
#define LOG_INFO_INT(...)   LOGWRAPPER(__VA_ARGS__)
#define LOG_WARN_INT(...)   LOGWRAPPER(__VA_ARGS__)
#define LOG_ERROR_INT(...)  LOGWRAPPER(__VA_ARGS__)
#define LOG_ALWAYS_FATAL_INT(fmt, args...)                                          \
  do {                                                                              \
    fprintf(stderr, "%s:%d - %s: " fmt "\n", __FILE__, __LINE__, __func__, ##args); \
    fprintf(stderr, fmt "\n", ##args);                                              \
    abort();                                                                        \
  } while (false)
#elif defined(TARGET_FLOSS)
#elif defined(TARGET_FLOSS) /* end of defined (ANDROID_EMULATOR) */
#include "gd/common/init_flags.h"
#include "gd/os/syslog.h"

// Prefix the log with tag, file, line and function
#define LOGWRAPPER(tag, fmt, args...) \
  write_syslog(tag, "%s:%s:%d - %s: " fmt, LOG_TAG, __FILE__, __LINE__, __func__, ##args)

#ifdef FUZZ_TARGET
#define LOG_VERBOSE(...)
#define LOG_DEBUG(...)
#define LOG_INFO(...)
#define LOG_WARN(...)
#else
#define LOG_VERBOSE(...)                                                               \
  write_syslog(tag, "%s: " fmt, LOG_TAG, ##args)

#define LOG_VERBOSE_INT(...)                                                           \
  do {                                                                                 \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_VERBOSE) { \
      LOGWRAPPER(LOG_TAG_VERBOSE, __VA_ARGS__);                                        \
    }                                                                                  \
  } while (false)
#define LOG_DEBUG(...)                                                               \
#define LOG_DEBUG_INT(...)                                                           \
  do {                                                                               \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_DEBUG) { \
      LOGWRAPPER(LOG_TAG_DEBUG, __VA_ARGS__);                                        \
    }                                                                                \
  } while (false)
#define LOG_INFO(...) LOGWRAPPER(LOG_TAG_INFO, __VA_ARGS__)
#define LOG_WARN(...) LOGWRAPPER(LOG_TAG_WARN, __VA_ARGS__)
#endif /*FUZZ_TARGET*/
#define LOG_ERROR(...) LOGWRAPPER(LOG_TAG_ERROR, __VA_ARGS__)
#define LOG_INFO_INT(...) LOGWRAPPER(LOG_TAG_INFO, __VA_ARGS__)
#define LOG_WARN_INT(...) LOGWRAPPER(LOG_TAG_WARN, __VA_ARGS__)
#define LOG_ERROR_INT(...) LOGWRAPPER(LOG_TAG_ERROR, __VA_ARGS__)

#define LOG_ALWAYS_FATAL(...)               \
#define LOG_ALWAYS_FATAL_INT(...)           \
  do {                                      \
    LOGWRAPPER(LOG_TAG_FATAL, __VA_ARGS__); \
    abort();                                \
  } while (false)

#else
#else  /* end of defined (TARGET_FLOSS) */

/* syslog didn't work well here since we would be redefining LOG_DEBUG. */
#include <sys/syscall.h>
#include <sys/types.h>
@@ -157,31 +166,24 @@ static_assert(LOG_TAG != nullptr, "LOG_TAG is null after header inclusion");
        ##args);                                                                                                    \
  } while (false)

#ifdef FUZZ_TARGET
#define LOG_VERBOSE(...)
#define LOG_DEBUG(...)
#define LOG_INFO(...)
#define LOG_WARN(...)
#else
#define LOG_VERBOSE(fmt, args...)                                                      \
#define LOG_VERBOSE_INT(fmt, args...)                                                  \
  do {                                                                                 \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_VERBOSE) { \
      LOGWRAPPER(fmt, ##args);                                                         \
    }                                                                                  \
  } while (false)
#define LOG_DEBUG(fmt, args...)                                                      \
#define LOG_DEBUG_INT(fmt, args...)                                                  \
  do {                                                                               \
    if (bluetooth::common::InitFlags::GetLogLevelForTag(LOG_TAG) >= LOG_TAG_DEBUG) { \
      LOGWRAPPER(fmt, ##args);                                                       \
    }                                                                                \
  } while (false)
#define LOG_INFO(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_WARN(...) LOGWRAPPER(__VA_ARGS__)
#endif /* FUZZ_TARGET */
#define LOG_ERROR(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_INFO_INT(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_WARN_INT(...) LOGWRAPPER(__VA_ARGS__)
#define LOG_ERROR_INT(...) LOGWRAPPER(__VA_ARGS__)

#ifndef LOG_ALWAYS_FATAL
#define LOG_ALWAYS_FATAL(...) \
#define LOG_ALWAYS_FATAL_INT(...) \
  do {                            \
    LOGWRAPPER(__VA_ARGS__);      \
    abort();                      \
@@ -190,6 +192,37 @@ static_assert(LOG_TAG != nullptr, "LOG_TAG is null after header inclusion");

#endif /* defined(__ANDROID__) */

#endif /* defined(FUZZ_TARGET) */

#define _LOG_SRC_FMT_STR "%s:%d - %s: "

// ---------------------------------------------------------
// All MACROs defined above are internal and should *not* be
// used directly (use LOG_XXX defined below instead).
// the output of LOG_XXX_INT does not contain the source
// location of the log emitting statement, so far they are only used by
// LogMsg, where the source locations is passed in.

#define LOG_VERBOSE(fmt, args...)                                             \
  LOG_VERBOSE_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)

#define LOG_DEBUG(fmt, args...)                                               \
  LOG_DEBUG_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)

#define LOG_INFO(fmt, args...)                                                \
  LOG_INFO_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)

#define LOG_WARN(fmt, args...)                                                \
  LOG_WARN_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)

#define LOG_ERROR(fmt, args...)                                               \
  LOG_ERROR_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)

#ifndef LOG_ALWAYS_FATAL
#define LOG_ALWAYS_FATAL(fmt, args...)                                        \
  LOG_ALWAYS_FATAL_INT(_LOG_SRC_FMT_STR fmt, __FILE__, __LINE__, __func__, ##args)
#endif

#define ASSERT(condition)                                    \
  do {                                                       \
    if (!(condition)) {                                      \
@@ -209,3 +242,4 @@ static_assert(LOG_TAG != nullptr, "LOG_TAG is null after header inclusion");
  case code:                   \
    return #code
#endif
+43 −39
Original line number Diff line number Diff line
@@ -20,6 +20,12 @@

#include <stdint.h>

// move this function outof extern "C" block
// as it is a C++ function.
extern void LogMsg(uint32_t trace_set_mask,
                   const char *filename, uint32_t linenum, const char *func,
                   const char* fmt_str, ...);

#ifdef __cplusplus
extern "C" {
#endif
@@ -245,7 +251,7 @@ static const char BTE_LOGMSG_MODULE[] = "bte_logmsg_module";
#endif

#define BT_TRACE(l, t, ...) \
  LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)), ##__VA_ARGS__)
  LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)), __FILE__, __LINE__, __func__, ##__VA_ARGS__)

/* Define tracing for the HCI unit */
#define HCI_TRACE_ERROR(...)                                      \
@@ -636,42 +642,42 @@ extern uint8_t btif_trace_level;
#define BTIF_TRACE_ERROR(...)                                         \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_ERROR)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_ERROR,                                      \
               ##__VA_ARGS__);                                        \
  }
#define BTIF_TRACE_WARNING(...)                                       \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_WARNING)                   \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_WARNING,                                    \
               ##__VA_ARGS__);                                        \
  }
#define BTIF_TRACE_API(...)                                           \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_API)                       \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_API,                                        \
               ##__VA_ARGS__);                                        \
  }
#define BTIF_TRACE_EVENT(...)                                         \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_EVENT)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_EVENT,                                      \
               ##__VA_ARGS__);                                        \
  }
#define BTIF_TRACE_DEBUG(...)                                         \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_DEBUG,                                      \
               ##__VA_ARGS__);                                        \
  }
#define BTIF_TRACE_VERBOSE(...)                                       \
  {                                                                   \
    if (btif_trace_level >= BT_TRACE_LEVEL_VERBOSE)                   \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_DEBUG,                                      \
               ##__VA_ARGS__);                                        \
  }
@@ -680,42 +686,42 @@ extern uint8_t btif_trace_level;
#define APPL_TRACE_ERROR(...)                                         \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_ERROR,                                      \
               ##__VA_ARGS__);                                        \
  }
#define APPL_TRACE_WARNING(...)                                       \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                   \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_WARNING,                                    \
               ##__VA_ARGS__);                                        \
  }
#define APPL_TRACE_API(...)                                           \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_API)                       \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_API,                                        \
               ##__VA_ARGS__);                                        \
  }
#define APPL_TRACE_EVENT(...)                                         \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_EVENT,                                      \
               ##__VA_ARGS__);                                        \
  }
#define APPL_TRACE_DEBUG(...)                                         \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_DEBUG,                                      \
               ##__VA_ARGS__);                                        \
  }
#define APPL_TRACE_VERBOSE(...)                                       \
  {                                                                   \
    if (appl_trace_level >= BT_TRACE_LEVEL_VERBOSE)                   \
      LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
      BT_TRACE(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL,\
               TRACE_TYPE_DEBUG,                                      \
               ##__VA_ARGS__);                                        \
  }
@@ -735,8 +741,6 @@ typedef struct {
 * declaration in all the files using APPL_TRACExxx macros */
extern uint8_t appl_trace_level;

void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);

#ifdef __cplusplus
}
#endif
+11 −7
Original line number Diff line number Diff line
@@ -87,7 +87,9 @@ static const char* const bt_layer_tags[] = {
    "bt_nfa",
};

void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
void LogMsg(uint32_t trace_set_mask,
            const char* filename, uint32_t linenum, const char* func,
            const char* fmt_str, ...) {
  char buffer[BTE_LOG_BUF_SIZE];
  int trace_layer = TRACE_GET_LAYER(trace_set_mask);
  if (trace_layer >= TRACE_LAYER_MAX_NUM) trace_layer = 0;
@@ -102,24 +104,26 @@ void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {

  switch (TRACE_GET_TYPE(trace_set_mask)) {
    case TRACE_TYPE_ERROR:
      LOG_ERROR("%s", buffer);
      LOG_ERROR_INT(_LOG_SRC_FMT_STR "%s", filename, linenum, func, buffer);
      break;
    case TRACE_TYPE_WARNING:
      LOG_WARN("%s", buffer);
      LOG_WARN_INT(_LOG_SRC_FMT_STR "%s", filename, linenum, func, buffer);
      break;
    case TRACE_TYPE_API:
    case TRACE_TYPE_EVENT:
      LOG_INFO("%s", buffer);
      LOG_INFO_INT(_LOG_SRC_FMT_STR "%s", filename, linenum, func, buffer);
      break;
    case TRACE_TYPE_DEBUG:
      LOG_INFO("%s", buffer);
      LOG_DEBUG_INT(_LOG_SRC_FMT_STR "%s", filename, linenum, func, buffer);
      break;
    case TRACE_TYPE_INFO:
      LOG_INFO("%s", buffer);
      LOG_INFO_INT(_LOG_SRC_FMT_STR "%s", filename, linenum, func, buffer);
      break;
    default:
      /* we should never get this */
      LOG_ERROR("!BAD TRACE TYPE! %s", buffer);
      LOG_ERROR_INT("!BAD TRACE TYPE! " _LOG_SRC_FMT_STR "%s", filename,
                    linenum, func, buffer);

      CHECK(TRACE_GET_TYPE(trace_set_mask) == TRACE_TYPE_ERROR);
      break;
  }
+3 −1
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ std::function<void(uint32_t, const char*)> bluetooth::testing::common::log_msg =
    []([[maybe_unused]] uint32_t trace_set_mask,
       [[maybe_unused]] const char* buffer) {};

extern "C" void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
void LogMsg(uint32_t trace_set_mask,
            const char* filename, uint32_t linenum, const char* func,
            const char* fmt_str, ...) {
  char buffer[kTestBufferLogSize];

  va_list ap;
Loading