<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello, in a bit of a <a href="https://xkcd.com/1172/" rel="noreferrer" target="_blank">https://xkcd.com/1172/</a> moment this breaks the chromium/android build. We have a list of "resources" (strings, bitmaps, etc) that we list in an XML file which then generates a header with lots of "IDR_foo" constants. As it turns out, now all of these resources are used on all platforms, so we use the following technique to only keep the ones actually used on android:<br>
<br>
- Have an empty template function `template<int N> Whitelist() {}`<br>
- Have the resource header expand IDR_foo to `(Whitelist<unique_id_per_resource>(), unique_id_per_resource)` where `unique_id_per_resource` is something like 123 (and different for every resource)<br>
- For every IDR_foo referenced in a cc file, this generates debug info for the function call `Whitelist<unique_id_per_resource>()`<br>
<br>
We then look at `'readelf', '-p', '.debug_str'` and grep for `WhitelistedResource<` and keep all resources whose ID is referenced from debug info.<br>
<br>
Before this change, this worked great.<br>
<br>
Now, resources that are referenced from functions that make it into the final binary get stripped. From the patch description, it sounds like maybe that shouldn't happen (can you confirm?), but in practice it does.<br></blockquote><div><br></div><div>If a function is included in the final binary, its debug info shouldn't be stripped. So something is wrong. Since the problem only occurs when LTO is enabled, maybe LTO found that the functions are not used by anyone and remove them, which makes the later pass to remove their debug info as well?</div><div><br></div><div>The way how Chrome manages resources seems a bit too tricky. I wonder if you can use regular symbols instead of debug info. Can't you just define symbols with empty contents with special names and search for the symbols in the later pass?</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
If this only stripped debug info for functions that don't make it into the final binary, this would be a great change for us though!<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
CHANGES SINCE LAST ACTION<br>
  <a href="https://reviews.llvm.org/D54747/new/" rel="noreferrer" target="_blank">https://reviews.llvm.org/D54747/new/</a><br>
<br>
<a href="https://reviews.llvm.org/D54747" rel="noreferrer" target="_blank">https://reviews.llvm.org/D54747</a><br>
<br>
<br>
<br>
</blockquote></div></div>