Skip to content

Commit 0104501

Browse files
committed
bpf2go: refactor compileOne function to simplify object file handling
- Moved the temporary object renaming logic from compileOne() to convert() - Simplified naming and cleanup Signed-off-by: Jonathan Perry <yonch@yonch.com>
1 parent 38f89b6 commit 0104501

File tree

1 file changed

+23
-31
lines changed

1 file changed

+23
-31
lines changed

cmd/bpf2go/main.go

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -329,15 +329,14 @@ func (b2g *bpf2go) convertAll() (err error) {
329329
return nil
330330
}
331331

332-
// compileOne compiles a single source file and returns the temporary object file name
333-
// and any dependencies found during compilation.
334-
func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName, outputStem string) (tmpObjFileName string, deps []dependency, err error) {
332+
// compileOne compiles a single source file and returns any dependencies found during compilation.
333+
func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName string) (deps []dependency, err error) {
335334
var depInput *os.File
336335
cFlags := slices.Clone(b2g.cFlags)
337336
if b2g.makeBase != "" {
338337
depInput, err = os.CreateTemp("", "bpf2go")
339338
if err != nil {
340-
return "", nil, err
339+
return nil, err
341340
}
342341
defer depInput.Close()
343342
defer os.Remove(depInput.Name())
@@ -353,7 +352,7 @@ func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName, outputSt
353352
)
354353
}
355354

356-
// Compile to final object file name first
355+
// Compile to final object file name
357356
err = gen.Compile(gen.CompileArgs{
358357
CC: b2g.cc,
359358
Strip: b2g.strip,
@@ -365,27 +364,18 @@ func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName, outputSt
365364
Dest: objFileName,
366365
})
367366
if err != nil {
368-
return "", nil, fmt.Errorf("compile %s: %w", source, err)
369-
}
370-
371-
// Move the compiled object to a temporary file
372-
tmpObjFileName = filepath.Join(filepath.Dir(objFileName), fmt.Sprintf("%s_%s_%s.o",
373-
outputStem,
374-
filepath.Base(source),
375-
tgt.Suffix()))
376-
if err := os.Rename(objFileName, tmpObjFileName); err != nil {
377-
return "", nil, fmt.Errorf("move object file: %w", err)
367+
return nil, fmt.Errorf("compile %s: %w", source, err)
378368
}
379369

380370
// Parse dependencies if enabled
381371
if b2g.makeBase != "" {
382372
deps, err = parseDependencies(cwd, depInput)
383373
if err != nil {
384-
return "", nil, fmt.Errorf("parse dependencies for %s: %w", source, err)
374+
return nil, fmt.Errorf("parse dependencies for %s: %w", source, err)
385375
}
386376
}
387377

388-
return tmpObjFileName, deps, nil
378+
return deps, nil
389379
}
390380

391381
func (b2g *bpf2go) convert(tgt gen.Target, goarches gen.GoArches) (err error) {
@@ -427,17 +417,31 @@ func (b2g *bpf2go) convert(tgt gen.Target, goarches gen.GoArches) (err error) {
427417
var allDeps []dependency
428418
var tmpObjFileNames []string
429419
for _, source := range b2g.sourceFiles {
430-
tmpObjFileName, deps, err := b2g.compileOne(tgt, cwd, source, objFileName, outputStem)
420+
deps, err := b2g.compileOne(tgt, cwd, source, objFileName)
431421
if err != nil {
432422
return err
433423
}
434-
tmpObjFileNames = append(tmpObjFileNames, tmpObjFileName)
435424

436425
if len(deps) > 0 {
437426
// There is always at least a dependency for the main file.
438427
deps[0].file = goFileName
439428
allDeps = append(allDeps, deps...)
440429
}
430+
431+
// For multiple source files, we need to move the compiled object to a temporary file
432+
if len(b2g.sourceFiles) > 1 {
433+
tmpObj, err := os.CreateTemp("", filepath.Base(source))
434+
if err != nil {
435+
return fmt.Errorf("create temporary object file: %w", err)
436+
}
437+
tmpObj.Close()
438+
defer os.Remove(tmpObj.Name())
439+
440+
if err := os.Rename(objFileName, tmpObj.Name()); err != nil {
441+
return fmt.Errorf("move object file: %w", err)
442+
}
443+
tmpObjFileNames = append(tmpObjFileNames, tmpObj.Name())
444+
}
441445
}
442446

443447
// If we have multiple object files, link them together
@@ -449,18 +453,6 @@ func (b2g *bpf2go) convert(tgt gen.Target, goarches gen.GoArches) (err error) {
449453
if err != nil {
450454
return fmt.Errorf("link object files: %w", err)
451455
}
452-
} else {
453-
// Single file, just rename it back to the final name
454-
if err := os.Rename(tmpObjFileNames[0], objFileName); err != nil {
455-
return fmt.Errorf("rename object file: %w", err)
456-
}
457-
}
458-
459-
// Clean up temporary object files
460-
for _, tmpObj := range tmpObjFileNames {
461-
if err := os.Remove(tmpObj); err != nil && !os.IsNotExist(err) {
462-
return fmt.Errorf("remove temporary object file: %w", err)
463-
}
464456
}
465457

466458
if b2g.disableStripping {

0 commit comments

Comments
 (0)