initial commit
Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
66
libs/wxWidgets-3.3.1/include/wx/private/elfversion.h
Normal file
66
libs/wxWidgets-3.3.1/include/wx/private/elfversion.h
Normal file
@@ -0,0 +1,66 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/private/elfversion.h
|
||||
// Purpose: Helper macro for assigning ELF version to a symbol.
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2025-04-14
|
||||
// Copyright: (c) 2025 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_PRIVATE_ELFVERSION_H_
|
||||
#define _WX_PRIVATE_ELFVERSION_H_
|
||||
|
||||
// This symbol is defined by configure if .symver directive is supported.
|
||||
#ifdef wxHAVE_ELF_SYMVER
|
||||
// Prefer to use the attribute if it is available, as it works with LTO,
|
||||
// unlike the assembler directive.
|
||||
#ifdef __has_attribute
|
||||
#if __has_attribute(__symver__)
|
||||
#define wxELF_SYMVER(sym, symver) __attribute__((__symver__(symver)))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef wxELF_SYMVER
|
||||
#define wxELF_SYMVER(sym, symver) __asm__(".symver " sym "," symver);
|
||||
#endif
|
||||
|
||||
// Using multiple versions for the same symbols may be not supported, in
|
||||
// which case we omit it: this results in generating 2 default versions for
|
||||
// the same symbol, which looks wrong, but doesn't seem to cause any
|
||||
// problems.
|
||||
#ifdef wxHAVE_ELF_SYMVER_MULTIPLE
|
||||
#define wxELF_SYMVER_NON_DEFAULT(sym, ver) wxELF_SYMVER(sym, ver)
|
||||
#else
|
||||
#define wxELF_SYMVER_NON_DEFAULT(sym, ver)
|
||||
#endif
|
||||
|
||||
// Our version tag depends on whether we're using Unicode or not.
|
||||
#if wxUSE_UNICODE
|
||||
#define wxMAKE_ELF_VERSION_TAG(ver) "WXU_" ver
|
||||
#else
|
||||
#define wxMAKE_ELF_VERSION_TAG(ver) "WX_" ver
|
||||
#endif
|
||||
|
||||
// This macro is used to repair ABI compatibility problems with the symbols
|
||||
// versions if any symbols are added with the wrong "3.4" version tag
|
||||
// because their definitions in the version script were erroneous.
|
||||
//
|
||||
// It allows to define both the old, compatible version ("3.4") and the new
|
||||
// ("3.4.N") one for the given symbol to restore ABI compatibility with the
|
||||
// previous releases without breaking it with the release containing the
|
||||
// corrected version.
|
||||
//
|
||||
// The parameters are the mangled symbol name (the simplest way to get is
|
||||
// probably to use nm or readelf on the object file or library) and the
|
||||
// part of the version after "WX[U]_", i.e. the version number itself.
|
||||
//
|
||||
// Note that this macro takes strings, not symbols, and that it includes
|
||||
// the trailing semicolon for consistency with the empty version below.
|
||||
#define wxELF_VERSION_COMPAT(sym, ver) \
|
||||
wxELF_SYMVER_NON_DEFAULT(sym, sym "@" wxMAKE_ELF_VERSION_TAG("3.4")) \
|
||||
wxELF_SYMVER(sym, sym "@@" wxMAKE_ELF_VERSION_TAG(ver))
|
||||
#else
|
||||
#define wxELF_VERSION_COMPAT(sym, ver)
|
||||
#endif
|
||||
|
||||
#endif // _WX_PRIVATE_ELFVERSION_H_
|
||||
Reference in New Issue
Block a user