Просмотр исходного кода

!566 LWP loadelf 时添加更多的报错信息。
Merge pull request !566 from guozhanxin/lwp_loadelf

bernard 3 лет назад
Родитель
Сommit
18fe41f293
1 измененных файлов с 11 добавлено и 0 удалено
  1. 11 0
      components/lwp/lwp.c

+ 11 - 0
components/lwp/lwp.c

@@ -506,6 +506,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
 
     if (len < sizeof eheader)
     {
+        LOG_E("len < sizeof eheader!");
         return -RT_ERROR;
     }
 
@@ -515,6 +516,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
 
     if (memcmp(elf_magic, &magic, 4) != 0)
     {
+        LOG_E("elf_magic not same, magic:0x%x!", magic);
         return -RT_ERROR;
     }
 
@@ -525,17 +527,20 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
 #ifndef ARCH_CPU_64BIT
     if (eheader.e_ident[4] != 1)
     { /* not 32bit */
+        LOG_E("elf not 32bit, %d!", eheader.e_ident[4]);
         return -RT_ERROR;
     }
 #else
     if (eheader.e_ident[4] != 2)
     { /* not 64bit */
+        LOG_E("elf not 64bit, %d!", eheader.e_ident[4]);
         return -RT_ERROR;
     }
 #endif
 
     if (eheader.e_ident[6] != 1)
     { /* ver not 1 */
+        LOG_E("elf Version not 1,ver:%d!", eheader.e_ident[6]);
         return -RT_ERROR;
     }
 
@@ -546,6 +551,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
     )
     {
         /* not pie or exec elf */
+        LOG_E("elf type not pie or exec, type:%d!", eheader.e_type);
         return -RT_ERROR;
     }
 
@@ -574,6 +580,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
                 && (eheader.e_entry != LDSO_LOAD_VADDR))
         {
             /* the entry is invalidate */
+            LOG_E("elf entry is invalidate, entry:0x%x!", eheader.e_entry);
             return -RT_ERROR;
         }
     }
@@ -587,11 +594,13 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
 #ifdef RT_USING_USERSPACE
         if (process_header_size > ARCH_PAGE_SIZE - sizeof(char[16]))
         {
+            LOG_E("process_header_size too big, size:0x%x!", process_header_size);
             return -RT_ERROR;
         }
         va = (uint8_t *)lwp_map_user(lwp, (void *)(USER_VADDR_TOP - ARCH_PAGE_SIZE * 2), process_header_size, 0);
         if (!va)
         {
+            LOG_E("lwp map user failed!");
             return -RT_ERROR;
         }
         pa = rt_hw_mmu_v2p(m_info, va);
@@ -600,6 +609,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
         process_header = (uint8_t *)rt_malloc(process_header_size + sizeof(char[16]));
         if (!process_header)
         {
+            LOG_E("process_header malloc failed, size:0x%x!", process_header_size + sizeof(char[16]));
             return -RT_ERROR;
         }
 #endif
@@ -801,6 +811,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str
         {
             if (pheader.p_filesz > pheader.p_memsz)
             {
+                LOG_E("pheader.p_filesz > pheader.p_memsz, p_filesz:0x%x;p_memsz:0x%x!", pheader.p_filesz, pheader.p_memsz);
                 return -RT_ERROR;
             }