71 lines
2.3 KiB
Diff
71 lines
2.3 KiB
Diff
From c55ad6452e2d63ebf6fcaabb00bfd27aae02ffb6 Mon Sep 17 00:00:00 2001
|
|
From: Florian Weimer <fweimer@redhat.com>
|
|
Date: Thu, 10 Aug 2017 15:58:28 +0200
|
|
Subject: [PATCH 07] malloc: Avoid optimizer warning with GCC 7 and -O3
|
|
|
|
(cherry picked from commit eac43cbb8d808a40004aa0a4a286f5c5155beccb)
|
|
---
|
|
ChangeLog | 5 +++++
|
|
malloc/malloc.c | 20 ++++++++++++++++----
|
|
2 files changed, 21 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/ChangeLog b/ChangeLog
|
|
index 3127648626..5ea9b8baa7 100644
|
|
--- a/ChangeLog
|
|
+++ b/ChangeLog
|
|
@@ -1,3 +1,8 @@
|
|
+2017-08-10 Florian Weimer <fweimer@redhat.com>
|
|
+
|
|
+ * malloc/malloc.c (get_max_fast): Reimplement as an inline
|
|
+ function which calls __builtin_unreachable.
|
|
+
|
|
2017-08-09 Florian Weimer <fweimer@redhat.com>
|
|
|
|
[BZ #21932]
|
|
diff --git a/malloc/malloc.c b/malloc/malloc.c
|
|
index 54e406bcb6..e3ff778113 100644
|
|
--- a/malloc/malloc.c
|
|
+++ b/malloc/malloc.c
|
|
@@ -1658,6 +1658,9 @@ typedef struct malloc_chunk *mfastbinptr;
|
|
#define arena_is_corrupt(A) (((A)->flags & ARENA_CORRUPTION_BIT))
|
|
#define set_arena_corrupt(A) ((A)->flags |= ARENA_CORRUPTION_BIT)
|
|
|
|
+/* Maximum size of memory handled in fastbins. */
|
|
+static INTERNAL_SIZE_T global_max_fast;
|
|
+
|
|
/*
|
|
Set value of max_fast.
|
|
Use impossibly small value if 0.
|
|
@@ -1668,8 +1671,20 @@ typedef struct malloc_chunk *mfastbinptr;
|
|
#define set_max_fast(s) \
|
|
global_max_fast = (((s) == 0) \
|
|
? SMALLBIN_WIDTH : ((s + SIZE_SZ) & ~MALLOC_ALIGN_MASK))
|
|
-#define get_max_fast() global_max_fast
|
|
|
|
+static inline INTERNAL_SIZE_T
|
|
+get_max_fast (void)
|
|
+{
|
|
+ /* Tell the GCC optimizers that global_max_fast is never larger
|
|
+ than MAX_FAST_SIZE. This avoids out-of-bounds array accesses in
|
|
+ _int_malloc after constant propagation of the size parameter.
|
|
+ (The code never executes because malloc preserves the
|
|
+ global_max_fast invariant, but the optimizers may not recognize
|
|
+ this.) */
|
|
+ if (global_max_fast > MAX_FAST_SIZE)
|
|
+ __builtin_unreachable ();
|
|
+ return global_max_fast;
|
|
+}
|
|
|
|
/*
|
|
----------- Internal state representation and initialization -----------
|
|
@@ -1797,9 +1812,6 @@ static struct malloc_par mp_ =
|
|
#endif
|
|
};
|
|
|
|
-/* Maximum size of memory handled in fastbins. */
|
|
-static INTERNAL_SIZE_T global_max_fast;
|
|
-
|
|
/*
|
|
Initialize a malloc_state struct.
|
|
|
|
|