Commit 0462c73f authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r360442:

------------------------------------------------------------------------
r360442 | maskray | 2019-05-10 10:09:25 -0700 (Fri, 10 May 2019) | 12 lines

[MC][ELF] Copy top 3 bits of st_other to .symver aliases

On PowerPC64 ELFv2 ABI, the top 3 bits of st_other encode the local
entry offset. A versioned symbol alias created by .symver should copy
the bits from the source symbol.

This partly fixes PR41048. A full fix needs tracking of .set assignments
and updating st_other fields when finish() is called, see D56586.

Patch by Alfredo Dal'Ava Júnior

Differential Revision: https://reviews.llvm.org/D59436
------------------------------------------------------------------------

llvm-svn: 362669
parent c493057b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1271,6 +1271,7 @@ void ELFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
    // This is the first place we are able to copy this information.
    Alias->setExternal(Symbol.isExternal());
    Alias->setBinding(Symbol.getBinding());
    Alias->setOther(Symbol.getOther());

    if (!Symbol.isUndefined() && !Rest.startswith("@@@"))
      continue;
+17 −0
Original line number Diff line number Diff line
# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-freebsd13.0 %s -o %t
# RUN: llvm-objdump -t %t | FileCheck %s

# CHECK: 0000000000000000 gw    F .text  00000000 0x60 __impl_foo
# CHECK: 0000000000000000 g     F .text  00000000 0x60 foo
# CHECK: 0000000000000000 gw    F .text  00000000 0x60 foo@FBSD_1.1

.globl foo
.type foo,@function
foo:
  nop
  nop
  .localentry foo, 8

.symver __impl_foo, foo@FBSD_1.1
.weak   __impl_foo
.set    __impl_foo, foo