Re: [DynInst_API:] Several Dyninst build issues


Date: Fri, 11 Apr 2014 10:51:07 -0500
From: Bill Williams <bill@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] Several Dyninst build issues
Jim, Englebert:

Taking these in order:

1) Yes, the libiberty you link against must be PIC. I've observed each of the following:

* libiberty.a is present and PIC
* libiberty.a is present and non-PIC; libiberty_pic.a is present and PIC.
* libiberty.so is present and, necessarily, PIC.
* libiberty.a is present and non-PIC; no other libiberty is present.

I'd check whether libiberty_pic.a is present if you're manually specifying the location of binutils. You can of course also go the automatic detect/download/build route.

2) Does /opt/krellroot_v2.1u3/bin/ld work for linking object files built with gcc? Is this the linker you intend to use? You're mixing toolchains here (that linker with /usr/bin/gcc) and I have no idea whether that's deliberate or not, and no idea whether the toolchains in question are compatible.

3) libdwarf must be built PIC or shared (we generally go for shared) in order to link--we do not support deferred linking of static libraries into a dyninst-based executable. Grab source and build with --enable-shared, or let Dyninst's CMake do it for you automatically.

4) That case should be wrapped in an #if defined(STT_GNU_IFUNC), and it is on the 8.2 branch.

On 04/11/2014 10:15 AM, Jim Galarowicz wrote:
Hi Dyninst team:

I have several issues to report, all relating to building Dyninst on
different platforms.   I still have Dyninst-8.1.2 the default because
Dyninst-8.2 doesn't build on BG/Q (as issue) and I now I see not on Ubuntu.

I have a potential user (if we can get past these build issues), who
can't get dyninst-8.1.2 to build on two different platforms.  So, I
tried to build Dyninst-8.2 on my ubuntu platform (which is one of
Engelbert's platforms of choice).   I ran into two issues.

*Issue 1: (I got around this by using my own binutils with fPIC enabled.)*

Linking CXX shared library libcommon.so
/usr/bin/ld:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libiberty.a(cplus-dem.o):
relocation R_X86_64_32S against `_sch_istable' can not be used when
making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libiberty.a: error
adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [common/libcommon.so.8.2.0] Error 1
make[1]: *** [common/CMakeFiles/common.dir/all] Error 2
make: *** [all] Error 2
error: Bad exit status from
/home/jeg/OpenSpeedShop_ROOT/INSTALL/jeg-OptiPlex-GX620/rpm-tmp.q8MdTd
(%build)

*Issue 2: (haven't gotten around and could use advice)*

Failure of 8.2 version to build with cmake version 2.8.11.2, gcc-4.8.1

+ CXX=g++ CC=gcc CXXFLAGS=-std=c++0x cmake .
-DCMAKE_INSTALL_PREFIX=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3
-DINSTALL_LIB_DIR=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3/lib64
-DINSTALL_INCLUDE_DIR=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3/include/dyninst
-DCMAKE_PREFIX_PATH=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DLIBDWARF_LIBRARIES=/opt/krellroot_v2.1u3/lib
-DLIBDWARF_INCLUDE_DIR=/opt/krellroot_v2.1u3/include
-DLIBELF_LIBRARIES=/opt/krellroot_v2.1u3/lib
-DLIBELF_INCLUDE_DIR=/opt/krellroot_v2.1u3/include -DPATH_BOOST=
-DIBERTY_LIBRARY=/opt/krellroot_v2.1u3/lib/libiberty.a
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:61
(message):
   The C compiler "/usr/bin/gcc" is not able to compile a simple test
program.
   It fails with the following output:
    Change Dir:
/home/jeg/OpenSpeedShop_ROOT/BUILD/jeg-OptiPlex-GX620/dyninst-8.2/CMakeFiles/CMakeTmp
   Run Build Command:/usr/bin/make "cmTryCompileExec3894022312/fast"
   /usr/bin/make -f CMakeFiles/cmTryCompileExec3894022312.dir/build.make
   CMakeFiles/cmTryCompileExec3894022312.dir/build
   make[1]: Entering directory
`/home/jeg/OpenSpeedShop_ROOT/BUILD/jeg-OptiPlex-GX620/dyninst-8.2/CMakeFiles/CMakeTmp'
   /usr/bin/cmake -E cmake_progress_report
/home/jeg/OpenSpeedShop_ROOT/BUILD/jeg-OptiPlex-GX620/dyninst-8.2/CMakeFiles/CMakeTmp/CMakeFiles
   1
   Building C object
   CMakeFiles/cmTryCompileExec3894022312.dir/testCCompiler.c.o
   /usr/bin/gcc -o
CMakeFiles/cmTryCompileExec3894022312.dir/testCCompiler.c.o
   -c
/home/jeg/OpenSpeedShop_ROOT/BUILD/jeg-OptiPlex-GX620/dyninst-8.2/CMakeFiles/CMakeTmp/testCCompiler.c
   Linking C executable cmTryCompileExec3894022312
   /usr/bin/cmake -E cmake_link_script
   CMakeFiles/cmTryCompileExec3894022312.dir/link.txt --verbose=1
   /usr/bin/gcc
CMakeFiles/cmTryCompileExec3894022312.dir/testCCompiler.c.o -o
   cmTryCompileExec3894022312 -rdynamic
   /opt/krellroot_v2.1u3/bin/ld: this linker was not configured to use
   sysroots
   collect2: error: ld returned 1 exit status
   make[1]: *** [cmTryCompileExec3894022312] Error 1
   make[1]: Leaving directory
`/home/jeg/OpenSpeedShop_ROOT/BUILD/jeg-OptiPlex-GX620/dyninst-8.2/CMakeFiles/CMakeTmp'
   make: *** [cmTryCompileExec3894022312/fast] Error 2

*  Issue 3: (Engelbert's ubuntu issue):*

hi jim,
another error has shown up which has to do with libdwarf.so. I did "sudo
apt-get install libdwarf-dev" but this brought me no relief... Here' the
error:
...
../../common/src/arch-x86.C: In member function 'bool
NS_x86::instruction::isNop() const':
../../common/src/arch-x86.C:5972:8: warning: variable
'displacement_location' set but not used [-Wunused-but-set-variable]
     int displacement_location = 0;
         ^
../../common/src/arch-x86.C:5973:8: warning: variable
'displacement_size' set but not used [-Wunused-but-set-variable]
     int displacement_size = 0;
         ^
Compiling ../../common/src/arch-power.C
In file included from ../../common/src/arch-power.C:32:0:
../../common/h/arch-power.h: In constructor
'NS_power::instruction::instruction(const void*)':
../../common/h/arch-power.h:782:34: warning: cast from type 'const
void*' to type 'NS_power::instructUnion*' casts away qualifiers
[-Wcast-qual]
        insn_ = *((instructUnion *)ptr);
                                   ^
Compiling ../../common/src/debug_common.C
Compiling ../../common/src/VariableLocation.C
Compiling ../../common/src/Buffer.C
Updating build voucher information: V_libcommon
common build voucher being constructed for libcommon: BUILD#0
      $common: v8.1.2-1 libcommon #0 2014/04/11 11:18
etijskens@bert-macbookpro-ubuntu $
Compiling V_libcommon.o
Linking libcommon.so.8.1.2
Making symlink libcommon.so.8.1.2 to libcommon.so.8.1
Making symlink libcommon.so.8.1 to libcommon.so
make[1]: Leaving directory
`/home/etijskens/software/openspeedshop-release-2.1/BUILD/bert-MacBookPro-ubuntu/dyninst-8.1.2/common/x86_64-unknown-linux2.4'
make[1]: Entering directory
`/home/etijskens/software/openspeedshop-release-2.1/BUILD/bert-MacBookPro-ubuntu/dyninst-8.1.2/dwarf/x86_64-unknown-linux2.4'
../../make.library.tmpl:254: DEPENDS: No such file or directory
Building depends files
make[1]: Leaving directory
`/home/etijskens/software/openspeedshop-release-2.1/BUILD/bert-MacBookPro-ubuntu/dyninst-8.1.2/dwarf/x86_64-unknown-linux2.4'
make[1]: Entering directory
`/home/etijskens/software/openspeedshop-release-2.1/BUILD/bert-MacBookPro-ubuntu/dyninst-8.1.2/dwarf/x86_64-unknown-linux2.4'
Compiling ../src/dwarfResult.C
Compiling ../src/dwarfExprParser.C
Compiling ../src/dwarfFrameParser.C
Compiling ../src/dwarfHandle.C
Updating build voucher information: V_libdynDwarf
dynDwarf build voucher being constructed for libdynDwarf: BUILD#0
      $dynDwarf: v8.1.2-1 libdynDwarf #0 2014/04/11 11:18
etijskens@bert-macbookpro-ubuntu $
Compiling V_libdynDwarf.o
Linking libdynDwarf.so.8.1.2
/usr/bin/ld: /usr/lib/libdwarf.a(dwarf_alloc.o): relocation R_X86_64_32S
against `.rodata' can not be used when making a shared object; recompile
with -fPIC
/usr/lib/libdwarf.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[1]: *** [libdynDwarf.so.8.1.2] Error 1
make[1]: Leaving directory
`/home/etijskens/software/openspeedshop-release-2.1/BUILD/bert-MacBookPro-ubuntu/dyninst-8.1.2/dwarf/x86_64-unknown-linux2.4'
make: *** [dwarf] Error 2
error: Bad exit status from
/home/etijskens/software/openspeedshop-release-2.1/INSTALL/bert-MacBookPro-ubuntu/rpm-tmp.Dm8RP9
(%build)


*Issue 4:  (Engelbert's second issue on a non-ubuntu platform):*

tried installing the latest version of open speed shop
(rc-openspeedshop-release-2.1-u3.tar.gz) on a scientific linux (using
gcc 4.8.1) but get the error below
i used this command to get it going

$ ./install-tool --build-offline --openss-prefix $VSC_DATA/oss-2.1
--with-openmpi
/apps/antwerpen/turing/harpertown/software/OpenMPI/1.6.5-GCC-4.8.1
...
Compiling ../src/emitElf.C
In file included from
/data/antwerpen/201/vsc20170/oss-2.1/include/boost/tuple/tuple.hpp:33:0,
                  from ../src/emitElfStatic.h:47,
                  from ../src/emitElf.C:40:
/data/antwerpen/201/vsc20170/oss-2.1/include/boost/tuple/detail/tuple_basic.hpp:
In function ‘typename boost::tuples::access_traits<typename
boost::tuples::element<N, boost::tuples::cons<HT, TT>
 >::type>::const_type boost::tuples::get(const boost::tuples::cons<HT,
TT>&)’:
/data/antwerpen/201/vsc20170/oss-2.1/include/boost/tuple/detail/tuple_basic.hpp:228:45:
warning: typedef ‘cons_element’ locally defined but not used
[-Wunused-local-typedefs]
    typedef BOOST_DEDUCED_TYPENAME impl::type cons_element;
                                              ^
../src/emitElf.C: In function ‘int elfSymType(Dyninst::SymtabAPI::Symbol*)’:
../src/emitElf.C:171:39: error: ‘STT_GNU_IFUNC’ was not declared in this
scope
       case Symbol::ST_INDIRECT: return STT_GNU_IFUNC;
                                        ^
make[1]: *** [emitElf.o] Error 1
make[1]: Leaving directory
`/data/antwerpen/201/vsc20170/openspeedshop-release-2.1/BUILD/r2e2cn03/dyninst-8.1.2/symtabAPI/x86_64-unknown-linux2.4'
make: *** [symtabAPI] Error 2
error: Bad exit status from
/user/antwerpen/201/vsc20170/data/openspeedshop-release-2.1/INSTALL/r2e2cn03/rpm-tmp.55545
(%build)


RPM build errors:
     Macro %target_prefix has empty body
     Macro %target_prefix has empty body
     Bad exit status from
/user/antwerpen/201/vsc20170/data/openspeedshop-release-2.1/INSTALL/r2e2cn03/rpm-tmp.55545
(%build)
DYNINST FAILED TO BUILD - TERMINATING BUILD SCRIPT.  Please check for
errors.  sys=r2e2cn03


Any help will be greatly appreciated.

Thanks
Jim G



_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api



--
--bw

Bill Williams
Paradyn Project
bill@xxxxxxxxxxx
[← Prev in Thread] Current Thread [Next in Thread→]