Hi Bill,<div><br></div><div>It's not clear to me what this new bit actually means. How should I treat this in the gold plugin? What does it do in ELF?</div><div><br></div><div>Looking at the LangRef, it's not clear to me that linker_private_weak_def_auto is a good orthogonal abstraction either. It makes sense if you really do have a language feature where taking the address doesn't preserve the uniqueness of the address, but the two cases I'm interested in are C strings (where this is true, but the linkage type isn't obviously "linker_private_weak") and virtual functions (whose addresses appear in the vtable constant, but those addresses are never compared, only called through).</div>
<div><br></div><div>I realize this is solving a real problem for you, but would you mind taking a minute to explain what's going on? The example in the LangRef sounds like it would be solved with "available_externally" linkage, for example, could it?</div>
<div><br></div><div>Nick<br><div><br><div class="gmail_quote">On 27 September 2010 13:17, Bill Wendling <span dir="ltr"><<a href="mailto:isanbard@gmail.com">isanbard@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Author: void<br>
Date: Mon Sep 27 15:17:45 2010<br>
New Revision: 114868<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=114868&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=114868&view=rev</a><br>
Log:<br>
Add a new scope type "LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN" for the<br>
"linker_private_weak_auto_def" linkage type for LTO.<br>
<br>
Modified:<br>
llvm/trunk/include/llvm-c/lto.h<br>
llvm/trunk/tools/lto/LTOModule.cpp<br>
<br>
Modified: llvm/trunk/include/llvm-c/lto.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=114868&r1=114867&r2=114868&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=114868&r1=114867&r2=114868&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm-c/lto.h (original)<br>
+++ llvm/trunk/include/llvm-c/lto.h Mon Sep 27 15:17:45 2010<br>
@@ -20,25 +20,26 @@<br>
#include <stddef.h><br>
#include "llvm/System/DataTypes.h"<br>
<br>
-#define LTO_API_VERSION 3<br>
+#define LTO_API_VERSION 4<br>
<br>
typedef enum {<br>
- LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */<br>
- LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,<br>
- LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,<br>
- LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,<br>
- LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,<br>
- LTO_SYMBOL_DEFINITION_MASK = 0x00000700,<br>
- LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,<br>
- LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,<br>
- LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,<br>
- LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,<br>
- LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,<br>
- LTO_SYMBOL_SCOPE_MASK = 0x00003800,<br>
- LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,<br>
- LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,<br>
- LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,<br>
- LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800<br>
+ LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */<br>
+ LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,<br>
+ LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,<br>
+ LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,<br>
+ LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,<br>
+ LTO_SYMBOL_DEFINITION_MASK = 0x00000700,<br>
+ LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,<br>
+ LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,<br>
+ LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,<br>
+ LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,<br>
+ LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,<br>
+ LTO_SYMBOL_SCOPE_MASK = 0x00003800,<br>
+ LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,<br>
+ LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,<br>
+ LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,<br>
+ LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,<br>
+ LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800<br>
} lto_symbol_attributes;<br>
<br>
typedef enum {<br>
<br>
Modified: llvm/trunk/tools/lto/LTOModule.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=114868&r1=114867&r2=114868&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=114868&r1=114867&r2=114868&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/lto/LTOModule.cpp (original)<br>
+++ llvm/trunk/tools/lto/LTOModule.cpp Mon Sep 27 15:17:45 2010<br>
@@ -327,24 +327,24 @@<br>
// set definition part<br>
if (def->hasWeakLinkage() || def->hasLinkOnceLinkage() ||<br>
def->hasLinkerPrivateWeakLinkage() ||<br>
- def->hasLinkerPrivateWeakDefAutoLinkage()) {<br>
+ def->hasLinkerPrivateWeakDefAutoLinkage())<br>
attr |= LTO_SYMBOL_DEFINITION_WEAK;<br>
- }<br>
- else if (def->hasCommonLinkage()) {<br>
+ else if (def->hasCommonLinkage())<br>
attr |= LTO_SYMBOL_DEFINITION_TENTATIVE;<br>
- }<br>
- else {<br>
+ else<br>
attr |= LTO_SYMBOL_DEFINITION_REGULAR;<br>
- }<br>
<br>
// set scope part<br>
if (def->hasHiddenVisibility())<br>
attr |= LTO_SYMBOL_SCOPE_HIDDEN;<br>
else if (def->hasProtectedVisibility())<br>
attr |= LTO_SYMBOL_SCOPE_PROTECTED;<br>
- else if (def->hasExternalLinkage() || def->hasWeakLinkage()<br>
- || def->hasLinkOnceLinkage() || def->hasCommonLinkage())<br>
+ else if (def->hasExternalLinkage() || def->hasWeakLinkage() ||<br>
+ def->hasLinkOnceLinkage() || def->hasCommonLinkage() ||<br>
+ def->hasLinkerPrivateWeakLinkage())<br>
attr |= LTO_SYMBOL_SCOPE_DEFAULT;<br>
+ else if (def->hasLinkerPrivateWeakDefAutoLinkage())<br>
+ attr |= LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN;<br>
else<br>
attr |= LTO_SYMBOL_SCOPE_INTERNAL;<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>