[V2,10/15] gdb: sim: buildsystem changes to accommodate libsframe

Message ID 20221017221612.495324-11-indu.bhagat@oracle.com
State Not Applicable
Headers
Series Definition and support for SFrame unwind format |

Checks

Context Check Description
snail/binutils-gdb-check fail Git am fail log

Commit Message

Indu Bhagat Oct. 17, 2022, 10:16 p.m. UTC
  [No changes in V2]

Both gdb and sim need buildsystem fixes to now include libsframe for a
successful build.
---
 gdb/Makefile.in           |  8 ++++++--
 gdb/acinclude.m4          |  4 ++--
 gdb/configure             | 35 +++++++++++++++++++++++++++++++----
 gdb/configure.ac          | 11 +++++++++++
 sim/common/Make-common.in |  7 +++++--
 5 files changed, 55 insertions(+), 10 deletions(-)
 mode change 100755 => 100644 gdb/configure
  

Comments

Mike Frysinger Oct. 27, 2022, 5:36 p.m. UTC | #1
On 17 Oct 2022 15:16, Indu Bhagat via Binutils wrote:
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -2167,6 +2167,17 @@ fi
>  AC_SUBST(LIBCTF)
>  AC_SUBST(CTF_DEPS)
>  
> +GCC_ENABLE([libsframe], [yes], [], [Handle .sframe sections])
> +if test x${enable_static} = xno; then
> +  LIBSFRAME="-Wl,--rpath,../libsframe/.libs ../libsframe/.libs/libsframe.so"
> +  SFRAME_DEPS="../libsframe/.libs/libsframe.so"
> +else
> +  LIBSFRAME="../libsframe/.libs/libsframe.a"
> +  SFRAME_DEPS="$LIBSFRAME"
> +fi

this logic is not portable.  you're using libtool to generate this library,
but then trying to go behind its back and hardcode paths that only libtool
is supposed to know about.

the "libsframe.so" path doesn't work on macOS, Windows, etc...
-mike
  
Indu Bhagat Oct. 30, 2022, 7:16 a.m. UTC | #2
On 10/27/22 10:36, Mike Frysinger wrote:
> On 17 Oct 2022 15:16, Indu Bhagat via Binutils wrote:
>> --- a/gdb/configure.ac
>> +++ b/gdb/configure.ac
>> @@ -2167,6 +2167,17 @@ fi
>>   AC_SUBST(LIBCTF)
>>   AC_SUBST(CTF_DEPS)
>>   
>> +GCC_ENABLE([libsframe], [yes], [], [Handle .sframe sections])
>> +if test x${enable_static} = xno; then
>> +  LIBSFRAME="-Wl,--rpath,../libsframe/.libs ../libsframe/.libs/libsframe.so"
>> +  SFRAME_DEPS="../libsframe/.libs/libsframe.so"
>> +else
>> +  LIBSFRAME="../libsframe/.libs/libsframe.a"
>> +  SFRAME_DEPS="$LIBSFRAME"
>> +fi
> 
> this logic is not portable.  you're using libtool to generate this library,
> but then trying to go behind its back and hardcode paths that only libtool
> is supposed to know about.
> 
> the "libsframe.so" path doesn't work on macOS, Windows, etc...
> -mike

Thanks. I have removed it in V3 (that I will send next). It didn't make 
sense to have added this in the first place. libsframe is required for 
encoder/decoder support and as such cannot be disabled from the build as 
it is now needed by libbfd.

Indu
  

Patch

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index c528ee5aa80..492e08d6c63 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -161,6 +161,10 @@  LIBIBERTY = ../libiberty/libiberty.a
 LIBCTF = @LIBCTF@
 CTF_DEPS = @CTF_DEPS@
 
+# Where is the SFrame library?  Typically in ../libsframe.
+LIBSFRAME = @LIBSFRAME@
+SFRAME_DEPS = @SFRAME_DEPS@
+
 # Where is the BFD library?  Typically in ../bfd.
 BFD_DIR = ../bfd
 BFD = $(BFD_DIR)/libbfd.a
@@ -650,7 +654,7 @@  INTERNAL_LDFLAGS = \
 # Libraries and corresponding dependencies for compiling gdb.
 # XM_CLIBS, defined in *config files, have host-dependent libs.
 # LIBIBERTY appears twice on purpose.
-CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) $(ZSTD_LIBS) \
+CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(LIBSFRAME) $(ZLIB) $(ZSTD_LIBS) \
         $(LIBSUPPORT) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
 	$(XM_CLIBS) $(GDBTKLIBS)  $(LIBBACKTRACE_LIB) \
 	@LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
@@ -658,7 +662,7 @@  CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) $(ZSTD_LIBS) \
 	$(WIN32LIBS) $(LIBGNU) $(LIBGNU_EXTRA_LIBS) $(LIBICONV) \
 	$(LIBMPFR) $(LIBGMP) $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) \
 	$(DEBUGINFOD_LIBS) $(LIBBABELTRACE_LIB)
-CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(CTF_DEPS) \
+CDEPS = $(NAT_CDEPS) $(SIM) $(SFRAME_DEPS) $(BFD) $(READLINE_DEPS) $(CTF_DEPS) \
 	$(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU) \
 	$(LIBSUPPORT)
 
diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 62fa66c7af3..8bbc5f0739e 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -234,9 +234,9 @@  AC_DEFUN([GDB_AC_CHECK_BFD], [
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
   ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
+  LDFLAGS="-L../bfd -L../libiberty -L../libsframe/.libs/ $ZLIBDIR $LDFLAGS"
   intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $ZSTD_LIBS $intl $LIBS"
+  LIBS="-lbfd -liberty -lz -lsframe $ZSTD_LIBS $intl $LIBS"
   AC_CACHE_CHECK(
     [$1],
     [$2],
diff --git a/gdb/configure b/gdb/configure
old mode 100755
new mode 100644
index 33677262783..81afd5edac8
--- a/gdb/configure
+++ b/gdb/configure
@@ -631,6 +631,8 @@  GDB_NM_FILE
 LTLIBXXHASH
 LIBXXHASH
 HAVE_LIBXXHASH
+SFRAME_DEPS
+LIBSFRAME
 CTF_DEPS
 LIBCTF
 LTLIBBABELTRACE
@@ -939,6 +941,7 @@  with_libbabeltrace_prefix
 with_libbabeltrace_type
 with_xxhash
 enable_libctf
+enable_libsframe
 with_libxxhash_prefix
 with_libxxhash_type
 enable_unit_tests
@@ -1617,6 +1620,7 @@  Optional Features:
   --enable-libbacktrace   use libbacktrace to write a backtrace after a fatal
                           signal.
   --enable-libctf         Handle .ctf type-info sections [default=yes]
+  --enable-libsframe      Handle .sframe sections [default=yes]
   --enable-unit-tests     Enable the inclusion of unit tests when compiling
                           GDB
 
@@ -17412,9 +17416,9 @@  WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
   ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
+  LDFLAGS="-L../bfd -L../libiberty -L../libsframe/.libs/ $ZLIBDIR $LDFLAGS"
   intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $ZSTD_LIBS $intl $LIBS"
+  LIBS="-lbfd -liberty -lz -lsframe $ZSTD_LIBS $intl $LIBS"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF support in BFD" >&5
 $as_echo_n "checking for ELF support in BFD... " >&6; }
 if ${gdb_cv_var_elf+:} false; then :
@@ -17527,9 +17531,9 @@  fi
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
   ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
+  LDFLAGS="-L../bfd -L../libiberty -L../libsframe/.libs/ $ZLIBDIR $LDFLAGS"
   intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $ZSTD_LIBS $intl $LIBS"
+  LIBS="-lbfd -liberty -lz -lsframe $ZSTD_LIBS $intl $LIBS"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O support in BFD" >&5
 $as_echo_n "checking for Mach-O support in BFD... " >&6; }
 if ${gdb_cv_var_macho+:} false; then :
@@ -19498,6 +19502,29 @@  fi
 
 
 
+ # Check whether --enable-libsframe was given.
+if test "${enable_libsframe+set}" = set; then :
+  enableval=$enable_libsframe;
+      case "$enableval" in
+       yes|no) ;;
+       *) as_fn_error $? "Argument to enable/disable libsframe must be yes or no" "$LINENO" 5 ;;
+      esac
+
+else
+  enable_libsframe=yes
+fi
+
+
+if test x${enable_static} = xno; then
+  LIBSFRAME="-Wl,--rpath,../libsframe/.libs ../libsframe/.libs/libsframe.so"
+  SFRAME_DEPS="../libsframe/.libs/libsframe.so"
+else
+  LIBSFRAME="../libsframe/.libs/libsframe.a"
+  SFRAME_DEPS="$LIBSFRAME"
+fi
+
+
+
 # If nativefile (NAT_FILE) is not set in configure.nat, we link to an
 # empty version.
 
diff --git a/gdb/configure.ac b/gdb/configure.ac
index fceb80e8c9d..c302e58b4bf 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -2167,6 +2167,17 @@  fi
 AC_SUBST(LIBCTF)
 AC_SUBST(CTF_DEPS)
 
+GCC_ENABLE([libsframe], [yes], [], [Handle .sframe sections])
+if test x${enable_static} = xno; then
+  LIBSFRAME="-Wl,--rpath,../libsframe/.libs ../libsframe/.libs/libsframe.so"
+  SFRAME_DEPS="../libsframe/.libs/libsframe.so"
+else
+  LIBSFRAME="../libsframe/.libs/libsframe.a"
+  SFRAME_DEPS="$LIBSFRAME"
+fi
+AC_SUBST(LIBSFRAME)
+AC_SUBST(SFRAME_DEPS)
+
 # If nativefile (NAT_FILE) is not set in configure.nat, we link to an
 # empty version.
 
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index b07ec96e147..8a49e0b4ef2 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -222,11 +222,14 @@  SIM_HW_DEVICES = cfi core pal glue $(SIM_EXTRA_HW_DEVICES)
 ZLIB = $(zlibdir) -lz
 LIBIBERTY_LIB = ../../libiberty/libiberty.a
 BFD_LIB = ../../bfd/libbfd.a
+LIBSFRAME_LIB = ../../libsframe/.libs/libsframe.a
 OPCODES_LIB = ../../opcodes/libopcodes.a
 CONFIG_LIBS = $(COMMON_LIBS) @LIBS@ $(ZLIB) $(ZSTD_LIBS)
-LIBDEPS = $(BFD_LIB) $(OPCODES_LIB) $(LIBINTL_DEP) $(LIBIBERTY_LIB)
+LIBDEPS = $(BFD_LIB) $(OPCODES_LIB) $(LIBINTL_DEP) $(LIBIBERTY_LIB) \
+	  $(LIBSFRAME_LIB)
 EXTRA_LIBS = $(BFD_LIB) $(OPCODES_LIB) $(LIBINTL) $(LIBIBERTY_LIB) \
-	$(CONFIG_LIBS) $(SIM_EXTRA_LIBS) $(LIBDL) $(LIBGNU) $(LIBGNU_EXTRA_LIBS)
+	     $(LIBSFRAME_LIB) $(CONFIG_LIBS) $(SIM_EXTRA_LIBS) \
+	     $(LIBDL) $(LIBGNU) $(LIBGNU_EXTRA_LIBS)
 
 COMMON_OBJS_NAMES = \
 	callback.o \