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 /* A structure with an embedded array at an offset > 0.  The array has
100    all elements with the same repeating value, which must not be the
101    same as the value of the preceding fields in the structure for the
102    test to be effective.  This tests whether GDB uses the correct
103    element content offsets (relative to the complete `some_struct'
104    value) when counting value repetitions.  */
105 struct some_struct
106 {
107   int a;
108   int b;
109   unsigned char array[20];
110 } some_struct = {
111   0x12345678,
112   0x87654321,
113   {
114     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
115     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
116     0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
117     0xaa, 0xaa, 0xaa, 0xaa, 0xaa
118   }
119 };
120 
121 /* -- */
122 
main()123 int main ()
124 {
125 #ifdef usestubs
126   set_debug_traps();
127   breakpoint();
128 #endif
129   malloc(1);
130 
131   /* Prevent AIX linker from removing variables.  */
132   return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
133     + int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
134       *parrays -> array1 + a1[0] + a2[0];
135 }
136