[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