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