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