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
|
||||
because gethostbyaddr() was not available. Noted by OrbitalFox
|
||||
(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/vi/Kconfig"
|
||||
source "$APPSDIR/system/stackmonitor/Kconfig"
|
||||
source "$APPSDIR/system/symtab/Kconfig"
|
||||
source "$APPSDIR/system/cdcacm/Kconfig"
|
||||
source "$APPSDIR/system/composite/Kconfig"
|
||||
source "$APPSDIR/system/usbmsc/Kconfig"
|
||||
|
@ -114,6 +114,10 @@ ifeq ($(CONFIG_SYSTEM_STACKMONITOR),y)
|
||||
CONFIGURED_APPS += system/stackmonitor
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SYSTEM_SYMTAB),y)
|
||||
CONFIGURED_APPS += system/symtab
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SYSTEM_USBMSC),y)
|
||||
CONFIGURED_APPS += system/usbmsc
|
||||
endif
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
SUBDIRS = cdcacm cle composite cu flash_eraseall free i2c hex2bin inifile
|
||||
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)
|
||||
|
||||
|
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…
Reference in New Issue
Block a user