This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PR87013] check for .loc is_stmt support in the assembler


On September 18, 2018 5:53:54 AM GMT+02:00, Alexandre Oliva <aoliva@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)
> 	{


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]