gdb: fix printing of flag enums with multi-bit enumerators
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / printcmds.c
CommitLineData
c906108c
SS
1/* This table is used as a source for every ascii character.
2 It is explicitly unsigned to avoid differences due to native characters
3 being either signed or unsigned. */
085dd6e6 4#include <stdlib.h>
c906108c
SS
5unsigned char ctable1[256] = {
6 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
7 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
8 0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,
9 0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,
10 0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
11 0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
12 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
13 0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
14 0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107,
15 0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,
16 0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,
17 0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137,
18 0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
19 0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
20 0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
21 0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,
22 0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,
23 0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,
24 0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,
25 0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,
26 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,
27 0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
28 0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,
29 0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,
30 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,
31 0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,
32 0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,
33 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
34 0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,
35 0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,
36 0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,
37 0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377
38};
39
40unsigned char ctable2[] = {
41 'a','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
42 'a','a','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
43 'a','a','a','X','X','X','X','X','X','X','X','X','X','X','X','X',
44 'a','a','a','a','X','X','X','X','X','X','X','X','X','X','X','X',
45 'a','a','a','a','a','X','X','X','X','X','X','X','X','X','X','X',
46 'a','a','a','a','a','a','X','X','X','X','X','X','X','X','X','X',
47 'a','a','a','a','a','a','a','X','X','X','X','X','X','X','X','X',
48 'a','a','a','a','a','a','a','a','X','X','X','X','X','X','X','X',
49 'a','a','a','a','a','a','a','a','a','X','X','X','X','X','X','X',
50 'a','a','a','a','a','a','a','a','a','a','X','X','X','X','X','X',
51 'a','a','a','a','a','a','a','a','a','a','a','X','X','X','X','X',
52 'a','a','a','a','a','a','a','a','a','a','a','a','X','X','X','X',
53 'a','a','a','a','a','a','a','a','a','a','a','a','a','X','X','X',
54 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','X','X',
55 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','X',
7a495180 56 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', 0
c906108c
SS
57};
58
59/* Single and multidimensional arrays to test access and printing of array
60 members. */
61
751a959b
EZ
62typedef int ArrayInt [10];
63ArrayInt a1 = {2,4,6,8,10,12,14,16,18,20};
64
65typedef char ArrayChar [5];
66ArrayChar a2 = {'a','b','c','d','\0'};
67
c906108c
SS
68int int1dim[12] = {0,1,2,3,4,5,6,7,8,9,10,11};
69int int2dim[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
70int int3dim[2][3][2] = {{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};
71int int4dim[1][2][3][2] = {{{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}}};
72
085dd6e6 73char *teststring = (char*)"teststring contents";
c906108c
SS
74
75/* Test printing of a struct containing character arrays. */
76
77struct some_arrays {
78 unsigned char array1[4];
79 unsigned char array2[1];
80 unsigned char array3[1];
81 unsigned char array4[2];
82 unsigned char array5[4];
83} arrays = {
84 {'a', 'b', 'c', '\0'},
85 {'d'},
86 {'e'},
87 {'f', 'g' },
88 {'h', 'i', 'j', '\0'}
89};
90
91struct some_arrays *parrays = &arrays;
92
23bd0f7c
PA
93enum some_volatile_enum { enumvolval1, enumvolval2 };
94
95/* A volatile enum variable whose name is the same as the enumeration
96 name. See PR11827. */
97volatile enum some_volatile_enum some_volatile_enum = enumvolval1;
98
edd45eb0
SM
99/* An enum considered as a "flag enum". */
100enum flag_enum
101{
102 FE_NONE = 0x00,
103 FE_ONE = 0x01,
104 FE_TWO = 0x02,
105};
106
107enum flag_enum three = FE_ONE | FE_TWO;
108
109/* Another enum considered as a "flag enum", but with no enumerator with value
110 0. */
111enum flag_enum_without_zero
112{
113 FEWZ_ONE = 0x01,
114 FEWZ_TWO = 0x02,
115};
116
117enum flag_enum_without_zero flag_enum_without_zero = 0;
118
119/* Not a flag enum, an enumerator value has multiple bits sets. */
120enum not_flag_enum
121{
122 NFE_ONE = 0x01,
123 NFE_TWO = 0x02,
124 NFE_F0 = 0xf0,
125};
cafec441 126
edd45eb0 127enum not_flag_enum three_not_flag = NFE_ONE | NFE_TWO;
cafec441 128
490f124f
PA
129/* A structure with an embedded array at an offset > 0. The array has
130 all elements with the same repeating value, which must not be the
131 same as the value of the preceding fields in the structure for the
132 test to be effective. This tests whether GDB uses the correct
133 element content offsets (relative to the complete `some_struct'
134 value) when counting value repetitions. */
135struct some_struct
136{
137 int a;
138 int b;
139 unsigned char array[20];
140} some_struct = {
141 0x12345678,
142 0x87654321,
143 {
144 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
148 }
149};
150
0d63ecda
KS
151/* The following variables are used for testing byte repeat sequences.
152 The variable names are encoded: invalid_XYZ where:
153 X = start
154 Y = invalid
155 Z = end
156
157 Each of X and Z can be "E" (empty), "S" (single), "L" (long single),
158 or "R" (repeat).
159
160 Y can be either any of the above except "E" (otherwise there is nothing
161 to test). */
162char invalid_ESE[] = "\240";
163char invalid_SSE[] = "a\240";
164char invalid_LSE[] = "abaabbaaabbb\240";
165char invalid_RSE[] = "aaaaaaaaaaaaaaaaaaaa\240";
166char invalid_ESS[] = "\240c";
167char invalid_SSS[] = "a\240c";
168char invalid_LSS[] = "abaabbaaabbb\240c";
169char invalid_RSS[] = "aaaaaaaaaaaaaaaaaaaa\240c";
170char invalid_ESL[] = "\240cdccddcccddd";
171char invalid_SSL[] = "a\240cdccddcccddd";
172char invalid_LSL[] = "abaabbaaabbb\240cdccddcccddd";
173char invalid_RSL[] = "aaaaaaaaaaaaaaaaaaaa\240cdccddcccddd";
174char invalid_ESR[] = "\240cccccccccccccccccccc";
175char invalid_SSR[] = "a\240cccccccccccccccccccc";
176char invalid_LSR[] = "abaabbaaabbb\240cccccccccccccccccccc";
177char invalid_RSR[] = "aaaaaaaaaaaaaaaaaaaa\240cccccccccccccccccccc";
178char invalid_ELE[] = "\240\240\240\240";
179char invalid_SLE[] = "a\240\240\240\240";
180char invalid_LLE[] = "abaabbaaabbb\240\240\240\240";
181char invalid_RLE[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240";
182char invalid_ELS[] = "\240\240\240\240c";
183char invalid_SLS[] = "a\240\240\240\240c";
184char invalid_LLS[] = "abaabbaaabbb\240\240\240\240c";
185char invalid_RLS[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240c";
186char invalid_ELL[] = "\240\240\240\240cdccddcccddd";
187char invalid_SLL[] = "a\240\240\240\240cdccddcccddd";
188char invalid_LLL[] = "abaabbaaabbb\240\240\240\240cdccddcccddd";
189char invalid_RLL[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cdccddcccddd";
190char invalid_ELR[] = "\240\240\240\240cccccccccccccccccccc";
191char invalid_SLR[] = "a\240\240\240\240cccccccccccccccccccc";
192char invalid_LLR[] = "abaabbaaabbb\240\240\240\240cccccccccccccccccccc";
193char invalid_RLR[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cccccccccccccccccccc";
194char invalid_ERE[] = ""
195 "\240\240\240\240\240\240\240\240\240\240"
196 "\240\240\240\240\240\240\240\240\240\240";
197char invalid_LRE[] = "abaabbaaabbb"
198 "\240\240\240\240\240\240\240\240\240\240"
199 "\240\240\240\240\240\240\240\240\240\240";
200char invalid_RRE[] = "aaaaaaaaaaaaaaaaaaaa"
201 "\240\240\240\240\240\240\240\240\240\240"
202 "\240\240\240\240\240\240\240\240\240\240";
203char invalid_ERS[] = ""
204 "\240\240\240\240\240\240\240\240\240\240"
205 "\240\240\240\240\240\240\240\240\240\240c";
206char invalid_ERL[] = ""
207 "\240\240\240\240\240\240\240\240\240\240"
208 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
209char invalid_ERR[] = ""
210 "\240\240\240\240\240\240\240\240\240\240"
211 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
212char invalid_SRE[] = "a"
213 "\240\240\240\240\240\240\240\240\240\240"
214 "\240\240\240\240\240\240\240\240\240\240";
215char invalid_SRS[] = "a"
216 "\240\240\240\240\240\240\240\240\240\240"
217 "\240\240\240\240\240\240\240\240\240\240c";
218char invalid_SRL[] = "a"
219 "\240\240\240\240\240\240\240\240\240\240"
220 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
221char invalid_SRR[] = "a"
222 "\240\240\240\240\240\240\240\240\240\240"
223 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
224char invalid_LRS[] = "abaabbaaabbb"
225 "\240\240\240\240\240\240\240\240\240\240"
226 "\240\240\240\240\240\240\240\240\240\240c";
227char invalid_LRL[] = "abaabbaaabbb"
228 "\240\240\240\240\240\240\240\240\240\240"
229 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
230char invalid_LRR[] = "abaabbaaabbb"
231 "\240\240\240\240\240\240\240\240\240\240"
232 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
233char invalid_RRS[] = "aaaaaaaaaaaaaaaaaaaa"
234 "\240\240\240\240\240\240\240\240\240\240"
235 "\240\240\240\240\240\240\240\240\240\240c";
236char invalid_RRL[] = "aaaaaaaaaaaaaaaaaaaa"
237 "\240\240\240\240\240\240\240\240\240\240"
238 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
239char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
240 "\240\240\240\240\240\240\240\240\240\240"
241 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
242
c906108c
SS
243/* -- */
244
085dd6e6 245int main ()
c906108c 246{
0db4ca18 247 void *p = malloc (1);
c906108c
SS
248
249 /* Prevent AIX linker from removing variables. */
250 return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
251 + int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
751a959b 252 *parrays -> array1 + a1[0] + a2[0];
0db4ca18 253 free (p);
c906108c 254}
This page took 2.190795 seconds and 4 git commands to generate.