Bug 43847 - test for plugin is using wrong objdump for host != target
Summary: test for plugin is using wrong objdump for host != target
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: bootstrap (show other bugs)
Version: 4.5.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-04-22 09:00 UTC by Kai Ruottu
Modified: 2013-04-26 07:51 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2010-04-22 16:54:18


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kai Ruottu 2010-04-22 09:00:16 UTC
The code in 'gcc-4.5.0/gcc/configure' :

-------------------- clip -----------------------------------
pluginlibs=
if test x"$enable_plugin" = x"yes"; then

  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exported symbols" >&5
$as_echo_n "checking for exported symbols... " >&6; }
  echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
  ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
  if $gcc_cv_objdump -T conftest | grep foobar > /dev/null; then
    : # No need to use a flag
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
$as_echo_n "checking for -rdynamic... " >&6; }
    ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
    if $gcc_cv_objdump -T conftest | grep foobar > /dev/null; then
      pluginlibs="-rdynamic"
    else
      enable_plugin=no
    fi
  fi
-------------------- clip -----------------------------------

will cause an error when the $target-objdump doesn't understand the $host
binaries like :

-------------------- clip -----------------------------------
Links are now set up to build a cross-compiler
from x86_64-unknown-linux-gnu to arm-unknown-elf.
checking for exported symbols...
/usr/local/cross-gcc-arm-elf-4.5.0/arm-elf/bin/objdump:
conftest: File format not recognized
checking for -rdynamic...
/usr/local/cross-gcc-arm-elf-4.5.0/arm-elf/bin/objdump:
conftest: File format not recognized
-------------------- clip -----------------------------------

The host GCC (CC) compiles and links a program and then the executable
will be looked with 'objdump' ($gcc_cv_objdump). But the latter is now
pointing to the target one!
Comment 1 Andrew Pinski 2010-04-22 16:54:18 UTC
Actually gcc_cv_objdump is correct for the rest of configure.ac; just we are using the incorrect one for the plugin test.

Also note we need to use the one for built for the build for the host.  (for Canadian crosses).
Comment 2 Matthias Klose 2010-06-04 09:51:42 UTC
having an objdump which supports both the host and the target works around this issue.
Comment 3 Matthias Klose 2010-06-08 08:35:56 UTC
proposed patch at
http://gcc.gnu.org/ml/gcc-patches/2010-06/msg00658.html
Comment 4 Matthias Klose 2010-09-09 18:23:08 UTC
Subject: Bug 43847

Author: doko
Date: Thu Sep  9 18:22:48 2010
New Revision: 164113

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164113
Log:
2010-09-09  Matthias Klose  <doko@ubuntu.com>

        PR bootstrap/43847
        * configure.ac (--enable-plugin): Enhance for cross builds.
        * configure: Regenerate.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/configure
    trunk/gcc/configure.ac

Comment 5 Matthias Klose 2010-09-09 18:25:41 UTC
Subject: Bug 43847

Author: doko
Date: Thu Sep  9 18:25:26 2010
New Revision: 164114

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164114
Log:
2010-09-09  Matthias Klose  <doko@ubuntu.com>

        PR bootstrap/43847
        * configure.ac (--enable-plugin): Enhance for cross builds.
        * configure: Regenerate.

Modified:
    branches/gcc-4_5-branch/gcc/ChangeLog
    branches/gcc-4_5-branch/gcc/configure
    branches/gcc-4_5-branch/gcc/configure.ac

Comment 6 Joern Clausen 2013-04-26 07:51:34 UTC
The current code (GCC 4.7.3)

  *)
    if test x$build = x$host; then
      export_sym_check="objdump${exeext} -T"
    elif test x$host = x$target; then
      export_sym_check="$gcc_cv_objdump -T"
    else
      export_sym_check=
    fi

does not use OBJDUMP or similar hints for the correct name and location of "objdump" when not doing a cross compile. On Solaris, I set

OBJDUMP=/usr/sfw/bin/gobjdump

which leads to

Links are now set up to build a native compiler for sparc-sun-solaris2.10.
checking for exported symbols... /software/local/gcc/src/gcc-4.7.3/gcc/configure: line 27313: objdump: command not found
yes
checking for -rdynamic... /software/local/gcc/src/gcc-4.7.3/gcc/configure: line 27323: objdump: command not found
no