Add an autoconf test to test whether the .section .gnu<warning>
works with the linker on the system, and define _warn_references to nothing if not.
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
/* config.h.in. Generated from configure.in by autoheader. */
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
|
/* Define if .gnu.warning accepts long strings. */
|
||||||
|
#undef HAS_GNU_WARNING_LONG
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
#undef HAVE_DLFCN_H
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
@@ -114,9 +117,6 @@
|
|||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#undef PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
|||||||
18
configure.in
18
configure.in
@@ -37,6 +37,24 @@ AC_FUNC_MALLOC
|
|||||||
AC_FUNC_REALLOC
|
AC_FUNC_REALLOC
|
||||||
AC_CHECK_FUNCS(strcasecmp strdup strndup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp)
|
AC_CHECK_FUNCS(strcasecmp strdup strndup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp)
|
||||||
|
|
||||||
|
#check if .section.gnu.warning accepts long strings (for __warn_references)
|
||||||
|
AC_LANG_PUSH([C])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if .gnu.warning accepts long strings])
|
||||||
|
AC_LINK_IFELSE([[
|
||||||
|
extern void json_object_get();
|
||||||
|
__asm__(".section .gnu.json_object_get,\n\t.ascii \"Please link against libjson-c instead of libjson\"\n\t.text");
|
||||||
|
|
||||||
|
int main(int c,char* v) {return 0;}
|
||||||
|
]], [
|
||||||
|
AC_DEFINE(HAS_GNU_WARNING_LONG, 1, [Define if .gnu.warning accepts long strings.])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_LANG_POP([C])
|
||||||
|
|
||||||
AM_PROG_LIBTOOL
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|||||||
@@ -7,11 +7,10 @@
|
|||||||
|
|
||||||
#ifndef __warn_references
|
#ifndef __warn_references
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#if defined(__GNUC__) && defined (HAS_GNU_WARNING_LONG)
|
||||||
|
|
||||||
#define __warn_references(sym,msg) \
|
#define __warn_references(sym,msg) \
|
||||||
__asm(".pushsection .gnu.warning." #sym "\n" \
|
__asm__(".section .gnu" #sym ",\n\t.ascii \"" msg "\"\n\t.text");
|
||||||
".ascii \"" msg "\"\n" \
|
|
||||||
".popsection");
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define __warn_references(sym,msg) /* nothing */
|
#define __warn_references(sym,msg) /* nothing */
|
||||||
|
|||||||
Reference in New Issue
Block a user