llvm/lld/test/ELF/ppc64-local-entry.s

# REQUIRES: ppc

# RUN: llvm-mc -filetype=obj -triple=powerpc64 %s -o %t
# RUN: ld.lld -r %t -o %t2
# RUN: llvm-objdump -s --section=.symtab %t2 | FileCheck %s

.text
.abiversion 2
.globl  _start
.p2align	2
.type   _start,@function

_start:
.Lfunc_begin0:
.Lfunc_gep0:
	addis 2, 12, .TOC.-.Lfunc_gep0@ha
	addi 2, 2, .TOC.-.Lfunc_gep0@l
.Lfunc_lep0:
	.localentry	_start, .Lfunc_lep0-.Lfunc_gep0
	# The code below is not important, it just needs to access some
	# global data or function, in order to use the TOC.
	# In this case, it performs the following:
	# g += 10;
	# Also note that this code is not intended to be run, but only
	# to check if the linker will preserve the localentry info.
	addis 3, 2, g@toc@ha
	addi 3, 3, g@toc@l
	lwz 4, 0(3)
	addi 4, 4, 10
	stw 4, 0(3)
	blr
	.long	0
	.quad	0
.Lfunc_end0:
	.size   _start, .Lfunc_end0-.Lfunc_begin0

	.type	g,@object               # @g
	.lcomm	g,4,4

// We expect the st_other byte to be 0x60:
// localentry = 011 (gep + 2 instructions), reserved = 000,
// visibility = 00 (STV_DEFAULT)
// Currently, llvm-objdump does not support displaying
// st_other's PPC64 specific flags, thus we check the
// result of the hexdump of .symtab section.

// CHECK: 0060 00000003 12600001 00000000 00000000