xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.base/printcmds.c (revision aef5eb5f59cdfe8314f1b5f78ac04eb144e44010)
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. */
4 #include <stdlib.h>
5 unsigned 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 
40 unsigned 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',
56   'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', 0
57 };
58 
59 /* Single and multidimensional arrays to test access and printing of array
60    members. */
61 
62 typedef int ArrayInt [10];
63 ArrayInt a1 = {2,4,6,8,10,12,14,16,18,20};
64 
65 typedef char ArrayChar [5];
66 ArrayChar a2 = {'a','b','c','d','\0'};
67 
68 int int1dim[12] = {0,1,2,3,4,5,6,7,8,9,10,11};
69 int int2dim[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
70 int int3dim[2][3][2] = {{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};
71 int int4dim[1][2][3][2] = {{{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}}};
72 
73 char *teststring = (char*)"teststring contents";
74 
75 /* Test printing of a struct containing character arrays. */
76 
77 struct 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 
91 struct some_arrays *parrays = &arrays;
92 
93 enum some_volatile_enum { enumvolval1, enumvolval2 };
94 
95 /* A volatile enum variable whose name is the same as the enumeration
96    name.  See PR11827.  */
97 volatile enum some_volatile_enum some_volatile_enum = enumvolval1;
98 
99 enum flag_enum { ONE = 1, TWO = 2 };
100 
101 enum flag_enum three = ONE | TWO;
102 
103 /* A structure with an embedded array at an offset > 0.  The array has
104    all elements with the same repeating value, which must not be the
105    same as the value of the preceding fields in the structure for the
106    test to be effective.  This tests whether GDB uses the correct
107    element content offsets (relative to the complete `some_struct'
108    value) when counting value repetitions.  */
109 struct some_struct
110 {
111   int a;
112   int b;
113   unsigned char array[20];
114 } some_struct = {
115   0x12345678,
116   0x87654321,
117   {
118     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
119     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
120     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
121     0xaa, 0xaa, 0xaa, 0xaa, 0xaa
122   }
123 };
124 
125 /* The following variables are used for testing byte repeat sequences.
126    The variable names are encoded: invalid_XYZ where:
127    X = start
128    Y = invalid
129    Z = end
130 
131    Each of X and Z can be "E" (empty), "S" (single), "L" (long single),
132    or "R" (repeat).
133 
134    Y can be either any of the above except "E" (otherwise there is nothing
135    to test).  */
136 char invalid_ESE[] = "\240";
137 char invalid_SSE[] = "a\240";
138 char invalid_LSE[] = "abaabbaaabbb\240";
139 char invalid_RSE[] = "aaaaaaaaaaaaaaaaaaaa\240";
140 char invalid_ESS[] = "\240c";
141 char invalid_SSS[] = "a\240c";
142 char invalid_LSS[] = "abaabbaaabbb\240c";
143 char invalid_RSS[] = "aaaaaaaaaaaaaaaaaaaa\240c";
144 char invalid_ESL[] = "\240cdccddcccddd";
145 char invalid_SSL[] = "a\240cdccddcccddd";
146 char invalid_LSL[] = "abaabbaaabbb\240cdccddcccddd";
147 char invalid_RSL[] = "aaaaaaaaaaaaaaaaaaaa\240cdccddcccddd";
148 char invalid_ESR[] = "\240cccccccccccccccccccc";
149 char invalid_SSR[] = "a\240cccccccccccccccccccc";
150 char invalid_LSR[] = "abaabbaaabbb\240cccccccccccccccccccc";
151 char invalid_RSR[] = "aaaaaaaaaaaaaaaaaaaa\240cccccccccccccccccccc";
152 char invalid_ELE[] = "\240\240\240\240";
153 char invalid_SLE[] = "a\240\240\240\240";
154 char invalid_LLE[] = "abaabbaaabbb\240\240\240\240";
155 char invalid_RLE[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240";
156 char invalid_ELS[] = "\240\240\240\240c";
157 char invalid_SLS[] = "a\240\240\240\240c";
158 char invalid_LLS[] = "abaabbaaabbb\240\240\240\240c";
159 char invalid_RLS[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240c";
160 char invalid_ELL[] = "\240\240\240\240cdccddcccddd";
161 char invalid_SLL[] = "a\240\240\240\240cdccddcccddd";
162 char invalid_LLL[] = "abaabbaaabbb\240\240\240\240cdccddcccddd";
163 char invalid_RLL[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cdccddcccddd";
164 char invalid_ELR[] = "\240\240\240\240cccccccccccccccccccc";
165 char invalid_SLR[] = "a\240\240\240\240cccccccccccccccccccc";
166 char invalid_LLR[] = "abaabbaaabbb\240\240\240\240cccccccccccccccccccc";
167 char invalid_RLR[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cccccccccccccccccccc";
168 char invalid_ERE[] = ""
169   "\240\240\240\240\240\240\240\240\240\240"
170   "\240\240\240\240\240\240\240\240\240\240";
171 char invalid_LRE[] = "abaabbaaabbb"
172   "\240\240\240\240\240\240\240\240\240\240"
173   "\240\240\240\240\240\240\240\240\240\240";
174 char invalid_RRE[] = "aaaaaaaaaaaaaaaaaaaa"
175   "\240\240\240\240\240\240\240\240\240\240"
176   "\240\240\240\240\240\240\240\240\240\240";
177 char invalid_ERS[] = ""
178   "\240\240\240\240\240\240\240\240\240\240"
179   "\240\240\240\240\240\240\240\240\240\240c";
180 char invalid_ERL[] = ""
181   "\240\240\240\240\240\240\240\240\240\240"
182   "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
183 char invalid_ERR[] = ""
184   "\240\240\240\240\240\240\240\240\240\240"
185   "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
186 char invalid_SRE[] = "a"
187   "\240\240\240\240\240\240\240\240\240\240"
188   "\240\240\240\240\240\240\240\240\240\240";
189 char invalid_SRS[] = "a"
190   "\240\240\240\240\240\240\240\240\240\240"
191   "\240\240\240\240\240\240\240\240\240\240c";
192 char invalid_SRL[] = "a"
193   "\240\240\240\240\240\240\240\240\240\240"
194   "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
195 char invalid_SRR[] = "a"
196   "\240\240\240\240\240\240\240\240\240\240"
197   "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
198 char invalid_LRS[] = "abaabbaaabbb"
199   "\240\240\240\240\240\240\240\240\240\240"
200   "\240\240\240\240\240\240\240\240\240\240c";
201 char invalid_LRL[] = "abaabbaaabbb"
202   "\240\240\240\240\240\240\240\240\240\240"
203   "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
204 char invalid_LRR[] = "abaabbaaabbb"
205   "\240\240\240\240\240\240\240\240\240\240"
206   "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
207 char invalid_RRS[] = "aaaaaaaaaaaaaaaaaaaa"
208   "\240\240\240\240\240\240\240\240\240\240"
209   "\240\240\240\240\240\240\240\240\240\240c";
210 char invalid_RRL[] = "aaaaaaaaaaaaaaaaaaaa"
211   "\240\240\240\240\240\240\240\240\240\240"
212   "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
213 char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
214   "\240\240\240\240\240\240\240\240\240\240"
215   "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
216 
217 /* -- */
218 
219 int main ()
220 {
221   void *p = malloc (1);
222 
223   /* Prevent AIX linker from removing variables.  */
224   return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
225     + int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
226       *parrays -> array1 + a1[0] + a2[0];
227   free (p);
228 }
229