Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Debugging Code Generation in Go
JBD
February 02, 2020
Programming
5
1.3k
Debugging Code Generation in Go
JBD
February 02, 2020
Tweet
Share
More Decks by JBD
See All by JBD
eBPF in Microservices Observability at eBPF Day
rakyll
1
1.6k
eBPF in Microservices Observability
rakyll
1
1.3k
OpenTelemetry at AWS
rakyll
1
1.6k
Are you ready for production?
rakyll
8
2k
Servers are doomed to fail
rakyll
3
1.2k
Serverless Containers
rakyll
1
160
Critical Path Analysis
rakyll
0
230
Monitoring and Debugging Containers
rakyll
2
970
CPDD
rakyll
0
3.8k
Other Decks in Programming
See All in Programming
microCMS × Shopifyで、ECサイトがリニューアル後急成長した話
microcms
0
470
Jetpack Compose 頑張らないPreviewParameterProvider
horie23
0
110
Is Rust a great language for building Kubernetes ecosystem
deepu105
0
150
heyにおけるSREの大切さ~マルチプロダクト運用の「楽しさ」と「難しさ」および今後の展望~
fufuhu
3
1.7k
Reinventing the wheel ... as a service
mariofusco
3
270
Yumemi.apk #6 ~ゆめみのAndroidエンジニア 日頃の成果大発表会!~ Session 2
blendthink
1
210
From Java 11 to 17 and beyond
josepaumard
0
300
Monadic Java
mariofusco
4
260
tfcon2022_Web3Dひとめぐり.pdf
emadurandal
0
980
CIでAndroidUIテストの様子を録画してみた
mkeeda
0
180
Update from the Elixir team - 2022
whatyouhide
0
190
Learning DDD輪読会#4 / Learning DDD Book Club #4
suzushin54
1
140
Featured
See All Featured
Fireside Chat
paigeccino
11
1.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
The Language of Interfaces
destraynor
148
20k
Rails Girls Zürich Keynote
gr2m
86
12k
How to name files
jennybc
39
58k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
We Have a Design System, Now What?
morganepeng
35
2.9k
Statistics for Hackers
jakevdp
781
210k
Building Adaptive Systems
keathley
25
1.1k
Design by the Numbers
sachag
271
17k
jQuery: Nuts, Bolts and Bling
dougneiner
56
6.4k
Docker and Python
trallard
27
1.5k
Transcript
Debugging Code Generation in Go Jaana B. Dogan, Google jbd@google.com
None
None
@rakyll Who needs this talk? • Developers who want to
debug the compilation. • Reverse engineers, security practitioners, ... • Current or prospective Go contributors. • Anyone who wants to study compilers.
Lexing and parsing Transformations on AST SSA optimizations
main program package main import "fmt" func main() { sum
:= 1 + 1 fmt.Printf("sum: %v\n", sum) }
main program $ go build -x WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d 21/T/go-build399551378 mkdir -p
$WORK/b001/ cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile github.com/rakyll/codegen=/Users/jbd/Library/Cach es/go-build/00/00ed60989b390a64bad3cb01d4ec61aae6 d0ea61e3e38fc35052d1ab5b0efe66-d packagefile ...
main program $ go build -n # run dry WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d
21/T/go-build399551378 mkdir -p $WORK/b001/ cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile github.com/rakyll/codegen=/Users/jbd/Library/Cach es/go-build/00/00ed60989b390a64bad3cb01d4ec61aae6 d0ea61e3e38fc35052d1ab5b0efe66-d packagefile ...
main program $ go build -a # build without the
cache
main program $ go build -work # don’t delete work
directory WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d 21/T/go-build444532126
main program $ go list -f {{.GoFiles}} # investigate files
[main.go] $ GOOS=windows go list -f {{.GoFiles}} [main.go main_windows.go] See https://golang.org/pkg/cmd/go/internal/list/ for more.
main program $ go build -gcflags="-S" # print Go assembly
# github.com/rakyll/codegen os.(*File).close STEXT dupok nosplit size=26 args=0x18 locals=0x0 0x0000 00000 (<autogenerated>:1) TEXT os.(*File).close(SB), DUPOK|NOSPLIT|ABIInternal, $0-24 0x0000 00000 (<autogenerated>:1) FUNCDATA$0, gclocals·e6397a44f8e1b6e77d0f200b4fba5269(SB) 0x0000 00000 (<autogenerated>:1) FUNCDATA...
main program $ go tool objdump -s main.main <binary> TEXT
main.main(SB) /Users/jbd/go/src/github.com/rakyll/codegen/main. go main.go:5 0x109adc0 65488b0c2530000000 MOVQ GS:0x30, CX main.go:5 0x109adc9 483b6110 CMPQ 0x10(CX), SP main.go:5 0x109adcd 0f8690000000 JBE 0x109ae63 main.go:5 0x109add3 4883ec68 SUBQ ...
main program $ go tool nm <binary> | grep runtime.walltime
1044b20 T runtime.walltime 1054c50 T runtime.walltime_trampoline
main program $ go build -gcflags="-N" # disable optimizations $
go build -gcflags="-l" # disable inlining $ go build -gcflags="-N -l" # disable both
main program $ GOSSAFUNC=main go build && open ssa.html
main program $ go build -gcflags="-m" # escape analysis $
go build -gcflags="-m=2" # more info
main program $ go build -gcflags="-live" # debug liveness $
go build -gcflags="-live=2" # more info
main program $ go build -gcflags="-bench=bench.out" $ go build -gcflags="-race"
# race detector $ go build -gcflags="-memprofile=profile.out" $ go build -gcflags="-traceprofile=trace.out" # ...
Thanks. Jaana B. Dogan, Google jbd@google.com