diff --git a/include/spdk/rpc.h b/include/spdk/rpc.h index 2ffb0e2db..e48c86dc5 100644 --- a/include/spdk/rpc.h +++ b/include/spdk/rpc.h @@ -103,14 +103,20 @@ int spdk_rpc_is_method_allowed(const char *method, uint32_t state_mask); #define SPDK_RPC_STARTUP 0x1 #define SPDK_RPC_RUNTIME 0x2 +/* Give SPDK_RPC_REGISTER a higher execution priority than + * SPDK_RPC_REGISTER_ALIAS_DEPRECATED to ensure all of the RPCs are registered + * before we try registering any aliases. Some older versions of clang may + * otherwise execute the constructors in a different order than + * defined in the source file (see issue #892). + */ #define SPDK_RPC_REGISTER(method, func, state_mask) \ -static void __attribute__((constructor)) rpc_register_##func(void) \ +static void __attribute__((constructor(1000))) rpc_register_##func(void) \ { \ spdk_rpc_register_method(method, func, state_mask); \ } #define SPDK_RPC_REGISTER_ALIAS_DEPRECATED(method, alias) \ -static void __attribute__((constructor)) rpc_register_##alias(void) \ +static void __attribute__((constructor(1001))) rpc_register_##alias(void) \ { \ spdk_rpc_register_alias_deprecated(#method, #alias); \ }