ircd: Various symbol surface reductions and sorting.

This commit is contained in:
Jason Volk 2022-05-26 12:28:28 -07:00
parent 04558290c0
commit e51b855f2b
20 changed files with 82 additions and 51 deletions

View File

@ -275,14 +275,14 @@ struct ircd::allocator::callback<T>::allocator
};
template<class T>
typename ircd::allocator::callback<T>::allocator
inline typename ircd::allocator::callback<T>::allocator
ircd::allocator::callback<T>::operator()()
{
return ircd::allocator::callback<T>::allocator(*this);
}
template<class T>
ircd::allocator::callback<T>::operator
inline ircd::allocator::callback<T>::operator
allocator()
{
return ircd::allocator::callback<T>::allocator(*this);
@ -423,7 +423,7 @@ struct ircd::allocator::fixed<T, SIZE>::allocator
template<class T,
size_t SIZE>
typename ircd::allocator::fixed<T, SIZE>::allocator
inline typename ircd::allocator::fixed<T, SIZE>::allocator
ircd::allocator::fixed<T, SIZE>::operator()()
{
return ircd::allocator::fixed<T, SIZE>::allocator(*this);
@ -431,7 +431,7 @@ ircd::allocator::fixed<T, SIZE>::operator()()
template<class T,
size_t SIZE>
ircd::allocator::fixed<T, SIZE>::operator
inline ircd::allocator::fixed<T, SIZE>::operator
allocator()
{
return ircd::allocator::fixed<T, SIZE>::allocator(*this);
@ -541,14 +541,14 @@ struct ircd::allocator::dynamic<T>::allocator
};
template<class T>
typename ircd::allocator::dynamic<T>::allocator
inline typename ircd::allocator::dynamic<T>::allocator
ircd::allocator::dynamic<T>::operator()()
{
return ircd::allocator::dynamic<T>::allocator(*this);
}
template<class T>
ircd::allocator::dynamic<T>::operator
inline ircd::allocator::dynamic<T>::operator
allocator()
{
return ircd::allocator::dynamic<T>::allocator(*this);
@ -771,7 +771,7 @@ struct ircd::allocator::twolevel<T, L0_SIZE>::allocator
template<class T,
size_t L0_SIZE>
typename ircd::allocator::twolevel<T, L0_SIZE>::allocator
inline typename ircd::allocator::twolevel<T, L0_SIZE>::allocator
ircd::allocator::twolevel<T, L0_SIZE>::operator()()
{
return ircd::allocator::twolevel<T, L0_SIZE>::allocator(*this);
@ -779,7 +779,7 @@ ircd::allocator::twolevel<T, L0_SIZE>::operator()()
template<class T,
size_t L0_SIZE>
ircd::allocator::twolevel<T, L0_SIZE>::operator
inline ircd::allocator::twolevel<T, L0_SIZE>::operator
allocator()
{
return ircd::allocator::twolevel<T, L0_SIZE>::allocator(*this);

View File

@ -24,7 +24,8 @@ namespace ircd::cl
void log_platform_info();
}
class ircd::cl::init
class [[gnu::visibility("hidden")]]
ircd::cl::init
{
size_t init_platforms();
size_t init_devices();

View File

@ -116,7 +116,8 @@ struct ircd::client::settings
static ircd::conf::item<size_t> max_client_per_peer;
};
struct ircd::client::init
struct [[gnu::visibility("hidden")]]
ircd::client::init
{
init();
~init() noexcept;

View File

@ -46,7 +46,8 @@ namespace ircd
/// own after receiving an interruption without help from this action. Common
/// use for this is with yields to asio.
///
struct ircd::ctx::continuation
struct [[gnu::visibility("hidden")]]
ircd::ctx::continuation
{
static const predicate asio_predicate;
static const predicate true_predicate;

View File

@ -49,7 +49,8 @@ struct ircd::ctx::ole::opts
int8_t prio {0};
};
struct ircd::ctx::ole::init
struct [[gnu::visibility("hidden")]]
ircd::ctx::ole::init
{
init();
~init() noexcept;

View File

@ -83,7 +83,8 @@ namespace ircd
}
/// Database subsystem initialization and destruction
struct ircd::db::init
struct [[gnu::visibility("hidden")]]
ircd::db::init
{
static const std::string direct_io_test_file_path;

View File

@ -220,7 +220,7 @@ namespace ircd
template<class E,
class... args>
std::exception_ptr
inline std::exception_ptr
ircd::make_exception_ptr(args&&... a)
try
{
@ -232,14 +232,14 @@ catch(const E &)
};
template<class... args>
void
inline void
ircd::throw_system_error(args&&... a)
{
throw make_system_error(std::forward<args>(a)...);
}
template<class... args>
std::exception_ptr
inline std::exception_ptr
ircd::make_system_eptr(args&&... a)
{
return std::make_exception_ptr(make_system_error(std::forward<args>(a)...));

View File

@ -84,7 +84,8 @@ struct ircd::fs::aio::stats
stats();
};
struct ircd::fs::aio::init
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::init
{
init();
~init() noexcept;

View File

@ -78,7 +78,8 @@ namespace ircd::fs
}
/// Filesystem interface init / fini held by ircd::main().
struct ircd::fs::init
struct [[gnu::visibility("hidden")]]
ircd::fs::init
{
iou::init _iou_;
aio::init _aio_;

View File

@ -89,7 +89,8 @@ enum ircd::fs::iou::state
/// Internal use; this is simply declared here for when internal headers are
/// not available for this build so a weak no-op definition can be defined.
struct ircd::fs::iou::init
struct [[gnu::visibility("hidden")]]
ircd::fs::iou::init
{
init();
~init() noexcept;

View File

@ -28,7 +28,8 @@ namespace ircd::magic
extern const info::versions version_api, version_abi;
}
struct ircd::magic::init
struct [[gnu::visibility("hidden")]]
ircd::magic::init
{
init();
~init() noexcept;

View File

@ -27,12 +27,6 @@ namespace ircd::magick
extern const info::versions version_api, version_abi;
}
struct ircd::magick::init
{
init();
~init() noexcept;
};
/// Composite thumbnailer to resize close to the requested dimension but
/// preserving original aspect ratio; then crop to requested dimension.
struct ircd::magick::thumbcrop
@ -111,6 +105,13 @@ struct ircd::magick::job
std::exception_ptr eptr; // apropos exception reference
};
struct [[gnu::visibility("hidden")]]
ircd::magick::init
{
init();
~init() noexcept;
};
// inline stubs when magick disabled/unavailable.
#if !IRCD_USE_MAGICK

View File

@ -73,7 +73,8 @@ namespace ircd
using net::socket;
}
struct ircd::net::init
struct [[gnu::visibility("hidden")]]
ircd::net::init
{
init();
~init() noexcept;

View File

@ -129,7 +129,7 @@ struct ircd::net::socket
};
template<class... args>
auto
inline auto
ircd::net::socket::operator()(args&&... a)
{
return this->wait(std::forward<args>(a)...);

View File

@ -212,7 +212,8 @@ class ircd::openssl::bignum
~bignum() noexcept;
};
struct ircd::openssl::init
struct [[gnu::visibility("hidden")]]
ircd::openssl::init
{
init();
~init() noexcept;

View File

@ -63,7 +63,8 @@ namespace ircd::server
/// Subsystem initialization / destruction from ircd::main
///
struct ircd::server::init
struct [[gnu::visibility("hidden")]]
ircd::server::init
{
// manual control panel
static void interrupt();

View File

@ -24,6 +24,10 @@ AM_CPPFLAGS = \
AM_LDFLAGS = \
-version-info 3:2:0 \
-Wl,--no-undefined-version \
-Wl,--icf=all \
-Wl,--no-text-reorder \
-Wl,--sort-section=name \
-Wl,--sort-common=descending \
-Wl,--weak-unresolved-symbols \
-Wl,--unresolved-symbols=ignore-in-shared-libs \
-Wl,--wrap=pthread_create \

View File

@ -64,7 +64,7 @@ ircd::ctx::ctx::ios_handler
};
/// Points to the next context to spawn (internal use)
[[gnu::visibility("internal")]]
[[gnu::visibility("hidden")]]
decltype(ircd::ctx::ctx::spawning)
ircd::ctx::ctx::spawning;
@ -74,6 +74,7 @@ decltype(ircd::ctx::ctx::adjoindre)
ircd::ctx::ctx::adjoindre;
/// Internal context struct ctor
[[gnu::visibility("hidden")]]
ircd::ctx::ctx::ctx(const string_view &name,
const ircd::ctx::stack &stack,
const context::flags &flags)
@ -93,6 +94,7 @@ ircd::ctx::ctx::ctx(const string_view &name,
strlcpy(this->name, name);
}
[[gnu::visibility("hidden")]]
ircd::ctx::ctx::~ctx()
noexcept
{
@ -100,6 +102,7 @@ noexcept
}
/// Internal wrapper for asio::spawn; never call directly.
[[gnu::visibility("hidden")]]
void
IRCD_CTX_STACK_PROTECT
ircd::ctx::ctx::spawn(context::function func)
@ -160,6 +163,7 @@ ircd::ctx::ctx::spawn(context::function func)
///
/// This function is the first thing executed on the new context's stack
/// and calls the user's function.
[[gnu::visibility("hidden")]]
void
IRCD_CTX_STACK_PROTECT
ircd::ctx::ctx::operator()(boost::asio::yield_context yc,
@ -232,6 +236,7 @@ catch(const std::exception &e)
///
/// This currently doesn't work yet because the suspension state of this
/// context has to be ready to be jumped to and that isn't implemented yet.
[[gnu::visibility("hidden")]]
void
IRCD_CTX_STACK_PROTECT
ircd::ctx::ctx::jump()
@ -265,7 +270,7 @@ ircd::ctx::ctx::jump()
/// considered handled an another attempt to `wait()` can be made. Returns true
/// if the context suspended and was notified. When a context wakes up the
/// note counter is reset.
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
IRCD_CTX_STACK_PROTECT
ircd::ctx::ctx::wait()
@ -320,6 +325,7 @@ ircd::ctx::ctx::wait()
///
/// Returns true if this note was the first note received by this context
/// while it's been suspended or false if it's already been notified.
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::note()
noexcept
@ -334,6 +340,7 @@ noexcept
}
/// Wakes a context without a note (internal)
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::wake()
noexcept try
@ -370,7 +377,7 @@ catch(const std::exception &e)
/// Throws if this context has been flagged for interruption and clears
/// the flag.
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
void
ircd::ctx::ctx::interruption_point()
{
@ -390,7 +397,7 @@ ircd::ctx::ctx::interruption_point()
/// Returns true if this context has been flagged for termination. Does not
/// clear the flag. Sets the NOINTERRUPT flag so the context cannot be further
// interrupted which simplifies the termination process.
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::termination_point(std::nothrow_t)
noexcept
@ -407,7 +414,7 @@ noexcept
/// Returns true if this context has been flagged for interruption and
/// clears the flag.
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::interruption_point(std::nothrow_t)
noexcept
@ -424,7 +431,7 @@ noexcept
/// True if this context has been flagged for interruption or termination
/// and interrupts are not blocked.
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::interruption()
const noexcept
@ -447,7 +454,7 @@ const noexcept
return true;
}
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::started()
const noexcept
@ -455,7 +462,7 @@ const noexcept
return stack.base != 0;
}
[[gnu::hot]]
[[gnu::visibility("hidden"), gnu::hot]]
bool
ircd::ctx::ctx::finished()
const noexcept
@ -825,6 +832,7 @@ ircd::ctx::this_ctx::wait()
c.wait(); // now you're yielding with portals
}
[[gnu::hot, gnu::noinline]]
size_t
ircd::ctx::this_ctx::stack_at_here()
{
@ -834,6 +842,7 @@ ircd::ctx::this_ctx::stack_at_here()
/// Throws interrupted if the currently running context was interrupted
/// and clears the interrupt flag.
[[gnu::hot]]
void
ircd::ctx::this_ctx::interruption_point()
{

View File

@ -22,20 +22,20 @@
/// The resolution is very low at 10ms but it is not expensive to use.
//#define RB_DEBUG_FS_AIO_SUBMIT_BLOCKING
#pragma GCC visibility push(hidden)
namespace ircd::fs::aio
{
struct system;
struct request;
size_t write(const fd &, const const_iovec_view &, const write_opts &);
size_t read(const vector_view<read_op> &);
size_t read(const fd &, const const_iovec_view &, const read_opts &);
size_t fsync(const fd &, const sync_opts &);
}
#pragma GCC visibility pop
/// AIO context instance from the system. Right now this is a singleton with
/// an extern instance pointer at fs::aio::context maintained by fs::aio::init.
struct ircd::fs::aio::system
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::system
{
struct aio_context;
@ -100,7 +100,8 @@ struct ircd::fs::aio::system
~system() noexcept;
};
struct ircd::fs::aio::system::aio_context
struct [[gnu::visibility("internal")]]
ircd::fs::aio::system::aio_context
{
static constexpr uint MAGIC {0xA10A10A1};
@ -117,7 +118,8 @@ struct ircd::fs::aio::system::aio_context
// 128 bytes + ring size
/// Generic request control block.
struct ircd::fs::aio::request
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::request
:iocb
{
struct read;
@ -152,7 +154,8 @@ struct ircd::fs::aio::request
};
/// Read request control block
struct ircd::fs::aio::request::read
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::request::read
:request
{
read(ctx::dock &, const int &fd, const read_opts &, const const_iovec_view &);
@ -160,7 +163,8 @@ struct ircd::fs::aio::request::read
};
/// Write request control block
struct ircd::fs::aio::request::write
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::request::write
:request
{
write(ctx::dock &, const int &fd, const write_opts &, const const_iovec_view &);
@ -168,7 +172,8 @@ struct ircd::fs::aio::request::write
};
/// fsync request control block
struct ircd::fs::aio::request::fsync
struct [[gnu::visibility("hidden")]]
ircd::fs::aio::request::fsync
:request
{
fsync(ctx::dock &, const int &fd, const sync_opts &);

View File

@ -12,17 +12,17 @@
#define HAVE_FS_IOU_H
#include <linux/io_uring.h>
#pragma GCC visibility push(hidden)
namespace ircd::fs::iou
{
struct system;
struct request;
size_t write(const fd &, const const_iovec_view &, const write_opts &);
size_t read(const fd &, const const_iovec_view &, const read_opts &);
void fsync(const fd &, const sync_opts &);
}
#pragma GCC visibility pop
struct ircd::fs::iou::system
struct [[gnu::visibility("hidden")]]
ircd::fs::iou::system
{
ctx::dock dock;