embed.Patterns = p.Internal.Embed
                embed.Files = make(map[string]string)
                for _, file := range p.EmbedFiles {
-                       embed.Files[file] = filepath.Join(p.Dir, file)
+                       embed.Files[file] = fsys.Actual(filepath.Join(p.Dir, file))
                }
                js, err := json.MarshalIndent(&embed, "", "\t")
                if err != nil {
                ID:           a.Package.ImportPath,
                Compiler:     cfg.BuildToolchainName,
                Dir:          a.Package.Dir,
-               GoFiles:      mkAbsFiles(a.Package.Dir, gofiles),
-               NonGoFiles:   mkAbsFiles(a.Package.Dir, nongofiles),
-               IgnoredFiles: mkAbsFiles(a.Package.Dir, ignored),
+               GoFiles:      actualFiles(mkAbsFiles(a.Package.Dir, gofiles)),
+               NonGoFiles:   actualFiles(mkAbsFiles(a.Package.Dir, nongofiles)),
+               IgnoredFiles: actualFiles(mkAbsFiles(a.Package.Dir, ignored)),
                ImportPath:   a.Package.ImportPath,
                ImportMap:    make(map[string]string),
                PackageFile:  make(map[string]string),
        return abs
 }
 
+// actualFiles applies fsys.Actual to the list of files.
+func actualFiles(files []string) []string {
+       a := make([]string, len(files))
+       for i, f := range files {
+               a[i] = fsys.Actual(f)
+       }
+       return a
+}
+
 // passLongArgsInResponseFiles modifies cmd such that, for
 // certain programs, long arguments are passed in "response files", a
 // file on disk with the arguments, with one arg per line. An actual