xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.base/long_long.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* This test script is part of GDB, the GNU debugger.
2*11efff7fSkettenis 
3*11efff7fSkettenis    Copyright 1999, 2004,
4*11efff7fSkettenis    Free Software Foundation, Inc.
5*11efff7fSkettenis 
6*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
7*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
8*11efff7fSkettenis    the Free Software Foundation; either version 2 of the License, or
9*11efff7fSkettenis    (at your option) any later version.
10*11efff7fSkettenis 
11*11efff7fSkettenis    This program is distributed in the hope that it will be useful,
12*11efff7fSkettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*11efff7fSkettenis    GNU General Public License for more details.
15*11efff7fSkettenis 
16*11efff7fSkettenis    You should have received a copy of the GNU General Public License
17*11efff7fSkettenis    along with this program; if not, write to the Free Software
18*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19*11efff7fSkettenis    */
20*11efff7fSkettenis 
21b725ae77Skettenis /* Test long long expression; test printing in general.
22b725ae77Skettenis  *
23b725ae77Skettenis  * /CLO/BUILD_ENV/Exports/cc -g +e -o long_long long_long.c
24b725ae77Skettenis  *
25b725ae77Skettenis  * or
26b725ae77Skettenis  *
27b725ae77Skettenis  * cc +e +DA2.0 -g -o long_long long_long.c
28b725ae77Skettenis  */
29b725ae77Skettenis 
30*11efff7fSkettenis #include <string.h>
31*11efff7fSkettenis 
32*11efff7fSkettenis enum { MAX_BYTES = 16 };
33*11efff7fSkettenis 
34*11efff7fSkettenis void
pack(unsigned char b[MAX_BYTES],int size,int nr)35*11efff7fSkettenis pack (unsigned char b[MAX_BYTES], int size, int nr)
36b725ae77Skettenis {
37*11efff7fSkettenis   static long long val[] = { 0x123456789abcdefLL, 01234567123456701234567LL, 12345678901234567890ULL};
38*11efff7fSkettenis   volatile static int e = 1;
39*11efff7fSkettenis   int i;
40*11efff7fSkettenis   for (i = 0; i < nr; i++)
41*11efff7fSkettenis     {
42*11efff7fSkettenis       int offset;
43*11efff7fSkettenis       if (*(char *)&e)
44*11efff7fSkettenis 	/* Little endian.  */
45*11efff7fSkettenis 	offset = sizeof (long long) - size;
46*11efff7fSkettenis       else
47*11efff7fSkettenis 	/* Big endian endian.  */
48*11efff7fSkettenis 	offset = 0;
49*11efff7fSkettenis       memcpy (b + size * i, (char *) val + sizeof (long long) * i + offset, size);
50b725ae77Skettenis     }
51*11efff7fSkettenis }
52*11efff7fSkettenis 
53*11efff7fSkettenis unsigned char b[MAX_BYTES];
54*11efff7fSkettenis unsigned char h[MAX_BYTES];
55*11efff7fSkettenis unsigned char w[MAX_BYTES];
56*11efff7fSkettenis unsigned char g[MAX_BYTES];
57*11efff7fSkettenis 
58*11efff7fSkettenis unsigned char c[MAX_BYTES];
59*11efff7fSkettenis unsigned char s[MAX_BYTES];
60*11efff7fSkettenis unsigned char i[MAX_BYTES];
61*11efff7fSkettenis unsigned char l[MAX_BYTES];
62*11efff7fSkettenis unsigned char ll[MAX_BYTES];
63b725ae77Skettenis 
known_types()64b725ae77Skettenis int known_types()
65b725ae77Skettenis {
66*11efff7fSkettenis   /* A union is used here as, hopefully it has well defined packing
67*11efff7fSkettenis      rules.  */
68*11efff7fSkettenis   struct {
69*11efff7fSkettenis     long long bin, oct, dec, hex;
70*11efff7fSkettenis   } val;
71*11efff7fSkettenis   memset (&val, 0, sizeof val);
72b725ae77Skettenis 
73*11efff7fSkettenis   /* Known values, filling the full 64 bits.  */
74*11efff7fSkettenis   val.bin = 0x123456789abcdefLL; /* 64 bits = 16 hex digits */
75*11efff7fSkettenis   val.oct = 01234567123456701234567LL; /*  = 21+ octal digits */
76*11efff7fSkettenis   val.dec = 12345678901234567890ULL;    /*  = 19+ decimal digits */
77b725ae77Skettenis 
78*11efff7fSkettenis   /* Stop here and look!  */
79*11efff7fSkettenis   val.hex = val.bin - val.dec | val.oct;
80b725ae77Skettenis 
81b725ae77Skettenis   return 0;
82b725ae77Skettenis }
83b725ae77Skettenis 
main()84b725ae77Skettenis int main() {
85b725ae77Skettenis 
86*11efff7fSkettenis    /* Pack Byte, Half, Word and Giant arrays with byte-orderd values.
87*11efff7fSkettenis       That way "(gdb) x" gives the same output on different
88*11efff7fSkettenis       architectures.  */
89*11efff7fSkettenis    pack (b, 1, 2);
90*11efff7fSkettenis    pack (h, 2, 2);
91*11efff7fSkettenis    pack (w, 4, 2);
92*11efff7fSkettenis    pack (g, 8, 2);
93*11efff7fSkettenis    pack (c, sizeof (char), 2);
94*11efff7fSkettenis    pack (s, sizeof (short), 2);
95*11efff7fSkettenis    pack (i, sizeof (int), 2);
96*11efff7fSkettenis    pack (l, sizeof (long), 2);
97*11efff7fSkettenis    pack (ll, sizeof (long long), 2);
98b725ae77Skettenis 
99b725ae77Skettenis    known_types();
100b725ae77Skettenis 
101b725ae77Skettenis    return 0;
102b725ae77Skettenis }
103