Move logic from nuttx/libc/symtab to apps/system/symtab
This commit is contained in:
parent
f73ee9d352
commit
c7d8ef0f7c
@ -1405,4 +1405,11 @@
|
|||||||
* system/netdb: Failed to build if CONFIG_NET_HOSTFILE was not defined
|
* system/netdb: Failed to build if CONFIG_NET_HOSTFILE was not defined
|
||||||
because gethostbyaddr() was not available. Noted by OrbitalFox
|
because gethostbyaddr() was not available. Noted by OrbitalFox
|
||||||
(2015-08-21).
|
(2015-08-21).
|
||||||
|
* apps/system/symtab: Optional canned symtab inclusion to the build. When
|
||||||
|
option CONFIG_SYSTEM_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).
|
||||||
|
|
||||||
|
102
include/symtab.h
Normal file
102
include/symtab.h
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* apps/include/symtab.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 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.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __APPS_INCLUDE_SYMTAB_H
|
||||||
|
#define __APPS_INCLUDE_SYMTAB_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#undef EXTERN
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define EXTERN extern "C"
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: symtab_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Setup a user provided symbol table.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void symtab_initialize(void);
|
||||||
|
|
||||||
|
#undef EXTERN
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __APPS_INCLUDE_SYMTAB_H */
|
||||||
|
|
@ -25,6 +25,7 @@ source "$APPSDIR/system/sudoku/Kconfig"
|
|||||||
source "$APPSDIR/system/lm75/Kconfig"
|
source "$APPSDIR/system/lm75/Kconfig"
|
||||||
source "$APPSDIR/system/vi/Kconfig"
|
source "$APPSDIR/system/vi/Kconfig"
|
||||||
source "$APPSDIR/system/stackmonitor/Kconfig"
|
source "$APPSDIR/system/stackmonitor/Kconfig"
|
||||||
|
source "$APPSDIR/system/symtab/Kconfig"
|
||||||
source "$APPSDIR/system/cdcacm/Kconfig"
|
source "$APPSDIR/system/cdcacm/Kconfig"
|
||||||
source "$APPSDIR/system/composite/Kconfig"
|
source "$APPSDIR/system/composite/Kconfig"
|
||||||
source "$APPSDIR/system/usbmsc/Kconfig"
|
source "$APPSDIR/system/usbmsc/Kconfig"
|
||||||
|
@ -114,6 +114,10 @@ ifeq ($(CONFIG_SYSTEM_STACKMONITOR),y)
|
|||||||
CONFIGURED_APPS += system/stackmonitor
|
CONFIGURED_APPS += system/stackmonitor
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SYSTEM_SYMTAB),y)
|
||||||
|
CONFIGURED_APPS += system/symtab
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SYSTEM_USBMSC),y)
|
ifeq ($(CONFIG_SYSTEM_USBMSC),y)
|
||||||
CONFIGURED_APPS += system/usbmsc
|
CONFIGURED_APPS += system/usbmsc
|
||||||
endif
|
endif
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
SUBDIRS = cdcacm cle composite cu flash_eraseall free i2c hex2bin inifile
|
SUBDIRS = cdcacm cle composite cu flash_eraseall free i2c hex2bin inifile
|
||||||
SUBDIRS += install lm75 mdio netdb nxplayer ramtest ramtron readline sdcard
|
SUBDIRS += install lm75 mdio netdb nxplayer ramtest ramtron readline sdcard
|
||||||
SUBDIRS += stackmonitor sudoku usbmonitor usbmsc vi zmodem zoneinfo
|
SUBDIRS += stackmonitor sudoku symtab usbmonitor usbmsc vi zmodem zoneinfo
|
||||||
|
|
||||||
# Create the list of installed runtime modules (INSTALLED_DIRS)
|
# Create the list of installed runtime modules (INSTALLED_DIRS)
|
||||||
|
|
||||||
|
11
system/symtab/.gitignore
vendored
Normal file
11
system/symtab/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/Make.dep
|
||||||
|
/.depend
|
||||||
|
/.built
|
||||||
|
/*.asm
|
||||||
|
/*.rel
|
||||||
|
/*.lst
|
||||||
|
/*.sym
|
||||||
|
/*.adb
|
||||||
|
/*.lib
|
||||||
|
/*.src
|
||||||
|
/*.obj
|
15
system/symtab/Kconfig
Normal file
15
system/symtab/Kconfig
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#
|
||||||
|
# For a description of the syntax of this configuration file,
|
||||||
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||||
|
#
|
||||||
|
|
||||||
|
config SYSTEM_SYMTAB
|
||||||
|
bool "User-provided symbol table"
|
||||||
|
default n
|
||||||
|
depends on EXECFUNCS_HAVE_SYMTAB && LIB_BOARDCTL
|
||||||
|
select BOARDCTL_SYMTAB
|
||||||
|
---help---
|
||||||
|
Build and include default symbol table in the NuttX application.
|
||||||
|
The symbol table is selected by call symtab_initialize(). The
|
||||||
|
table apps/system/symtab/symtab.inc has to be generated using
|
||||||
|
mksymtab manually before this option is selected.
|
104
system/symtab/Makefile
Normal file
104
system/symtab/Makefile
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
############################################################################
|
||||||
|
# apps/system/system/Makefile
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015 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.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
-include $(TOPDIR)/.config
|
||||||
|
-include $(TOPDIR)/Make.defs
|
||||||
|
include $(APPDIR)/Make.defs
|
||||||
|
|
||||||
|
ifeq ($(WINTOOL),y)
|
||||||
|
INCDIROPT = -w
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Symbol table support
|
||||||
|
|
||||||
|
ASRCS =
|
||||||
|
CSRCS = symtab.c
|
||||||
|
|
||||||
|
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||||
|
COBJS = $(CSRCS:.c=$(OBJEXT))
|
||||||
|
|
||||||
|
SRCS = $(ASRCS) $(CSRCS)
|
||||||
|
OBJS = $(AOBJS) $(COBJS)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
||||||
|
BIN = ..\..\libapps$(LIBEXT)
|
||||||
|
else
|
||||||
|
ifeq ($(WINTOOL),y)
|
||||||
|
BIN = ..\\..\\libapps$(LIBEXT)
|
||||||
|
else
|
||||||
|
BIN = ../../libapps$(LIBEXT)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ROOTDEPPATH = --dep-path .
|
||||||
|
|
||||||
|
# Common build
|
||||||
|
|
||||||
|
VPATH =
|
||||||
|
|
||||||
|
all: .built
|
||||||
|
.PHONY: context depend clean distclean
|
||||||
|
|
||||||
|
$(AOBJS): %$(OBJEXT): %.S
|
||||||
|
$(call ASSEMBLE, $<, $@)
|
||||||
|
|
||||||
|
$(COBJS) $(MAINOBJ): %$(OBJEXT): %.c
|
||||||
|
$(call COMPILE, $<, $@)
|
||||||
|
|
||||||
|
.built: $(OBJS)
|
||||||
|
$(call ARCHIVE, $(BIN), $(OBJS))
|
||||||
|
$(Q) touch .built
|
||||||
|
|
||||||
|
install:
|
||||||
|
|
||||||
|
context:
|
||||||
|
|
||||||
|
# Create dependencies
|
||||||
|
|
||||||
|
.depend: Makefile $(SRCS)
|
||||||
|
$(Q) $(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
|
||||||
|
$(Q) touch $@
|
||||||
|
|
||||||
|
depend: .depend
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(call DELFILE, .built)
|
||||||
|
$(call CLEAN)
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
$(call DELFILE, Make.dep)
|
||||||
|
$(call DELFILE, .depend)
|
||||||
|
|
||||||
|
-include Make.dep
|
61
system/symtab/README.txt
Normal file
61
system/symtab/README.txt
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
symtab
|
||||||
|
======
|
||||||
|
|
||||||
|
Symbol Tables and Build Modes
|
||||||
|
-----------------------------
|
||||||
|
This directory provide support for a symbol table which provides all/most of
|
||||||
|
system and C library 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_SYSTEM_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:
|
||||||
|
|
||||||
|
cd <nuttx-path>
|
||||||
|
cat syscall/syscall.csv libc/libc.csv | sort > <apps-path>/symtab/symtab.csv
|
||||||
|
tools/mksymtab <apps-path>/symtab/symtab.csv <apps-path>/symtab/symtab.inc
|
||||||
|
|
||||||
|
where:
|
||||||
|
<nuttx-path> is the path to the NuttX top level build directory
|
||||||
|
<apps-path> is the path to the top level application directory
|
||||||
|
|
||||||
|
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 symbol table
|
||||||
|
by calling the function symtab_initialize():
|
||||||
|
|
||||||
|
#include <apps/symtab.h>
|
||||||
|
...
|
||||||
|
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 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 symtab.inc file to remove all interfaces that you do
|
||||||
|
not wish to include into the base FLASH image.
|
79
system/symtab/symtab.c
Normal file
79
system/symtab/symtab.c
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* apps/system/symtab/lib_symtab.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Pavel Pisa <ppisa@pikron.com>
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYSTEM_SYMTAB
|
||||||
|
|
||||||
|
#include <nuttx/compiler.h>
|
||||||
|
#include <sys/boardctl.h>
|
||||||
|
#include <apps/symtab.h>
|
||||||
|
|
||||||
|
#include "symtab.inc"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: symtab_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Setup a user provided symbol table.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void symtab_initialize(void)
|
||||||
|
{
|
||||||
|
/* We set the symbol table indirectly through the boardctl() */
|
||||||
|
|
||||||
|
struct symtab_desc_s symdesc;
|
||||||
|
|
||||||
|
symdesc.symtab = g_symtab;
|
||||||
|
symdesc.nsymbols = NSYMBOLS;
|
||||||
|
(void)boardctl(BOARDIOC_SYMTAB, (uinptr_t)&symdesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_SYSTEM_SYMTAB */
|
Loading…
x
Reference in New Issue
Block a user