[llvm-commits] [llvm] r114868 - in /llvm/trunk: include/llvm-c/lto.h tools/lto/LTOModule.cpp
Nick Lewycky
nlewycky at google.com
Mon Sep 27 14:10:44 PDT 2010
Hi Bill,
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?
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).
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?
Nick
On 27 September 2010 13:17, Bill Wendling <isanbard at gmail.com> wrote:
> Author: void
> Date: Mon Sep 27 15:17:45 2010
> New Revision: 114868
>
> URL: http://llvm.org/viewvc/llvm-project?rev=114868&view=rev
> Log:
> Add a new scope type "LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN" for the
> "linker_private_weak_auto_def" linkage type for LTO.
>
> Modified:
> llvm/trunk/include/llvm-c/lto.h
> llvm/trunk/tools/lto/LTOModule.cpp
>
> Modified: llvm/trunk/include/llvm-c/lto.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=114868&r1=114867&r2=114868&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm-c/lto.h (original)
> +++ llvm/trunk/include/llvm-c/lto.h Mon Sep 27 15:17:45 2010
> @@ -20,25 +20,26 @@
> #include <stddef.h>
> #include "llvm/System/DataTypes.h"
>
> -#define LTO_API_VERSION 3
> +#define LTO_API_VERSION 4
>
> typedef enum {
> - LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of
> alignment */
> - LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
> - LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
> - LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
> - LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
> - LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
> - LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
> - LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
> - LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
> - LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
> - LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
> - LTO_SYMBOL_SCOPE_MASK = 0x00003800,
> - LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
> - LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
> - LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
> - LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800
> + LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of
> alignment */
> + LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
> + LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
> + LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
> + LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
> + LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
> + LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
> + LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
> + LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
> + LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
> + LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
> + LTO_SYMBOL_SCOPE_MASK = 0x00003800,
> + LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
> + LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
> + LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
> + LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
> + LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800
> } lto_symbol_attributes;
>
> typedef enum {
>
> Modified: llvm/trunk/tools/lto/LTOModule.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=114868&r1=114867&r2=114868&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/lto/LTOModule.cpp (original)
> +++ llvm/trunk/tools/lto/LTOModule.cpp Mon Sep 27 15:17:45 2010
> @@ -327,24 +327,24 @@
> // set definition part
> if (def->hasWeakLinkage() || def->hasLinkOnceLinkage() ||
> def->hasLinkerPrivateWeakLinkage() ||
> - def->hasLinkerPrivateWeakDefAutoLinkage()) {
> + def->hasLinkerPrivateWeakDefAutoLinkage())
> attr |= LTO_SYMBOL_DEFINITION_WEAK;
> - }
> - else if (def->hasCommonLinkage()) {
> + else if (def->hasCommonLinkage())
> attr |= LTO_SYMBOL_DEFINITION_TENTATIVE;
> - }
> - else {
> + else
> attr |= LTO_SYMBOL_DEFINITION_REGULAR;
> - }
>
> // set scope part
> if (def->hasHiddenVisibility())
> attr |= LTO_SYMBOL_SCOPE_HIDDEN;
> else if (def->hasProtectedVisibility())
> attr |= LTO_SYMBOL_SCOPE_PROTECTED;
> - else if (def->hasExternalLinkage() || def->hasWeakLinkage()
> - || def->hasLinkOnceLinkage() || def->hasCommonLinkage())
> + else if (def->hasExternalLinkage() || def->hasWeakLinkage() ||
> + def->hasLinkOnceLinkage() || def->hasCommonLinkage() ||
> + def->hasLinkerPrivateWeakLinkage())
> attr |= LTO_SYMBOL_SCOPE_DEFAULT;
> + else if (def->hasLinkerPrivateWeakDefAutoLinkage())
> + attr |= LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN;
> else
> attr |= LTO_SYMBOL_SCOPE_INTERNAL;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20100927/95e882af/attachment.html>
More information about the llvm-commits
mailing list