mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[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: 360442
This commit is contained in:
parent
6bb92bf8e9
commit
0be2fc379f
@ -1279,6 +1279,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
test/MC/PowerPC/ppc64-localentry-symver.s
Normal file
17
test/MC/PowerPC/ppc64-localentry-symver.s
Normal file
@ -0,0 +1,17 @@
|
||||
# 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
|
Loading…
x
Reference in New Issue
Block a user