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)

Reply via email to