[llvm-dev] Internal visibility

Rafik Zurob via llvm-dev llvm-dev at lists.llvm.org
Thu Feb 7 14:54:38 PST 2019


In GCC on Linux on Power, -fvisibility=internal enables internal 

$ cat t.c
int foo(int i) { return i + 1; }
$ gcc t.c -c -fvisibility=internal
$ readelf -s t.o | grep foo
     8: 0000000000000000    60 FUNC    GLOBAL INTERNAL    1 foo

But in Clang/LLVM, GlobalValue::VisibilityTypes does not have internal 

  /// An enumeration for the kinds of visibility of global values.
  enum VisibilityTypes {
    DefaultVisibility = 0,  ///< The GV is visible
    HiddenVisibility,       ///< The GV is hidden
    ProtectedVisibility     ///< The GV is protected

and using -fvisibility=internal in Clang uses the 
close-but-not-quite-the-same hidden visibility:

$ clang t.c -c -fvisibility=internal
$ readelf -s t.o | grep foo
     2: 0000000000000000    36 FUNC    GLOBAL HIDDEN     2 foo

Given that -fvisibility=internal is accepted, I assume this behaviour is 
intentional.  Can anyone help me understand why that is, or point me to 
where I can find out more?



More information about the llvm-dev mailing list