[libgit2] Fix memory alignment issues on arm, aarch64, ppc64le (#1115905)

Yaakov Selkowitz yselkowitz at fedoraproject.org
Fri Jul 18 02:43:15 UTC 2014


commit bf85dd12e20e57c6f9faffdba5936f72b8e8baac
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Jul 17 21:43:19 2014 -0500

    Fix memory alignment issues on arm, aarch64, ppc64le (#1115905)

 libgit2-0.21.0-arm.patch |   65 ++++++++++++++++++++++++++++++++++++++++++++++
 libgit2.spec             |   11 ++++++-
 2 files changed, 74 insertions(+), 2 deletions(-)
---
diff --git a/libgit2-0.21.0-arm.patch b/libgit2-0.21.0-arm.patch
new file mode 100644
index 0000000..c0950d9
--- /dev/null
+++ b/libgit2-0.21.0-arm.patch
@@ -0,0 +1,65 @@
+From 5fa8cda981940eaef54b55abe4fcba09b4e18e12 Mon Sep 17 00:00:00 2001
+From: Russell Belfer <rb at github.com>
+Date: Mon, 30 Jun 2014 12:05:25 -0700
+Subject: [PATCH] Round up pool alloc sizes for alignment
+
+To make sure that items returned from pool allocations are aligned
+on nice boundaries, this rounds up all pool allocation sizes to a
+multiple of 8.  This adds a small amount of overhead to each item.
+
+The rounding up could be made optional with an extra parameter to
+the pool initialization that turned on rounding only for pools
+where item alignment actually matters, but I think for the extra
+code and complexity that would be involved, that it makes sense
+just to burn a little bit of extra memory and enable this all the
+time.
+---
+ src/pool.c        |  2 +-
+ tests/core/pool.c | 10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/pool.c b/src/pool.c
+index 146f118..a516ff9 100644
+--- a/src/pool.c
++++ b/src/pool.c
+@@ -146,7 +146,7 @@ GIT_INLINE(void) pool_remove_page(
+ void *git_pool_malloc(git_pool *pool, uint32_t items)
+ {
+ 	git_pool_page *scan = pool->open, *prev;
+-	uint32_t size = items * pool->item_size;
++	uint32_t size = ((items * pool->item_size) + 7) & ~7;
+ 	void *ptr = NULL;
+ 
+ 	pool->has_string_alloc = 0;
+diff --git a/tests/core/pool.c b/tests/core/pool.c
+index 351d0c2..a7ec880 100644
+--- a/tests/core/pool.c
++++ b/tests/core/pool.c
+@@ -38,19 +38,19 @@ void test_core_pool__1(void)
+ 		cl_assert(git_pool_malloc(&p, i) != NULL);
+ 
+ 	/* with fixed page size, allocation must end up with these values */
+-	cl_assert(git_pool__open_pages(&p) == 1);
+-	cl_assert(git_pool__full_pages(&p) == 505);
++	cl_assert_equal_i(1, git_pool__open_pages(&p));
++	cl_assert_equal_i(507, git_pool__full_pages(&p));
+ 
+ 	git_pool_clear(&p);
+ 
+-	cl_git_pass(git_pool_init(&p, 1, 4100));
++	cl_git_pass(git_pool_init(&p, 1, 4120));
+ 
+ 	for (i = 2010; i > 0; i--)
+ 		cl_assert(git_pool_malloc(&p, i) != NULL);
+ 
+ 	/* with fixed page size, allocation must end up with these values */
+-	cl_assert(git_pool__open_pages(&p) == 1);
+-	cl_assert(git_pool__full_pages(&p) == 492);
++	cl_assert_equal_i(1, git_pool__open_pages(&p));
++	cl_assert_equal_i(492, git_pool__full_pages(&p));
+ 
+ 	git_pool_clear(&p);
+ }
+-- 
+1.9.3
+
diff --git a/libgit2.spec b/libgit2.spec
index 50c0b9e..3fac30b 100644
--- a/libgit2.spec
+++ b/libgit2.spec
@@ -1,10 +1,13 @@
 Name:           libgit2
 Version:        0.21.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        C implementation of the Git core methods as a library with a solid API
 License:        GPLv2 with exceptions
 URL:            http://libgit2.github.com/
 Source0:        https://github.com/libgit2/libgit2/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
+# https://github.com/libgit2/libgit2/issues/2450
+Patch0:         libgit2-0.21.0-arm.patch
+
 BuildRequires:  cmake
 BuildRequires:  http-parser-devel
 BuildRequires:  libssh2-devel
@@ -29,6 +32,7 @@ developing applications that use %{name}.
 
 %prep
 %setup -q
+%patch0 -p1
 # Remove VCS files from examples
 find examples -name ".gitignore" -delete -print
 
@@ -50,7 +54,7 @@ make %{?_smp_mflags}
 
 %check
 # remove when rhbz#1105552 is fixed:
-%ifnarch %{arm} %{power64} s390x
+%ifnarch ppc64 s390x
 ctest -V
 %endif
 
@@ -70,6 +74,9 @@ ctest -V
 %{_includedir}/git2/
 
 %changelog
+* Fri Jul 18 2014 Yaakov Selkowitz <yselkowi at redhat.com> - 0.21.0-2
+- Fix memory alignment issues on arm, aarch64, ppc64le (#1115905)
+
 * Sat Jun 21 2014 Christopher Meng <rpm at cicku.me> - 0.21.0-1
 - Update to 0.21.0
 


More information about the scm-commits mailing list