packaging: add 64bit libs on 32bit build env
[platform/upstream/linaro-glibc.git] / dlfcn / glrefmain.c
1 /* Test for dependency tracking  added by relocations.
2    Copyright (C) 2000-2014 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <dlfcn.h>
20 #include <error.h>
21 #include <errno.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24
25
26 static void *
27 load (const char *name)
28 {
29   void *d = dlopen (name, RTLD_LAZY | RTLD_GLOBAL);
30   if (d == NULL)
31     error (EXIT_FAILURE, errno, "cannot load `%s'", name);
32   return d;
33 }
34
35
36 #define TEST_FUNCTION do_test ()
37 extern int do_test (void);
38
39 int
40 do_test (void)
41 {
42   void *d1;
43   void *d2;
44   int (*f) (void);
45
46   d1 = load ("glreflib1.so");
47   d2 = load ("glreflib2.so");
48
49   f = dlsym (d2, "ref2");
50   if (f == NULL)
51     error (EXIT_FAILURE, errno, "cannot get pointer to `%s'", "ref2");
52
53   if (f () != 42)
54     error (EXIT_FAILURE, 0, "wrong result from `%s'", "ref2");
55
56   puts ("Correct result in first call");
57   fflush (stdout);
58
59   /* Now unload the first file.  */
60   dlclose (d1);
61
62   puts ("About to call the second time");
63   fflush (stdout);
64
65   /* Try calling the function again.  */
66   if (f () != 42)
67     error (EXIT_FAILURE, 0, "wrong result from `%s' (second call)", "ref2");
68
69   puts ("Second call succeeded!");
70   fflush (stdout);
71
72   dlclose (d2);
73
74   puts ("glreflib2 also closed");
75   fflush (stdout);
76
77   return 0;
78 }
79
80 #include "../test-skeleton.c"