]> git.ipfire.org Git - thirdparty/glibc.git/blame - malloc/tst-obstack.c
Update copyright dates not handled by scripts/update-copyrights.
[thirdparty/glibc.git] / malloc / tst-obstack.c
CommitLineData
84832e05
UD
1/* Test case by Alexandre Duret-Lutz <duret_g@epita.fr>. */
2#include <obstack.h>
3#include <stdint.h>
4#include <stdio.h>
5#include <stdlib.h>
6
7#define obstack_chunk_alloc verbose_malloc
8#define obstack_chunk_free verbose_free
9#define ALIGN_BOUNDARY 64
10#define ALIGN_MASK (ALIGN_BOUNDARY - 1)
11#define OBJECT_SIZE 1000
12
13static void *
14verbose_malloc (size_t size)
15{
16 void *buf = malloc (size);
59553897 17 printf ("malloc (%zu) => %p\n", size, buf);
84832e05
UD
18 return buf;
19}
20
21static void
22verbose_free (void *buf)
23{
24 free (buf);
25 printf ("free (%p)\n", buf);
26}
27
29955b5d
AS
28static int
29do_test (void)
84832e05 30{
84832e05 31 int result = 0;
a6027576 32 int align = 2;
84832e05 33
a6027576 34 while (align <= 64)
84832e05 35 {
a6027576
UD
36 struct obstack obs;
37 int i;
38 int align_mask = align - 1;
39
40 printf ("\n Alignment mask: %d\n", align_mask);
41
42 obstack_init (&obs);
43 obstack_alignment_mask (&obs) = align_mask;
44 /* finish an empty object to take alignment into account */
45 obstack_finish (&obs);
46
47 /* let's allocate some objects and print their addresses */
48 for (i = 15; i > 0; --i)
49 {
50 void *obj = obstack_alloc (&obs, OBJECT_SIZE);
51
52 printf ("obstack_alloc (%u) => %p \t%s\n", OBJECT_SIZE, obj,
53 ((uintptr_t) obj & align_mask) ? "(not aligned)" : "");
54 result |= ((uintptr_t) obj & align_mask) != 0;
55 }
84832e05 56
a6027576
UD
57 /* clean up */
58 obstack_free (&obs, 0);
84832e05 59
a6027576
UD
60 align <<= 1;
61 }
84832e05
UD
62
63 return result;
64}
29955b5d
AS
65
66#define TEST_FUNCTION do_test ()
67#include "../test-skeleton.c"