Packages
mob
0.5.15
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
android/jni/driver_tab_android.c
// driver_tab_android.c — Static NIF table with mob_nif added.
// Link BEFORE libbeam.a to override the built-in driver_tab.
#include <stddef.h>
typedef struct { void* de; int flags; } ErtsStaticDriver;
#define THE_NON_VALUE ((unsigned long)0)
typedef struct {
void* (*nif_init)(void);
int is_builtin;
unsigned long nif_mod;
void* entry;
} ErtsStaticNif;
typedef struct { void* de; int flags; } ErlDrvEntryStub;
extern ErlDrvEntryStub inet_driver_entry;
extern ErlDrvEntryStub ram_file_driver_entry;
ErtsStaticDriver driver_tab[] = {
{&inet_driver_entry, 0},
{&ram_file_driver_entry, 0},
{NULL, 0}
};
void erts_init_static_drivers(void) {}
void *prim_tty_nif_init(void);
void *erl_tracer_nif_init(void);
void *prim_buffer_nif_init(void);
void *prim_file_nif_init(void);
void *zlib_nif_init(void);
void *zstd_nif_init(void);
void *prim_socket_nif_init(void);
void *prim_net_nif_init(void);
void *asn1rt_nif_nif_init(void);
// crypto.c's ERL_NIF_INIT(crypto,...) generates: crypto_nif_init.
// Built into libpigeon.so via crypto.a + libcrypto.a (OpenSSL).
// Without this entry, the BEAM falls through to dlopen("crypto.so")
// which fails because Android's RTLD_LOCAL hides libpigeon.so's
// enif_* symbols from the dlopen'd library. With it, the BEAM
// resolves crypto via dlsym(RTLD_DEFAULT) and load_nif uses the
// static path — no dlopen, real OpenSSL.
void *crypto_nif_init(void);
// mob_nif.c's ERL_NIF_INIT(mob_nif,...) generates: mob_nif_nif_init
void *mob_nif_nif_init(void);
ErtsStaticNif erts_static_nif_tab[] = {
{prim_tty_nif_init, 0, THE_NON_VALUE, NULL},
{erl_tracer_nif_init, 0, THE_NON_VALUE, NULL},
{prim_buffer_nif_init, 0, THE_NON_VALUE, NULL},
{prim_file_nif_init, 0, THE_NON_VALUE, NULL},
{zlib_nif_init, 0, THE_NON_VALUE, NULL},
{zstd_nif_init, 0, THE_NON_VALUE, NULL},
{prim_socket_nif_init, 0, THE_NON_VALUE, NULL},
{prim_net_nif_init, 0, THE_NON_VALUE, NULL},
{asn1rt_nif_nif_init, 1, THE_NON_VALUE, NULL},
{crypto_nif_init, 1, THE_NON_VALUE, NULL},
{mob_nif_nif_init, 0, THE_NON_VALUE, NULL},
{NULL, 0, THE_NON_VALUE, NULL}
};