mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-24 21:16:15 +01:00
gobject: try to link with -Wl,-z,nodelete
Since the type system does not support reloading its data and assumes that libgobject remains loaded for the lifetime of the process, we should link libgobject with a flag indicating that it can't be unloaded. https://bugzilla.gnome.org/show_bug.cgi?id=707298
This commit is contained in:
parent
7089cf8967
commit
2b178c762f
34
configure.ac
34
configure.ac
@ -3468,6 +3468,40 @@ fi
|
|||||||
|
|
||||||
AC_SUBST(GLIB_LINK_FLAGS)
|
AC_SUBST(GLIB_LINK_FLAGS)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Check for -z,nodelete linker flag: the type system assumes that
|
||||||
|
dnl libgobject stays loaded for the lifetime of the process.
|
||||||
|
dnl Since ld.bfd does not treat wrong -z options as fatal by default,
|
||||||
|
dnl we also try to check for the --fatal-warnings linker flag if
|
||||||
|
dnl auto-detecting.
|
||||||
|
dnl
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([znodelete],
|
||||||
|
[AS_HELP_STRING([--disable-znodelete],
|
||||||
|
[avoid linking with -z,nodelete])],,
|
||||||
|
[SAVED_LDFLAGS="${LDFLAGS}"
|
||||||
|
AC_MSG_CHECKING([for --fatal-warnings linker flag])
|
||||||
|
LDFLAGS=-Wl,--fatal-warnings
|
||||||
|
AC_TRY_LINK([], [int main (void) { return 0; }],
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
[ldflags_fatal=-Wl,--fatal-warnings],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
ldflags_fatal=)
|
||||||
|
AC_MSG_CHECKING([for -z,nodelete linker flag])
|
||||||
|
LDFLAGS="$ldflags_fatal -Wl,-z,nodelete"
|
||||||
|
AC_TRY_LINK([], [int main (void) { return 0; }],
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
enable_znodelete=yes,
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
enable_znodelete=no)
|
||||||
|
LDFLAGS="${SAVED_LDFLAGS}"])
|
||||||
|
|
||||||
|
if test "x${enable_znodelete}" = "xyes"; then
|
||||||
|
GOBJECT_LINK_FLAGS=-Wl,-z,nodelete
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(GOBJECT_LINK_FLAGS)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for -fvisibility=hidden to determine if we can do GNU-style
|
dnl Check for -fvisibility=hidden to determine if we can do GNU-style
|
||||||
dnl visibility attributes for symbol export control
|
dnl visibility attributes for symbol export control
|
||||||
|
@ -45,6 +45,7 @@ endif
|
|||||||
|
|
||||||
libgobjectincludedir = $(includedir)/glib-2.0/gobject
|
libgobjectincludedir = $(includedir)/glib-2.0/gobject
|
||||||
libgobject_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
|
libgobject_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
|
||||||
|
$(GOBJECT_LINK_FLAGS) \
|
||||||
$(gobject_win32_res_ldflag) \
|
$(gobject_win32_res_ldflag) \
|
||||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||||
-export-dynamic $(no_undefined)
|
-export-dynamic $(no_undefined)
|
||||||
|
Loading…
Reference in New Issue
Block a user