SuccessChanges

Summary

  1. [CodeGenModule] Drop dso_local on function declarations for ELF -fno-pic -fno-direct-access-external-data (details)
  2. Recommit D91678 after fixing the test breakage. (details)
Commit e2e82c9983f0dff671dd47d3e256d80faa40e892 by i
[CodeGenModule] Drop dso_local on function declarations for ELF -fno-pic -fno-direct-access-external-data

ELF -fno-pic sets dso_local on a function declaration to allow direct accesses
when taking its address (similar to a data symbol). The emitted code follows the
traditional GCC/Clang -fno-pic behavior: an absolute relocation is produced.

If the function is not defined in the executable, a canonical PLT entry will be
needed at link time. This is similar to a copy relocation and is incompatible
with (-Bsymbolic or --dynamic-list linked shared objects / protected symbols in
a shared object).

This patch gives -fno-pic code a way to avoid such a canonical PLT entry.

The FIXME was about a generalization for -fpie -mpie-copy-relocations (now -fpie
-fdirect-access-external-data). While we could set dso_local to avoid GOT when
taking the address of a function declaration (there is an ignorable difference
about R_386_PC32 vs R_386_PLT32 on i386), it likely does not provide any benefit
and can just cause trouble, so we don't make the generalization.
The file was modifiedclang/test/CodeGen/dso-local-executable.c
The file was modifiedclang/lib/CodeGen/CodeGenModule.cpp
Commit 9f452fbf2fe04c1e352dd8bc2b34cb2a0eeec937 by tmsriram
Recommit D91678 after fixing the test breakage.

This adds a new test checking llvm-symbolizer with an object built with basic block sections.

Build a object with -fbasic-block-sections and reorder the basic blocks to be
non-contiguous. Then check if llvm-symbolizer correctly reports the symbolized
addresses. Included the source to build the object with command lines.

Differential Revision: https://reviews.llvm.org/D91678
The file was addedllvm/test/DebugInfo/llvm-symbolizer-bbsections-test.s