"path/filepath"
        "sort"
        "strings"
+       "sync"
 )
 
 // This file handles all algorithms related to XCOFF files generation.
        dynLibraries    map[string]int       // Dynamic libraries in .loader section. The integer represents its import file number (- 1)
        loaderSymbols   []*xcoffLoaderSymbol // symbols inside .loader symbol table
        loaderReloc     []*xcoffLoaderReloc  // Reloc that must be made inside loader
+       sync.Mutex                           // currently protect loaderReloc
 }
 
 // Var used by XCOFF Generation algorithms
                xldr.rtype = 0x3F<<8 + XCOFF_R_POS
        }
 
+       xfile.Lock()
        xfile.loaderReloc = append(xfile.loaderReloc, xldr)
+       xfile.Unlock()
        return true
 }
 
        off := hdr.Lrldoff                                // current offset is the same of reloc offset
 
        /* Reloc */
+       // Ensure deterministic order
+       sort.Slice(f.loaderReloc, func(i, j int) bool {
+               r1, r2 := f.loaderReloc[i], f.loaderReloc[j]
+               if r1.sym != r2.sym {
+                       return r1.sym < r2.sym
+               }
+               if r1.roff != r2.roff {
+                       return r1.roff < r2.roff
+               }
+               if r1.rtype != r2.rtype {
+                       return r1.rtype < r2.rtype
+               }
+               return r1.symndx < r2.symndx
+       })
+
        ep := ldr.Lookup(*flagEntrySymbol, 0)
        xldr := &XcoffLdRel64{
                Lvaddr:  uint64(ldr.SymValue(ep)),