@@ -10,12 +10,35 @@ import (
1010 "encoding/binary"
1111 "os"
1212 _ "unsafe" // for go:linkname
13+
14+ "github.com/celzero/firestack/intra/log"
1315)
1416
1517const logdHdrLen = 11
1618
1719var pid int
1820
21+ // pushing / pulling symbols work provided
22+ // -ldflags="checklinkname=0"
23+
24+ //go:linkname secureMode runtime.secureMode
25+ var secureMode bool
26+
27+ //go:linkname writeHeader runtime.writeHeader
28+ var writeHeader []byte
29+
30+ //go:linkname writeBuf runtime.writeBuf
31+ var writeBuf [1024 ]byte
32+
33+ //go:linkname logger runtime.logger
34+ var logger int32
35+
36+ //go:linkname writePos runtime.writePos
37+ var writePos int
38+
39+ //go:linkname writeFD runtime.writeFD
40+ var writeFD uintptr
41+
1942func init () {
2043 // github.com/golang/go/issues/69868
2144 // Unfortunately, Android apps have AT_SECURE set
@@ -35,20 +58,26 @@ func init() {
3558 // explicitly enabled with RuntimeInitLogd()
3659 logger = 100
3760
61+ pid = os .Getpid ()
62+
3863 // github.com/golang/go/blob/e2fef50def98/src/runtime/write_err_android.go#L13
3964 // actual writeHeader = []byte{6 /* ANDROID_LOG_ERROR */, 'G', 'o', 0}
4065 // Change level to assert in the hope that Android's DropBoxManager picks it up.
4166 // github.com/golang/go/issues/25035 / developer.android.com/reference/kotlin/android/util/Log#ASSERT:kotlin.Int
4267 writeHeader = []byte {7 /* ANDROID_LOG_ASSERT */ , 'G' , 'o' , 'E' , 'r' , 'r' , 0 }
4368
69+ log .D ("over: logd init start(%d) %d %d %s" , writeFD , len (writeHeader ), len (writeBuf ), string (writeHeader ))
70+
4471 RuntimeInitLogd ()
4572
73+ log .D ("over: logd init done(%d) %d %d %d %d" , writeFD , len (writeHeader ), len (writeBuf ), writePos , logger )
74+
4675 // Since runtime's internal logd initialization is disabled, init writeBuf's writePos
4776 // to the end of our modified writeHeader. See: writeErr impl
4877 // github.com/golang/go/blob/e2fef50def98/src/runtime/write_err_android.go#L76-L89
4978 writePos = prepCrashLogHeader ()
5079
51- pid = os . Getpid ( )
80+ log . D ( "over: logd prep done(%d) %d %d %d %d" , writeFD , len ( writeHeader ), len ( writeBuf ), writePos , logger )
5281}
5382
5483func SecureMode (new bool ) (prev bool ) {
@@ -176,21 +205,3 @@ func prepCrashLogHeader() int {
176205
177206 return logdHdrLen + len (writeHeader )
178207}
179-
180- // pushing / pulling symbols work provided
181- // -ldflags="checklinkname=0"
182-
183- //go:linkname secureMode runtime.secureMode
184- var secureMode bool
185-
186- //go:linkname writeHeader runtime.writeHeader
187- var writeHeader []byte
188-
189- //go:linkname writeBuf runtime.writeBuf
190- var writeBuf [1024 ]byte
191-
192- //go:linkname logger runtime.logger
193- var logger int32
194-
195- //go:linkname writePos runtime.writePos
196- var writePos int
0 commit comments