Mercurial > hg > CbC > CbC_gcc
view libiberty/testsuite/demangler-fuzzer.c @ 150:26042f4007d5 current
fix examples
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 May 2020 07:51:47 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
/* Demangler fuzzer. Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GNU libiberty. 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, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include "demangle.h" #define MAXLEN 253 #define ALPMIN 33 #define ALPMAX 127 static char *program_name; #define DEFAULT_MAXCOUNT 7500000 static void print_usage (FILE *fp, int exit_value) { fprintf (fp, "Usage: %s [OPTION]...\n", program_name); fprintf (fp, "Options:\n"); fprintf (fp, " -h Display this message.\n"); fprintf (fp, " -s SEED Select the random seed to be used.\n"); fprintf (fp, " The default is to base one on the"); fprintf (fp, " current time.\n"); fprintf (fp, " -m MAXCOUNT Exit after MAXCOUNT symbols.\n"); fprintf (fp, " The default is %d.", DEFAULT_MAXCOUNT); fprintf (fp, " Set to `-1' for no limit.\n"); exit (exit_value); } int main (int argc, char *argv[]) { char symbol[2 + MAXLEN + 1] = "_Z"; int seed = -1, seed_set = 0; int count = 0, maxcount = DEFAULT_MAXCOUNT; int optchr; program_name = argv[0]; do { optchr = getopt (argc, argv, "hs:m:t:"); switch (optchr) { case '?': /* Unrecognized option. */ print_usage (stderr, 1); break; case 'h': print_usage (stdout, 0); break; case 's': seed = atoi (optarg); seed_set = 1; break; case 'm': maxcount = atoi (optarg); break; } } while (optchr != -1); if (!seed_set) seed = time (NULL); srand (seed); printf ("%s: seed = %d\n", program_name, seed); while (maxcount < 0 || count < maxcount) { char *buffer = symbol + 2; int length, i; length = rand () % MAXLEN; for (i = 0; i < length; i++) *buffer++ = (rand () % (ALPMAX - ALPMIN)) + ALPMIN; *buffer++ = '\0'; cplus_demangle (symbol, DMGL_AUTO | DMGL_ANSI | DMGL_PARAMS); count++; } printf ("%s: successfully demangled %d symbols\n", program_name, count); exit (0); }