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: