www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.ldc - All strings are in one section

reply Kagamin <spam here.lot> writes:
On linux LLVM puts most things in different sections, so they can 
be collected with --gc-sections linker option, but all strings 
still go in one section, and can't be collected individually. Is 
there a way to put strings in different sections? --data-sections 
option doesn't help.
Feb 27
parent reply kinke <noone nowhere.com> writes:
On Saturday, 27 February 2021 at 14:46:55 UTC, Kagamin wrote:
 On linux LLVM puts most things in different sections, so they 
 can be collected with --gc-sections linker option, but all 
 strings still go in one section, and can't be collected 
 individually. Is there a way to put strings in different 
 sections? --data-sections option doesn't help.
See this thread: https://lists.llvm.org/pipermail/llvm-dev/2020-September/145121.html Adding a `-fmerge-all-constants` option in case the linker really isn't able to get rid of unused strings should be trivial according to https://reviews.llvm.org/D45289.
Feb 27
next sibling parent reply Kagamin <spam here.lot> writes:
Noticed another thing: typeinfos create type names 16 byte 
aligned (.rodata.str1.16) resulting in a lot of padding, but this 
alignment is not in IR. Is it a bug?
Feb 27
parent reply Kagamin <spam here.lot> writes:
Well, it's one padding per object file, so maybe not that much.
Feb 27
parent Kagamin <spam here.lot> writes:
Looks like it happens for any big string.

immutable string b="12345678901234567";

This string will be 16 byte aligned. But it does happen for every 
string, not once per object file.
Feb 27
prev sibling next sibling parent reply Jack Applegame <japplegame gmail.com> writes:
On Saturday, 27 February 2021 at 17:20:35 UTC, kinke wrote:
 On Saturday, 27 February 2021 at 14:46:55 UTC, Kagamin wrote:
 On linux LLVM puts most things in different sections, so they 
 can be collected with --gc-sections linker option, but all 
 strings still go in one section, and can't be collected 
 individually. Is there a way to put strings in different 
 sections? --data-sections option doesn't help.
See this thread: https://lists.llvm.org/pipermail/llvm-dev/2020-September/145121.html Adding a `-fmerge-all-constants` option in case the linker really isn't able to get rid of unused strings should be trivial according to https://reviews.llvm.org/D45289.
Could you add -fno-merge-all-constants option, please?
Mar 15
parent kinke <noone nowhere.com> writes:
On Monday, 15 March 2021 at 19:11:33 UTC, Jack Applegame wrote:
 On Saturday, 27 February 2021 at 17:20:35 UTC, kinke wrote:
 On Saturday, 27 February 2021 at 14:46:55 UTC, Kagamin wrote:
 On linux LLVM puts most things in different sections, so they 
 can be collected with --gc-sections linker option, but all 
 strings still go in one section, and can't be collected 
 individually. Is there a way to put strings in different 
 sections? --data-sections option doesn't help.
See this thread: https://lists.llvm.org/pipermail/llvm-dev/2020-September/145121.html Adding a `-fmerge-all-constants` option in case the linker really isn't able to get rid of unused strings should be trivial according to https://reviews.llvm.org/D45289.
Could you add -fno-merge-all-constants option, please?
According to the IR tests in the linked LLVM PR, that's what LDC does anyway (emitting string constants as `private unnamed_addr`). Changing that to `internal` for -fmerge-all-constants semantics can be done in https://github.com/ldc-developers/ldc/blob/58ee56a2100eb301c55220933dd2a84d3a7d2843/gen/irstate.cpp#L205-L208.
Mar 16
prev sibling parent Kagamin <spam here.lot> writes:
On Saturday, 27 February 2021 at 17:20:35 UTC, kinke wrote:
 See this thread: 
 https://lists.llvm.org/pipermail/llvm-dev/2020-September/145121.html
Indeed lld collects those strings.
Mar 19