@@ -460,12 +460,18 @@ static size_t resolve_sym(Elf32_Sym *ret,
460460 ezld_obj_sym_t * objsym ,
461461 size_t glob_stridx ,
462462 bool use_sym_name ) {
463+ Elf32_Sym dummy ;
464+ if (ret == NULL ) {
465+ ret = & dummy ;
466+ }
467+
463468 if (objsym != NULL && objsym -> osy_globndx != EZLD_GLOB_SYM_UNDEF ) {
464469 * ret = g_self -> i_globsymtab .buf [objsym -> osy_globndx - 1 ];
465470 return objsym -> osy_globndx ;
466471 }
467472
468- if (use_sym_name && objsym != NULL && objsym -> osy_name != NULL ) {
473+ if (use_sym_name && objsym != NULL ) {
474+ assert (objsym -> osy_name != NULL );
469475 glob_stridx = globstr_add (objsym -> osy_name );
470476 }
471477
@@ -755,7 +761,7 @@ static void merge_symtabs(ezld_obj_t *obj) {
755761 }
756762
757763 size_t glob_strndx = globstr_add (obj_sym -> osy_name );
758- size_t glob_symndx = resolve_sym (NULL , NULL , glob_strndx , true );
764+ size_t glob_symndx = resolve_sym (NULL , obj_sym , glob_strndx , false );
759765 Elf32_Sym * glob_sym = NULL ;
760766
761767 uint32_t glob_shidx = SHN_COMMON ;
@@ -765,7 +771,6 @@ static void merge_symtabs(ezld_obj_t *obj) {
765771 glob_sym = & g_self -> i_globsymtab .buf [glob_symndx - 1 ];
766772
767773 if (entry .st_shndx == SHN_COMMON ) {
768- obj_sym -> osy_globndx = glob_symndx ;
769774 // Global COMMON symbol shall have size and alignemtn (st_value)
770775 // equal to the largest declared in the various object files
771776 if (glob_sym -> st_shndx == SHN_COMMON ) {
0 commit comments