Call osmo_init_logging() before static BTS constructor

The BTS constructor uses functions of libosmocore that could in turn
want to log something.  This requires the logging to be initialized
before.

The only way to achieve this is to add an __attribute__((constructor))
function *before* the BTS constructor is being run.

This solution might not be elegant, but  I guess it's the only way to
initialize a C library before calling C++ constructors of global static
instance of a class.

In case anyone comes up with a better / cleaner approach, we can always
change later.

This change requires libosmocore >= 0.10.1, as only that permits
multiple calls to osmo_init_logging() which may now occur.

Change-Id: I28dc4f0db229518348c92413959fed5ae85d753d
This commit is contained in:
Harald Welte 2017-10-29 10:57:27 +01:00
parent ac0490ad2a
commit 3e51d3e5bd
3 changed files with 13 additions and 2 deletions

View File

@ -36,7 +36,7 @@ AC_HEADER_STDC
dnl Checks for typedefs, structures and compiler characteristics
dnl checks for libraries
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.3.9)
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.10.1)
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty)
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.3.3)
PKG_CHECK_MODULES(LIBOSMOGB, libosmogb >= 0.5.1.4)

2
debian/control vendored
View File

@ -2,7 +2,7 @@ Source: osmo-pcu
Section: net
Priority: optional
Maintainer: Holger Hans Peter Freyther <holger@moiji-mobile.com>
Build-Depends: debhelper (>= 7.0.0~), dh-autoreconf, dh-systemd (>= 1.5), autotools-dev, pkg-config, libosmocore-dev
Build-Depends: debhelper (>= 7.0.0~), dh-autoreconf, dh-systemd (>= 1.5), autotools-dev, pkg-config, libosmocore-dev (>= 0.10.1)
Standards-Version: 3.8.4
Homepage: http://osmocom.org/projects/osmopcu
Vcs-Git: git://git.osmocom.org/osmo-pcu

View File

@ -36,6 +36,7 @@ extern "C" {
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/gsmtap_util.h>
#include <osmocom/core/application.h>
}
#include <arpa/inet.h>
@ -48,6 +49,16 @@ extern "C" {
extern void *tall_pcu_ctx;
extern "C" {
/* e must make sure to initialize logging before the BTS static
* constructors are executed below, as those call libosmocore APIs that
* require logging already to be initialized. */
__attribute__((constructor)) static void early_init(void)
{
osmo_init_logging(&gprs_log_info);
}
}
static BTS s_bts;
/**