From 6fc449f689f59c68107640acd27ee8204bb120cb Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 23 Aug 2015 11:33:29 -0600 Subject: [PATCH] Moving canned_symtab from nuttx/libc to apps/system --- ChangeLog | 7 -- README.txt | 4 +- include/nuttx/binfmt/canned_symtab.h | 145 --------------------------- include/sys/boardctl.h | 17 +++- libc/Kconfig | 2 - libc/Makefile | 1 - libc/symtab/Kconfig | 15 --- libc/symtab/Make.defs | 45 --------- libc/symtab/README.txt | 57 ----------- libc/symtab/lib_symtab.c | 135 ------------------------- 10 files changed, 16 insertions(+), 412 deletions(-) delete mode 100644 include/nuttx/binfmt/canned_symtab.h delete mode 100644 libc/symtab/Kconfig delete mode 100644 libc/symtab/Make.defs delete mode 100644 libc/symtab/README.txt delete mode 100644 libc/symtab/lib_symtab.c diff --git a/ChangeLog b/ChangeLog index 09ee7e1802..61f179f326 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10868,13 +10868,6 @@ whole sockaddr_in or sockaddr_in6. From Pavel Pisa (2015-08-21). * tools/mksymtab: declare g_symtab array as conts to occupy RO section (Flash). From Pavel Pisa (2015-08-23). - * libc/symtab: Optional canned symtab inclusion to the build. When - option CONFIG_LIBC_SYMTAB is selected and symbol table file - libc/symtab/canned_symtab.inc is prepared then application can - use system provided complete symbol table. The option has - substantial effect on system image size. Mainly code/text. If - loading of applications at runtime is not planned do not select - this. From Pavel Pisa (2015-08-23). * libc/libc.csv and syscalls/syscalls.csv: Define some symbol export conditions, correct errno and add sleep and usleep. From Pavel Pisa (2015-08-23). diff --git a/README.txt b/README.txt index 035159dea8..53c6873725 100644 --- a/README.txt +++ b/README.txt @@ -1513,8 +1513,6 @@ nuttx/ |- lib/ | `- README.txt |- libc/ - | |- symtab/ - | | `- README.txt | `- README.txt |- libnx/ | `- README.txt @@ -1575,6 +1573,8 @@ apps/ | | `- README.txt | |- nxplayer | | `- README.txt + | |- symtab/ + | | `- README.txt | |- usbmsc | | `- README.txt | |- zmodem diff --git a/include/nuttx/binfmt/canned_symtab.h b/include/nuttx/binfmt/canned_symtab.h deleted file mode 100644 index f40018081c..0000000000 --- a/include/nuttx/binfmt/canned_symtab.h +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** - * include/nuttx/binfmt/canned_symtab.h - * - * Copyright (C) 2015 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * 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. - * - ****************************************************************************/ - -#ifndef __INCLUDE_NUTTX_BINFMT_CANNED_SYMTAB_H -#define __INCLUDE_NUTTX_BINFMT_CANNED_SYMTAB_H - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include - -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/**************************************************************************** - * Public Types - ****************************************************************************/ - -/* struct symbtab_s describes one entry in the symbol table. A symbol table - * is a fixed size array of struct symtab_s. The information is intentionally - * minimal and supports only: - * - * 1. Function pointers as sym_values. Of other kinds of values need to be - * supported, then typing information would also need to be included in - * the structure. - * - * 2. Fixed size arrays. There is no explicit provisional for dynamically - * adding or removing entries from the symbol table (realloc might be - * used for that purpose if needed). The intention is to support only - * fixed size arrays completely defined at compilation or link time. - */ - -/* In order to full describe a symbol table, a vector containing the address - * of the symbol table and the number of elements in the symbol table is - * required. - */ - -struct symtab_s; /* Forward reference */ -struct symtab_desc_s -{ - FAR struct symtab_s *symtab; - int nsymbols; -} - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -#undef EXTERN -#if defined(__cplusplus) -#define EXTERN extern "C" -extern "C" -{ -#else -#define EXTERN extern -#endif - -/**************************************************************************** - * Name: canned_symtab_initialize - * - * Description: - * Setup system provided canned symbol table. NOTE that this a user-space - * interface only. It is not generally available to to kernel mode code - * in protected or kernel builds. - * - * Input Parameters: - * None - * - * Returned Value: - * None - * - ****************************************************************************/ - -#if defined(CONFIG_BUILD_FLAT) || !defined(__KERNEL__) -void canned_symtab_initialize(void); -#endif - -/**************************************************************************** - * Name: canned_symtab_select - * - * Description: - * Setup system provided canned symbol table. This function only exists - * the kernel portion of a protected or kernel build. It is called only - * by boardctl(). I this case: - * - * - canned_symbtab_initialize() and g_symtab() lie in the user space. - * - boardctl(), canned_symtabl_select(), and exec_setsymtab() reside in - * kernel space. - * - * Access to boardctl() is provided in user space through a call gate. - * - * Input Parameters: - * symtab - The symbol table to be used - * - * Returned Value: - * Zero (OK) on success; a negated errno value on failure. - * - ****************************************************************************/ - -#if (defined(CONFIG_BUILD_PROTECTED) || defined(CONFIG_BUILD_KERNEL)) && \ - defined(__KERNEL__) -int canned_symtab_select(FAR const struct symtab_desc_s *symdesc); -#endif - -#undef EXTERN -#if defined(__cplusplus) -} -#endif - -#endif /* __INCLUDE_NUTTX_BINFMT_CANNED_SYMTAB_H */ - diff --git a/include/sys/boardctl.h b/include/sys/boardctl.h index 0cbc937971..28d08d81e4 100644 --- a/include/sys/boardctl.h +++ b/include/sys/boardctl.h @@ -72,9 +72,8 @@ * * CMD: BOARDIOC_SYMTAB * DESCRIPTION: Select a symbol table - * ARG: A pointer to an instance of struct symtab_desc_s - * (See include/nuttx/binfmt/canned_symtab.h). - * CONFIGURATION: CONFIG_LIBC_SYMTAB + * ARG: A pointer to an instance of struct boardioc_symtab_s + * CONFIGURATION: CONFIG_BOARDCTL_SYMTAB * DEPENDENCIES: None * * CMD: BOARDIOC_TSCTEST_SETUP @@ -159,6 +158,18 @@ struct boardioc_graphics_s #endif }; +/* In order to full describe a symbol table, a vector containing the address + * of the symbol table and the number of elements in the symbol table is + * required. + */ + +struct symtab_s; /* Forward reference */ +struct boardioc_symtab_s +{ + FAR struct symtab_s *symtab; + int nsymbols; +}; + /**************************************************************************** * Public Function Prototypes ****************************************************************************/ diff --git a/libc/Kconfig b/libc/Kconfig index 1be0aedcd0..e51915d1c2 100644 --- a/libc/Kconfig +++ b/libc/Kconfig @@ -195,8 +195,6 @@ config EXECFUNCS_NSYMBOLS symbols in that table. This selection provides the number of symbols in the symbol table. -source libc/symtab/Kconfig - endif # EXECFUNCS_HAVE_SYMTAB endif # LIBC_EXECFUNCS diff --git a/libc/Makefile b/libc/Makefile index 6509aa61d7..76d3e473aa 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -84,7 +84,6 @@ include queue/Make.defs include wqueue/Make.defs include misc/Make.defs include audio/Make.defs -include symtab/Make.defs # REVISIT: Backslash causes problems in $(COBJS) target DELIM := $(strip /) diff --git a/libc/symtab/Kconfig b/libc/symtab/Kconfig deleted file mode 100644 index 4cdef0d9c7..0000000000 --- a/libc/symtab/Kconfig +++ /dev/null @@ -1,15 +0,0 @@ -# -# For a description of the syntax of this configuration file, -# see the file kconfig-language.txt in the NuttX tools repository. -# - -config LIBC_SYMTAB - bool "Include canned symtab for applications and shell" - default n - depends on EXECFUNCS_HAVE_SYMTAB && !BUILD_KERNEL - select LIB_BOARDCTL if !BUILD_FLAT - ---help--- - Build and include default symbol table in the NuttX library. - The symbol table is selected by call canned_symtab_initialize(). - The table libc/symtab/canned_symtab.inc has to be generated - by mksymtab manually before this option is selected. diff --git a/libc/symtab/Make.defs b/libc/symtab/Make.defs deleted file mode 100644 index 98954a0e0d..0000000000 --- a/libc/symtab/Make.defs +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################ -# libc/symtab/Make.defs -# -# Copyright (C) 2015 Gregory Nutt. All rights reserved. -# Author: Gregory Nutt -# -# 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. -# -############################################################################ - -ifeq ($(CONFIG_LIBC_SYMTAB),y) - -# Include canned symtab to the build - -CSRCS += lib_symtab.c - -DEPPATH += --dep-path symtab -VPATH += :symtab - -endif diff --git a/libc/symtab/README.txt b/libc/symtab/README.txt deleted file mode 100644 index 8102c5dc5d..0000000000 --- a/libc/symtab/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -symtab -====== - -Symbol Tables and Build Modes ------------------------------ -This directory provide support for a canned symbol table which provides -all/most of system and libc services/functions to the application and NSH. - -Symbol tables have differing usefulness in different NuttX build modes: - - 1. In the FLAT build (CONFIG_BUILD_FLAT), symbol tables are used to bind - addresses in loaded ELF or NxFLAT modules to base code that usually - resides in FLASH memory. Both OS interfaces and user/application - libraries are made available to the loaded module via symbol tables. - - 2. Symbol tables may be of value in a protected build - (CONFIG_BUILD_PROTECTED) where the newly started user task must - share resources with other user code (but should use system calls to - interact with the OS). - - 3. But in the kernel build mode (CONFIG_BUILD_KERNEL), only fully linked - executables loadable via execl(), execv(), or posix_spawan() can used. - There is no use for a symbol table with the kernel build since all - memory resources are separate; nothing is share-able with the newly - started process. - -Creating the Canned Symbol Table --------------------------------- -The support is selected by CONFIG_LIBC_SYMTAB option and table has to be -prepared in advance manually. It can be prepared from NuttX top level -directory by using the following commands: - - cat syscall/syscall.csv libc/libc.csv | sort >libc/symtab/canned_symtab.csv - tools/mksymtab libc/symtab/canned_symtab.csv libc/symtab/canned_symtab.inc - -You may want omit syscall/syscall.csv in the above command in the protected -mode. It is optional since the system calls are provided through system -call traps. - -Your board-level start up code code then needs to select the canned symbol -table by calling the OS internal function canned_symtab_initialize() in the -board-specfic board_apps_initialize() logic: - - #include - ... - canned_symtab_initialize(); - -Code/Text Size Implications ---------------------------- -The option can have substantial effect on system image size, mainly -code/text. That is because the instructions to generate canned_symtab.inc -above will cause EVERY interface in the NuttX RTOS and the C library to be -included into build. Add to that the size of a huge symbol table. - -In order to reduce the code/text size, you may want to manually prune the -auto-generated canned_symtab.inc file to remove all interfaces that you do -not wish to include into the base FLASH image. diff --git a/libc/symtab/lib_symtab.c b/libc/symtab/lib_symtab.c deleted file mode 100644 index 4905d0bc91..0000000000 --- a/libc/symtab/lib_symtab.c +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************** - * libc/symtab/lib_symtab.c - * - * Copyright (C) 2015 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * Canned symtab implemented by Pavel Pisa - * - * 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. - * - ****************************************************************************/ - -#include - -#ifdef CONFIG_LIBC_SYMTAB - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include -#include -#include - -#include "canned_symtab.inc" - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: canned_symtab_initialize - * - * Description: - * Setup system provided canned symbol table. NOTE that this a user-space - * interface only. It is not generally available to to kernel mode code - * in protected or kernel builds. That is because exec_setsymtab() and - * g_symtab lie in different address spaces. - * - * Input Parameters: - * None - * - * Returned Value: - * None - * - ****************************************************************************/ - -#if defined(CONFIG_BUILD_FLAT) || !defined(__KERNEL__) -void canned_symtab_initialize(void) -{ -#ifdef CONFIG_BUILD_FLAT - /* In the FLAT build, exec_symtab() can be called directly from any logic. - * Both the symbol table and the function exec_setsymtabe reside in the same - * namespace and address space. - */ - - exec_setsymtab(g_symtab, NSYMBOLS); - -#else - /* In the user mode portion of a protected or kernel build, we must set - * the symbol table indirectly through the boardctl() call gate that will - * proxy the call to canned_symtab_select(). In this case - * - * - canned_symbtab_initialize() and g_symtab() lie in the user space. - * - boardctl(), canned_symtabl_select(), and exec_setsymtab() reside in - * kernel space. - * - * Access to boardctl() is provided in user space throug a call gate. - */ - - struct symtab_desc_s symdesc; - - symdesc.symtab = g_symtab; - symdesc.nsymbols = NSYMBOLS; - (void)boardctl(BOARDIOC_SYMTAB, (uinptr_t)&symdesc); -#endif -} -#endif - -/**************************************************************************** - * Name: canned_symtab_select - * - * Description: - * Setup system provided canned symbol table. This function only exists - * the kernel portion of a protected or kernel build. It is called only - * by boardctl(). I this case: - * - * - canned_symbtab_initialize() and g_symtab() lie in the user space. - * - boardctl(), canned_symtabl_select(), and exec_setsymtab() reside in - * kernel space. - * - * Access to boardctl() is provided in user space through a call gate. - * - * Input Parameters: - * symtab - The symbol table to be used - * - * Returned Value: - * Zero (OK) on success; a negated errno value on failure. - * - ****************************************************************************/ - -#if (defined(CONFIG_BUILD_PROTECTED) || defined(CONFIG_BUILD_KERNEL)) && \ - defined(__KERNEL__) -int canned_symtab_select(FAR const struct symtab_desc_s *symdesc) -{ - exec_setsymtab(symdesc->symtab, symdesc->nsymbols); -} -#endif - -#endif /* CONFIG_LIBC_SYMTAB */