[syslog] Change 'static inline' to normal linkage

These methods are a pain to work with; they are compiled with different
warnings in tree and in SDK, which makes it difficult to convincingly
produce warning-free code.

Change-Id: Ic87bbe39c1e2a911a6c885265691d2f1a6ebd2aa
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/674662
Reviewed-by: Adam Barth <abarth@google.com>
Fuchsia-Auto-Submit: Tamir Duberstein <tamird@google.com>
Reviewed-by: Miguel Flores <miguelfrde@google.com>
API-Review: Adam Barth <abarth@google.com>
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Reviewed-by: Christopher Johnson <crjohns@google.com>
diff --git a/sdk/lib/syslog-headers/syslog-headers.api b/sdk/lib/syslog-headers/syslog-headers.api
index 8ca48f4..d8c6e5c 100644
--- a/sdk/lib/syslog-headers/syslog-headers.api
+++ b/sdk/lib/syslog-headers/syslog-headers.api
@@ -1,5 +1,5 @@
 {
-  "pkg/syslog-headers/include/lib/syslog/global.h": "f938c26a14e33904884774dbdd3b9fc4",
+  "pkg/syslog-headers/include/lib/syslog/global.h": "32d2b6ee8025f18829e03749f7da574a",
   "pkg/syslog-headers/include/lib/syslog/logger.h": "f09c375255e2c876648ab72770258f76",
   "pkg/syslog-headers/include/lib/syslog/wire_format.h": "a0898347fbde08832e36e7c69d1b7c00"
 }
\ No newline at end of file
diff --git a/sdk/lib/syslog/cpp/macros.cc b/sdk/lib/syslog/cpp/macros.cc
index 8bcaaf2..66db1b3 100644
--- a/sdk/lib/syslog/cpp/macros.cc
+++ b/sdk/lib/syslog/cpp/macros.cc
@@ -110,3 +110,20 @@
 }
 
 }  // namespace syslog
+
+syslog::LogSeverity GetSeverityFromVerbosity(int verbosity) {
+  // Clamp verbosity scale to the interstitial space between INFO and DEBUG
+  if (verbosity < 0) {
+    verbosity = 0;
+  } else {
+    int max_verbosity = (syslog::LOG_INFO - syslog::LOG_DEBUG) / syslog::LogVerbosityStepSize;
+    if (verbosity > max_verbosity) {
+      verbosity = max_verbosity;
+    }
+  }
+  int severity = syslog::LOG_INFO - (verbosity * syslog::LogVerbosityStepSize);
+  if (severity < syslog::LOG_DEBUG + 1) {
+    return syslog::LOG_DEBUG + 1;
+  }
+  return static_cast<syslog::LogSeverity>(severity);
+}
diff --git a/sdk/lib/syslog/cpp/macros.h b/sdk/lib/syslog/cpp/macros.h
index 13c822c..603494d 100644
--- a/sdk/lib/syslog/cpp/macros.h
+++ b/sdk/lib/syslog/cpp/macros.h
@@ -330,29 +330,7 @@
 // Get the severity corresponding to the given verbosity. Note that
 // verbosity relative to the default severity and can be thought of
 // as incrementally "more vebose than" the baseline.
-static inline syslog::LogSeverity GetSeverityFromVerbosity(int verbosity) {
-  // Clamp verbosity scale to the interstitial space between INFO and DEBUG
-  if (verbosity < 0) {
-    verbosity = 0;
-  } else {
-    int max_verbosity = (syslog::LOG_INFO - syslog::LOG_DEBUG) / syslog::LogVerbosityStepSize;
-    if (verbosity > max_verbosity) {
-      verbosity = max_verbosity;
-    }
-  }
-  int severity = syslog::LOG_INFO - (verbosity * syslog::LogVerbosityStepSize);
-  if (severity < syslog::LOG_DEBUG + 1) {
-    return syslog::LOG_DEBUG + 1;
-  }
-  return static_cast<syslog::LogSeverity>(severity);
-}
-
-// this class exists solely to fix a compilation error.
-// we can't use __UNUSED here because it has to compile for both host and device code.
-class FixCompilationErrorCausedByUnusedGetSeverityFromVerbosity {
- public:
-  FixCompilationErrorCausedByUnusedGetSeverityFromVerbosity() { GetSeverityFromVerbosity(0); }
-};
+syslog::LogSeverity GetSeverityFromVerbosity(int verbosity);
 
 #define FX_VLOG_IS_ON(verbose_level) (verbose_level <= ::syslog::GetVlogVerbosity())
 
diff --git a/sdk/lib/syslog/syslog.api b/sdk/lib/syslog/syslog.api
index fdaa951..2d28af6 100644
--- a/sdk/lib/syslog/syslog.api
+++ b/sdk/lib/syslog/syslog.api
@@ -1,5 +1,5 @@
 {
-  "pkg/syslog/include/lib/syslog/global.h": "f938c26a14e33904884774dbdd3b9fc4",
+  "pkg/syslog/include/lib/syslog/global.h": "32d2b6ee8025f18829e03749f7da574a",
   "pkg/syslog/include/lib/syslog/logger.h": "f09c375255e2c876648ab72770258f76",
   "pkg/syslog/include/lib/syslog/wire_format.h": "a0898347fbde08832e36e7c69d1b7c00"
 }
\ No newline at end of file
diff --git a/sdk/lib/syslog/syslog.symbols.api b/sdk/lib/syslog/syslog.symbols.api
index b416ea3..bd9ef31 100644
--- a/sdk/lib/syslog/syslog.symbols.api
+++ b/sdk/lib/syslog/syslog.symbols.api
@@ -1,5 +1,7 @@
 fx_log_get_logger
+fx_log_is_enabled
 fx_log_reconfigure
+fx_log_severity_from_verbosity
 fx_logger_activate_fallback
 fx_logger_create
 fx_logger_create_internal
@@ -17,3 +19,4 @@
 fx_logger_reconfigure_structured
 fx_logger_set_connection
 fx_logger_set_min_severity
+fx_vlog_is_enabled
diff --git a/zircon/system/ulib/syslog/global.cc b/zircon/system/ulib/syslog/global.cc
index 19f72a4..e0f379c 100644
--- a/zircon/system/ulib/syslog/global.cc
+++ b/zircon/system/ulib/syslog/global.cc
@@ -62,5 +62,28 @@
                config->log_sink_socket == ZX_HANDLE_INVALID));
 }
 
-// This is here to force a definition to be included here for C99.
-extern inline bool fx_log_is_enabled(fx_log_severity_t severity);
+SYSLOG_EXPORT
+bool fx_log_is_enabled(fx_log_severity_t severity) {
+  fx_logger_t* logger = fx_log_get_logger();
+  return severity >= fx_logger_get_min_severity(logger);
+}
+
+SYSLOG_EXPORT
+fx_log_severity_t fx_log_severity_from_verbosity(int verbosity) {
+  if (verbosity < 0) {
+    verbosity = 0;
+  }
+  // verbosity scale sits in the interstitial space between INFO and DEBUG
+  int severity = FX_LOG_INFO - (verbosity * FX_LOG_VERBOSITY_STEP_SIZE);
+  if (severity < FX_LOG_DEBUG + 1) {
+    return FX_LOG_DEBUG + 1;
+  }
+  return severity;
+}
+
+SYSLOG_EXPORT
+bool fx_vlog_is_enabled(int verbosity) {
+  fx_logger_t* logger = fx_log_get_logger();
+  return logger && (verbosity >= 0) &&
+         fx_log_severity_from_verbosity(verbosity) >= fx_logger_get_min_severity(logger);
+}
diff --git a/zircon/system/ulib/syslog/include/lib/syslog/global.h b/zircon/system/ulib/syslog/include/lib/syslog/global.h
index 6aa9569..5bf6456 100644
--- a/zircon/system/ulib/syslog/include/lib/syslog/global.h
+++ b/zircon/system/ulib/syslog/include/lib/syslog/global.h
@@ -22,33 +22,16 @@
 
 // Returns true if writing messages with the given severity is enabled in the
 // global logger.
-static inline bool fx_log_is_enabled(fx_log_severity_t severity) {
-  fx_logger_t* logger = fx_log_get_logger();
-  return severity >= fx_logger_get_min_severity(logger);
-}
+bool fx_log_is_enabled(fx_log_severity_t severity);
 
 // Get the severity corresponding to the given verbosity. Note that
 // verbosity relative to the default severity and can be thought of
 // as incrementally "more vebose than" the baseline.
-static inline fx_log_severity_t fx_log_severity_from_verbosity(int verbosity) {
-  if (verbosity < 0) {
-    verbosity = 0;
-  }
-  // verbosity scale sits in the interstitial space between INFO and DEBUG
-  int severity = FX_LOG_INFO - (verbosity * FX_LOG_VERBOSITY_STEP_SIZE);
-  if (severity < FX_LOG_DEBUG + 1) {
-    return FX_LOG_DEBUG + 1;
-  }
-  return severity;
-}
+fx_log_severity_t fx_log_severity_from_verbosity(int verbosity);
 
 // Returns true if writing messages with the given verbosity is enabled
 // in the global logger.
-static inline bool fx_vlog_is_enabled(int verbosity) {
-  fx_logger_t* logger = fx_log_get_logger();
-  return logger && (verbosity >= 0) &&
-         fx_log_severity_from_verbosity(verbosity) >= fx_logger_get_min_severity(logger);
-}
+bool fx_vlog_is_enabled(int verbosity);
 
 // Reconfigures the global logger for this process with the specified
 // configuration.
diff --git a/zircon/system/ulib/syslog/syslog_tests.cc b/zircon/system/ulib/syslog/syslog_tests.cc
index f2accc8..d77c9a4 100644
--- a/zircon/system/ulib/syslog/syslog_tests.cc
+++ b/zircon/system/ulib/syslog/syslog_tests.cc
@@ -47,7 +47,16 @@
   FAIL("did not find unused FD");
 }
 
-}  // namespace
+zx_status_t init_helper(int fd, const char** tags, size_t ntags) {
+  fx_logger_config_t config = {
+      .min_severity = FX_LOG_INFO,
+      .console_fd = fd,
+      .tags = tags,
+      .num_tags = ntags,
+  };
+
+  return fx_log_reconfigure(&config);
+}
 
 // Ensure accessing the global logger is safe when a global object is being torn down.
 class LogDuringTeardownTest {
@@ -89,16 +98,6 @@
   }
 }
 
-static inline zx_status_t init_helper(int fd, const char** tags, size_t ntags) {
-  fx_logger_config_t config = {.min_severity = FX_LOG_INFO,
-                               .console_fd = fd,
-                               .log_sink_socket = ZX_HANDLE_INVALID,
-                               .tags = tags,
-                               .num_tags = ntags};
-
-  return fx_log_reconfigure(&config);
-}
-
 TEST(SyslogTests, test_log_simple_write) {
   int pipefd[2];
   EXPECT_NE(pipe2(pipefd, O_NONBLOCK), -1, "");
@@ -550,3 +549,5 @@
   EXPECT_STATUS(ZX_ERR_BAD_HANDLE, zx_handle_close(passed_handle));
 }
 #endif
+
+}  // namespace