@@ -480,21 +480,36 @@ def do_emscripten(infile, memfile):
480480  return  outfile 
481481
482482
483+ def  is_ar_file_with_missing_index (archive_file ):
484+   # We parse the archive header outselves because llvm-nm --print-armap is slower and less 
485+   # reliable. 
486+   # See: https://github.com/emscripten-core/emscripten/issues/10195 
487+   archive_header  =  b'!<arch>\n ' 
488+   file_header_size  =  60 
489+ 
490+   with  open (archive_file , 'rb' ) as  f :
491+     header  =  f .read (len (archive_header ))
492+     if  header  !=  archive_header :
493+       # This is not even an ar file 
494+       return  False 
495+     file_header  =  f .read (file_header_size )
496+     if  len (file_header ) !=  file_header_size :
497+       # We don't have any file entires at all so we don't consider the index missing 
498+       return  False 
499+ 
500+   name  =  file_header [:16 ].strip ()
501+   # If '/' is the name of the first file we have an index 
502+   return  name  !=  '/' 
503+ 
504+ 
483505def  ensure_archive_index (archive_file ):
484506  # Fastcomp linking works without archive indexes. 
485507  if  not  shared .Settings .WASM_BACKEND  or  not  shared .Settings .AUTO_ARCHIVE_INDEXES :
486508    return 
487-   # Ignore stderr since llvm-nm prints "no symbols" to stderr for each object that has no symbols 
488-   stdout  =  run_process ([shared .LLVM_NM , '--print-armap' , archive_file ], stdout = PIPE , stderr = PIPE ).stdout 
489-   stdout  =  stdout .strip ()
490-   # Ignore empty archives 
491-   if  not  stdout :
492-     return 
493-   if  stdout .startswith ('Archive map\n ' ) or  stdout .startswith ('Archive index\n ' ):
494-     return 
495-   shared .warning ('%s: archive is missing an index; Use emar when creating libraries to ensure an index is created' , archive_file )
496-   shared .warning ('%s: adding index' , archive_file )
497-   run_process ([shared .LLVM_RANLIB , archive_file ])
509+   if  is_ar_file_with_missing_index (archive_file ):
510+     shared .warning ('%s: archive is missing an index; Use emar when creating libraries to ensure an index is created' , archive_file )
511+     shared .warning ('%s: adding index' , archive_file )
512+     run_process ([shared .LLVM_RANLIB , archive_file ])
498513
499514
500515# 
0 commit comments