How to use fixUpPCs method of cover Package

Best Syzkaller code snippet using cover.fixUpPCs

html.go

Source:html.go Github

copy

Full Screen

...19 "github.com/google/syzkaller/pkg/cover/backend"20 "github.com/google/syzkaller/pkg/mgrconfig"21 "github.com/google/syzkaller/sys/targets"22)23func fixUpPCs(target string, progs []Prog, coverFilter map[uint32]uint32) []Prog {24 if coverFilter != nil {25 for _, prog := range progs {26 var nPCs []uint6427 for _, pc := range prog.PCs {28 if coverFilter[uint32(pc)] != 0 {29 nPCs = append(nPCs, pc)30 }31 }32 prog.PCs = nPCs33 }34 }35 // On arm64 as PLT is enabled by default, .text section is loaded after .plt section,36 // so there is 0x18 bytes offset from module load address for .text section37 // we need to remove the 0x18 bytes offset in order to correct module symbol address38 if target == targets.ARM64 {39 for _, prog := range progs {40 var nPCs []uint6441 for _, pc := range prog.PCs {42 // TODO: avoid to hardcode the address43 if pc < 0xffffffd010000000 {44 pc -= 0x1845 }46 nPCs = append(nPCs, pc)47 }48 prog.PCs = nPCs49 }50 }51 return progs52}53func (rg *ReportGenerator) DoHTML(w io.Writer, progs []Prog, coverFilter map[uint32]uint32) error {54 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)55 files, err := rg.prepareFileMap(progs)56 if err != nil {57 return err58 }59 d := &templateData{60 Root: new(templateDir),61 }62 haveProgs := len(progs) > 1 || progs[0].Data != ""63 fileOpenErr := fmt.Errorf("failed to open/locate any source file")64 for fname, file := range files {65 pos := d.Root66 path := ""67 for {68 if path != "" {69 path += "/"70 }71 sep := strings.IndexByte(fname, filepath.Separator)72 if sep == -1 {73 path += fname74 break75 }76 dir := fname[:sep]77 path += dir78 if pos.Dirs == nil {79 pos.Dirs = make(map[string]*templateDir)80 }81 if pos.Dirs[dir] == nil {82 pos.Dirs[dir] = &templateDir{83 templateBase: templateBase{84 Path: path,85 Name: dir,86 },87 }88 }89 pos = pos.Dirs[dir]90 fname = fname[sep+1:]91 }92 f := &templateFile{93 templateBase: templateBase{94 Path: path,95 Name: fname,96 Total: file.totalPCs,97 Covered: file.coveredPCs,98 },99 HasFunctions: len(file.functions) != 0,100 }101 pos.Files = append(pos.Files, f)102 if file.coveredPCs == 0 {103 continue104 }105 addFunctionCoverage(file, d)106 contents := ""107 lines, err := parseFile(file.filename)108 if err == nil {109 contents = fileContents(file, lines, haveProgs)110 fileOpenErr = nil111 } else {112 // We ignore individual errors of opening/locating source files113 // because there is a number of reasons when/why it can happen.114 // We fail only if we can't open/locate any single source file.115 // syz-ci can mess state of source files (https://github.com/google/syzkaller/issues/1770),116 // or bazel lies about location of auto-generated files,117 // or a used can update source files with git pull/checkout.118 contents = html.EscapeString(err.Error())119 if fileOpenErr != nil {120 fileOpenErr = err121 }122 }123 d.Contents = append(d.Contents, template.HTML(contents))124 f.Index = len(d.Contents) - 1125 }126 if fileOpenErr != nil {127 return fileOpenErr128 }129 for _, prog := range progs {130 d.Progs = append(d.Progs, template.HTML(html.EscapeString(prog.Data)))131 }132 processDir(d.Root)133 return coverTemplate.Execute(w, d)134}135func (rg *ReportGenerator) DoRawCoverFiles(w http.ResponseWriter, progs []Prog, coverFilter map[uint32]uint32) error {136 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)137 if err := rg.lazySymbolize(progs); err != nil {138 return err139 }140 sort.Slice(rg.Frames, func(i, j int) bool {141 return rg.Frames[i].PC < rg.Frames[j].PC142 })143 w.Header().Set("Content-Type", "text/plain; charset=utf-8")144 buf := bufio.NewWriter(w)145 fmt.Fprintf(buf, "PC,Module,Offset,Filename,StartLine,EndLine\n")146 for _, frame := range rg.Frames {147 offset := frame.PC - frame.Module.Addr148 fmt.Fprintf(buf, "0x%x,%v,0x%x,%v,%v\n", frame.PC, frame.Module.Name, offset, frame.Name, frame.StartLine)149 }150 buf.Flush()151 return nil152}153func (rg *ReportGenerator) DoRawCover(w http.ResponseWriter, progs []Prog, coverFilter map[uint32]uint32) {154 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)155 var pcs []uint64156 uniquePCs := make(map[uint64]bool)157 for _, prog := range progs {158 for _, pc := range prog.PCs {159 if uniquePCs[pc] {160 continue161 }162 uniquePCs[pc] = true163 pcs = append(pcs, pc)164 }165 }166 sort.Slice(pcs, func(i, j int) bool {167 return pcs[i] < pcs[j]168 })169 w.Header().Set("Content-Type", "text/plain; charset=utf-8")170 buf := bufio.NewWriter(w)171 for _, pc := range pcs {172 fmt.Fprintf(buf, "0x%x\n", pc)173 }174 buf.Flush()175}176func (rg *ReportGenerator) DoFilterPCs(w http.ResponseWriter, progs []Prog, coverFilter map[uint32]uint32) {177 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)178 var pcs []uint64179 uniquePCs := make(map[uint64]bool)180 for _, prog := range progs {181 for _, pc := range prog.PCs {182 if uniquePCs[pc] {183 continue184 }185 uniquePCs[pc] = true186 if coverFilter[uint32(pc)] != 0 {187 pcs = append(pcs, pc)188 }189 }190 }191 sort.Slice(pcs, func(i, j int) bool {192 return pcs[i] < pcs[j]193 })194 w.Header().Set("Content-Type", "text/plain; charset=utf-8")195 buf := bufio.NewWriter(w)196 for _, pc := range pcs {197 fmt.Fprintf(buf, "0x%x\n", pc)198 }199 buf.Flush()200}201type fileStats struct {202 Name string203 Module string204 CoveredLines int205 TotalLines int206 CoveredPCs int207 TotalPCs int208 TotalFunctions int209 CoveredFunctions int210 CoveredPCsInFunctions int211 TotalPCsInCoveredFunctions int212 TotalPCsInFunctions int213}214var csvFilesHeader = []string{215 "Filename",216 "CoveredLines",217 "TotalLines",218 "CoveredPCs",219 "TotalPCs",220 "TotalFunctions",221 "CoveredPCsInFunctions",222 "TotalPCsInFunctions",223 "TotalPCsInCoveredFunctions",224}225func (rg *ReportGenerator) convertToStats(progs []Prog) ([]fileStats, error) {226 files, err := rg.prepareFileMap(progs)227 if err != nil {228 return nil, err229 }230 var data []fileStats231 for fname, file := range files {232 lines, err := parseFile(file.filename)233 if err != nil {234 fmt.Printf("failed to open/locate %s\n", file.filename)235 continue236 }237 totalFuncs := len(file.functions)238 var coveredInFunc int239 var pcsInFunc int240 var pcsInCoveredFunc int241 var coveredFunc int242 for _, function := range file.functions {243 coveredInFunc += function.covered244 if function.covered != 0 {245 pcsInCoveredFunc += function.pcs246 coveredFunc++247 }248 pcsInFunc += function.pcs249 }250 totalLines := len(lines)251 var coveredLines int252 for _, line := range file.lines {253 if len(line.progCount) != 0 {254 coveredLines++255 }256 }257 data = append(data, fileStats{258 Name: fname,259 Module: file.module,260 CoveredLines: coveredLines,261 TotalLines: totalLines,262 CoveredPCs: file.coveredPCs,263 TotalPCs: file.totalPCs,264 TotalFunctions: totalFuncs,265 CoveredFunctions: coveredFunc,266 CoveredPCsInFunctions: coveredInFunc,267 TotalPCsInFunctions: pcsInFunc,268 TotalPCsInCoveredFunctions: pcsInCoveredFunc,269 })270 }271 return data, nil272}273func (rg *ReportGenerator) DoCSVFiles(w io.Writer, progs []Prog, coverFilter map[uint32]uint32) error {274 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)275 data, err := rg.convertToStats(progs)276 if err != nil {277 return err278 }279 sort.SliceStable(data, func(i, j int) bool {280 return data[i].Name < data[j].Name281 })282 writer := csv.NewWriter(w)283 defer writer.Flush()284 if err := writer.Write(csvFilesHeader); err != nil {285 return err286 }287 var d [][]string288 for _, dt := range data {289 d = append(d, []string{290 dt.Name,291 strconv.Itoa(dt.CoveredLines),292 strconv.Itoa(dt.TotalLines),293 strconv.Itoa(dt.CoveredPCs),294 strconv.Itoa(dt.TotalPCs),295 strconv.Itoa(dt.TotalFunctions),296 strconv.Itoa(dt.CoveredPCsInFunctions),297 strconv.Itoa(dt.TotalPCsInFunctions),298 strconv.Itoa(dt.TotalPCsInCoveredFunctions),299 })300 }301 return writer.WriteAll(d)302}303func groupCoverByFilePrefixes(datas []fileStats, subsystems []mgrconfig.Subsystem) map[string]map[string]string {304 d := make(map[string]map[string]string)305 for _, subsystem := range subsystems {306 var coveredLines int307 var totalLines int308 var coveredPCsInFile int309 var totalPCsInFile int310 var totalFuncs int311 var coveredFuncs int312 var coveredPCsInFuncs int313 var pcsInCoveredFuncs int314 var pcsInFuncs int315 var percentLines float64316 var percentPCsInFile float64317 var percentPCsInFunc float64318 var percentPCsInCoveredFunc float64319 var percentCoveredFunc float64320 for _, path := range subsystem.Paths {321 for _, data := range datas {322 if !strings.HasPrefix(data.Name, path) {323 continue324 }325 coveredLines += data.CoveredLines326 totalLines += data.TotalLines327 coveredPCsInFile += data.CoveredPCs328 totalPCsInFile += data.TotalPCs329 totalFuncs += data.TotalFunctions330 coveredFuncs += data.CoveredFunctions331 coveredPCsInFuncs += data.CoveredPCsInFunctions332 pcsInFuncs += data.TotalPCsInFunctions333 pcsInCoveredFuncs += data.TotalPCsInCoveredFunctions334 }335 }336 if totalLines != 0 {337 percentLines = 100.0 * float64(coveredLines) / float64(totalLines)338 }339 if totalPCsInFile != 0 {340 percentPCsInFile = 100.0 * float64(coveredPCsInFile) / float64(totalPCsInFile)341 }342 if pcsInFuncs != 0 {343 percentPCsInFunc = 100.0 * float64(coveredPCsInFuncs) / float64(pcsInFuncs)344 }345 if pcsInCoveredFuncs != 0 {346 percentPCsInCoveredFunc = 100.0 * float64(coveredPCsInFuncs) / float64(pcsInCoveredFuncs)347 }348 if totalFuncs != 0 {349 percentCoveredFunc = 100.0 * float64(coveredFuncs) / float64(totalFuncs)350 }351 d[subsystem.Name] = map[string]string{352 "name": subsystem.Name,353 "lines": fmt.Sprintf("%v / %v / %.2f%%", coveredLines, totalLines, percentLines),354 "PCsInFiles": fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFile, totalPCsInFile, percentPCsInFile),355 "Funcs": fmt.Sprintf("%v / %v / %.2f%%", coveredFuncs, totalFuncs, percentCoveredFunc),356 "PCsInFuncs": fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFuncs, pcsInFuncs, percentPCsInFunc),357 "PCsInCoveredFuncs": fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFuncs, pcsInCoveredFuncs, percentPCsInCoveredFunc),358 }359 }360 return d361}362func (rg *ReportGenerator) DoHTMLTable(w io.Writer, progs []Prog, coverFilter map[uint32]uint32) error {363 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)364 data, err := rg.convertToStats(progs)365 if err != nil {366 return err367 }368 d := groupCoverByFilePrefixes(data, rg.subsystem)369 return coverTableTemplate.Execute(w, d)370}371func groupCoverByModule(datas []fileStats) map[string]map[string]string {372 d := make(map[string]map[string]string)373 coveredLines := make(map[string]int)374 totalLines := make(map[string]int)375 coveredPCsInFile := make(map[string]int)376 totalPCsInFile := make(map[string]int)377 totalFuncs := make(map[string]int)378 coveredFuncs := make(map[string]int)379 coveredPCsInFuncs := make(map[string]int)380 pcsInCoveredFuncs := make(map[string]int)381 pcsInFuncs := make(map[string]int)382 percentLines := make(map[string]float64)383 percentPCsInFile := make(map[string]float64)384 percentPCsInFunc := make(map[string]float64)385 percentPCsInCoveredFunc := make(map[string]float64)386 percentCoveredFunc := make(map[string]float64)387 for _, data := range datas {388 coveredLines[data.Module] += data.CoveredLines389 totalLines[data.Module] += data.TotalLines390 coveredPCsInFile[data.Module] += data.CoveredPCs391 totalPCsInFile[data.Module] += data.TotalPCs392 totalFuncs[data.Module] += data.TotalFunctions393 coveredFuncs[data.Module] += data.CoveredFunctions394 coveredPCsInFuncs[data.Module] += data.CoveredPCsInFunctions395 pcsInFuncs[data.Module] += data.TotalPCsInFunctions396 pcsInCoveredFuncs[data.Module] += data.TotalPCsInCoveredFunctions397 }398 for m := range totalLines {399 if totalLines[m] != 0 {400 percentLines[m] = 100.0 * float64(coveredLines[m]) / float64(totalLines[m])401 }402 if totalPCsInFile[m] != 0 {403 percentPCsInFile[m] = 100.0 * float64(coveredPCsInFile[m]) / float64(totalPCsInFile[m])404 }405 if pcsInFuncs[m] != 0 {406 percentPCsInFunc[m] = 100.0 * float64(coveredPCsInFuncs[m]) / float64(pcsInFuncs[m])407 }408 if pcsInCoveredFuncs[m] != 0 {409 percentPCsInCoveredFunc[m] = 100.0 * float64(coveredPCsInFuncs[m]) / float64(pcsInCoveredFuncs[m])410 }411 if totalFuncs[m] != 0 {412 percentCoveredFunc[m] = 100.0 * float64(coveredFuncs[m]) / float64(totalFuncs[m])413 }414 lines := fmt.Sprintf("%v / %v / %.2f%%", coveredLines[m], totalLines[m], percentLines[m])415 pcsInFiles := fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFile[m], totalPCsInFile[m], percentPCsInFile[m])416 funcs := fmt.Sprintf("%v / %v / %.2f%%", coveredFuncs[m], totalFuncs[m], percentCoveredFunc[m])417 pcsInFuncs := fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFuncs[m], pcsInFuncs[m], percentPCsInFunc[m])418 covedFuncs := fmt.Sprintf("%v / %v / %.2f%%", coveredPCsInFuncs[m], pcsInCoveredFuncs[m], percentPCsInCoveredFunc[m])419 d[m] = map[string]string{420 "name": m,421 "lines": lines,422 "PCsInFiles": pcsInFiles,423 "Funcs": funcs,424 "PCsInFuncs": pcsInFuncs,425 "PCsInCoveredFuncs": covedFuncs,426 }427 }428 return d429}430func (rg *ReportGenerator) DoModuleCover(w io.Writer, progs []Prog, coverFilter map[uint32]uint32) error {431 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)432 data, err := rg.convertToStats(progs)433 if err != nil {434 return err435 }436 d := groupCoverByModule(data)437 return coverTableTemplate.Execute(w, d)438}439var csvHeader = []string{440 "Filename",441 "Function",442 "Covered PCs",443 "Total PCs",444}445func (rg *ReportGenerator) DoCSV(w io.Writer, progs []Prog, coverFilter map[uint32]uint32) error {446 progs = fixUpPCs(rg.target.Arch, progs, coverFilter)447 files, err := rg.prepareFileMap(progs)448 if err != nil {449 return err450 }451 var data [][]string452 for fname, file := range files {453 for _, function := range file.functions {454 data = append(data, []string{455 fname,456 function.name,457 strconv.Itoa(function.covered),458 strconv.Itoa(function.pcs),459 })460 }...

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 f, err := parser.ParseFile(fset, "1.go", nil, parser.ParseComments)4 if err != nil {5 fmt.Println(err)6 }

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 file, err := os.Open("1.go")4 if err != nil {5 fmt.Println(err)6 }7 defer file.Close()8 scanner := bufio.NewScanner(file)9 for scanner.Scan() {10 fmt.Println(scanner.Text())11 }12 if err := scanner.Err(); err != nil {13 fmt.Println(err)14 }15}16import (17func main() {18 file, err := os.Open("1.go")19 if err != nil {20 fmt.Println(err)21 }22 defer file.Close()23 scanner := bufio.NewScanner(file)24 for scanner.Scan() {25 fmt.Println(scanner.Text())26 }27 if err := scanner.Err(); err != nil {28 fmt.Println(err)29 }30}31import (32func main() {33 file, err := os.Open("1.go")34 if err != nil {35 fmt.Println(err)36 }37 defer file.Close()38 scanner := bufio.NewScanner(file)39 for scanner.Scan() {40 fmt.Println(scanner.Text())41 }42 if err := scanner.Err(); err != nil {43 fmt.Println(err)44 }45}46import (47func main() {48 file, err := os.Open("1.go")49 if err != nil {50 fmt.Println(err)51 }52 defer file.Close()53 scanner := bufio.NewScanner(file)54 for scanner.Scan() {55 fmt.Println(scanner.Text())56 }57 if err := scanner.Err(); err != nil {58 fmt.Println(err)59 }60}61import (

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 c.FixUpPCs()4 fmt.Println(c.PC)5}6import (7func main() {8 c.FixUpPCs()9 fmt.Println(c.PC)10}11import (12func main() {13 c.FixUpPCs()14 fmt.Println(c.PC)15}16import (17func main() {18 c.FixUpPCs()19 fmt.Println(c.PC)20}21import (22func main() {23 c.FixUpPCs()24 fmt.Println(c.PC)25}26import (27func main() {28 c.FixUpPCs()29 fmt.Println(c.PC)30}31import (32func main() {33 c.FixUpPCs()34 fmt.Println(c.PC)35}36import (37func main() {38 c.FixUpPCs()39 fmt.Println(c.PC)40}41import (42func main() {43 c.FixUpPCs()44 fmt.Println(c.PC)45}

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 f, err := os.Open("cover.dat")4 if err != nil {5 panic(err)6 }7 defer f.Close()8 cover := &Cover{}9 cover.Read(f)10 fmt.Println("Before fixup")11 for _, pc := range cover.PCs {12 fmt.Println(pc)13 }14 cover.FixupPCs()15 fmt.Println("After fixup")16 for _, pc := range cover.PCs {17 fmt.Println(pc)18 }19}20import (21func main() {22 f, err := os.Open("cover.dat")23 if err != nil {24 panic(err)25 }26 defer f.Close()27 cover := &Cover{}28 cover.Read(f)29 fmt.Println("Before fixup")30 for _, pc := range cover.PCs {31 fmt.Println(pc)32 }33 cover.FixupPCs()34 fmt.Println("After fixup")35 for _, pc := range cover.PCs {36 fmt.Println(pc)37 }38}39import (40func main() {41 f, err := os.Open("cover.dat")42 if err != nil {43 panic(err)44 }45 defer f.Close()46 cover := &Cover{}47 cover.Read(f)48 fmt.Println("Before fixup")49 for _, pc := range cover.PCs {50 fmt.Println(pc)51 }52 cover.FixupPCs()53 fmt.Println("After fixup")54 for _, pc := range cover.PCs {55 fmt.Println(pc)56 }57}

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Inside main function")4 fmt.Println("Calling function1()")5 function1()6 fmt.Println("Calling function2()")7 function2()8}9func function1() {10 fmt.Println("Inside function1()")11}12func function2() {13 fmt.Println("Inside function2()")14}15import (16func main() {17 fmt.Println("Inside main function")18 fmt.Println("Calling function1()")19 function1()20 fmt.Println("Calling function2()")21 function2()22}23func function1() {24 fmt.Println("Inside function1()")25}26func function2() {27 fmt.Println("Inside function2()")28}

Full Screen

Full Screen

fixUpPCs

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 c.FixUpPCs()4 fmt.Println(c)5}6./2.go:8: c.FixUpPCs undefined (type cover.Cover has no field or method FixUpPCs)

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful