103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#! /bin/sh
203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# Copyright (C) 2014 Red Hat, Inc.
303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# This file is part of elfutils.
403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# This file is free software; you can redistribute it and/or modify
603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# it under the terms of the GNU General Public License as published by
703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# the Free Software Foundation; either version 3 of the License, or
803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# (at your option) any later version.
903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
1003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# elfutils is distributed in the hope that it will be useful, but
1103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# WITHOUT ANY WARRANTY; without even the implied warranty of
1203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# GNU General Public License for more details.
1403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
1503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# You should have received a copy of the GNU General Public License
1603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
1803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes. $srcdir/test-subr.sh
1903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
2003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# char c;
2103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# int i;
2203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# long l;
2303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
2403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# void *v;
2503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
2603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# struct s
2703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# {
2803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#   char *a;
2903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#   int i;
3003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# } s;
3103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
3203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# char ca[16];
3303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# int ia[32];
3403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# void *va[64];
3503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# struct s sa[8];
3603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
3703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# On x86_64 (LP64):
3803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# gcc -g -c -o testfile-sizes1.o sizes.c
3903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# clang -g -c -o testfile-sizes2.o sizes.c
4003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
4103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# const char c;
4203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# volatile int i;
4303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# const volatile long l;
4403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
4503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# void * restrict v;
4603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
4703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# struct s
4803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# {
4903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#   const char *a;
5003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#   volatile int i;
5103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# } s;
5203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
5303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# const char ca[16];
5403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# volatile int ia[32];
5503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# const volatile void * const volatile restrict va[64];
5603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# struct s sa[8];
5703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
5803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# typedef const int foo;
5903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# typedef volatile foo bar;
6003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# foo f;
6103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# bar b;
6203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#
6303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes# gcc -std=c99 -g -c -o testfile-sizes3.o sizes.c
6403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
6503333823c75a1c1887e923828113a1b0fd12020cElliott Hughestestfiles testfile-sizes1.o testfile-sizes2.o testfile-sizes3.o
6603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
6703333823c75a1c1887e923828113a1b0fd12020cElliott Hughestestrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes1.o <<\EOF
6803333823c75a1c1887e923828113a1b0fd12020cElliott Hughesc size 1
6903333823c75a1c1887e923828113a1b0fd12020cElliott Hughesi size 4
7003333823c75a1c1887e923828113a1b0fd12020cElliott Hughesl size 8
7103333823c75a1c1887e923828113a1b0fd12020cElliott Hughesv size 8
7203333823c75a1c1887e923828113a1b0fd12020cElliott Hughess size 16
7303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesca size 16
7403333823c75a1c1887e923828113a1b0fd12020cElliott Hughesia size 128
7503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesva size 512
7603333823c75a1c1887e923828113a1b0fd12020cElliott Hughessa size 128
7703333823c75a1c1887e923828113a1b0fd12020cElliott HughesEOF
7803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
7903333823c75a1c1887e923828113a1b0fd12020cElliott Hughestestrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes2.o <<\EOF
8003333823c75a1c1887e923828113a1b0fd12020cElliott Hughesc size 1
8103333823c75a1c1887e923828113a1b0fd12020cElliott Hughesi size 4
8203333823c75a1c1887e923828113a1b0fd12020cElliott Hughesl size 8
8303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesv size 8
8403333823c75a1c1887e923828113a1b0fd12020cElliott Hughess size 16
8503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesca size 16
8603333823c75a1c1887e923828113a1b0fd12020cElliott Hughesia size 128
8703333823c75a1c1887e923828113a1b0fd12020cElliott Hughesva size 512
8803333823c75a1c1887e923828113a1b0fd12020cElliott Hughessa size 128
8903333823c75a1c1887e923828113a1b0fd12020cElliott HughesEOF
9003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
9103333823c75a1c1887e923828113a1b0fd12020cElliott Hughestestrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes3.o <<\EOF
9203333823c75a1c1887e923828113a1b0fd12020cElliott Hughesc size 1
9303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesi size 4
9403333823c75a1c1887e923828113a1b0fd12020cElliott Hughesl size 8
9503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesv size 8
9603333823c75a1c1887e923828113a1b0fd12020cElliott Hughess size 16
9703333823c75a1c1887e923828113a1b0fd12020cElliott Hughesca size 16
9803333823c75a1c1887e923828113a1b0fd12020cElliott Hughesia size 128
9903333823c75a1c1887e923828113a1b0fd12020cElliott Hughesva size 512
10003333823c75a1c1887e923828113a1b0fd12020cElliott Hughessa size 128
10103333823c75a1c1887e923828113a1b0fd12020cElliott Hughesf size 4
10203333823c75a1c1887e923828113a1b0fd12020cElliott Hughesb size 4
10303333823c75a1c1887e923828113a1b0fd12020cElliott HughesEOF
10403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
10503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesexit 0
106