i did a quick experiment with getting rid of strings - made 
cmd/link.ftabaddstr a no-op.
that didn't actually save that much: i got rid of all stringtab and it 
saved about 600K of the original 2.8M pclntab, or 20%, give or take.
the remainder compresses to about 800K with xz -9, so there's quite a bit 
of redundancy there.
all of the above is for ARM builds, for amd64 there's even more due to 
64-bit pointers, higher bytes of which are mostly zeroes.
for this particular binary:

pclntab.amd64 - 3341578 
pclntab.amd64.nostr - 2728272
pclntab.arm5 - 2844248
pclntab.arm5.nostr - 2246896

On Tuesday, December 17, 2019 at 12:09:15 PM UTC, Deomid Ryabkov wrote:
>
> running into the same issue: embedded system, fat Go binaries, 20% is the 
> symbol table.
> +1 for slimming it down, perhaps with full non-stripped version emitted 
> separately to analyze stack traces later (like it's common to keep 
> non-stripped binaries for that reason).
> is there an issue already for that? should one be created?
>
> On Friday, April 5, 2019 at 3:07:10 PM UTC+1, Ian Lance Taylor wrote:
>>
>> On Fri, Apr 5, 2019 at 5:33 AM Steeve Morin <steev...@gmail.com> wrote: 
>> > 
>> > Removing the function names and file information probably constitutes 
>> the 
>> > most part of the size, I would guess. 
>> > 
>> > Do you suggest stripping it as a post processing step or modifying the 
>> linker 
>> > to not emit the strings in the first place? 
>> > I'm not fond of adding a new flag to the linker, but it may not be such 
>> a bad 
>> > idea in a mobile context to remove function names and file information. 
>>
>> I doubt it's feasible to strip the names after the fact; I think it 
>> would have to be a linker option.  (I'm not promising that such a 
>> linker option would be accepted into the main tree.) 
>>
>> > I would assume most of that happens in cmd/link/internal/ld/pcln.go 
>> right ? 
>>
>> As far as I know, yes. 
>>
>> Ian 
>>
>>
>> > On Friday, April 5, 2019 at 12:14:49 AM UTC+2, Ian Lance Taylor wrote: 
>> >> 
>> >> On Thu, Apr 4, 2019 at 2:32 PM Steeve Morin <steev...@gmail.com> 
>> wrote: 
>> >> > 
>> >> > We are big Go users on Android and iOS thanks to golang/mobile. 
>> >> > 
>> >> > Lately we were doing some size profiling and stumbled upon 
>> runtime.pclntab, 
>> >> > which in our case represents almost 20% of the file size according 
>> to bloaty. 
>> >> > Now I understand that it's used for things like runtime.Caller and 
>> panics. 
>> >> > That said, in a mobile context panics are not that useful as this 
>> job is handled by 
>> >> > services like Crashlytics and DWARF. 
>> >> > 
>> >> > So we were wondering if it would be possible to strip it (or not 
>> emit it altogether) 
>> >> > and what would be the consequences/limitations of that? 
>> >> 
>> >> The consequences of removing pclntab would be fairly severe.  You 
>> >> wouldn't just lose runtime.Callers and stack traces and tracing and 
>> >> profiling.  The pclntab section is also used by the garbage collector 
>> >> to traverse the stack, and by the stack copying code.  I doubt that 
>> >> many substantial Go programs would still work correctly. 
>> >> 
>> >> That said you could in principle drop part of pclntab with less severe 
>> >> consequences, such as removing the function names.  I don't know of 
>> >> any supported way to do that, though. 
>> >> 
>> >> Ian 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> Groups "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an email to golan...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ecfe5aaf-5578-41c0-b84e-e7a4a4751a69%40googlegroups.com.

Reply via email to