1extern int f1 (void **); 2extern void f2 (void *); 3 4struct s 5{ 6 unsigned char field1; 7 int field2; 8}; 9 10static inline struct s * 11get_globals (void) 12{ 13 struct s * r; 14 void * rr; 15 16 if (f1 (&rr)) 17 return 0; 18 r = rr; 19 if (! r) 20 { 21 extern struct s t; 22 r = &t; 23 } 24 r->field1 = 1; 25 return r; 26} 27 28void 29atexit_common (const void *dso) 30{ 31 struct s *g = get_globals (); 32 33 if (! g) 34 return; 35 if (g->field1) 36 { 37 g->field2 = 0; 38 f2 (g); 39 } 40 else 41 f2 (g); 42} 43