Source: kcov Version: 25+dfsg-1 Tags: patch Here's a patch that let me build this package on arm64. It's just a quick hack and I haven't done any other testing.
Removing "-m32" from the fork-32 test quite possibly makes that test pointless so a better solution might be to disable that test on all architectures other than amd64.
diff -ru kcov-25+dfsg.orig/src/CMakeLists.txt kcov-25+dfsg/src/CMakeLists.txt --- kcov-25+dfsg.orig/src/CMakeLists.txt +++ kcov-25+dfsg/src/CMakeLists.txt @@ -52,7 +52,7 @@ set (KCOV_LIBRARY_PREFIX "/tmp") -set (CMAKE_CXX_FLAGS "-std=c++0x -g -Wall -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") +set (CMAKE_CXX_FLAGS "-std=c++0x -g -Wall -fPIC -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") include_directories( include/ diff -ru kcov-25+dfsg.orig/src/engines/ptrace.cc kcov-25+dfsg/src/engines/ptrace.cc --- kcov-25+dfsg.orig/src/engines/ptrace.cc +++ kcov-25+dfsg/src/engines/ptrace.cc @@ -25,6 +25,11 @@ #include <mutex> #include <vector> +#ifdef __aarch64__ +#define PTRACE_GETREGS PTRACE_GETREGSET +#define PTRACE_SETREGS PTRACE_SETREGSET +#endif + using namespace kcov; #define str(s) #s @@ -36,6 +41,7 @@ x86_64_RIP = 16, ppc_NIP = 32, arm_PC = 15, + aarch64_PC = 32, }; static unsigned long getAligned(unsigned long addr) @@ -53,6 +59,8 @@ out = regs[x86_64_RIP] - 1; #elif defined(__arm__) out = regs[arm_PC]; +#elif defined(__aarch64__) + out = regs[aarch64_PC]; #elif defined(__powerpc__) out = regs[ppc_NIP]; #else @@ -68,7 +76,7 @@ regs[i386_EIP]--; #elif defined(__x86_64__) regs[x86_64_RIP]--; -#elif defined(__powerpc__) || defined(__arm__) +#elif defined(__powerpc__) || defined(__arm__) || defined(__aarch64__) // Do nothing #else # error Unsupported architecture @@ -91,6 +99,8 @@ val = 0x7fe00008; /* tw */ #elif defined(__arm__) val = 0xfedeffe7; // Undefined insn +#elif defined(__aarch64__) + val = 0xd4200000; // brk #0 #else # error Unsupported architecture #endif @@ -109,7 +119,7 @@ val = (cur_data & ~(0xffUL << shift)) | (old_byte << shift); -#elif defined(__powerpc__) || defined(__arm__) +#elif defined(__powerpc__) || defined(__arm__) || defined(__aarch64__) val = old_data; #else # error Unsupported architecture diff -ru kcov-25+dfsg.orig/src/solib-parser/lib.c kcov-25+dfsg/src/solib-parser/lib.c --- kcov-25+dfsg.orig/src/solib-parser/lib.c +++ kcov-25+dfsg/src/solib-parser/lib.c @@ -85,6 +85,8 @@ ".long 0x7fe00008\n" /* trap instruction */ #elif defined(__arm__) ".long 0xfedeffe7\n" /* undefined insn */ +#elif defined(__aarch64__) + "brk #0\n" #else # error Unsupported architecture #endif diff -ru kcov-25+dfsg.orig/tests/CMakeLists.txt kcov-25+dfsg/tests/CMakeLists.txt --- kcov-25+dfsg.orig/tests/CMakeLists.txt +++ kcov-25+dfsg/tests/CMakeLists.txt @@ -8,7 +8,7 @@ ${CMAKE_BINARY_DIR} ../src/include ) -set (CMAKE_CXX_FLAGS "-std=c++0x -Wall -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") +set (CMAKE_CXX_FLAGS "-std=c++0x -Wall -fPIC -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") add_custom_command (OUTPUT multi-fork-generated.c COMMAND ${CMAKE_SOURCE_DIR}/multi-fork/generate-functions.py ${CMAKE_SOURCE_DIR}/multi-fork/code-template.c 1024 > ${CMAKE_BINARY_DIR}/multi-fork-generated.c @@ -113,7 +113,7 @@ ) add_custom_target (fork-32 ALL - COMMAND ${CMAKE_C_COMPILER} -g -m32 ${CMAKE_CURRENT_SOURCE_DIR}/fork/fork.c -o ${CMAKE_BINARY_DIR}/fork-32 + COMMAND ${CMAKE_C_COMPILER} -g ${CMAKE_CURRENT_SOURCE_DIR}/fork/fork.c -o ${CMAKE_BINARY_DIR}/fork-32 ) target_link_libraries(shared_library_test shared_library)