1. [MC][ELF] Emit a relocation if target is defined in the same section and (details)
  2. Fix "pointer is null" static analyzer warning. NFCI. (details)
Commit 2bfee35cb860859b436de0b780fbd00d68e198a4 by maskray
[MC][ELF] Emit a relocation if target is defined in the same section and
is non-local
For a target symbol defined in the same section, currently we don't emit
a relocation if VariantKind is VK_None (with few exceptions like RISC-V
relaxation), while GNU as emits one. This causes program behavior
differences with and without -ffunction-sections, and can break intended
symbol interposition in a -shared link.
.globl foo foo:
call foo      # no relocation. On other targets, may be written as b
foo, etc
call bar      # a relocation if bar is in another section (e.g.
call foo@plt  # a relocation
Unify these cases by always emitting a relocation. If we ever want to
optimize `call foo` in -shared links, we should emit a STB_LOCAL alias
and call via the alias.
ARM/thumb2-beq-fixup.s: we now emit a relocation to global_thumb_fn as
GNU as does. X86/Inputs/align-branch-64-2.s: we now emit R_X86_64_PLT32
to foo as GNU does.
ELF/relax.s: rewrite the test as target-in-same-section.s . We omitted
relocations to `global` and now emit R_X86_64_PLT32. Note, GNU as does
not emit a relocation for `jmp global` (maybe its own bug). Our new
behavior is compatible except `jmp global`.
Reviewed By: peter.smith
Differential Revision:
The file was modifiedllvm/test/MC/X86/align-branch-64-2b.s (diff)
The file was modifiedllvm/lib/MC/ELFObjectWriter.cpp (diff)
The file was removedllvm/test/MC/ELF/relax.s
The file was modifiedllvm/test/MC/X86/align-branch-64-2c.s (diff)
The file was modifiedlld/test/ELF/global-offset-table-position-aarch64.s (diff)
The file was modifiedllvm/test/MC/X86/align-branch-64-2a.s (diff)
The file was modifiedllvm/test/MC/ARM/thumb1-branch-reloc.s (diff)
The file was modifiedllvm/test/MC/ARM/thumb2-beq-fixup.s (diff)
The file was addedllvm/test/MC/ELF/target-in-same-section.s
Commit ada22c804cd956f3ee7cc9dc82e6d54ead8a4ffe by llvm-dev
Fix "pointer is null" static analyzer warning. NFCI.
The file was modifiedclang/include/clang/Basic/SourceManager.h (diff)