aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/circleload1.c18
-rw-r--r--elf/circlemod1.c6
-rw-r--r--elf/circlemod2.c6
-rw-r--r--elf/circlemod2a.c6
-rw-r--r--elf/circlemod3.c15
5 files changed, 37 insertions, 14 deletions
diff --git a/elf/circleload1.c b/elf/circleload1.c
index 60f8fb5..7ac101a 100644
--- a/elf/circleload1.c
+++ b/elf/circleload1.c
@@ -102,6 +102,24 @@ load_dso (const char **loading, int undef, int flag)
printf ("ERRORS: dlopen shouldn't work for RTLD_NOW\n");
}
+ if (!undef)
+ {
+ int (*func) (void);
+
+ func = dlsym (obj, "circlemod1");
+ if (func == NULL)
+ {
+ ++errors;
+ printf ("ERRORS: cannot get address of \"circlemod1\": %s\n",
+ dlerror ());
+ }
+ else if (func () != 3)
+ {
+ ++errors;
+ printf ("ERRORS: function \"circlemod1\" returned wrong result\n");
+ }
+ }
+
loaded[0] = loading [0];
loaded[1] = loading [1];
loaded[2] = loading [2];
diff --git a/elf/circlemod1.c b/elf/circlemod1.c
index 6b61a4d..933ccd3 100644
--- a/elf/circlemod1.c
+++ b/elf/circlemod1.c
@@ -1,7 +1,7 @@
-extern void circlemod2 (void);
+extern int circlemod2 (void);
-void
+int
circlemod1 (void)
{
- circlemod2 ();
+ return circlemod2 ();
}
diff --git a/elf/circlemod2.c b/elf/circlemod2.c
index 1c67abc..ed8c117 100644
--- a/elf/circlemod2.c
+++ b/elf/circlemod2.c
@@ -1,9 +1,9 @@
extern void circlemod2_undefined (void);
-extern void circlemod3 (void);
+extern int circlemod3 (void);
-void
+int
circlemod2 (void)
{
circlemod2_undefined ();
- circlemod3 ();
+ return circlemod3 ();
}
diff --git a/elf/circlemod2a.c b/elf/circlemod2a.c
index f8664a9..dc6410b 100644
--- a/elf/circlemod2a.c
+++ b/elf/circlemod2a.c
@@ -1,7 +1,7 @@
-extern void circlemod3 (void);
+extern int circlemod3 (void);
-void
+int
circlemod2 (void)
{
- circlemod3 ();
+ return circlemod3 ();
}
diff --git a/elf/circlemod3.c b/elf/circlemod3.c
index 6ac00a0..8d16fe6 100644
--- a/elf/circlemod3.c
+++ b/elf/circlemod3.c
@@ -1,9 +1,14 @@
-extern void circlemod1 (void);
-extern void circlemod2 (void);
+extern int circlemod1 (void);
+extern int circlemod2 (void);
-void
+int
circlemod3 (void)
{
- circlemod1 ();
- circlemod2 ();
+ return 3;
+}
+
+int
+circlemod3a (void)
+{
+ return circlemod1 () + circlemod2 ();
}