diff options
Diffstat (limited to 'libctf/testsuite/libctf-regression')
-rw-r--r-- | libctf/testsuite/libctf-regression/pptrtab-a.c | 3 | ||||
-rw-r--r-- | libctf/testsuite/libctf-regression/pptrtab-b.c | 4 | ||||
-rw-r--r-- | libctf/testsuite/libctf-regression/pptrtab.c | 54 | ||||
-rw-r--r-- | libctf/testsuite/libctf-regression/pptrtab.lk | 4 | ||||
-rw-r--r-- | libctf/testsuite/libctf-regression/regression.exp | 43 |
5 files changed, 108 insertions, 0 deletions
diff --git a/libctf/testsuite/libctf-regression/pptrtab-a.c b/libctf/testsuite/libctf-regression/pptrtab-a.c new file mode 100644 index 0000000..e9f656a --- /dev/null +++ b/libctf/testsuite/libctf-regression/pptrtab-a.c @@ -0,0 +1,3 @@ +typedef long a_t; + +a_t *a; diff --git a/libctf/testsuite/libctf-regression/pptrtab-b.c b/libctf/testsuite/libctf-regression/pptrtab-b.c new file mode 100644 index 0000000..6142f19 --- /dev/null +++ b/libctf/testsuite/libctf-regression/pptrtab-b.c @@ -0,0 +1,4 @@ +typedef long a_t; + +a_t b; + diff --git a/libctf/testsuite/libctf-regression/pptrtab.c b/libctf/testsuite/libctf-regression/pptrtab.c new file mode 100644 index 0000000..5d3c2f2 --- /dev/null +++ b/libctf/testsuite/libctf-regression/pptrtab.c @@ -0,0 +1,54 @@ +#include <ctf-api.h> +#include <stdio.h> +#include <stdlib.h> + +int +main (int argc, char *argv[]) +{ + ctf_dict_t *fp; + ctf_archive_t *ctf; + ctf_next_t *i = NULL; + ctf_id_t type; + const char *arcname; + char *type_name; + int err; + + if (argc != 2) + { + fprintf (stderr, "Syntax: %s PROGRAM\n", argv[0]); + exit(1); + } + + if ((ctf = ctf_open (argv[1], NULL, &err)) == NULL) + goto open_err; + + /* Make sure we can look up a_t * by name in all non-parent dicts, even though + the a_t * and the type it points to are in distinct dicts. */ + + while ((fp = ctf_archive_next (ctf, &i, &arcname, 1, &err)) != NULL) + { + if ((type = ctf_lookup_by_name (fp, "a_t *")) == CTF_ERR) + goto err; + + if (ctf_type_reference (fp, type) == CTF_ERR) + goto err; + + printf ("%s: a_t * points to a type of kind %i\n", arcname, + ctf_type_kind (fp, ctf_type_reference (fp, type))); + + ctf_dict_close (fp); + } + if (err != ECTF_NEXT_END) + goto open_err; + + ctf_close (ctf); + + return 0; + + open_err: + fprintf (stderr, "%s: cannot open: %s\n", argv[0], ctf_errmsg (err)); + return 1; + err: + fprintf (stderr, "Lookup failed in %s: %s\n", arcname, ctf_errmsg (ctf_errno (fp))); + return 1; +} diff --git a/libctf/testsuite/libctf-regression/pptrtab.lk b/libctf/testsuite/libctf-regression/pptrtab.lk new file mode 100644 index 0000000..43aae7d --- /dev/null +++ b/libctf/testsuite/libctf-regression/pptrtab.lk @@ -0,0 +1,4 @@ +# source: pptrtab-a.c +# source: pptrtab-b.c +# link_flags: -Wl,--ctf-share-types=share-duplicated +.*/pptrtab-[ab]\.c: .* points to a type of kind 10 diff --git a/libctf/testsuite/libctf-regression/regression.exp b/libctf/testsuite/libctf-regression/regression.exp new file mode 100644 index 0000000..51ad257 --- /dev/null +++ b/libctf/testsuite/libctf-regression/regression.exp @@ -0,0 +1,43 @@ +# Copyright (C) 2021 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +if ![is_elf_format] { + unsupported "CTF needs bfd changes to be emitted on non-ELF" + return 0 +} + +if {[info exists env(LC_ALL)]} { + set old_lc_all $env(LC_ALL) +} +set env(LC_ALL) "C" + +set ctf_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.lk]] + +foreach ctf_test $ctf_test_list { + verbose [file rootname $ctf_test] + verbose running lookup test on $ctf_test + run_lookup_test [file rootname $ctf_test] +} + +if {[info exists old_lc_all]} { + set env(LC_ALL) $old_lc_all +} else { + unset env(LC_ALL) +} |