You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/04/13 15:49:34 UTC
[incubator-nuttx] 03/04: Move modlib_loadshdrs to a separate file
This is an automated email from the ASF dual-hosted git repository.
gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 7cfcea2938e183439859076558e4331b3c1a1610
Author: YAMAMOTO Takashi <ya...@midokura.com>
AuthorDate: Mon Apr 13 23:50:14 2020 +0900
Move modlib_loadshdrs to a separate file
To avoid pulling otherwise unused modlib_findsection when linking.
---
libs/libc/modlib/Make.defs | 3 +-
libs/libc/modlib/modlib_loadshdrs.c | 116 ++++++++++++++++++++++++++++++++++++
libs/libc/modlib/modlib_sections.c | 60 -------------------
3 files changed, 118 insertions(+), 61 deletions(-)
diff --git a/libs/libc/modlib/Make.defs b/libs/libc/modlib/Make.defs
index c6aada1..a2c647e 100644
--- a/libs/libc/modlib/Make.defs
+++ b/libs/libc/modlib/Make.defs
@@ -38,7 +38,8 @@ ifeq ($(CONFIG_LIBC_MODLIB),y)
# Add the nuttx/lib/modlib.h files to the build
CSRCS += modlib_bind.c modlib_depend.c modlib_init.c modlib_iobuffer.c
-CSRCS += modlib_load.c modlib_read.c modlib_registry.c modlib_sections.c
+CSRCS += modlib_load.c modlib_loadshdrs.c
+CSRCS += modlib_read.c modlib_registry.c modlib_sections.c
CSRCS += modlib_symbols.c modlib_symtab.c modlib_uninit.c modlib_unload.c
CSRCS += modlib_verify.c
diff --git a/libs/libc/modlib/modlib_loadshdrs.c b/libs/libc/modlib/modlib_loadshdrs.c
new file mode 100644
index 0000000..5bbe4b4
--- /dev/null
+++ b/libs/libc/modlib/modlib_loadshdrs.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * libs/libc/modlib/modlib_loadshdrs.c
+ *
+ * Copyright (C) 2015, 2017 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gn...@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 <nuttx/config.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/lib/modlib.h>
+
+#include "libc.h"
+#include "modlib/modlib.h"
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: modlib_loadshdrs
+ *
+ * Description:
+ * Loads section headers into memory.
+ *
+ * Returned Value:
+ * 0 (OK) is returned on success and a negated errno is returned on
+ * failure.
+ *
+ ****************************************************************************/
+
+int modlib_loadshdrs(FAR struct mod_loadinfo_s *loadinfo)
+{
+ size_t shdrsize;
+ int ret;
+
+ DEBUGASSERT(loadinfo->shdr == NULL);
+
+ /* Verify that there are sections */
+
+ if (loadinfo->ehdr.e_shnum < 1)
+ {
+ berr("ERROR: No sections(?)\n");
+ return -EINVAL;
+ }
+
+ /* Get the total size of the section header table */
+
+ shdrsize = (size_t)loadinfo->ehdr.e_shentsize *
+ (size_t)loadinfo->ehdr.e_shnum;
+ if (loadinfo->ehdr.e_shoff + shdrsize > loadinfo->filelen)
+ {
+ berr("ERROR: Insufficent space in file for section header table\n");
+ return -ESPIPE;
+ }
+
+ /* Allocate memory to hold a working copy of the sector header table */
+
+ loadinfo->shdr = (FAR FAR Elf_Shdr *)lib_malloc(shdrsize);
+ if (!loadinfo->shdr)
+ {
+ berr("ERROR: Failed to allocate the section header table. Size: %ld\n",
+ (long)shdrsize);
+ return -ENOMEM;
+ }
+
+ /* Read the section header table into memory */
+
+ ret = modlib_read(loadinfo, (FAR uint8_t *)loadinfo->shdr, shdrsize,
+ loadinfo->ehdr.e_shoff);
+ if (ret < 0)
+ {
+ berr("ERROR: Failed to read section header table: %d\n", ret);
+ }
+
+ return ret;
+}
diff --git a/libs/libc/modlib/modlib_sections.c b/libs/libc/modlib/modlib_sections.c
index 607da9e..d010fa9 100644
--- a/libs/libc/modlib/modlib_sections.c
+++ b/libs/libc/modlib/modlib_sections.c
@@ -39,7 +39,6 @@
#include <nuttx/config.h>
-#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
@@ -166,65 +165,6 @@ static inline int modlib_sectname(FAR struct mod_loadinfo_s *loadinfo,
****************************************************************************/
/****************************************************************************
- * Name: modlib_loadshdrs
- *
- * Description:
- * Loads section headers into memory.
- *
- * Returned Value:
- * 0 (OK) is returned on success and a negated errno is returned on
- * failure.
- *
- ****************************************************************************/
-
-int modlib_loadshdrs(FAR struct mod_loadinfo_s *loadinfo)
-{
- size_t shdrsize;
- int ret;
-
- DEBUGASSERT(loadinfo->shdr == NULL);
-
- /* Verify that there are sections */
-
- if (loadinfo->ehdr.e_shnum < 1)
- {
- berr("ERROR: No sections(?)\n");
- return -EINVAL;
- }
-
- /* Get the total size of the section header table */
-
- shdrsize = (size_t)loadinfo->ehdr.e_shentsize *
- (size_t)loadinfo->ehdr.e_shnum;
- if (loadinfo->ehdr.e_shoff + shdrsize > loadinfo->filelen)
- {
- berr("ERROR: Insufficent space in file for section header table\n");
- return -ESPIPE;
- }
-
- /* Allocate memory to hold a working copy of the sector header table */
-
- loadinfo->shdr = (FAR FAR Elf_Shdr *)lib_malloc(shdrsize);
- if (!loadinfo->shdr)
- {
- berr("ERROR: Failed to allocate the section header table. Size: %ld\n",
- (long)shdrsize);
- return -ENOMEM;
- }
-
- /* Read the section header table into memory */
-
- ret = modlib_read(loadinfo, (FAR uint8_t *)loadinfo->shdr, shdrsize,
- loadinfo->ehdr.e_shoff);
- if (ret < 0)
- {
- berr("ERROR: Failed to read section header table: %d\n", ret);
- }
-
- return ret;
-}
-
-/****************************************************************************
* Name: modlib_findsection
*
* Description: