gperftools: musl fixes, ppc fixes
This allows some parts of the code that previously didn't build on musl to build. Additionally, it fixes build on musl ppc setups.
This commit is contained in:
parent
701441c61f
commit
4ff40bb829
3 changed files with 108 additions and 3 deletions
13
srcpkgs/gperftools/patches/elf-mem-image-musl.patch
Normal file
13
srcpkgs/gperftools/patches/elf-mem-image-musl.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
This relies on link.h, which is present in musl as well as glibc.
|
||||
|
||||
--- src/base/elf_mem_image.h
|
||||
+++ src/base/elf_mem_image.h
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
// Maybe one day we can rewrite this file not to require the elf
|
||||
// symbol extensions in glibc, but for right now we need them.
|
||||
-#if defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__)
|
||||
+#if defined(__ELF__) && !defined(__native_client__)
|
||||
|
||||
#define HAVE_ELF_MEM_IMAGE 1
|
||||
|
76
srcpkgs/gperftools/patches/ppc-musl.patch
Normal file
76
srcpkgs/gperftools/patches/ppc-musl.patch
Normal file
|
@ -0,0 +1,76 @@
|
|||
Compatibility fixes for musl.
|
||||
|
||||
--- m4/pc_from_ucontext.m4
|
||||
+++ m4/pc_from_ucontext.m4
|
||||
@@ -31,6 +31,7 @@ AC_DEFUN([AC_PC_FROM_UCONTEXT],
|
||||
pc_fields="$pc_fields uc_mcontext.gregs[[R15]]" # Linux (arm old [untested])
|
||||
pc_fields="$pc_fields uc_mcontext.arm_pc" # Linux (arm arch 5)
|
||||
pc_fields="$pc_fields uc_mcontext.gp_regs[[PT_NIP]]" # Suse SLES 11 (ppc64)
|
||||
+ pc_fields="$pc_fields uc_mcontext.gregs[[PT_NIP]]"
|
||||
pc_fields="$pc_fields uc_mcontext.mc_eip" # FreeBSD (i386)
|
||||
pc_fields="$pc_fields uc_mcontext.mc_rip" # FreeBSD (x86_64 [untested])
|
||||
pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_EIP]]" # NetBSD (i386)
|
||||
@@ -55,7 +56,8 @@ AC_DEFUN([AC_PC_FROM_UCONTEXT],
|
||||
pc_field_found=true)
|
||||
elif test "x$ac_cv_header_sys_ucontext_h" = xyes; then
|
||||
AC_TRY_COMPILE([#define _GNU_SOURCE 1
|
||||
- #include <sys/ucontext.h>],
|
||||
+ #include <sys/ucontext.h>
|
||||
+ #include <asm/ptrace.h>],
|
||||
[ucontext_t u; return u.$pc_field == 0;],
|
||||
AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
|
||||
How to access the PC from a struct ucontext)
|
||||
@@ -63,7 +65,8 @@ AC_DEFUN([AC_PC_FROM_UCONTEXT],
|
||||
pc_field_found=true)
|
||||
elif test "x$ac_cv_header_ucontext_h" = xyes; then
|
||||
AC_TRY_COMPILE([#define _GNU_SOURCE 1
|
||||
- #include <ucontext.h>],
|
||||
+ #include <ucontext.h>
|
||||
+ #include <asm/ptrace.h>],
|
||||
[ucontext_t u; return u.$pc_field == 0;],
|
||||
AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
|
||||
How to access the PC from a struct ucontext)
|
||||
--- src/getpc.h
|
||||
+++ src/getpc.h
|
||||
@@ -65,6 +65,9 @@
|
||||
typedef ucontext ucontext_t;
|
||||
#endif
|
||||
|
||||
+#if defined(__powerpc__) && !defined(PT_NIP)
|
||||
+#define PT_NIP 32
|
||||
+#endif
|
||||
|
||||
// Take the example where function Foo() calls function Bar(). For
|
||||
// many architectures, Bar() is responsible for setting up and tearing
|
||||
--- src/stacktrace_powerpc-linux-inl.h
|
||||
+++ src/stacktrace_powerpc-linux-inl.h
|
||||
@@ -186,7 +186,7 @@ static int GET_STACK_TRACE_OR_FRAMES {
|
||||
ucontext_t uc;
|
||||
// We don't care about the rest, since the IP value is at 'uc' field.
|
||||
} *sigframe = reinterpret_cast<signal_frame_64*>(current);
|
||||
- result[n] = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_NIP];
|
||||
+ result[n] = (void*) sigframe->uc.uc_mcontext.gp_regs[32];
|
||||
}
|
||||
#else
|
||||
if (sigtramp32_vdso && (sigtramp32_vdso == current->return_addr)) {
|
||||
@@ -196,7 +196,7 @@ static int GET_STACK_TRACE_OR_FRAMES {
|
||||
mcontext_t mctx;
|
||||
// We don't care about the rest, since IP value is at 'mctx' field.
|
||||
} *sigframe = reinterpret_cast<signal_frame_32*>(current);
|
||||
- result[n] = (void*) sigframe->mctx.gregs[PT_NIP];
|
||||
+ result[n] = (void*) sigframe->mctx.gregs[32];
|
||||
} else if (sigtramp32_rt_vdso && (sigtramp32_rt_vdso == current->return_addr)) {
|
||||
struct rt_signal_frame_32 {
|
||||
char dummy[64 + 16];
|
||||
@@ -204,7 +204,11 @@ static int GET_STACK_TRACE_OR_FRAMES {
|
||||
ucontext_t uc;
|
||||
// We don't care about the rest, since IP value is at 'uc' field.A
|
||||
} *sigframe = reinterpret_cast<rt_signal_frame_32*>(current);
|
||||
+#if defined(__GLIBC__)
|
||||
result[n] = (void*) sigframe->uc.uc_mcontext.uc_regs->gregs[PT_NIP];
|
||||
+#else
|
||||
+ result[n] = (void*) sigframe->uc.uc_mcontext.gregs[32];
|
||||
+#endif
|
||||
}
|
||||
#endif
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
# Template file for 'gperftools'
|
||||
pkgname=gperftools
|
||||
version=2.7
|
||||
revision=2
|
||||
revision=3
|
||||
build_style=gnu-configure
|
||||
hostmakedepends="automake libtool"
|
||||
makedepends="libunwind-devel"
|
||||
checkdepends="perl"
|
||||
short_desc="Multi-threaded malloc() and performance analysis tools"
|
||||
|
@ -12,11 +13,22 @@ homepage="https://github.com/gperftools/gperftools"
|
|||
distfiles="https://github.com/${pkgname}/${pkgname}/releases/download/${pkgname}-${version}/${pkgname}-${version}.tar.gz"
|
||||
checksum=1ee8c8699a0eff6b6a203e59b43330536b22bbcbe6448f54c7091e5efb0763c9
|
||||
|
||||
if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
|
||||
# needed by some newly enabled code
|
||||
CXXFLAGS+=" -D__WORDSIZE=$XBPS_TARGET_WORDSIZE"
|
||||
# needed on musl other than x86_64
|
||||
if [ "$XBPS_TARGET_MACHINE" != "x86_64-musl" ]; then
|
||||
makedepends+=" libucontext-devel"
|
||||
LDFLAGS+=" -lucontext"
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
arm*-musl|aarch64-musl)
|
||||
# having libunwind in makedepends still causes failures...
|
||||
makedepends="libucontext-devel"
|
||||
LDFLAGS=" -lucontext"
|
||||
configure_args="--disable-libunwind"
|
||||
configure_args+=" --disable-libunwind"
|
||||
;;
|
||||
esac
|
||||
|
||||
post_extract() {
|
||||
|
@ -24,6 +36,10 @@ post_extract() {
|
|||
src/base/linux_syscall_support.h src/malloc_hook_mmap_linux.h
|
||||
}
|
||||
|
||||
pre_configure() {
|
||||
autoreconf -fi
|
||||
}
|
||||
|
||||
post_install() {
|
||||
vlicense COPYING
|
||||
rm -rf ${DESTDIR}/usr/share/doc
|
||||
|
|
Loading…
Add table
Reference in a new issue