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:
Alexandre Rostovtsev 2013-09-02 13:59:18 -04:00
parent 7089cf8967
commit 2b178c762f
2 changed files with 35 additions and 0 deletions

View File

@ -3468,6 +3468,40 @@ fi
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 Check for -fvisibility=hidden to determine if we can do GNU-style
dnl visibility attributes for symbol export control

View File

@ -45,6 +45,7 @@ endif
libgobjectincludedir = $(includedir)/glib-2.0/gobject
libgobject_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
$(GOBJECT_LINK_FLAGS) \
$(gobject_win32_res_ldflag) \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-export-dynamic $(no_undefined)