[DynInst_API:] Compiling dyninst-9.1.0 on aarch64


Date: Mon, 21 Dec 2015 10:31:42 -0500
From: William Cohen <wcohen@xxxxxxxxxx>
Subject: [DynInst_API:] Compiling dyninst-9.1.0 on aarch64
Hi All,

I made a very minor change to the dyninst-9.1.0-1.fc24 source rpm
being built on x86 to attempt to build it on aarch64.  I submitted the
tweaked source rpm to build on aarch64 fedora rawhide as a scratch
build:

http://arm.koji.fedoraproject.org/koji/taskinfo?taskID=3331297

The buildlog shows the build failing because R_AARCH64_* defines are missing:


cd /builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/common && /usr/bin/c++   -DCOMMON_LIB -DUSE_PARSE_API -DWITHOUT_SYMLITE -DWITH_SYMTAB_API -Daarch64_unknown_linux -Darch_64bit -Darch_aarch64 -Dbug_force_terminate_failure -Dbug_syscall_changepc_rewind -Dcap_32_64 -Dcap_async_events -Dcap_binary_rewriter -Dcap_dwarf -Dcap_dynamic_heap -Dcap_liveness -Dcap_mutatee_traps -Dcap_ptrace -Dcap_registers -Dcap_thread_db -Dcap_threads -Dcommon_EXPORTS -Dos_linux -I/usr/include/libdwarf -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0 -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/common/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/dataflowAPI/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/dwarf/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/dyninstAPI/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/dynutil/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/elf/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/i!
 nstruction
API/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/parseAPI/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/patchAPI/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/proccontrol/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/stackwalk/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symlite/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/h -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/external -I/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/common/src  -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1  -std=c++11  -fvisibility=hidden -fvisibility-inlines-hidden -W -Wall -Wpointer-arith -Wcast-qual -Woverloaded-virtual -Wcast-align -Wno-non-template-friend -fPIC   -o CMakeFiles/common.dir/src/addrtranslate-auxv.C.o -c /builddir/build/BUILD/dyninst-9.!
 1.0/Dynins
tAPI-9.1.0/common/src/addrtranslate-auxv.C
In file included from /builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/h/Symtab.h:36:0,
                 from /builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/src/relocationEntry-elf-aarch64.C:33:
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/src/relocationEntry-elf-aarch64.C: In static member function 'static const char* Dyninst::SymtabAPI::relocationEntry::relType2Str(long unsigned int, unsigned int)':
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/src/relocationEntry-elf-aarch64.C:163:25: error: 'R_AARCH64_TLS_DTPMOD64' was not declared in this scope
         CASE_RETURN_STR(R_AARCH64_TLS_DTPMOD64 );
                         ^
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/h/Symbol.h:50:33: note: in definition of macro 'CASE_RETURN_STR'
 #define CASE_RETURN_STR(x) case x: return #x
                                 ^
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/src/relocationEntry-elf-aarch64.C:164:25: error: 'R_AARCH64_TLS_DTPREL64' was not declared in this scope
         CASE_RETURN_STR(R_AARCH64_TLS_DTPREL64);
                         ^
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/h/Symbol.h:50:33: note: in definition of macro 'CASE_RETURN_STR'
 #define CASE_RETURN_STR(x) case x: return #x
                                 ^
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/src/relocationEntry-elf-aarch64.C:165:25: error: 'R_AARCH64_TLS_TPREL64' was not declared in this scope
         CASE_RETURN_STR(R_AARCH64_TLS_TPREL64);
                         ^
/builddir/build/BUILD/dyninst-9.1.0/DyninstAPI-9.1.0/symtabAPI/h/Symbol.h:50:33: note: in definition of macro 'CASE_RETURN_STR'
 #define CASE_RETURN_STR(x) case x: return #x
                                 ^
symtabAPI/CMakeFiles/symtabAPI_static.dir/build.make:761: recipe for target 'symtabAPI/CMakeFiles/symtabAPI_static.dir/src/relocationEntry-elf-aarch64.C.o' failed
make[2]: *** [symtabAPI/CMakeFiles/symtabAPI_static.dir/src/relocationEntry-elf-aarch64.C.o] Error 1


I was able to build the same dyninst sources on aarch64 RHEL 7.2.  It
looks like there have been some changes in the /usr/include/elf.h
between rhel7.2 glibc-headers-2.17-105.el7.aarch64 and fedora 23
glibc-headers-2.22-6.fc23.x86_64.  The changes specific to aarch64
preventing the compile appear to be:

 #define R_AARCH64_GLOB_DAT     1025	/* Create GOT entry.  */
 #define R_AARCH64_JUMP_SLOT    1026	/* Create PLT entry.  */
 #define R_AARCH64_RELATIVE     1027	/* Adjust by program base.  */
-#define R_AARCH64_TLS_DTPMOD64 1028	/* Module number, 64 bit.  */
-#define R_AARCH64_TLS_DTPREL64 1029	/* Module-relative offset, 64 bit.  */
-#define R_AARCH64_TLS_TPREL64  1030	/* TP-relative offset, 64 bit.  */
+#define R_AARCH64_TLS_DTPMOD   1028	/* Module number, 64 bit.  */
+#define R_AARCH64_TLS_DTPREL   1029	/* Module-relative offset, 64 bit.  */
+#define R_AARCH64_TLS_TPREL    1030	/* TP-relative offset, 64 bit.  */
 #define R_AARCH64_TLSDESC      1031	/* TLS Descriptor.  */
 #define R_AARCH64_IRELATIVE    1032	/* STT_GNU_IFUNC relocation.  */


The following patch is made the change in glibc
(http://patchwork.sourceware.org/patch/3415/) and dyninst will need to
be aware of the name changes:



Andrew Pinski - Oct. 27, 2014, 7:59 a.m.

* sysdeps/aarch64/sysdep.h: Add header guards.

[AARCH64] Remove 64 from some relocation names as they have been renamed in later versions of the spec.

The AARCH64 elf ABI spec renamed some relocations removing 64 from the TLS
relocation names to make them constaint with the ILP32 named ones.

* elf/elf.h (R_AARCH64_TLS_DTPMOD64): Rename to ..
(R_AARCH64_TLS_DTPMOD): This.
(R_AARCH64_TLS_DTPREL64): Rename to ...
(R_AARCH64_TLS_DTPREL): This.
(R_AARCH64_TLS_TPREL64): Rename to ...
(R_AARCH64_TLS_TPREL): This.
* sysdeps/aarch64/dl-machine.h (elf_machine_type_class): Update
R_AARCH64_TLS_DTPMOD64, R_AARCH64_TLS_DTPREL64, and R_AARCH64_TLS_TPREL64.
(elf_machine_rela): Likewise.

[AARCH64] Fix pltenter and pltexit for ILP32.

* sysdeps/aarch64/bits/link.h (la_aarch64_gnu_pltenter): Use
ElfW macro instead of hardcoded Elf64 types.
---
 elf/elf.h                    |    6 +++---
 sysdeps/aarch64/bits/link.h  |    6 +++---
 sysdeps/aarch64/dl-machine.h |   12 ++++++------
 sysdeps/aarch64/sysdep.h     |    5 +++++
 4 files changed, 17 insertions(+), 12 deletions(-)


-Will
[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] Compiling dyninst-9.1.0 on aarch64, William Cohen <=