diff options
-rw-r--r-- | libffi/ChangeLog | 10 | ||||
-rwxr-xr-x | libffi/configure | 72 | ||||
-rw-r--r-- | libffi/configure.ac | 28 | ||||
-rw-r--r-- | libffi/fficonfig.h.in | 6 | ||||
-rw-r--r-- | libffi/src/x86/sysv.S | 12 |
5 files changed, 125 insertions, 3 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog index 6abe696..01a71a8 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,13 @@ +2010-05-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (libffi_cv_as_x86_pcrel): Check for illegal in as + output, too. + (libffi_cv_as_ascii_pseudo_op): Check for .ascii. + (libffi_cv_as_string_pseudo_op): Check for .string. + * configure: Regenerate. + * fficonfig.h.in: Regenerate. + * src/x86/sysv.S (.eh_frame): Use .ascii, .string or error. + 2010-04-07 Jakub Jelinek <jakub@redhat.com> * regex.c (byte_re_match_2_internal): Avoid set but not used diff --git a/libffi/configure b/libffi/configure index 5555e51..a63368b 100755 --- a/libffi/configure +++ b/libffi/configure @@ -12397,7 +12397,7 @@ else libffi_cv_as_x86_pcrel=yes echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s - if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then libffi_cv_as_x86_pcrel=no fi @@ -12409,6 +12409,76 @@ $as_echo "$libffi_cv_as_x86_pcrel" >&6; } $as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .ascii pseudo-op support" >&5 +$as_echo_n "checking assembler .ascii pseudo-op support... " >&6; } +if test "${libffi_cv_as_ascii_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + libffi_cv_as_ascii_pseudo_op=unknown + # Check if we have .ascii + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +asm (".ascii \"string\""); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libffi_cv_as_ascii_pseudo_op=yes +else + libffi_cv_as_ascii_pseudo_op=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_ascii_pseudo_op" >&5 +$as_echo "$libffi_cv_as_ascii_pseudo_op" >&6; } + if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then + +$as_echo "#define HAVE_AS_ASCII_PSEUDO_OP 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .string pseudo-op support" >&5 +$as_echo_n "checking assembler .string pseudo-op support... " >&6; } +if test "${libffi_cv_as_string_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + libffi_cv_as_string_pseudo_op=unknown + # Check if we have .string + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +asm (".string \"string\""); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libffi_cv_as_string_pseudo_op=yes +else + libffi_cv_as_string_pseudo_op=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_string_pseudo_op" >&5 +$as_echo "$libffi_cv_as_string_pseudo_op" >&6; } + if test "x$libffi_cv_as_string_pseudo_op" = xyes; then + +$as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h + + fi fi case "$target" in diff --git a/libffi/configure.ac b/libffi/configure.ac index 1b484f9..d4644a3 100644 --- a/libffi/configure.ac +++ b/libffi/configure.ac @@ -266,7 +266,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64 libffi_cv_as_x86_pcrel, [ libffi_cv_as_x86_pcrel=yes echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s - if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then libffi_cv_as_x86_pcrel=no fi ]) @@ -274,6 +274,32 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64 AC_DEFINE(HAVE_AS_X86_PCREL, 1, [Define if your assembler supports PC relative relocs.]) fi + + AC_CACHE_CHECK([assembler .ascii pseudo-op support], + libffi_cv_as_ascii_pseudo_op, [ + libffi_cv_as_ascii_pseudo_op=unknown + # Check if we have .ascii + AC_TRY_COMPILE([asm (".ascii \"string\"");],, + [libffi_cv_as_ascii_pseudo_op=yes], + [libffi_cv_as_ascii_pseudo_op=no]) + ]) + if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then + AC_DEFINE(HAVE_AS_ASCII_PSEUDO_OP, 1, + [Define if your assembler supports .ascii.]) + fi + + AC_CACHE_CHECK([assembler .string pseudo-op support], + libffi_cv_as_string_pseudo_op, [ + libffi_cv_as_string_pseudo_op=unknown + # Check if we have .string + AC_TRY_COMPILE([asm (".string \"string\"");],, + [libffi_cv_as_string_pseudo_op=yes], + [libffi_cv_as_string_pseudo_op=no]) + ]) + if test "x$libffi_cv_as_string_pseudo_op" = xyes; then + AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1, + [Define if your assembler supports .string.]) + fi fi case "$target" in diff --git a/libffi/fficonfig.h.in b/libffi/fficonfig.h.in index 7231cc5..e012ebb 100644 --- a/libffi/fficonfig.h.in +++ b/libffi/fficonfig.h.in @@ -33,6 +33,9 @@ */ #undef HAVE_ALLOCA_H +/* Define if your assembler supports .ascii. */ +#undef HAVE_AS_ASCII_PSEUDO_OP + /* Define if your assembler supports .cfi_* directives. */ #undef HAVE_AS_CFI_PSEUDO_OP @@ -43,6 +46,9 @@ */ #undef HAVE_AS_SPARC_UA_PCREL +/* Define if your assembler supports .string. */ +#undef HAVE_AS_STRING_PSEUDO_OP + /* Define if your assembler supports unwind section type. */ #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE diff --git a/libffi/src/x86/sysv.S b/libffi/src/x86/sysv.S index f4b6c1e..2e5e3da 100644 --- a/libffi/src/x86/sysv.S +++ b/libffi/src/x86/sysv.S @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1996, 1998, 2001-2003, 2005, 2008 Red Hat, Inc. + sysv.S - Copyright (c) 1996, 1998, 2001-2003, 2005, 2008, 2010 Red Hat, Inc. X86 Foreign Function Interface @@ -331,11 +331,21 @@ ffi_closure_raw_SYSV: .LSCIE1: .long 0x0 /* CIE Identifier Tag */ .byte 0x1 /* CIE Version */ +#ifdef HAVE_AS_ASCII_PSEUDO_OP #ifdef __PIC__ .ascii "zR\0" /* CIE Augmentation */ #else .ascii "\0" /* CIE Augmentation */ #endif +#elif defined HAVE_AS_STRING_PSEUDO_OP +#ifdef __PIC__ + .string "zR" /* CIE Augmentation */ +#else + .string "" /* CIE Augmentation */ +#endif +#else +#error missing .ascii/.string +#endif .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ .byte 0x8 /* CIE RA Column */ |