aboutsummaryrefslogtreecommitdiff
path: root/nuttx/tools/mksymtab.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/tools/mksymtab.c')
-rw-r--r--nuttx/tools/mksymtab.c289
1 files changed, 0 insertions, 289 deletions
diff --git a/nuttx/tools/mksymtab.c b/nuttx/tools/mksymtab.c
deleted file mode 100644
index e401812c0..000000000
--- a/nuttx/tools/mksymtab.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/****************************************************************************
- * tools/mksymtab.c
- *
- * Copyright (C) 2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "csvparser.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#define MAX_HEADER_FILES 500
-#define SYMTAB_NAME "g_symtab"
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static const char *g_hdrfiles[MAX_HEADER_FILES];
-static int nhdrfiles;
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-static void show_usage(const char *progname)
-{
- fprintf(stderr, "USAGE: %s <cvs-file> <symtab-file>\n\n", progname);
- fprintf(stderr, "Where:\n\n");
- fprintf(stderr, " <cvs-file> : The path to the input CSV file\n");
- fprintf(stderr, " <symtab-file>: The path to the output symbol table file\n");
- fprintf(stderr, " -d : Enable debug output\n");
- exit(EXIT_FAILURE);
-}
-
-static bool check_hdrfile(const char *hdrfile)
-{
- int i;
-
- for (i = 0; i < nhdrfiles; i++)
- {
- if (strcmp(g_hdrfiles[i], hdrfile) == 0)
- {
- return true;
- }
- }
-
- return false;
-}
-
-static void add_hdrfile(const char *hdrfile)
-{
- if (hdrfile && strlen(hdrfile) > 0)
- {
- if (!check_hdrfile(hdrfile))
- {
- if (nhdrfiles > MAX_HEADER_FILES)
- {
- fprintf(stderr, "ERROR: Too man header files. Increase MAX_HEADER_FILES\n");
- exit(EXIT_FAILURE);
- }
-
- g_hdrfiles[nhdrfiles] = strdup(hdrfile);
- nhdrfiles++;
- }
- }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-int main(int argc, char **argv, char **envp)
-{
- char *csvpath;
- char *symtab;
- char *nextterm;
- char *finalterm;
- char *ptr;
- bool cond;
- FILE *instream;
- FILE *outstream;
- int ch;
- int i;
-
- /* Parse command line options */
-
- g_debug = false;
-
- while ((ch = getopt(argc, argv, ":d")) > 0)
- {
- switch (ch)
- {
- case 'd' :
- g_debug = true;
- break;
-
- case '?' :
- fprintf(stderr, "Unrecognized option: %c\n", optopt);
- show_usage(argv[0]);
-
- case ':' :
- fprintf(stderr, "Missing option argument, option: %c\n", optopt);
- show_usage(argv[0]);
-
- break;
- fprintf(stderr, "Unexpected option: %c\n", ch);
- show_usage(argv[0]);
- }
- }
-
- if (optind >= argc)
- {
- fprintf(stderr, "Missing <cvs-file> and <symtab-file>\n");
- show_usage(argv[0]);
- }
-
- csvpath = argv[optind];
- optind++;
-
- if (optind >= argc)
- {
- fprintf(stderr, "Missing <symtab-file>\n");
- show_usage(argv[0]);
- }
-
- symtab = argv[optind];
- optind++;
-
- if (optind < argc)
- {
- fprintf(stderr, "Unexpected garbage at the end of the line\n");
- show_usage(argv[0]);
- }
-
- /* Open the CSV file for reading */
-
- instream = fopen(csvpath, "r");
- if (!instream)
- {
- fprintf(stderr, "open %s failed: %s\n", csvpath, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- /* Open the Symbol table file for writing */
-
- outstream = fopen(symtab, "w");
- if (!outstream)
- {
- fprintf(stderr, "open %s failed: %s\n", csvpath, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- /* Get all of the header files that we need to include */
-
- while ((ptr = read_line(instream)) != NULL)
- {
- /* Parse the line from the CVS file */
-
- int nargs = parse_csvline(ptr);
- if (nargs < PARM1_INDEX)
- {
- fprintf(stderr, "Only %d arguments found: %s\n", nargs, g_line);
- exit(EXIT_FAILURE);
- }
-
- /* Add the header file to the list of header files we need to include */
-
- add_hdrfile(g_parm[HEADER_INDEX]);
- }
-
- /* Back to the beginning */
-
- rewind(instream);
-
- /* Output up-front file boilerplate */
-
- fprintf(outstream, "/* %s: Auto-generated symbol table. Do not edit */\n\n", symtab);
- fprintf(outstream, "#include <nuttx/config.h>\n");
- fprintf(outstream, "#include <nuttx/binfmt/symtab.h>\n\n");
-
- /* Output all of the require header files */
-
- for (i = 0; i < nhdrfiles; i++)
- {
- fprintf(outstream, "#include <%s>\n", g_hdrfiles[i]);
- }
-
- /* Now the symbol table itself */
-
- fprintf(outstream, "\nstruct symtab_s %s[] =\n", SYMTAB_NAME);
- fprintf(outstream, "{\n");
-
- /* Parse each line in the CVS file */
-
- nextterm = "";
- finalterm = "";
-
- while ((ptr = read_line(instream)) != NULL)
- {
- /* Parse the line from the CVS file */
-
- int nargs = parse_csvline(ptr);
- if (nargs < PARM1_INDEX)
- {
- fprintf(stderr, "Only %d arguments found: %s\n", nargs, g_line);
- exit(EXIT_FAILURE);
- }
-
- /* Output any conditional compilation */
-
- cond = (g_parm[COND_INDEX] && strlen(g_parm[COND_INDEX]) > 0);
- if (cond)
- {
- fprintf(outstream, "%s#if %s\n", nextterm, g_parm[COND_INDEX]);
- nextterm = "";
- }
-
- /* Output the symbol table entry */
-
- fprintf(outstream, "%s { \"%s\", (FAR const void *)%s }",
- nextterm, g_parm[NAME_INDEX], g_parm[NAME_INDEX]);
-
- if (cond)
- {
- nextterm = ",\n#endif\n";
- finalterm = "\n#endif\n";
- }
- else
- {
- nextterm = ",\n";
- finalterm = "\n";
- }
- }
-
- fprintf(outstream, "%s};\n\n", finalterm);
- fprintf(outstream, "#define NSYMBOLS (sizeof(%s) / sizeof (struct symtab_s))\n", SYMTAB_NAME);
-
- /* Close the CSV and symbol table files and exit */
-
- fclose(instream);
- fclose(outstream);
- return EXIT_SUCCESS;
-}