add configure option to disable generic dynamic tls model, do so for s390x and aarch64, add aligned_alloc support

This commit is contained in:
Tom Callaway 2017-10-11 15:26:06 -04:00
parent 137b2efb26
commit 269f60eced
3 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,33 @@
diff -up gperftools-2.6.1/Makefile.am.aa gperftools-2.6.1/Makefile.am
--- gperftools-2.6.1/Makefile.am.aa 2017-10-11 15:17:39.618807653 -0400
+++ gperftools-2.6.1/Makefile.am 2017-10-11 15:17:59.331338671 -0400
@@ -97,6 +97,7 @@ endif OSX
if HAVE_OBJCOPY_WEAKEN
WEAKEN = $(OBJCOPY) -W malloc -W free -W realloc -W calloc -W cfree \
-W memalign -W posix_memalign -W valloc -W pvalloc \
+ -W aligned_alloc \
-W malloc_stats -W mallopt -W mallinfo -W nallocx \
-W _Znwm -W _ZnwmRKSt9nothrow_t -W _Znam -W _ZnamRKSt9nothrow_t \
-W _ZdlPv -W _ZdaPv \
diff -up gperftools-2.6.1/src/libc_override_gcc_and_weak.h.aa gperftools-2.6.1/src/libc_override_gcc_and_weak.h
--- gperftools-2.6.1/src/libc_override_gcc_and_weak.h.aa 2017-10-11 15:18:32.234555868 -0400
+++ gperftools-2.6.1/src/libc_override_gcc_and_weak.h 2017-10-11 15:18:38.243412911 -0400
@@ -143,6 +143,7 @@ extern "C" {
void* calloc(size_t n, size_t size) __THROW ALIAS(tc_calloc);
void cfree(void* ptr) __THROW ALIAS(tc_cfree);
void* memalign(size_t align, size_t s) __THROW ALIAS(tc_memalign);
+ void* aligned_alloc(size_t align, size_t s) __THROW ALIAS(tc_memalign);
void* valloc(size_t size) __THROW ALIAS(tc_valloc);
void* pvalloc(size_t size) __THROW ALIAS(tc_pvalloc);
int posix_memalign(void** r, size_t a, size_t s) __THROW
diff -up gperftools-2.6.1/src/libc_override_redefine.h.aa gperftools-2.6.1/src/libc_override_redefine.h
--- gperftools-2.6.1/src/libc_override_redefine.h.aa 2017-10-11 15:18:55.012013968 -0400
+++ gperftools-2.6.1/src/libc_override_redefine.h 2017-10-11 15:19:20.528406906 -0400
@@ -71,6 +71,7 @@ extern "C" {
void* calloc(size_t n, size_t s) { return tc_calloc(n, s); }
void cfree(void* p) { tc_cfree(p); }
void* memalign(size_t a, size_t s) { return tc_memalign(a, s); }
+ void* aligned_alloc(size_t a, size_t s) { return tc_memalign(a, s); }
void* valloc(size_t s) { return tc_valloc(s); }
void* pvalloc(size_t s) { return tc_pvalloc(s); }
int posix_memalign(void** r, size_t a, size_t s) {

View File

@ -0,0 +1,32 @@
diff -up ./configure.ac.dynload ./configure.ac
--- ./configure.ac.dynload 2017-08-24 15:23:01.126622099 -0400
+++ ./configure.ac 2017-08-24 15:29:46.332132222 -0400
@@ -614,6 +614,16 @@ AC_COMPILE_IFELSE(
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
+default_enable_generic_dynamic_tls=yes
+AC_ARG_ENABLE([general-dynamic-tls],
+ [AS_HELP_STRING([--disable-general-dynamic-tls],
+ [Do not use the general dynamic TLS model])],
+ [],
+ [enable_generic_dynamic_tls="$default_enable_generic_dynamic_tls"])
+AS_IF([test "x$enable_generic_dynamic_tls" = xyes],
+ [AC_DEFINE([ENABLE_GENERIC_DYNAMIC_TLS], 1,
+ [Use the generic dynamic TLS model])])
+
# Write generated configuration file
AC_CONFIG_FILES([Makefile
src/gperftools/tcmalloc.h src/windows/gperftools/tcmalloc.h])
diff -up ./src/base/basictypes.h.dynload ./src/base/basictypes.h
--- ./src/base/basictypes.h.dynload 2017-08-24 15:30:30.210996293 -0400
+++ ./src/base/basictypes.h 2017-08-24 15:31:01.889176214 -0400
@@ -200,7 +200,7 @@ struct CompileAssert {
# define ATTRIBUTE_UNUSED
#endif
-#if defined(HAVE___ATTRIBUTE__) && defined(HAVE_TLS)
+#if defined(HAVE___ATTRIBUTE__) && defined(HAVE_TLS) && defined(ENABLE_GENERIC_DYNAMIC_TLS)
#define ATTR_INITIAL_EXEC __attribute__ ((tls_model ("initial-exec")))
#else
#define ATTR_INITIAL_EXEC

View File

@ -4,7 +4,7 @@
Name: gperftools
Version: 2.6.1
Release: 3%{?dist}
Release: 5%{?dist}
License: BSD
Group: Development/Tools
Summary: Very fast malloc and performance analysis tools
@ -12,12 +12,18 @@ URL: https://github.com/gperftools/gperftools
Source0: https://github.com/gperftools/gperftools/releases/download/%{name}-%{version}/%{name}-%{version}.tar.gz
# There is no ucontext typedef on ppc64, at least not in rawhide.
Patch0: gperftools-2.6.1-ppc64-ucontext-fix.patch
# Conditionalize generic dynamic tls model
Patch1: gperftools-2.6.1-disable-generic-dynamic-tls.patch
# Add support for C11 aligned_alloc
# https://github.com/gperftools/gperftools/commit/d406f228
Patch2: gperftools-2.6.1-aligned_alloc.patch
ExcludeArch: s390
%ifnarch s390x
BuildRequires: libunwind-devel
%endif
BuildRequires: perl-generators
BuildRequires: autoconf, automake, libtool
Requires: gperftools-devel = %{version}-%{release}
Requires: pprof = %{version}-%{release}
@ -61,6 +67,8 @@ Pprof is a heap and CPU profiler tool, part of the gperftools suite.
%prep
%setup -q
%patch0 -p1 -b .ucontextfix
%patch1 -p1 -b .dynload
%patch2 -p1 -b .aa
# Fix end-of-line encoding
sed -i 's/\r//' README_windows.txt
@ -68,10 +76,15 @@ sed -i 's/\r//' README_windows.txt
# No need to have exec permissions on source code
chmod -x src/*.h src/*.cc
autoreconf -ifv
%build
CFLAGS=`echo $RPM_OPT_FLAGS -fno-strict-aliasing -Wno-unused-local-typedefs -DTCMALLOC_LARGE_PAGES | sed -e 's|-fexceptions||g'`
CXXFLAGS=`echo $RPM_OPT_FLAGS -fno-strict-aliasing -Wno-unused-local-typedefs -DTCMALLOC_LARGE_PAGES | sed -e 's|-fexceptions||g'`
%configure \
%ifarch s390x aarch64
--disable-general-dynamic-tls \
%endif
--disable-dynamic-sized-delete-support \
--disable-static
@ -115,6 +128,13 @@ rm -rf %{buildroot}%{_pkgdocdir}/INSTALL
%{_libdir}/*.so.*
%changelog
* Wed Oct 11 2017 Tom Callaway <spot@fedoraproject.org> - 2.6.1-5
- add aligned_alloc support
* Thu Aug 24 2017 Tom Callaway <spot@fedoraproject.org> - 2.6.1-4
- add configure option to disable generic dynamic tls model
- disable generic dynamic tls model on s390x and aarch64
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild