Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Mar 2020 13:21:43 +0000 (UTC)
From:      Diane Bruce <db@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r528777 - head/emulators/qemu-sbruno/files
Message-ID:  <202003201321.02KDLhqA067240@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: db
Date: Fri Mar 20 13:21:43 2020
New Revision: 528777
URL: https://svnweb.freebsd.org/changeset/ports/528777

Log:
  reated attachment 212362 [details]
  Fix emulators/qemu-sbruno build with lld 10.0.0
  
  As reported in bug 244251, with clang and lld 10.0.0 the emulators/qemu-sbruno port fails in the configure stage:
  
  ===>  Configuring for qemu-user-static-2.11.50.g20191211_3
  
  ERROR: We need to link the QEMU user mode binaries at a
         specific text address. Unfortunately your linker
         doesn't support either the -Ttext-segment option or
         printing the default linker script with --verbose.
         If you don't want the user mode binaries, pass the
         --disable-user option to configure.
  
  ===>  Script "configure" failed unexpectedly.
  Please report the problem to emulation@FreeBSD.org [maintainer] and attach
  the
  "/wrkdirs/usr/ports/emulators/qemu-user-static/work/qemu-bsd-user-d587db6/config.log"
  including the output of the failure of your make command. Also, it might be
  a good idea to provide an overview of all packages installed on your system
  (e.g. a /usr/local/sbin/pkg-static info -g -Ea).
  *** Error code 1
  
  This is because lld 10.0.0 no longer supports the -Ttext-segment option, and uses --image-base for similar functionality.
  
  I am proposing a patch that makes the configure script check for the --image-base option first, then the -Ttext-segment option.
  
  PR:		ports/212362
  Submitted by:	dim@FreeBSD.org
  Approved by:	Maintainer

Modified:
  head/emulators/qemu-sbruno/files/patch-configure   (contents, props changed)

Modified: head/emulators/qemu-sbruno/files/patch-configure
==============================================================================
--- head/emulators/qemu-sbruno/files/patch-configure	Fri Mar 20 13:00:40 2020	(r528776)
+++ head/emulators/qemu-sbruno/files/patch-configure	Fri Mar 20 13:21:43 2020	(r528777)
@@ -1,6 +1,6 @@
---- configure.orig	2018-02-08 19:22:54 UTC
+--- configure.orig	2019-12-12 02:59:10 UTC
 +++ configure
-@@ -3248,10 +3248,10 @@ fi
+@@ -3261,10 +3261,10 @@ fi
  # curses probe
  if test "$curses" != "no" ; then
    if test "$mingw32" = "yes" ; then
@@ -13,3 +13,62 @@
      curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
    fi
    curses_found=no
+@@ -3381,7 +3381,7 @@ for i in $glib_modules; do
+         glib_libs=$($pkg_config --libs $i)
+         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
+         LIBS="$glib_libs $LIBS"
+-        libs_qga="$glib_libs $libs_qga"
++        libs_qga="$glib_libs -lintl $libs_qga"
+     else
+         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
+     fi
+@@ -5517,27 +5517,30 @@ if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] 
+     cat > $TMPC <<EOF
+     int main(void) { return 0; }
+ EOF
+-    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
++    textseg_ldflags="-Wl,--image-base=$textseg_addr"
+     if ! compile_prog "" "$textseg_ldflags"; then
+-      # In case ld does not support -Ttext-segment, edit the default linker
+-      # script via sed to set the .text start addr.  This is needed on FreeBSD
+-      # at least.
+-      if ! $ld --verbose >/dev/null 2>&1; then
+-        error_exit \
+-            "We need to link the QEMU user mode binaries at a" \
+-            "specific text address. Unfortunately your linker" \
+-            "doesn't support either the -Ttext-segment option or" \
+-            "printing the default linker script with --verbose." \
+-            "If you don't want the user mode binaries, pass the" \
+-            "--disable-user option to configure."
+-      fi
++      textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
++      if ! compile_prog "" "$textseg_ldflags"; then
++        # In case ld does not support -Ttext-segment, edit the default linker
++        # script via sed to set the .text start addr.  This is needed on FreeBSD
++        # at least.
++        if ! $ld --verbose >/dev/null 2>&1; then
++          error_exit \
++              "We need to link the QEMU user mode binaries at a" \
++              "specific text address. Unfortunately your linker" \
++              "doesn't support either the -Ttext-segment option or" \
++              "printing the default linker script with --verbose." \
++              "If you don't want the user mode binaries, pass the" \
++              "--disable-user option to configure."
++        fi
+ 
+-      $ld --verbose | sed \
+-        -e '1,/==================================================/d' \
+-        -e '/==================================================/,$d' \
+-        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
+-        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
+-      textseg_ldflags="-Wl,-T../config-host.ld"
++        $ld --verbose | sed \
++          -e '1,/==================================================/d' \
++          -e '/==================================================/,$d' \
++          -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
++          -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
++        textseg_ldflags="-Wl,-T../config-host.ld"
++      fi
+     fi
+   fi
+ fi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202003201321.02KDLhqA067240>