gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / bitfields2.c
1 /* Test program to test bit field operations on bit fields of large
2 integer types. */
3
4 /* This file is expected to fail to compile if the type long long int
5 is not supported, but in that case it is irrelevant. */
6
7 #include <stdlib.h>
8 #include <string.h>
9
10 #if !defined(__STDC__) && !defined(__cplusplus)
11 #define signed /**/
12 #endif
13
14 struct fields
15 {
16 unsigned long long u1 : 15;
17 unsigned long long u2 : 33;
18 unsigned long long u3 : 16;
19 signed long long s1 : 15;
20 signed long long s2 : 33;
21 signed long long s3 : 16;
22 } flags;
23
24 void break1 ()
25 {
26 }
27
28 void break2 ()
29 {
30 }
31
32 void break3 ()
33 {
34 }
35
36 void break4 ()
37 {
38 }
39
40 void break5 ()
41 {
42 }
43
44 void break6 ()
45 {
46 }
47
48 void break7 ()
49 {
50 }
51
52 void break8 ()
53 {
54 }
55
56 void break9 ()
57 {
58 }
59
60 void break10 ()
61 {
62 }
63
64 /* This is used by bitfields.exp to determine if the target understands
65 signed bitfields. */
66 int i;
67
68 void tester ()
69 {
70 memset ((char *) &flags, 0, sizeof (flags));
71
72 /* For each member, set that member to 1, allow gdb to verify that the
73 member (and only that member) is 1, and then reset it back to 0. */
74 flags.s1 = 1;
75 break1 ();
76 flags.s1 = 0;
77
78 flags.u1 = 1;
79 break1 ();
80 flags.u1 = 0;
81
82 flags.s2 = 1;
83 break1 ();
84 flags.s2 = 0;
85
86 flags.u2 = 1;
87 break1 ();
88 flags.u2 = 0;
89
90 flags.s3 = 1;
91 break1 ();
92 flags.s3 = 0;
93
94 flags.u3 = 1;
95 break1 ();
96 flags.u3 = 0;
97
98 /* Fill alternating fields with all 1's and verify that none of the bits
99 "bleed over" to the other fields. */
100
101 flags.u1 = 0x7FFF;
102 flags.u3 = 0xFFFF;
103 flags.s2 = -1LL;
104 break2 ();
105 flags.u1 = 0;
106 flags.u3 = 0;
107 flags.s2 = 0;
108
109 flags.u2 = 0x1FFFFFFFFLL;
110 flags.s1 = -1;
111 flags.s3 = -1;
112 break2 ();
113
114 flags.u2 = 0;
115 flags.s1 = 0;
116 flags.s3 = 0;
117
118 /* Fill the unsigned fields with the maximum positive value and verify
119 that the values are printed correctly. */
120
121 flags.u1 = 0x7FFF;
122 flags.u2 = 0x1FFFFFFFFLL;
123 flags.u3 = 0xFFFF;
124 break3 ();
125 flags.u1 = 0;
126 flags.u2 = 0;
127 flags.u3 = 0;
128
129 /* Fill the signed fields with the maximum positive value, then the maximally
130 negative value, then -1, and verify in each case that the values are
131 printed correctly. */
132
133 /* Maximum positive values */
134 flags.s1 = 0x3FFF;
135 flags.s2 = 0xFFFFFFFFLL;
136 flags.s3 = 0x7FFF;
137 break4 ();
138
139 /* Maximally negative values */
140 flags.s1 = -0x4000;
141 flags.s2 = -0x100000000LL;
142 flags.s3 = -0x8000;
143
144 /* Extract bitfield value so that bitfield.exp can check if the target
145 understands signed bitfields. */
146 i = flags.s3;
147 break4 ();
148
149 /* -1 */
150 flags.s1 = -1;
151 flags.s2 = -1;
152 flags.s3 = -1;
153 break4 ();
154
155 flags.s1 = 0;
156 flags.s2 = 0;
157 flags.s3 = 0;
158
159 break5 ();
160 }
161
162 int main ()
163 {
164 int i;
165
166 for (i = 0; i < 5; i += 1)
167 tester ();
168 return 0;
169 }
This page took 0.03943 seconds and 4 git commands to generate.