Hi, On Wed, 09 Dec 2020 06:15:57 +0900 =?UTF-8?Q?Marc_Dequ=C3=A8nes_=28duck=29?= <d...@duckcorp.org> wrote:
Control: tags -1 +helpQuack,I tried building with LTO but it does not work with problems similar to this:https://sourceware.org/bugzilla/show_bug.cgi?id=12762 I tried the workarounds to no avail.I do not wish to sacrifice the hardening flags just to save some space, knowing that's still a small amount compared to the size of most games. Help welcome.\_o< -- Marc Dequènes
Hi, I've found that the dll.so files contains debug info, which is the cause of the large file size. For example, /usr/lib/dxvk/wine64-development/d3d11.dll.so contains these sections: /usr/lib/dxvk/wine64-development/d3d11.dll.so: file format pei-x86-64 Sections: Idx Name Size VMA LMA File off Algn 0 .text 0021e098 0000000359051000 0000000359051000 00001000 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA 1 .data 00006410 0000000359270000 0000000359270000 00220000 2**4 CONTENTS, ALLOC, LOAD, DATA 2 .rdata 00067c00 0000000359277000 0000000359277000 00227000 2**4 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .pdata 00017b80 00000003592df000 00000003592df000 0028f000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .xdata 00028bdc 00000003592f7000 00000003592f7000 002a7000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .bss 00002c90 0000000359320000 0000000359320000 00000000 2**4 ALLOC 6 .edata 000000c2 0000000359323000 0000000359323000 002d0000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 7 .idata 00001a8c 0000000359324000 0000000359324000 002d1000 2**2 CONTENTS, ALLOC, LOAD, DATA 8 .CRT 00000060 0000000359326000 0000000359326000 002d3000 2**2 CONTENTS, ALLOC, LOAD, DATA 9 .tls 00000010 0000000359327000 0000000359327000 002d4000 2**2 CONTENTS, ALLOC, LOAD, DATA 10 .rsrc 00000340 0000000359328000 0000000359328000 002d5000 2**2 CONTENTS, ALLOC, LOAD, DATA 11 .reloc 00003798 0000000359329000 0000000359329000 002d6000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 12 .debug_aranges 00007880 000000035932d000 000000035932d000 002da000 2**0 CONTENTS, READONLY, DEBUGGING 13 .debug_info 07261214 0000000359335000 0000000359335000 002e2000 2**0 CONTENTS, READONLY, DEBUGGING 14 .debug_abbrev 000b2dfc 0000000360597000 0000000360597000 07544000 2**0 CONTENTS, READONLY, DEBUGGING 15 .debug_line 002524c8 000000036064a000 000000036064a000 075f7000 2**0 CONTENTS, READONLY, DEBUGGING 16 .debug_frame 000719e0 000000036089d000 000000036089d000 0784a000 2**0 CONTENTS, READONLY, DEBUGGING 17 .debug_str 001521fc 000000036090f000 000000036090f000 078bc000 2**0 CONTENTS, READONLY, DEBUGGING 18 .debug_loc 0097bbcd 0000000360a62000 0000000360a62000 07a0f000 2**0 CONTENTS, READONLY, DEBUGGING 19 .debug_ranges 0027bbf0 00000003613de000 00000003613de000 0838b000 2**0 CONTENTS, READONLY, DEBUGGING From x86_64-w64-mingw32-objdump -h /usr/lib/dxvk/wine64-development/d3d11.dll.so) The debug sections are the cause of the large file size, with debug_info using more than 119 MB. Maybe the debug size wasn't that large without LTO, but given that d3d11 is probably C++ and large, I guess this is expected to have such a large debug info size. Even if these are dll files, maybe a solution would be to split the debug info into a -dbgsym package, the same way this is done on normal Linux packages. I've tried to replicate what dh_strip does (when autogenerating -dbgsym packages), but with mingw's binutils. Moving debug info in a second file works, but there is no build id. The script in attachment will generate a .debug file from a PE executable or DLL and will strip and add a gnu_debuglink to the original file. Usage to test it: $ x86_64-w64-mingw32-gcc -g test.c -o test.exe $ ./strip_debug.sh test.exe $ winedbg --gdb --no-start --port 2345 test.exe & $ gdb test.exe (gdb) target remote localhost:2345 Maybe you can use the commands in the script to generate a separate package manually with debug info (dh_strip won't work with PE files so won't generate -dbgsym packages automatically). When using this script on d3d11.dll.so, I get this resulting file sizes: original d3d11.dll.so: 137M d3d11.dll.so: 2,9M d3d11.dll.so.debug: 134M -- Alexis Murzeau PGP: B7E6 0EBB 9293 7B06 BDBC 2787 E7BD 1904 F480 937F |
strip_debug.sh
Description: application/shellscript