1#!/usr/local/bin/bash
2# Copyright (C) 2014 Red Hat, Inc.
3# This file is part of elfutils.
4#
5# This file is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# elfutils is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18. $srcdir/test-subr.sh
19
20# char c;
21# int i;
22# long l;
23#
24# void *v;
25#
26# struct s
27# {
28#   char *a;
29#   int i;
30# } s;
31#
32# char ca[16];
33# int ia[32];
34# void *va[64];
35# struct s sa[8];
36
37# On x86_64 (LP64):
38# gcc -g -c -o testfile-sizes1.o sizes.c
39# clang -g -c -o testfile-sizes2.o sizes.c
40
41# const char c;
42# volatile int i;
43# const volatile long l;
44#
45# void * restrict v;
46#
47# struct s
48# {
49#   const char *a;
50#   volatile int i;
51# } s;
52#
53# const char ca[16];
54# volatile int ia[32];
55# const volatile void * const volatile restrict va[64];
56# struct s sa[8];
57# double d3d[3][4][5];
58#
59# typedef const int foo;
60# typedef volatile foo bar;
61# foo f;
62# bar b;
63#
64# gcc -std=c99 -g -c -o testfile-sizes3.o sizes.c
65
66# The file testfile-size4.o is hand-crafted.
67
68testfiles testfile-sizes1.o testfile-sizes2.o testfile-sizes3.o testfile-sizes4.o
69
70testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes1.o <<\EOF
71c size 1
72i size 4
73l size 8
74v size 8
75s size 16
76ca size 16
77ia size 128
78va size 512
79sa size 128
80EOF
81
82testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes2.o <<\EOF
83c size 1
84i size 4
85l size 8
86v size 8
87s size 16
88ca size 16
89ia size 128
90va size 512
91sa size 128
92EOF
93
94testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes3.o <<\EOF
95c size 1
96i size 4
97l size 8
98v size 8
99s size 16
100ca size 16
101ia size 128
102va size 512
103sa size 128
104d3d size 480
105f size 4
106b size 4
107EOF
108
109testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes4.o <<\EOF
110v size 257
111EOF
112
113exit 0
114