On September 18, 2018 5:53:54 AM GMT+02:00, Alexandre Oliva <aol...@redhat.com> wrote: >Back when we had the logic to output is_stmt but never exercised it, >it didn't matter that we didn't test for assembler support for it. >But there are still assemblers out there that do not support it, so >now that we enable the formerly latent is_stmt logic, we'd better make >sure the assembler can deal with it. > >Regstrapped on x86_64-linux-gnu, tested on an affected platform by the >bug reporter. Ok to install? Ok for GCC 8 branch?
OK. Thanks, Richard. >for gcc/ChangeLog > > PR bootstrap/87013 > * configure.ac: Check for .loc is_stmt support. > * configure, config.in: Rebuilt. > * dwarf2out.c (dwarf2out_source_line): Skip is_stmt > if not supported. >--- > gcc/config.in | 6 ++++++ > gcc/configure | 38 ++++++++++++++++++++++++++++++++++++++ > gcc/configure.ac | 9 +++++++++ > gcc/dwarf2out.c | 2 ++ > 4 files changed, 55 insertions(+) > >diff --git a/gcc/config.in b/gcc/config.in >index 2856e72d627df..775536e68e98f 100644 >--- a/gcc/config.in >+++ b/gcc/config.in >@@ -1297,6 +1297,12 @@ > #endif > > >+/* Define if your assembler supports the .loc is_stmt sub-directive. >*/ >+#ifndef USED_FOR_TARGET >+#undef HAVE_GAS_LOC_STMT >+#endif >+ >+ >/* Define if your assembler supports specifying the maximum number of >bytes to > skip when using the GAS .p2align command. */ > #ifndef USED_FOR_TARGET >diff --git a/gcc/configure b/gcc/configure >index 5ae43ec891778..b3205adc71888 100755 >--- a/gcc/configure >+++ b/gcc/configure >@@ -23942,6 +23942,44 @@ _ACEOF > ;; > esac > >+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for line >table is_stmt support" >&5 >+$as_echo_n "checking assembler for line table is_stmt support... " >>&6; } >+if test "${gcc_cv_as_is_stmt+set}" = set; then : >+ $as_echo_n "(cached) " >&6 >+else >+ gcc_cv_as_is_stmt=no >+ if test $in_tree_gas = yes; then >+ if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 16 \) \* >1000 + 92` >+ then gcc_cv_as_is_stmt=yes >+fi >+ elif test x$gcc_cv_as != x; then >+ $as_echo ' .text >+ .file 1 "conf.c" >+ .loc 1 1 0 is_stmt 1' > conftest.s >+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >>&5' >+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 >+ (eval $ac_try) 2>&5 >+ ac_status=$? >+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 >+ test $ac_status = 0; }; } >+ then >+ gcc_cv_as_is_stmt=yes >+ else >+ echo "configure: failed program was" >&5 >+ cat conftest.s >&5 >+ fi >+ rm -f conftest.o conftest.s >+ fi >+fi >+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_is_stmt" >>&5 >+$as_echo "$gcc_cv_as_is_stmt" >&6; } >+if test $gcc_cv_as_is_stmt = yes; then >+ >+$as_echo "#define HAVE_GAS_LOC_STMT 1" >>confdefs.h >+ >+fi >+ >+ >{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for line >table discriminator support" >&5 >$as_echo_n "checking assembler for line table discriminator support... >" >&6; } > if test "${gcc_cv_as_discriminator+set}" = set; then : >diff --git a/gcc/configure.ac b/gcc/configure.ac >index fceab2f59a98a..92cecbd763699 100644 >--- a/gcc/configure.ac >+++ b/gcc/configure.ac >@@ -3146,6 +3146,15 @@ case "${target}" in > ;; > esac > >+gcc_GAS_CHECK_FEATURE([line table is_stmt support], >+ gcc_cv_as_is_stmt, >+ [2,16,92],, >+[ .text >+ .file 1 "conf.c" >+ .loc 1 1 0 is_stmt 1],, >+[AC_DEFINE(HAVE_GAS_LOC_STMT, 1, >+ [Define if your assembler supports the .loc is_stmt >sub-directive.])]) >+ > gcc_GAS_CHECK_FEATURE([line table discriminator support], > gcc_cv_as_discriminator, > [2,19,51],, >diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c >index 48c5037862254..55fcb7be4afa7 100644 >--- a/gcc/dwarf2out.c >+++ b/gcc/dwarf2out.c >@@ -27931,8 +27931,10 @@ dwarf2out_source_line (unsigned int line, >unsigned int column, > > if (is_stmt != table->is_stmt) > { >+#if HAVE_GAS_LOC_STMT > fputs (" is_stmt ", asm_out_file); > putc (is_stmt ? '1' : '0', asm_out_file); >+#endif > } > if (SUPPORTS_DISCRIMINATOR && discriminator != 0) > {