proc_test: implement test for DWZ compressed DWARF
If dwz binary is available in the system, test delve's ability to find deduplicated symbols in the DWARF information. dwzcompression.go contains a small C function (void fortytwo()) which calls glibc's fprintf with stdin as first argument. Normally, stdin will be present as a DW_TAG_variable as part of a DW_TAG_compile_unit named dwzcompression.cgo2.c. After running dwz on the binary, stdin is moved to a DW_TAG_partial_unit, which is imported from dwzcompression.cgo2.c with a DW_TAG_imported_unit. This test verifies that delve is able to find stdin symbol's type, as a way to confirm it understands dwz's compressed/deduplicated DWARF information.
This commit is contained in:
parent
ed71248f9b
commit
bafa512067
14
_fixtures/dwzcompression.go
Normal file
14
_fixtures/dwzcompression.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
// #include <stdio.h>
|
||||||
|
// void fortytwo()
|
||||||
|
// {
|
||||||
|
// fprintf(stdin, "42");
|
||||||
|
// }
|
||||||
|
import "C"
|
||||||
|
import "runtime"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
C.fortytwo()
|
||||||
|
runtime.Breakpoint()
|
||||||
|
}
|
@ -3697,3 +3697,20 @@ func TestIssue951(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDWZCompression(t *testing.T) {
|
||||||
|
// If dwz is not available in the system, skip this test
|
||||||
|
if _, err := exec.LookPath("dwz"); err != nil {
|
||||||
|
t.Skip("dwz not installed")
|
||||||
|
}
|
||||||
|
|
||||||
|
withTestProcessArgs("dwzcompression", t, ".", []string{}, protest.EnableDWZCompression, func(p proc.Process, fixture protest.Fixture) {
|
||||||
|
_, err := setFunctionBreakpoint(p, "C.fortytwo")
|
||||||
|
assertNoError(err, t, "setFunctionBreakpoint()")
|
||||||
|
assertNoError(proc.Continue(p), t, "first Continue()")
|
||||||
|
val := evalVariable(p, t, "stdin")
|
||||||
|
if val.RealType == nil {
|
||||||
|
t.Errorf("Can't find type for \"stdin\" global variable")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user