1/* PR 3967
2
3   local-alloc screwed up consideration of high+lo_sum and created
4   reg_equivs that it shouldn't have, resulting in lo_sum with
5   uninitialized data, resulting in segv.  The test has to remain
6   relatively large, since register spilling is required to twig
7   the bug.  */
8
9unsigned long *Local1;
10unsigned long *Local2;
11unsigned long *Local3;
12unsigned long *RDbf1;
13unsigned long *RDbf2;
14unsigned long *RDbf3;
15unsigned long *IntVc1;
16unsigned long *IntVc2;
17unsigned long *IntCode3;
18unsigned long *IntCode4;
19unsigned long *IntCode5;
20unsigned long *IntCode6;
21unsigned long *Lom1;
22unsigned long *Lom2;
23unsigned long *Lom3;
24unsigned long *Lom4;
25unsigned long *Lom5;
26unsigned long *Lom6;
27unsigned long *Lom7;
28unsigned long *Lom8;
29unsigned long *Lom9;
30unsigned long *Lom10;
31unsigned long *RDbf11;
32unsigned long *RDbf12;
33
34typedef struct
35  {
36    long a1;
37    unsigned long n1;
38    unsigned long local1;
39    unsigned long local2;
40    unsigned long local3;
41    unsigned long rdbf1;
42    unsigned long rdbf2;
43    unsigned long milli;
44    unsigned long frames1;
45    unsigned long frames2;
46    unsigned long nonShared;
47    long newPrivate;
48    long freeLimit;
49    unsigned long cache1;
50    unsigned long cache2;
51    unsigned long cache3;
52    unsigned long cache4;
53    unsigned long cache5;
54    unsigned long time6;
55    unsigned long frames7;
56    unsigned long page8;
57    unsigned long ot9;
58    unsigned long data10;
59    unsigned long bm11;
60    unsigned long misc12;
61  }
62ShrPcCommonStatSType;
63
64
65typedef struct
66  {
67    unsigned long sharedAttached;
68    unsigned long totalAttached;
69    long avgPercentShared;
70    unsigned long numberOfFreeFrames;
71    unsigned long localDirtyPageCount;
72    unsigned long globalDirtyPageCount;
73    long wakeupInterval;
74    unsigned long numActiveProcesses;
75    unsigned long numRecentActiveProcesses;
76    unsigned long gemDirtyPageKinds[10];
77    unsigned long stoneDirtyPageKinds[10];
78    unsigned long gemsInCacheCount;
79    long targetFreeFrameCount;
80  }
81ShrPcMonStatSType;
82
83typedef struct
84  {
85    unsigned long c1;
86    unsigned long c2;
87    unsigned long c3;
88    unsigned long c4;
89    unsigned long c5;
90    unsigned long c6;
91    unsigned long c7;
92    unsigned long c8;
93    unsigned long c9;
94    unsigned long c10;
95    unsigned long c11;
96    unsigned long c12;
97    unsigned long a1;
98    unsigned long a2;
99    unsigned long a3;
100    unsigned long a4;
101    unsigned long a5;
102    unsigned long a6;
103    unsigned long a7;
104    unsigned long a8;
105    unsigned long a9;
106    unsigned long a10;
107    unsigned long a11;
108    unsigned long a12;
109    unsigned long a13;
110    unsigned long a14;
111    unsigned long a15;
112    unsigned long a16;
113    unsigned long a17;
114    unsigned long a18;
115    unsigned long a19;
116    unsigned long sessionStats[40];
117  }
118ShrPcGemStatSType;
119
120union ShrPcStatUnion
121  {
122    ShrPcMonStatSType monitor;
123    ShrPcGemStatSType gem;
124  };
125
126typedef struct
127  {
128    int processId;
129    int sessionId;
130    ShrPcCommonStatSType cmn;
131    union ShrPcStatUnion u;
132  } ShrPcStatsSType;
133
134typedef struct
135  {
136    unsigned long *p1;
137    unsigned long *p2;
138    unsigned long *p3;
139    unsigned long *p4;
140    unsigned long *p5;
141    unsigned long *p6;
142    unsigned long *p7;
143    unsigned long *p8;
144    unsigned long *p9;
145    unsigned long *p10;
146    unsigned long *p11;
147  }
148WorkEntrySType;
149
150WorkEntrySType Workspace;
151
152static void
153setStatPointers (ShrPcStatsSType * statsPtr, long sessionId)
154{
155  statsPtr->sessionId = sessionId;
156  statsPtr->cmn.a1 = 0;
157  statsPtr->cmn.n1 = 5;
158
159  Local1 = &statsPtr->cmn.local1;
160  Local2 = &statsPtr->cmn.local2;
161  Local3 = &statsPtr->cmn.local3;
162  RDbf1 = &statsPtr->cmn.rdbf1;
163  RDbf2 = &statsPtr->cmn.rdbf2;
164  RDbf3 = &statsPtr->cmn.milli;
165  *RDbf3 = 1;
166
167  IntVc1 = &statsPtr->u.gem.a1;
168  IntVc2 = &statsPtr->u.gem.a2;
169  IntCode3 = &statsPtr->u.gem.a3;
170  IntCode4 = &statsPtr->u.gem.a4;
171  IntCode5 = &statsPtr->u.gem.a5;
172  IntCode6 = &statsPtr->u.gem.a6;
173
174  {
175    WorkEntrySType *workSpPtr;
176    workSpPtr = &Workspace;
177    workSpPtr->p1 = &statsPtr->u.gem.a7;
178    workSpPtr->p2 = &statsPtr->u.gem.a8;
179    workSpPtr->p3 = &statsPtr->u.gem.a9;
180    workSpPtr->p4 = &statsPtr->u.gem.a10;
181    workSpPtr->p5 = &statsPtr->u.gem.a11;
182    workSpPtr->p6 = &statsPtr->u.gem.a12;
183    workSpPtr->p7 = &statsPtr->u.gem.a13;
184    workSpPtr->p8 = &statsPtr->u.gem.a14;
185    workSpPtr->p9 = &statsPtr->u.gem.a15;
186    workSpPtr->p10 = &statsPtr->u.gem.a16;
187    workSpPtr->p11 = &statsPtr->u.gem.a17;
188  }
189  Lom1 = &statsPtr->u.gem.c1;
190  Lom2 = &statsPtr->u.gem.c2;
191  Lom3 = &statsPtr->u.gem.c3;
192  Lom4 = &statsPtr->u.gem.c4;
193  Lom5 = &statsPtr->u.gem.c5;
194  Lom6 = &statsPtr->u.gem.c6;
195  Lom7 = &statsPtr->u.gem.c7;
196  Lom8 = &statsPtr->u.gem.c8;
197  Lom9 = &statsPtr->u.gem.c9;
198  Lom10 = &statsPtr->u.gem.c10;
199  RDbf11 = &statsPtr->u.gem.c11;
200  RDbf12 = &statsPtr->u.gem.c12;
201}
202
203typedef struct
204{
205  ShrPcStatsSType stats;
206} ShrPcPteSType;
207
208ShrPcPteSType MyPte;
209
210static void
211initPte (void *shrpcPtr, long sessionId)
212{
213  ShrPcPteSType *ptePtr;
214
215  ptePtr = &MyPte;
216  setStatPointers (&ptePtr->stats, sessionId);
217}
218
219void
220InitCache (int sessionId)
221{
222  initPte (0, sessionId);
223}
224
225int
226main (int argc, char *argv[])
227{
228  InitCache (5);
229  return 0;
230}
231