aboutsummaryrefslogtreecommitdiff
path: root/libbacktrace
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2012-10-29 15:43:37 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-10-29 15:43:37 +0000
commit8277de3441053e7c440a71823598e43e56da2606 (patch)
tree5ba16e70e1d72729529fa0bfe721295c7fdff503 /libbacktrace
parent13a6a8d23faa0bec6e9a98a852eb68a15c60ec18 (diff)
downloadgcc-8277de3441053e7c440a71823598e43e56da2606.zip
gcc-8277de3441053e7c440a71823598e43e56da2606.tar.gz
gcc-8277de3441053e7c440a71823598e43e56da2606.tar.bz2
mmap.c (backtrace_vector_release): Make sure freed block is aligned on 8-byte boundary.
* mmap.c (backtrace_vector_release): Make sure freed block is aligned on 8-byte boundary. From-SVN: r192945
Diffstat (limited to 'libbacktrace')
-rw-r--r--libbacktrace/ChangeLog5
-rw-r--r--libbacktrace/mmap.c14
2 files changed, 17 insertions, 2 deletions
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index 4850d9d..f04f1d5 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-29 Ian Lance Taylor <iant@google.com>
+
+ * mmap.c (backtrace_vector_release): Make sure freed block is
+ aligned on 8-byte boundary.
+
2012-10-26 Ian Lance Taylor <iant@google.com>
PR other/55087
diff --git a/libbacktrace/mmap.c b/libbacktrace/mmap.c
index e07810d..25fdc21 100644
--- a/libbacktrace/mmap.c
+++ b/libbacktrace/mmap.c
@@ -229,8 +229,18 @@ backtrace_vector_release (struct backtrace_state *state,
backtrace_error_callback error_callback,
void *data)
{
- backtrace_free (state, (char *) vec->base + vec->size, vec->alc,
- error_callback, data);
+ size_t size;
+ size_t alc;
+ size_t aligned;
+
+ /* Make sure that the block that we free is aligned on an 8-byte
+ boundary. */
+ size = vec->size;
+ alc = vec->alc;
+ aligned = (size + 7) & ~ (size_t) 7;
+ alc -= aligned - size;
+
+ backtrace_free (state, (char *) vec->base + size, alc, error_callback, data);
vec->alc = 0;
return 1;
}