title: How does GCC/Clang compilers decide the symbol type?
body: <p>I have an issue with binary (already stripped) displaying symbols that leak a confidential information. When I look at binary, all symbols that are of concern are one of <code>T</code>, <code>D</code> or <code>S</code> types.</p>
  
  <p>Now since binary is statically linked (using external static libs that use different namespace), I cannot help but wonder, why do those symbols are global and why ld/strip did not remove them from symbol table?</p>
  
  <p>So there are somehow two related questions:</p>
  
  <ul>
  <li>How does compiler/linker decide which symbols are global?</li>
  <li>Is there a way to make sure that compiler/linker does not export those symbols?</li>
  </ul>