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