Parcourir la source

Optimize get_current_target in AOT loader for more archs (#347)

Karl Fessel il y a 5 ans
Parent
commit
874cc951c6
2 fichiers modifiés avec 40 ajouts et 20 suppressions
  1. 20 10
      core/iwasm/aot/arch/aot_reloc_aarch64.c
  2. 20 10
      core/iwasm/aot/arch/aot_reloc_arm.c

+ 20 - 10
core/iwasm/aot/arch/aot_reloc_aarch64.c

@@ -27,22 +27,32 @@ get_target_symbol_map(uint32 *sym_num)
     return target_sym_map;
 }
 
+#define BUILD_TARGET_AARCH64_DEFAULT "aarch64v8"
 void
 get_current_target(char *target_buf, uint32 target_buf_size)
 {
-    char *build_target = BUILD_TARGET;
-    char *p = target_buf, *p_end;
-    snprintf(target_buf, target_buf_size, "%s", build_target);
-    p_end = p + strlen(target_buf);
-    while (p < p_end) {
-        if (*p >= 'A' && *p <= 'Z')
-            *p++ += 'a' - 'A';
+    const char * s =  BUILD_TARGET;
+    size_t s_size = sizeof(BUILD_TARGET);
+    char *d = target_buf;
+
+    /* Set to "aarch64v8" by default if sub version isn't specified */
+    if (strcmp(s, "AARACH64") == 0) {
+        s = BUILD_TARGET_AARCH64_DEFAULT;
+        s_size = sizeof(BUILD_TARGET_AARCH64_DEFAULT);
+    }
+    if(target_buf_size < s_size){
+        s_size = target_buf_size;
+    }
+    while (--s_size) {
+        if (*s >= 'A' && *s <= 'Z')
+            *d++ = *s++ + 'a' - 'A';
         else
-            p++;
+            *d++ = *s++ ;
     }
-    if (!strcmp(target_buf, "aarch64"))
-        snprintf(target_buf, target_buf_size, "aarch64v8");
+    /* Ensure the string is null byte ('\0') terminated */
+    *d = '\0';
 }
+#undef BUILD_TARGET_AARCH64_DEFAULT
 
 static uint32
 get_plt_item_size()

+ 20 - 10
core/iwasm/aot/arch/aot_reloc_arm.c

@@ -118,22 +118,32 @@ get_target_symbol_map(uint32 *sym_num)
     return target_sym_map;
 }
 
+#define BUILD_TARGET_ARM_DEFAULT "armv4"
 void
 get_current_target(char *target_buf, uint32 target_buf_size)
 {
-    char *build_target = BUILD_TARGET;
-    char *p = target_buf, *p_end;
-    snprintf(target_buf, target_buf_size, "%s", build_target);
-    p_end = p + strlen(target_buf);
-    while (p < p_end) {
-        if (*p >= 'A' && *p <= 'Z')
-            *p++ += 'a' - 'A';
+    const char * s =  BUILD_TARGET;
+    size_t s_size = sizeof(BUILD_TARGET);
+    char *d = target_buf;
+
+    /* Set to "armv4" by default if sub version isn't specified */
+    if (strcmp(s, "ARM") == 0) {
+        s = BUILD_TARGET_ARM_DEFAULT;
+        s_size = sizeof(BUILD_TARGET_ARM_DEFAULT);
+    }
+    if(target_buf_size < s_size){
+        s_size = target_buf_size;
+    }
+    while (--s_size) {
+        if (*s >= 'A' && *s <= 'Z')
+            *d++ = *s++ + 'a' - 'A';
         else
-            p++;
+            *d++ = *s++ ;
     }
-    if (!strcmp(target_buf, "arm"))
-        snprintf(target_buf, target_buf_size, "armv4");
+    /* Ensure the string is null byte ('\0') terminated */
+    *d = '\0';
 }
+#undef BUILD_TARGET_ARM_DEFAULT
 
 uint32
 get_plt_item_size()