@@ -37,6 +37,7 @@ func main() {
3737 var (
3838 flagConfig = flag .String ("config" , "" , "manager config file" )
3939 flagBinary = flag .String ("binary" , "syz-declextract" , "path to syz-declextract binary" )
40+ flagArches = flag .String ("arches" , "" , "comma-separated list of arches to extract (all if empty)" )
4041 )
4142 defer tool .Init ()()
4243 cfg , err := mgrconfig .LoadFile (* flagConfig )
@@ -46,7 +47,7 @@ func main() {
4647 loadProbeInfo := func () (* ifaceprobe.Info , error ) {
4748 return probe (cfg , * flagConfig )
4849 }
49- if _ , err := run (filepath .FromSlash ("sys/linux/auto.txt" ), loadProbeInfo , & clangtool.Config {
50+ if _ , err := run (filepath .FromSlash ("sys/linux/auto.txt" ), loadProbeInfo , * flagArches , & clangtool.Config {
5051 ToolBin : * flagBinary ,
5152 KernelSrc : cfg .KernelSrc ,
5253 KernelObj : cfg .KernelObj ,
@@ -57,9 +58,13 @@ func main() {
5758 }
5859}
5960
60- func run (autoFile string , loadProbeInfo func () (* ifaceprobe.Info , error ), cfg * clangtool.Config ) (
61+ func run (autoFile string , loadProbeInfo func () (* ifaceprobe.Info , error ), archList string , cfg * clangtool.Config ) (
6162 * declextract.Result , error ) {
62- out , probeInfo , syscallRename , err := prepare (loadProbeInfo , cfg )
63+ arches , err := tool .ParseArchList (target .OS , archList )
64+ if err != nil {
65+ return nil , fmt .Errorf ("failed to parse arches flag: %v" , err )
66+ }
67+ out , probeInfo , syscallRename , err := prepare (loadProbeInfo , arches , cfg )
6368 if err != nil {
6469 return nil , err
6570 }
@@ -123,7 +128,7 @@ func removeUnused(desc *ast.Description, autoFile string, unusedNodes []ast.Node
123128 })
124129}
125130
126- func prepare (loadProbeInfo func () (* ifaceprobe.Info , error ), cfg * clangtool.Config ) (
131+ func prepare (loadProbeInfo func () (* ifaceprobe.Info , error ), arches [] string , cfg * clangtool.Config ) (
127132 * declextract.Output , * ifaceprobe.Info , map [string ][]string , error ) {
128133 var eg errgroup.Group
129134 var out * declextract.Output
@@ -147,7 +152,7 @@ func prepare(loadProbeInfo func() (*ifaceprobe.Info, error), cfg *clangtool.Conf
147152 var syscallRename map [string ][]string
148153 eg .Go (func () error {
149154 var err error
150- syscallRename , err = buildSyscallRenameMap (cfg .KernelSrc )
155+ syscallRename , err = buildSyscallRenameMap (cfg .KernelSrc , arches )
151156 if err != nil {
152157 return fmt .Errorf ("failed to build syscall rename map: %w" , err )
153158 }
@@ -234,7 +239,7 @@ func finishInterfaces(interfaces []*declextract.Interface, consts map[string]*co
234239 }
235240}
236241
237- func buildSyscallRenameMap (sourceDir string ) (map [string ][]string , error ) {
242+ func buildSyscallRenameMap (sourceDir string , arches [] string ) (map [string ][]string , error ) {
238243 // Some syscalls have different names and entry points and thus need to be renamed.
239244 // e.g. SYSCALL_DEFINE1(setuid16, old_uid_t, uid) is referred to in the .tbl file with setuid.
240245 // Parse *.tbl files that map functions defined with SYSCALL_DEFINE macros to actual syscall names.
@@ -244,7 +249,7 @@ func buildSyscallRenameMap(sourceDir string) (map[string][]string, error) {
244249 // and then just order arches by name to have deterministic result.
245250 // Note: some syscalls may have no record in the tables for the architectures we support.
246251 syscalls := make (map [string ][]tblSyscall )
247- tblFiles , err := findTblFiles (sourceDir )
252+ tblFiles , err := findTblFiles (sourceDir , arches )
248253 if err != nil {
249254 return nil , err
250255 }
@@ -320,9 +325,10 @@ func parseTblFile(data []byte, arch string, syscalls map[string][]tblSyscall) {
320325 }
321326}
322327
323- func findTblFiles (sourceDir string ) (map [string ][]string , error ) {
328+ func findTblFiles (sourceDir string , arches [] string ) (map [string ][]string , error ) {
324329 files := make (map [string ][]string )
325- for _ , arch := range targets .List [target .OS ] {
330+ for _ , name := range arches {
331+ arch := targets.List [target.OS ][name ]
326332 err := filepath .WalkDir (filepath .Join (sourceDir , "arch" , arch .KernelHeaderArch ),
327333 func (file string , d fs.DirEntry , err error ) error {
328334 if err == nil && strings .HasSuffix (file , ".tbl" ) {
0 commit comments