aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/print-file-var-main.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2019-07-20 01:20:35 +0100
committerTom Tromey <tromey@adacore.com>2019-10-02 09:53:17 -0600
commit1d58d6a26c2a93b80f93a5d058dd678782affd5d (patch)
treee1c71bba761d41f04247d87f76116821db6cab5f /gdb/testsuite/gdb.base/print-file-var-main.c
parent4b610737f02338b2aea7641ab771aa5e137d067c (diff)
downloadbinutils-1d58d6a26c2a93b80f93a5d058dd678782affd5d.zip
binutils-1d58d6a26c2a93b80f93a5d058dd678782affd5d.tar.gz
binutils-1d58d6a26c2a93b80f93a5d058dd678782affd5d.tar.bz2
Make print-file-var.exp test attribute visibility hidden, dlopen, and main symbol
Make gdb.base/print-file-var.exp test all combinations of: - attribute hidden in the this_version_id symbols or not - dlopen or not - this_version_id symbol in main file or not - C++ gdb/testsuite/ChangeLog 2019-10-02 Pedro Alves <palves@redhat.com> Andrew Burgess <andrew.burgess@embecosm.com> * gdb.base/print-file-var-lib1.c: Include <stdio.h> and "print-file-var.h". (this_version_id) Use ATTRIBUTE_VISIBILITY. (get_version_1): Print this_version_id and its address. Add extern "C" wrappers around interface functions. * gdb.base/print-file-var-lib2.c: Include <stdio.h> and "print-file-var.h". (this_version_id) Use ATTRIBUTE_VISIBILITY. (get_version_2): Print this_version_id and its address. Add extern "C" wrappers around interface functions. * gdb.base/print-file-var-main.c: Include <dlfcn.h>, <assert.h>, <stddef.h> and "print-file-var.h". Add extern "C" wrappers around interface functions. [VERSION_ID_MAIN] (this_version_id): Define. (main): Define v0. Use dlopen if SHLIB_NAME is defined. * gdb.base/print-file-var.h: Add some #defines to simplify setting up extern "C" blocks. * gdb.base/print-file-var.exp (test): New, factored out from top level. (top level): Test all combinations of attribute hidden or not, dlopen or not, and this_version_id symbol in main file or not. Compile tests as both C++ and C, make test names unique.
Diffstat (limited to 'gdb/testsuite/gdb.base/print-file-var-main.c')
-rw-r--r--gdb/testsuite/gdb.base/print-file-var-main.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/gdb/testsuite/gdb.base/print-file-var-main.c b/gdb/testsuite/gdb.base/print-file-var-main.c
index ddc54f1..1472bd4 100644
--- a/gdb/testsuite/gdb.base/print-file-var-main.c
+++ b/gdb/testsuite/gdb.base/print-file-var-main.c
@@ -14,21 +14,49 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+#ifdef SHLIB_NAME
+# include <dlfcn.h>
+#endif
+
+#include <assert.h>
+#include <stddef.h>
+
+#include "print-file-var.h"
+
+START_EXTERN_C
+
extern int get_version_1 (void);
extern int get_version_2 (void);
+END_EXTERN_C
+
+#if VERSION_ID_MAIN
+ATTRIBUTE_VISIBILITY int this_version_id = 55;
+#endif
+
int
main (void)
{
+#if VERSION_ID_MAIN
+ int vm = this_version_id;
+#endif
int v1 = get_version_1 ();
- int v2 = get_version_2 ();
+ int v2;
+
+#ifdef SHLIB_NAME
+ {
+ void *handle = dlopen (SHLIB_NAME, RTLD_LAZY);
+ int (*getver2) (void);
+
+ assert (handle != NULL);
- if (v1 != 104)
- return 1;
- /* The value returned by get_version_2 depends on the target system. */
- if (v2 != 104 && v2 != 203)
- return 2;
+ getver2 = (int (*)(void)) dlsym (handle, "get_version_2");
+
+ v2 = getver2 ();
+ }
+#else
+ v2 = get_version_2 ();
+#endif
return 0; /* STOP */
}
-