diff mbox

ipa-visibility TLC 2/n

Message ID 20140606070958.GA24579@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka June 6, 2014, 7:09 a.m. UTC
> Honza,
> 
> How can we make further progress with the large regression on AIX?
David,
sorry for taking time to get back to it.  I went through the code and see no obvious flaws
except that I am somewhat concerned what happens with local aliases into the anchors.
The problem however does not seem to be caused by it.  I tracked it down to the following
difference:


The code starts to work.  To me both sources should make same binary, but they don't.
Can you make better sense of this than claiming it is an assembler bug?

We output aliases after definitions for functions, but before definitions for thunks.
I am testing patch to change the second order.  I remeber tweaking this order once before
because of problems on solaris.  Lets see if we find order that works for everyone.

Honza
.file	"/home/jh/trunk/gcc/testsuite/g++.dg/abi/vcall1.C"
	.csect .text[PR]
	.toc
	.csect .text[PR]
	.globl b
	.csect .data[RW],4
	.align 2
b:
	.space 4
	.csect .text[PR]
	.align 2
	.weak	_ZN1A1fEv[DS]
	.weak	._ZN1A1fEv
	.csect _ZN1A1fEv[DS]
_ZN1A1fEv:
	.long ._ZN1A1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1A1fEv:
LFB..0:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..0:
	mr 31,1
LCFI..1:
	stw 3,56(31)
	addi 1,31,32
LCFI..2:
	lwz 31,-4(1)
	blr
LT.._ZN1A1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1A1fEv-._ZN1A1fEv
	.short 9
	.byte "_ZN1A1fEv"
	.byte 31
	.align 2
LFE..0:
	.lglobl	._ZN1A1fEv.localalias.4
	.lglobl	_ZN1A1fEv.localalias.4
	.set	._ZN1A1fEv.localalias.4,._ZN1A1fEv
	.set _ZN1A1fEv.localalias.4,_ZN1A1fEv
	.toc
LC..0:
	.tc _ZTV1A.P8[TC],_ZTV1A+8
	.csect .text[PR]
	.align 2
	.weak	_ZN1AC2Ev[DS]
	.weak	._ZN1AC2Ev
	.csect _ZN1AC2Ev[DS]
_ZN1AC2Ev:
	.long ._ZN1AC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1AC2Ev:
LFB..3:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..3:
	mr 31,1
LCFI..4:
	stw 3,56(31)
	lwz 9,56(31)
	lwz 10,LC..0(2)
	stw 10,0(9)
	addi 1,31,32
LCFI..5:
	lwz 31,-4(1)
	blr
LT.._ZN1AC2Ev:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1AC2Ev-._ZN1AC2Ev
	.short 9
	.byte "_ZN1AC2Ev"
	.byte 31
	.align 2
LFE..3:
	.lglobl	._ZN1AC2Ev.localalias.3
	.lglobl	_ZN1AC2Ev.localalias.3
	.set	._ZN1AC2Ev.localalias.3,._ZN1AC2Ev
	.set _ZN1AC2Ev.localalias.3,_ZN1AC2Ev
	.toc
LC..1:
	.tc b[TC],b
	.csect .text[PR]
	.align 2
	.weak	_ZN1BC2Ev[DS]
	.weak	._ZN1BC2Ev
	.csect _ZN1BC2Ev[DS]
_ZN1BC2Ev:
	.long ._ZN1BC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1BC2Ev:
LFB..5:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..6:
	mr 31,1
LCFI..7:
	stw 3,88(31)
	stw 4,92(31)
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,4(10)
	stw 10,0(9)
	lwz 9,LC..1(2)
	lwz 10,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 9,0(9)
	lwz 9,0(9)
	lwz 10,88(31)
	lwz 10,0(10)
	addi 10,10,-16
	lwz 10,0(10)
	mr 8,10
	lwz 10,88(31)
	add 10,10,8
	mr 3,10
	stw 2,20(1)
	lwz 10,0(9)
	lwz 11,8(9)
	mtctr 10
	lwz 2,4(9)
	bctrl
	lwz 2,20(1)
	addi 1,31,64
LCFI..8:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1BC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1BC2Ev-._ZN1BC2Ev
	.short 9
	.byte "_ZN1BC2Ev"
	.byte 31
	.align 2
LFE..5:
	.lglobl	._ZN1BC2Ev.localalias.2
	.lglobl	_ZN1BC2Ev.localalias.2
	.set	._ZN1BC2Ev.localalias.2,._ZN1BC2Ev
	.set _ZN1BC2Ev.localalias.2,_ZN1BC2Ev
	.toc
	.set LC..2,LC..1
	.csect .text[PR]
	.align 2
	.weak	_ZN1B1fEv[DS]
	.weak	._ZN1B1fEv
	.csect _ZN1B1fEv[DS]
_ZN1B1fEv:
	.long ._ZN1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1B1fEv:
LFB..7:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..9:
	mr 31,1
LCFI..10:
	stw 3,88(31)
	lwz 9,LC..2(2)
	lwz 9,0(9)
	lwz 10,88(31)
	cmpw 7,10,9
	beq 7,L..4
	bl .abort
	nop
L..4:
	addi 1,31,64
LCFI..11:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1B1fEv:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1B1fEv-._ZN1B1fEv
	.short 9
	.byte "_ZN1B1fEv"
	.byte 31
	.align 2
LFE..7:
	.lglobl	.LTHUNK..0
	.lglobl	LTHUNK..0
	.set	.LTHUNK..0,._ZN1B1fEv
	.set LTHUNK..0,_ZN1B1fEv
	.lglobl	._ZTv0_n12_N1B1fEv.localalias.5
	.lglobl	_ZTv0_n12_N1B1fEv.localalias.5
	.set	._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
	.set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
	.align 2
	.weak	_ZTv0_n12_N1B1fEv[DS]
	.weak	._ZTv0_n12_N1B1fEv
	.csect _ZTv0_n12_N1B1fEv[DS]
_ZTv0_n12_N1B1fEv:
	.long ._ZTv0_n12_N1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZTv0_n12_N1B1fEv:
LFB..16:
	lwz 12,0(3)
	lwz 12,-12(12)
	add 3,3,12
	b .LTHUNK..0
LFE..16:
	.align 2
	.weak	_ZN1D1fEv[DS]
	.weak	._ZN1D1fEv
	.csect _ZN1D1fEv[DS]
_ZN1D1fEv:
	.long ._ZN1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1D1fEv:
LFB..8:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..12:
	mr 31,1
LCFI..13:
	stw 3,56(31)
	addi 1,31,32
LCFI..14:
	lwz 31,-4(1)
	blr
LT.._ZN1D1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1D1fEv-._ZN1D1fEv
	.short 9
	.byte "_ZN1D1fEv"
	.byte 31
	.align 2
LFE..8:
	.lglobl	.LTHUNK..2
	.lglobl	LTHUNK..2
	.set	.LTHUNK..2,._ZN1D1fEv
	.set LTHUNK..2,_ZN1D1fEv
	.lglobl	._ZThn4_N1D1fEv.localalias.10
	.lglobl	_ZThn4_N1D1fEv.localalias.10
	.set	._ZThn4_N1D1fEv.localalias.10,._ZThn4_N1D1fEv
	.set _ZThn4_N1D1fEv.localalias.10,_ZThn4_N1D1fEv
	.align 2
	.weak	_ZThn4_N1D1fEv[DS]
	.weak	._ZThn4_N1D1fEv
	.csect _ZThn4_N1D1fEv[DS]
_ZThn4_N1D1fEv:
	.long ._ZThn4_N1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZThn4_N1D1fEv:
LFB..17:
	addi 3,3,-4
	b .LTHUNK..2
LFE..17:
	.align 2
	.weak	_ZN1CC2Ev[DS]
	.weak	._ZN1CC2Ev
	.csect _ZN1CC2Ev[DS]
_ZN1CC2Ev:
	.long ._ZN1CC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1CC2Ev:
LFB..12:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..15:
	mr 31,1
LCFI..16:
	stw 3,88(31)
	stw 4,92(31)
	lwz 10,88(31)
	lwz 9,92(31)
	addi 9,9,4
	mr 4,9
	mr 3,10
	bl ._ZN1BC2Ev.localalias.2
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,12(10)
	stw 10,0(9)
	addi 1,31,64
LCFI..17:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1CC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1CC2Ev-._ZN1CC2Ev
	.short 9
	.byte "_ZN1CC2Ev"
	.byte 31
	.align 2
LFE..12:
	.lglobl	._ZN1CC2Ev.localalias.1
	.lglobl	_ZN1CC2Ev.localalias.1
	.set	._ZN1CC2Ev.localalias.1,._ZN1CC2Ev
	.set _ZN1CC2Ev.localalias.1,_ZN1CC2Ev
	.toc
LC..3:
	.tc _ZTT1D.P4[TC],_ZTT1D+4
LC..4:
	.tc _ZTT1D.P20[TC],_ZTT1D+20
LC..5:
	.tc _ZTV1D.P16[TC],_ZTV1D+16
LC..6:
	.tc _ZTV1D.P36[TC],_ZTV1D+36
	.csect .text[PR]
	.align 2
	.weak	_ZN1DC1Ev[DS]
	.weak	._ZN1DC1Ev
	.csect _ZN1DC1Ev[DS]
_ZN1DC1Ev:
	.long ._ZN1DC1Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1DC1Ev:
LFB..15:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..18:
	mr 31,1
LCFI..19:
	stw 3,88(31)
	lwz 9,88(31)
	mr 3,9
	bl ._ZN1AC2Ev.localalias.3
	lwz 9,88(31)
	lwz 10,LC..3(2)
	mr 4,10
	mr 3,9
	bl ._ZN1CC2Ev.localalias.1
	lwz 9,88(31)
	addi 9,9,4
	lwz 10,LC..4(2)
	mr 4,10
	mr 3,9
	bl ._ZN1BC2Ev.localalias.2
	lwz 10,LC..5(2)
	lwz 9,88(31)
	stw 10,0(9)
	li 9,0
	lwz 10,88(31)
	add 9,10,9
	lwz 10,LC..5(2)
	stw 10,0(9)
	lwz 10,LC..6(2)
	lwz 9,88(31)
	stw 10,4(9)
	addi 1,31,64
LCFI..20:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1DC1Ev:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1DC1Ev-._ZN1DC1Ev
	.short 9
	.byte "_ZN1DC1Ev"
	.byte 31
	.align 2
LFE..15:
	.lglobl	._ZN1DC1Ev.localalias.0
	.lglobl	_ZN1DC1Ev.localalias.0
	.set	._ZN1DC1Ev.localalias.0,._ZN1DC1Ev
	.set _ZN1DC1Ev.localalias.0,_ZN1DC1Ev
	.align 2
	.globl main
	.globl .main
	.csect main[DS]
main:
	.long .main, TOC[tc0], 0
	.csect .text[PR]
.main:
LFB..9:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-96(1)
LCFI..21:
	mr 31,1
LCFI..22:
	addi 9,31,56
	mr 3,9
	bl ._ZN1DC1Ev.localalias.0
	li 9,0
	mr 3,9
	addi 1,31,96
LCFI..23:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT..main:
	.long 0
	.byte 0,9,32,97,128,1,0,1
	.long LT..main-.main
	.short 4
	.byte "main"
	.byte 31
	.align 2
LFE..9:
	.weak	_ZTV1D
	.csect .data[RW],4
	.align 2
_ZTV1D:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1D
	.long	LTHUNK..0
	.long	-4
	.long	-4
	.long	-4
	.long	_ZTI1D
	.long	_ZThn4_N1D1fEv.localalias.10
	.set _ZTV1D.localalias.6,_ZTV1D
	.weak	_ZTT1D
	.align 2
_ZTT1D:
	.long	_ZTV1D.localalias.6+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D4_1B+16
	.long	_ZTC1D4_1B+32
	.long	_ZTV1D.localalias.6+16
	.long	_ZTV1D.localalias.6+36
	.weak	_ZTC1D0_1C
	.align 2
_ZTC1D0_1C:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1C
	.long	LTHUNK..0
	.weak	_ZTC1D0_1B
	.align 2
_ZTC1D0_1B:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.weak	_ZTC1D4_1B
	.align 2
_ZTC1D4_1B:
	.long	-4
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.long	4
	.long	4
	.long	_ZTI1B
	.long	_ZTv0_n12_N1B1fEv
	.weak	_ZTV1A
	.align 2
_ZTV1A:
	.long	0
	.long	_ZTI1A
	.long	_ZN1A1fEv.localalias.4
	.weak	_ZTI1D
	.align 2
_ZTI1D:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1D
	.long	3
	.long	2
	.long	_ZTI1C
	.long	2
	.long	_ZTI1B
	.long	1026
	.weak	_ZTS1D
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1D:
	.byte "1D"
	.byte 0
	.weak	_ZTI1C
	.csect .data[RW],4
	.align 2
_ZTI1C:
	.long	_ZTVN10__cxxabiv120__si_class_type_infoE+8
	.long	_ZTS1C
	.long	_ZTI1B
	.weak	_ZTS1C
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1C:
	.byte "1C"
	.byte 0
	.weak	_ZTI1B
	.csect .data[RW],4
	.align 2
_ZTI1B:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1B
	.long	0
	.long	1
	.long	_ZTI1A
	.long	-4093
	.weak	_ZTS1B
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1B:
	.byte "1B"
	.byte 0
	.weak	_ZTI1A
	.csect .data[RW],4
	.align 2
_ZTI1A:
	.long	_ZTVN10__cxxabiv117__class_type_infoE+8
	.long	_ZTS1A
	.weak	_ZTS1A
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1A:
	.byte "1A"
	.byte 0
	.csect .data[RW],4
	.align 2
	.globl _GLOBAL__F_b
_GLOBAL__F_b:
Lframe..1:
	.vbyte	4,LECIE..1-LSCIE..1
LSCIE..1:
	.vbyte	4,0
	.byte	0x3
	.byte 0
	.byte	0x1
	.byte	0x7c
	.byte	0x41
	.byte	0xc
	.byte	0x1
	.byte	0
	.align 2
LECIE..1:
LSFDE..1:
	.vbyte	4,LEFDE..1-LASFDE..1
LASFDE..1:
	.vbyte	4,LASFDE..1-Lframe..1
	.vbyte	4,LFB..5
	.vbyte	4,LFE..5-LFB..5
	.byte	0x4
	.vbyte	4,LCFI..6-LFB..5
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..7-LCFI..6
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..8-LCFI..7
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..1:
LSFDE..3:
	.vbyte	4,LEFDE..3-LASFDE..3
LASFDE..3:
	.vbyte	4,LASFDE..3-Lframe..1
	.vbyte	4,LFB..7
	.vbyte	4,LFE..7-LFB..7
	.byte	0x4
	.vbyte	4,LCFI..9-LFB..7
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..10-LCFI..9
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..11-LCFI..10
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..3:
LSFDE..5:
	.vbyte	4,LEFDE..5-LASFDE..5
LASFDE..5:
	.vbyte	4,LASFDE..5-Lframe..1
	.vbyte	4,LFB..16
	.vbyte	4,LFE..16-LFB..16
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..5:
LSFDE..7:
	.vbyte	4,LEFDE..7-LASFDE..7
LASFDE..7:
	.vbyte	4,LASFDE..7-Lframe..1
	.vbyte	4,LFB..17
	.vbyte	4,LFE..17-LFB..17
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..7:
LSFDE..9:
	.vbyte	4,LEFDE..9-LASFDE..9
LASFDE..9:
	.vbyte	4,LASFDE..9-Lframe..1
	.vbyte	4,LFB..12
	.vbyte	4,LFE..12-LFB..12
	.byte	0x4
	.vbyte	4,LCFI..15-LFB..12
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..16-LCFI..15
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..17-LCFI..16
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..9:
LSFDE..11:
	.vbyte	4,LEFDE..11-LASFDE..11
LASFDE..11:
	.vbyte	4,LASFDE..11-Lframe..1
	.vbyte	4,LFB..15
	.vbyte	4,LFE..15-LFB..15
	.byte	0x4
	.vbyte	4,LCFI..18-LFB..15
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..19-LCFI..18
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..20-LCFI..19
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..11:
LSFDE..13:
	.vbyte	4,LEFDE..13-LASFDE..13
LASFDE..13:
	.vbyte	4,LASFDE..13-Lframe..1
	.vbyte	4,LFB..9
	.vbyte	4,LFE..9-LFB..9
	.byte	0x4
	.vbyte	4,LCFI..21-LFB..9
	.byte	0xe
	.byte	0x60
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..22-LCFI..21
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..23-LCFI..22
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..13:
	.vbyte	4,0
	.csect .text[PR]
_section_.text:
	.csect .data[RW],4
	.long _section_.text
.file	"/home/jh/trunk/gcc/testsuite/g++.dg/abi/vcall1.C"
	.csect .text[PR]
	.toc
	.csect .text[PR]
	.globl b
	.csect .data[RW],4
	.align 2
b:
	.space 4
	.csect .text[PR]
	.align 2
	.weak	_ZN1A1fEv[DS]
	.weak	._ZN1A1fEv
	.csect _ZN1A1fEv[DS]
_ZN1A1fEv:
	.long ._ZN1A1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1A1fEv:
LFB..0:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..0:
	mr 31,1
LCFI..1:
	stw 3,56(31)
	addi 1,31,32
LCFI..2:
	lwz 31,-4(1)
	blr
LT.._ZN1A1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1A1fEv-._ZN1A1fEv
	.short 9
	.byte "_ZN1A1fEv"
	.byte 31
	.align 2
LFE..0:
	.lglobl	._ZN1A1fEv.localalias.4
	.lglobl	_ZN1A1fEv.localalias.4
	.set	._ZN1A1fEv.localalias.4,._ZN1A1fEv
	.set _ZN1A1fEv.localalias.4,_ZN1A1fEv
	.toc
LC..0:
	.tc _ZTV1A.P8[TC],_ZTV1A+8
	.csect .text[PR]
	.align 2
	.weak	_ZN1AC2Ev[DS]
	.weak	._ZN1AC2Ev
	.csect _ZN1AC2Ev[DS]
_ZN1AC2Ev:
	.long ._ZN1AC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1AC2Ev:
LFB..3:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..3:
	mr 31,1
LCFI..4:
	stw 3,56(31)
	lwz 9,56(31)
	lwz 10,LC..0(2)
	stw 10,0(9)
	addi 1,31,32
LCFI..5:
	lwz 31,-4(1)
	blr
LT.._ZN1AC2Ev:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1AC2Ev-._ZN1AC2Ev
	.short 9
	.byte "_ZN1AC2Ev"
	.byte 31
	.align 2
LFE..3:
	.lglobl	._ZN1AC2Ev.localalias.3
	.lglobl	_ZN1AC2Ev.localalias.3
	.set	._ZN1AC2Ev.localalias.3,._ZN1AC2Ev
	.set _ZN1AC2Ev.localalias.3,_ZN1AC2Ev
	.toc
LC..1:
	.tc b[TC],b
	.csect .text[PR]
	.align 2
	.weak	_ZN1BC2Ev[DS]
	.weak	._ZN1BC2Ev
	.csect _ZN1BC2Ev[DS]
_ZN1BC2Ev:
	.long ._ZN1BC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1BC2Ev:
LFB..5:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..6:
	mr 31,1
LCFI..7:
	stw 3,88(31)
	stw 4,92(31)
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,4(10)
	stw 10,0(9)
	lwz 9,LC..1(2)
	lwz 10,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 9,0(9)
	lwz 9,0(9)
	lwz 10,88(31)
	lwz 10,0(10)
	addi 10,10,-16
	lwz 10,0(10)
	mr 8,10
	lwz 10,88(31)
	add 10,10,8
	mr 3,10
	stw 2,20(1)
	lwz 10,0(9)
	lwz 11,8(9)
	mtctr 10
	lwz 2,4(9)
	bctrl
	lwz 2,20(1)
	addi 1,31,64
LCFI..8:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1BC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1BC2Ev-._ZN1BC2Ev
	.short 9
	.byte "_ZN1BC2Ev"
	.byte 31
	.align 2
LFE..5:
	.lglobl	._ZN1BC2Ev.localalias.2
	.lglobl	_ZN1BC2Ev.localalias.2
	.set	._ZN1BC2Ev.localalias.2,._ZN1BC2Ev
	.set _ZN1BC2Ev.localalias.2,_ZN1BC2Ev
	.toc
	.set LC..2,LC..1
	.csect .text[PR]
	.align 2
	.weak	_ZN1B1fEv[DS]
	.weak	._ZN1B1fEv
	.csect _ZN1B1fEv[DS]
_ZN1B1fEv:
	.long ._ZN1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1B1fEv:
LFB..7:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..9:
	mr 31,1
LCFI..10:
	stw 3,88(31)
	lwz 9,LC..2(2)
	lwz 9,0(9)
	lwz 10,88(31)
	cmpw 7,10,9
	beq 7,L..4
	bl .abort
	nop
L..4:
	addi 1,31,64
LCFI..11:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1B1fEv:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1B1fEv-._ZN1B1fEv
	.short 9
	.byte "_ZN1B1fEv"
	.byte 31
	.align 2
LFE..7:
	.lglobl	.LTHUNK..0
	.lglobl	LTHUNK..0
	.set	.LTHUNK..0,._ZN1B1fEv
	.set LTHUNK..0,_ZN1B1fEv
	.lglobl	._ZTv0_n12_N1B1fEv.localalias.5
	.lglobl	_ZTv0_n12_N1B1fEv.localalias.5
	.set	._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
	.set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
	.align 2
	.weak	_ZTv0_n12_N1B1fEv[DS]
	.weak	._ZTv0_n12_N1B1fEv
	.csect _ZTv0_n12_N1B1fEv[DS]
_ZTv0_n12_N1B1fEv:
	.long ._ZTv0_n12_N1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZTv0_n12_N1B1fEv:
LFB..16:
	lwz 12,0(3)
	lwz 12,-12(12)
	add 3,3,12
	b .LTHUNK..0
LFE..16:
	.align 2
	.weak	_ZN1D1fEv[DS]
	.weak	._ZN1D1fEv
	.csect _ZN1D1fEv[DS]
_ZN1D1fEv:
	.long ._ZN1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1D1fEv:
LFB..8:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..12:
	mr 31,1
LCFI..13:
	stw 3,56(31)
	addi 1,31,32
LCFI..14:
	lwz 31,-4(1)
	blr
LT.._ZN1D1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1D1fEv-._ZN1D1fEv
	.short 9
	.byte "_ZN1D1fEv"
	.byte 31
	.align 2
LFE..8:
	.lglobl	.LTHUNK..2
	.lglobl	LTHUNK..2
	.set	.LTHUNK..2,._ZN1D1fEv
	.set LTHUNK..2,_ZN1D1fEv
	.lglobl	._ZThn4_N1D1fEv.localalias.10
	.lglobl	_ZThn4_N1D1fEv.localalias.10
	.set	._ZThn4_N1D1fEv.localalias.10,._ZThn4_N1D1fEv
	.set _ZThn4_N1D1fEv.localalias.10,_ZThn4_N1D1fEv
	.align 2
	.weak	_ZThn4_N1D1fEv[DS]
	.weak	._ZThn4_N1D1fEv
	.csect _ZThn4_N1D1fEv[DS]
_ZThn4_N1D1fEv:
	.long ._ZThn4_N1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZThn4_N1D1fEv:
LFB..17:
	addi 3,3,-4
	b .LTHUNK..2
LFE..17:
	.align 2
	.weak	_ZN1CC2Ev[DS]
	.weak	._ZN1CC2Ev
	.csect _ZN1CC2Ev[DS]
_ZN1CC2Ev:
	.long ._ZN1CC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1CC2Ev:
LFB..12:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..15:
	mr 31,1
LCFI..16:
	stw 3,88(31)
	stw 4,92(31)
	lwz 10,88(31)
	lwz 9,92(31)
	addi 9,9,4
	mr 4,9
	mr 3,10
	bl ._ZN1BC2Ev.localalias.2
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,12(10)
	stw 10,0(9)
	addi 1,31,64
LCFI..17:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1CC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1CC2Ev-._ZN1CC2Ev
	.short 9
	.byte "_ZN1CC2Ev"
	.byte 31
	.align 2
LFE..12:
	.lglobl	._ZN1CC2Ev.localalias.1
	.lglobl	_ZN1CC2Ev.localalias.1
	.set	._ZN1CC2Ev.localalias.1,._ZN1CC2Ev
	.set _ZN1CC2Ev.localalias.1,_ZN1CC2Ev
	.toc
LC..3:
	.tc _ZTT1D.P4[TC],_ZTT1D+4
LC..4:
	.tc _ZTT1D.P20[TC],_ZTT1D+20
LC..5:
	.tc _ZTV1D.P16[TC],_ZTV1D+16
LC..6:
	.tc _ZTV1D.P36[TC],_ZTV1D+36
	.csect .text[PR]
	.align 2
	.weak	_ZN1DC1Ev[DS]
	.weak	._ZN1DC1Ev
	.csect _ZN1DC1Ev[DS]
_ZN1DC1Ev:
	.long ._ZN1DC1Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1DC1Ev:
LFB..15:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..18:
	mr 31,1
LCFI..19:
	stw 3,88(31)
	lwz 9,88(31)
	mr 3,9
	bl ._ZN1AC2Ev.localalias.3
	lwz 9,88(31)
	lwz 10,LC..3(2)
	mr 4,10
	mr 3,9
	bl ._ZN1CC2Ev.localalias.1
	lwz 9,88(31)
	addi 9,9,4
	lwz 10,LC..4(2)
	mr 4,10
	mr 3,9
	bl ._ZN1BC2Ev.localalias.2
	lwz 10,LC..5(2)
	lwz 9,88(31)
	stw 10,0(9)
	li 9,0
	lwz 10,88(31)
	add 9,10,9
	lwz 10,LC..5(2)
	stw 10,0(9)
	lwz 10,LC..6(2)
	lwz 9,88(31)
	stw 10,4(9)
	addi 1,31,64
LCFI..20:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1DC1Ev:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1DC1Ev-._ZN1DC1Ev
	.short 9
	.byte "_ZN1DC1Ev"
	.byte 31
	.align 2
LFE..15:
	.lglobl	._ZN1DC1Ev.localalias.0
	.lglobl	_ZN1DC1Ev.localalias.0
	.set	._ZN1DC1Ev.localalias.0,._ZN1DC1Ev
	.set _ZN1DC1Ev.localalias.0,_ZN1DC1Ev
	.align 2
	.globl main
	.globl .main
	.csect main[DS]
main:
	.long .main, TOC[tc0], 0
	.csect .text[PR]
.main:
LFB..9:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-96(1)
LCFI..21:
	mr 31,1
LCFI..22:
	addi 9,31,56
	mr 3,9
	bl ._ZN1DC1Ev.localalias.0
	li 9,0
	mr 3,9
	addi 1,31,96
LCFI..23:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT..main:
	.long 0
	.byte 0,9,32,97,128,1,0,1
	.long LT..main-.main
	.short 4
	.byte "main"
	.byte 31
	.align 2
LFE..9:
	.weak	_ZTV1D
	.csect .data[RW],4
	.align 2
_ZTV1D:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1D
	.long	LTHUNK..0
	.long	-4
	.long	-4
	.long	-4
	.long	_ZTI1D
	.long	_ZThn4_N1D1fEv.localalias.10
	.set _ZTV1D.localalias.6,_ZTV1D
	.weak	_ZTT1D
	.align 2
_ZTT1D:
	.long	_ZTV1D.localalias.6+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D4_1B+16
	.long	_ZTC1D4_1B+32
	.long	_ZTV1D.localalias.6+16
	.long	_ZTV1D.localalias.6+36
	.weak	_ZTC1D0_1C
	.align 2
_ZTC1D0_1C:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1C
	.long	LTHUNK..0
	.weak	_ZTC1D0_1B
	.align 2
_ZTC1D0_1B:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.weak	_ZTC1D4_1B
	.align 2
_ZTC1D4_1B:
	.long	-4
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.long	4
	.long	4
	.long	_ZTI1B
	.long	_ZTv0_n12_N1B1fEv.localalias.5
	.weak	_ZTV1A
	.align 2
_ZTV1A:
	.long	0
	.long	_ZTI1A
	.long	_ZN1A1fEv.localalias.4
	.weak	_ZTI1D
	.align 2
_ZTI1D:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1D
	.long	3
	.long	2
	.long	_ZTI1C
	.long	2
	.long	_ZTI1B
	.long	1026
	.weak	_ZTS1D
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1D:
	.byte "1D"
	.byte 0
	.weak	_ZTI1C
	.csect .data[RW],4
	.align 2
_ZTI1C:
	.long	_ZTVN10__cxxabiv120__si_class_type_infoE+8
	.long	_ZTS1C
	.long	_ZTI1B
	.weak	_ZTS1C
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1C:
	.byte "1C"
	.byte 0
	.weak	_ZTI1B
	.csect .data[RW],4
	.align 2
_ZTI1B:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1B
	.long	0
	.long	1
	.long	_ZTI1A
	.long	-4093
	.weak	_ZTS1B
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1B:
	.byte "1B"
	.byte 0
	.weak	_ZTI1A
	.csect .data[RW],4
	.align 2
_ZTI1A:
	.long	_ZTVN10__cxxabiv117__class_type_infoE+8
	.long	_ZTS1A
	.weak	_ZTS1A
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1A:
	.byte "1A"
	.byte 0
	.csect .data[RW],4
	.align 2
	.globl _GLOBAL__F_b
_GLOBAL__F_b:
Lframe..1:
	.vbyte	4,LECIE..1-LSCIE..1
LSCIE..1:
	.vbyte	4,0
	.byte	0x3
	.byte 0
	.byte	0x1
	.byte	0x7c
	.byte	0x41
	.byte	0xc
	.byte	0x1
	.byte	0
	.align 2
LECIE..1:
LSFDE..1:
	.vbyte	4,LEFDE..1-LASFDE..1
LASFDE..1:
	.vbyte	4,LASFDE..1-Lframe..1
	.vbyte	4,LFB..5
	.vbyte	4,LFE..5-LFB..5
	.byte	0x4
	.vbyte	4,LCFI..6-LFB..5
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..7-LCFI..6
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..8-LCFI..7
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..1:
LSFDE..3:
	.vbyte	4,LEFDE..3-LASFDE..3
LASFDE..3:
	.vbyte	4,LASFDE..3-Lframe..1
	.vbyte	4,LFB..7
	.vbyte	4,LFE..7-LFB..7
	.byte	0x4
	.vbyte	4,LCFI..9-LFB..7
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..10-LCFI..9
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..11-LCFI..10
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..3:
LSFDE..5:
	.vbyte	4,LEFDE..5-LASFDE..5
LASFDE..5:
	.vbyte	4,LASFDE..5-Lframe..1
	.vbyte	4,LFB..16
	.vbyte	4,LFE..16-LFB..16
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..5:
LSFDE..7:
	.vbyte	4,LEFDE..7-LASFDE..7
LASFDE..7:
	.vbyte	4,LASFDE..7-Lframe..1
	.vbyte	4,LFB..17
	.vbyte	4,LFE..17-LFB..17
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..7:
LSFDE..9:
	.vbyte	4,LEFDE..9-LASFDE..9
LASFDE..9:
	.vbyte	4,LASFDE..9-Lframe..1
	.vbyte	4,LFB..12
	.vbyte	4,LFE..12-LFB..12
	.byte	0x4
	.vbyte	4,LCFI..15-LFB..12
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..16-LCFI..15
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..17-LCFI..16
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..9:
LSFDE..11:
	.vbyte	4,LEFDE..11-LASFDE..11
LASFDE..11:
	.vbyte	4,LASFDE..11-Lframe..1
	.vbyte	4,LFB..15
	.vbyte	4,LFE..15-LFB..15
	.byte	0x4
	.vbyte	4,LCFI..18-LFB..15
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..19-LCFI..18
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..20-LCFI..19
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..11:
LSFDE..13:
	.vbyte	4,LEFDE..13-LASFDE..13
LASFDE..13:
	.vbyte	4,LASFDE..13-Lframe..1
	.vbyte	4,LFB..9
	.vbyte	4,LFE..9-LFB..9
	.byte	0x4
	.vbyte	4,LCFI..21-LFB..9
	.byte	0xe
	.byte	0x60
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..22-LCFI..21
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..23-LCFI..22
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..13:
	.vbyte	4,0
	.csect .text[PR]
_section_.text:
	.csect .data[RW],4
	.long _section_.text
.file	"/home/jh/trunk/gcc/testsuite/g++.dg/abi/vcall1.C"
	.csect .text[PR]
	.toc
	.csect .text[PR]
	.globl b
	.csect .data[RW],4
	.align 2
b:
	.space 4
	.csect .text[PR]
	.align 2
	.weak	_ZN1A1fEv[DS]
	.weak	._ZN1A1fEv
	.csect _ZN1A1fEv[DS]
_ZN1A1fEv:
	.long ._ZN1A1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1A1fEv:
LFB..0:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..0:
	mr 31,1
LCFI..1:
	stw 3,56(31)
	addi 1,31,32
LCFI..2:
	lwz 31,-4(1)
	blr
LT.._ZN1A1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1A1fEv-._ZN1A1fEv
	.short 9
	.byte "_ZN1A1fEv"
	.byte 31
	.align 2
LFE..0:
	.lglobl	._ZN1A1fEv.localalias.4
	.lglobl	_ZN1A1fEv.localalias.4
	.set	._ZN1A1fEv.localalias.4,._ZN1A1fEv
	.set _ZN1A1fEv.localalias.4,_ZN1A1fEv
	.toc
LC..0:
	.tc _ZTV1A.P8[TC],_ZTV1A+8
	.csect .text[PR]
	.align 2
	.weak	_ZN1AC2Ev[DS]
	.weak	._ZN1AC2Ev
	.csect _ZN1AC2Ev[DS]
_ZN1AC2Ev:
	.long ._ZN1AC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1AC2Ev:
LFB..3:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..3:
	mr 31,1
LCFI..4:
	stw 3,56(31)
	lwz 9,56(31)
	lwz 10,LC..0(2)
	stw 10,0(9)
	addi 1,31,32
LCFI..5:
	lwz 31,-4(1)
	blr
LT.._ZN1AC2Ev:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1AC2Ev-._ZN1AC2Ev
	.short 9
	.byte "_ZN1AC2Ev"
	.byte 31
	.align 2
LFE..3:
	.lglobl	._ZN1AC2Ev.localalias.3
	.lglobl	_ZN1AC2Ev.localalias.3
	.set	._ZN1AC2Ev.localalias.3,._ZN1AC2Ev
	.set _ZN1AC2Ev.localalias.3,_ZN1AC2Ev
	.toc
LC..1:
	.tc b[TC],b
	.csect .text[PR]
	.align 2
	.weak	_ZN1BC2Ev[DS]
	.weak	._ZN1BC2Ev
	.csect _ZN1BC2Ev[DS]
_ZN1BC2Ev:
	.long ._ZN1BC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1BC2Ev:
LFB..5:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..6:
	mr 31,1
LCFI..7:
	stw 3,88(31)
	stw 4,92(31)
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,4(10)
	stw 10,0(9)
	lwz 9,LC..1(2)
	lwz 10,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 9,0(9)
	lwz 9,0(9)
	lwz 10,88(31)
	lwz 10,0(10)
	addi 10,10,-16
	lwz 10,0(10)
	mr 8,10
	lwz 10,88(31)
	add 10,10,8
	mr 3,10
	stw 2,20(1)
	lwz 10,0(9)
	lwz 11,8(9)
	mtctr 10
	lwz 2,4(9)
	bctrl
	lwz 2,20(1)
	addi 1,31,64
LCFI..8:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1BC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1BC2Ev-._ZN1BC2Ev
	.short 9
	.byte "_ZN1BC2Ev"
	.byte 31
	.align 2
LFE..5:
	.lglobl	._ZN1BC2Ev.localalias.2
	.lglobl	_ZN1BC2Ev.localalias.2
	.set	._ZN1BC2Ev.localalias.2,._ZN1BC2Ev
	.set _ZN1BC2Ev.localalias.2,_ZN1BC2Ev
	.toc
	.set LC..2,LC..1
	.csect .text[PR]
	.align 2
	.weak	_ZN1B1fEv[DS]
	.weak	._ZN1B1fEv
	.csect _ZN1B1fEv[DS]
_ZN1B1fEv:
	.long ._ZN1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1B1fEv:
LFB..7:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..9:
	mr 31,1
LCFI..10:
	stw 3,88(31)
	lwz 9,LC..2(2)
	lwz 9,0(9)
	lwz 10,88(31)
	cmpw 7,10,9
	beq 7,L..4
	bl .abort
	nop
L..4:
	addi 1,31,64
LCFI..11:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1B1fEv:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1B1fEv-._ZN1B1fEv
	.short 9
	.byte "_ZN1B1fEv"
	.byte 31
	.align 2
LFE..7:
	.lglobl	.LTHUNK..0
	.lglobl	LTHUNK..0
	.set	.LTHUNK..0,._ZN1B1fEv
	.set LTHUNK..0,_ZN1B1fEv
	.align 2
	.weak	_ZTv0_n12_N1B1fEv[DS]
	.weak	._ZTv0_n12_N1B1fEv
	.csect _ZTv0_n12_N1B1fEv[DS]
_ZTv0_n12_N1B1fEv:
	.long ._ZTv0_n12_N1B1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZTv0_n12_N1B1fEv:
LFB..16:
	lwz 12,0(3)
	lwz 12,-12(12)
	add 3,3,12
	b .LTHUNK..0
	.lglobl	._ZTv0_n12_N1B1fEv.localalias.5
	.lglobl	_ZTv0_n12_N1B1fEv.localalias.5
	.set	._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
	.set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
LFE..16:
	.align 2
	.weak	_ZN1D1fEv[DS]
	.weak	._ZN1D1fEv
	.csect _ZN1D1fEv[DS]
_ZN1D1fEv:
	.long ._ZN1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZN1D1fEv:
LFB..8:
	stw 31,-4(1)
	stwu 1,-32(1)
LCFI..12:
	mr 31,1
LCFI..13:
	stw 3,56(31)
	addi 1,31,32
LCFI..14:
	lwz 31,-4(1)
	blr
LT.._ZN1D1fEv:
	.long 0
	.byte 0,9,32,96,128,1,1,1
	.long 0
	.long LT.._ZN1D1fEv-._ZN1D1fEv
	.short 9
	.byte "_ZN1D1fEv"
	.byte 31
	.align 2
LFE..8:
	.lglobl	.LTHUNK..2
	.lglobl	LTHUNK..2
	.set	.LTHUNK..2,._ZN1D1fEv
	.set LTHUNK..2,_ZN1D1fEv
	.lglobl	._ZThn4_N1D1fEv.localalias.10
	.lglobl	_ZThn4_N1D1fEv.localalias.10
	.set	._ZThn4_N1D1fEv.localalias.10,._ZThn4_N1D1fEv
	.set _ZThn4_N1D1fEv.localalias.10,_ZThn4_N1D1fEv
	.align 2
	.weak	_ZThn4_N1D1fEv[DS]
	.weak	._ZThn4_N1D1fEv
	.csect _ZThn4_N1D1fEv[DS]
_ZThn4_N1D1fEv:
	.long ._ZThn4_N1D1fEv, TOC[tc0], 0
	.csect .text[PR]
._ZThn4_N1D1fEv:
LFB..17:
	addi 3,3,-4
	b .LTHUNK..2
LFE..17:
	.align 2
	.weak	_ZN1CC2Ev[DS]
	.weak	._ZN1CC2Ev
	.csect _ZN1CC2Ev[DS]
_ZN1CC2Ev:
	.long ._ZN1CC2Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1CC2Ev:
LFB..12:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..15:
	mr 31,1
LCFI..16:
	stw 3,88(31)
	stw 4,92(31)
	lwz 10,88(31)
	lwz 9,92(31)
	addi 9,9,4
	mr 4,9
	mr 3,10
	bl ._ZN1BC2Ev.localalias.2
	lwz 9,92(31)
	lwz 10,0(9)
	lwz 9,88(31)
	stw 10,0(9)
	lwz 9,88(31)
	lwz 9,0(9)
	addi 9,9,-16
	lwz 9,0(9)
	mr 10,9
	lwz 9,88(31)
	add 9,9,10
	lwz 10,92(31)
	lwz 10,12(10)
	stw 10,0(9)
	addi 1,31,64
LCFI..17:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1CC2Ev:
	.long 0
	.byte 0,9,32,97,128,1,2,1
	.long 0
	.long LT.._ZN1CC2Ev-._ZN1CC2Ev
	.short 9
	.byte "_ZN1CC2Ev"
	.byte 31
	.align 2
LFE..12:
	.lglobl	._ZN1CC2Ev.localalias.1
	.lglobl	_ZN1CC2Ev.localalias.1
	.set	._ZN1CC2Ev.localalias.1,._ZN1CC2Ev
	.set _ZN1CC2Ev.localalias.1,_ZN1CC2Ev
	.toc
LC..3:
	.tc _ZTT1D.P4[TC],_ZTT1D+4
LC..4:
	.tc _ZTT1D.P20[TC],_ZTT1D+20
LC..5:
	.tc _ZTV1D.P16[TC],_ZTV1D+16
LC..6:
	.tc _ZTV1D.P36[TC],_ZTV1D+36
	.csect .text[PR]
	.align 2
	.weak	_ZN1DC1Ev[DS]
	.weak	._ZN1DC1Ev
	.csect _ZN1DC1Ev[DS]
_ZN1DC1Ev:
	.long ._ZN1DC1Ev, TOC[tc0], 0
	.csect .text[PR]
._ZN1DC1Ev:
LFB..15:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-64(1)
LCFI..18:
	mr 31,1
LCFI..19:
	stw 3,88(31)
	lwz 9,88(31)
	mr 3,9
	bl ._ZN1AC2Ev.localalias.3
	lwz 9,88(31)
	lwz 10,LC..3(2)
	mr 4,10
	mr 3,9
	bl ._ZN1CC2Ev.localalias.1
	lwz 9,88(31)
	addi 9,9,4
	lwz 10,LC..4(2)
	mr 4,10
	mr 3,9
	bl ._ZN1BC2Ev.localalias.2
	lwz 10,LC..5(2)
	lwz 9,88(31)
	stw 10,0(9)
	li 9,0
	lwz 10,88(31)
	add 9,10,9
	lwz 10,LC..5(2)
	stw 10,0(9)
	lwz 10,LC..6(2)
	lwz 9,88(31)
	stw 10,4(9)
	addi 1,31,64
LCFI..20:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT.._ZN1DC1Ev:
	.long 0
	.byte 0,9,32,97,128,1,1,1
	.long 0
	.long LT.._ZN1DC1Ev-._ZN1DC1Ev
	.short 9
	.byte "_ZN1DC1Ev"
	.byte 31
	.align 2
LFE..15:
	.lglobl	._ZN1DC1Ev.localalias.0
	.lglobl	_ZN1DC1Ev.localalias.0
	.set	._ZN1DC1Ev.localalias.0,._ZN1DC1Ev
	.set _ZN1DC1Ev.localalias.0,_ZN1DC1Ev
	.align 2
	.globl main
	.globl .main
	.csect main[DS]
main:
	.long .main, TOC[tc0], 0
	.csect .text[PR]
.main:
LFB..9:
	mflr 0
	stw 0,8(1)
	stw 31,-4(1)
	stwu 1,-96(1)
LCFI..21:
	mr 31,1
LCFI..22:
	addi 9,31,56
	mr 3,9
	bl ._ZN1DC1Ev.localalias.0
	li 9,0
	mr 3,9
	addi 1,31,96
LCFI..23:
	lwz 0,8(1)
	mtlr 0
	lwz 31,-4(1)
	blr
LT..main:
	.long 0
	.byte 0,9,32,97,128,1,0,1
	.long LT..main-.main
	.short 4
	.byte "main"
	.byte 31
	.align 2
LFE..9:
	.weak	_ZTV1D
	.csect .data[RW],4
	.align 2
_ZTV1D:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1D
	.long	LTHUNK..0
	.long	-4
	.long	-4
	.long	-4
	.long	_ZTI1D
	.long	_ZThn4_N1D1fEv.localalias.10
	.set _ZTV1D.localalias.6,_ZTV1D
	.weak	_ZTT1D
	.align 2
_ZTT1D:
	.long	_ZTV1D.localalias.6+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1B+16
	.long	_ZTC1D0_1C+16
	.long	_ZTC1D4_1B+16
	.long	_ZTC1D4_1B+32
	.long	_ZTV1D.localalias.6+16
	.long	_ZTV1D.localalias.6+36
	.weak	_ZTC1D0_1C
	.align 2
_ZTC1D0_1C:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1C
	.long	LTHUNK..0
	.weak	_ZTC1D0_1B
	.align 2
_ZTC1D0_1B:
	.long	0
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.weak	_ZTC1D4_1B
	.align 2
_ZTC1D4_1B:
	.long	-4
	.long	0
	.long	0
	.long	_ZTI1B
	.long	LTHUNK..0
	.long	4
	.long	4
	.long	_ZTI1B
	.long	_ZTv0_n12_N1B1fEv.localalias.5
	.weak	_ZTV1A
	.align 2
_ZTV1A:
	.long	0
	.long	_ZTI1A
	.long	_ZN1A1fEv.localalias.4
	.weak	_ZTI1D
	.align 2
_ZTI1D:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1D
	.long	3
	.long	2
	.long	_ZTI1C
	.long	2
	.long	_ZTI1B
	.long	1026
	.weak	_ZTS1D
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1D:
	.byte "1D"
	.byte 0
	.weak	_ZTI1C
	.csect .data[RW],4
	.align 2
_ZTI1C:
	.long	_ZTVN10__cxxabiv120__si_class_type_infoE+8
	.long	_ZTS1C
	.long	_ZTI1B
	.weak	_ZTS1C
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1C:
	.byte "1C"
	.byte 0
	.weak	_ZTI1B
	.csect .data[RW],4
	.align 2
_ZTI1B:
	.long	_ZTVN10__cxxabiv121__vmi_class_type_infoE+8
	.long	_ZTS1B
	.long	0
	.long	1
	.long	_ZTI1A
	.long	-4093
	.weak	_ZTS1B
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1B:
	.byte "1B"
	.byte 0
	.weak	_ZTI1A
	.csect .data[RW],4
	.align 2
_ZTI1A:
	.long	_ZTVN10__cxxabiv117__class_type_infoE+8
	.long	_ZTS1A
	.weak	_ZTS1A
	.csect _vcall1.ro_[RO],4
	.align 2
_ZTS1A:
	.byte "1A"
	.byte 0
	.csect .data[RW],4
	.align 2
	.globl _GLOBAL__F_b
_GLOBAL__F_b:
Lframe..1:
	.vbyte	4,LECIE..1-LSCIE..1
LSCIE..1:
	.vbyte	4,0
	.byte	0x3
	.byte 0
	.byte	0x1
	.byte	0x7c
	.byte	0x41
	.byte	0xc
	.byte	0x1
	.byte	0
	.align 2
LECIE..1:
LSFDE..1:
	.vbyte	4,LEFDE..1-LASFDE..1
LASFDE..1:
	.vbyte	4,LASFDE..1-Lframe..1
	.vbyte	4,LFB..5
	.vbyte	4,LFE..5-LFB..5
	.byte	0x4
	.vbyte	4,LCFI..6-LFB..5
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..7-LCFI..6
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..8-LCFI..7
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..1:
LSFDE..3:
	.vbyte	4,LEFDE..3-LASFDE..3
LASFDE..3:
	.vbyte	4,LASFDE..3-Lframe..1
	.vbyte	4,LFB..7
	.vbyte	4,LFE..7-LFB..7
	.byte	0x4
	.vbyte	4,LCFI..9-LFB..7
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..10-LCFI..9
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..11-LCFI..10
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..3:
LSFDE..5:
	.vbyte	4,LEFDE..5-LASFDE..5
LASFDE..5:
	.vbyte	4,LASFDE..5-Lframe..1
	.vbyte	4,LFB..16
	.vbyte	4,LFE..16-LFB..16
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..5:
LSFDE..7:
	.vbyte	4,LEFDE..7-LASFDE..7
LASFDE..7:
	.vbyte	4,LASFDE..7-Lframe..1
	.vbyte	4,LFB..17
	.vbyte	4,LFE..17-LFB..17
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..7:
LSFDE..9:
	.vbyte	4,LEFDE..9-LASFDE..9
LASFDE..9:
	.vbyte	4,LASFDE..9-Lframe..1
	.vbyte	4,LFB..12
	.vbyte	4,LFE..12-LFB..12
	.byte	0x4
	.vbyte	4,LCFI..15-LFB..12
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..16-LCFI..15
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..17-LCFI..16
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..9:
LSFDE..11:
	.vbyte	4,LEFDE..11-LASFDE..11
LASFDE..11:
	.vbyte	4,LASFDE..11-Lframe..1
	.vbyte	4,LFB..15
	.vbyte	4,LFE..15-LFB..15
	.byte	0x4
	.vbyte	4,LCFI..18-LFB..15
	.byte	0xe
	.byte	0x40
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..19-LCFI..18
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..20-LCFI..19
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..11:
LSFDE..13:
	.vbyte	4,LEFDE..13-LASFDE..13
LASFDE..13:
	.vbyte	4,LASFDE..13-Lframe..1
	.vbyte	4,LFB..9
	.vbyte	4,LFE..9-LFB..9
	.byte	0x4
	.vbyte	4,LCFI..21-LFB..9
	.byte	0xe
	.byte	0x60
	.byte	0x11
	.byte	0x41
	.byte	0x7e
	.byte	0x9f
	.byte	0x1
	.byte	0x4
	.vbyte	4,LCFI..22-LCFI..21
	.byte	0xd
	.byte	0x1f
	.byte	0x4
	.vbyte	4,LCFI..23-LCFI..22
	.byte	0xc
	.byte	0x1
	.byte	0
	.csect .text[PR]
	.ref Lframe..1
	.csect .data[RW],4
	.align 2
LEFDE..13:
	.vbyte	4,0
	.csect .text[PR]
_section_.text:
	.csect .data[RW],4
	.long _section_.text

Comments

David Edelsohn June 6, 2014, 3:53 p.m. UTC | #1
On Fri, Jun 6, 2014 at 3:09 AM, Jan Hubicka <hubicka@ucw.cz> wrote:

> sorry for taking time to get back to it.  I went through the code and see no obvious flaws
> except that I am somewhat concerned what happens with local aliases into the anchors.
> The problem however does not seem to be caused by it.  I tracked it down to the following
> difference:
>
> --- d2.s        2014-06-06 08:59:01.101401622 +0200
> +++ d3.s        2014-06-06 08:59:01.491377632 +0200
> @@ -499,7 +499,7 @@
>         .long   4
>         .long   4
>         .long   _ZTI1B
> -       .long   _ZTv0_n12_N1B1fEv
> +       .long   _ZTv0_n12_N1B1fEv.localalias.5
>         .weak   _ZTV1A
>         .align 2
>  _ZTV1A:
>
> Now _ZTv0_n12_N1B1fEv is thunk declared as:
>
>         .lglobl .LTHUNK..0
>         .lglobl LTHUNK..0
>         .set    .LTHUNK..0,._ZN1B1fEv
>         .set LTHUNK..0,_ZN1B1fEv
>         .lglobl ._ZTv0_n12_N1B1fEv.localalias.5
>         .lglobl _ZTv0_n12_N1B1fEv.localalias.5
>         .set    ._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
>         .set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
>         .align 2
>         .weak   _ZTv0_n12_N1B1fEv[DS]
>         .weak   ._ZTv0_n12_N1B1fEv
>         .csect _ZTv0_n12_N1B1fEv[DS]
> _ZTv0_n12_N1B1fEv:
>         .long ._ZTv0_n12_N1B1fEv, TOC[tc0], 0
>         .csect .text[PR]
> ._ZTv0_n12_N1B1fEv:
> LFB..16:
>         lwz 12,0(3)
>         lwz 12,-12(12)
>         add 3,3,12
>         b .LTHUNK..0
>
> Now when I move the declaration of localalias after the thunk:
>
> --- d3.s        2014-06-06 08:59:01.491377632 +0200
> +++ d4.s        2014-06-06 09:03:58.129810951 +0200
> @@ -212,10 +212,6 @@
>         .lglobl LTHUNK..0
>         .set    .LTHUNK..0,._ZN1B1fEv
>         .set LTHUNK..0,_ZN1B1fEv
> -       .lglobl ._ZTv0_n12_N1B1fEv.localalias.5
> -       .lglobl _ZTv0_n12_N1B1fEv.localalias.5
> -       .set    ._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
> -       .set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
>         .align 2
>         .weak   _ZTv0_n12_N1B1fEv[DS]
>         .weak   ._ZTv0_n12_N1B1fEv
> @@ -229,6 +225,10 @@
>         lwz 12,-12(12)
>         add 3,3,12
>         b .LTHUNK..0
> +       .lglobl ._ZTv0_n12_N1B1fEv.localalias.5
> +       .lglobl _ZTv0_n12_N1B1fEv.localalias.5
> +       .set    ._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
> +       .set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
>  LFE..16:
>         .align 2
>         .weak   _ZN1D1fEv[DS]
>
> The code starts to work.  To me both sources should make same binary, but they don't.
> Can you make better sense of this than claiming it is an assembler bug?
>
> We output aliases after definitions for functions, but before definitions for thunks.
> I am testing patch to change the second order.  I remeber tweaking this order once before
> because of problems on solaris.  Lets see if we find order that works for everyone.

Honza,

The AIX assembler is a very simple, single-pass assembler. The order
has a lot of importance because the assembler makes assumptions about
symbols, such as section placement and annotations, if they are
referenced before defined. I notice that your change places the
.lglobl declaration after the .weak declaration.  That may be more
important than placing it after the thunk.

Thanks, David
diff mbox

Patch

--- d2.s	2014-06-06 08:59:01.101401622 +0200
+++ d3.s	2014-06-06 08:59:01.491377632 +0200
@@ -499,7 +499,7 @@ 
 	.long	4
 	.long	4
 	.long	_ZTI1B
-	.long	_ZTv0_n12_N1B1fEv
+	.long	_ZTv0_n12_N1B1fEv.localalias.5
 	.weak	_ZTV1A
 	.align 2
 _ZTV1A:

Now _ZTv0_n12_N1B1fEv is thunk declared as:

        .lglobl .LTHUNK..0
        .lglobl LTHUNK..0
        .set    .LTHUNK..0,._ZN1B1fEv
        .set LTHUNK..0,_ZN1B1fEv
        .lglobl ._ZTv0_n12_N1B1fEv.localalias.5
        .lglobl _ZTv0_n12_N1B1fEv.localalias.5
        .set    ._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
        .set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
        .align 2
        .weak   _ZTv0_n12_N1B1fEv[DS]
        .weak   ._ZTv0_n12_N1B1fEv
        .csect _ZTv0_n12_N1B1fEv[DS]
_ZTv0_n12_N1B1fEv:
        .long ._ZTv0_n12_N1B1fEv, TOC[tc0], 0
        .csect .text[PR]
._ZTv0_n12_N1B1fEv:
LFB..16:
        lwz 12,0(3)
        lwz 12,-12(12)
        add 3,3,12
        b .LTHUNK..0

Now when I move the declaration of localalias after the thunk:

--- d3.s	2014-06-06 08:59:01.491377632 +0200
+++ d4.s	2014-06-06 09:03:58.129810951 +0200
@@ -212,10 +212,6 @@ 
 	.lglobl	LTHUNK..0
 	.set	.LTHUNK..0,._ZN1B1fEv
 	.set LTHUNK..0,_ZN1B1fEv
-	.lglobl	._ZTv0_n12_N1B1fEv.localalias.5
-	.lglobl	_ZTv0_n12_N1B1fEv.localalias.5
-	.set	._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
-	.set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
 	.align 2
 	.weak	_ZTv0_n12_N1B1fEv[DS]
 	.weak	._ZTv0_n12_N1B1fEv
@@ -229,6 +225,10 @@ 
 	lwz 12,-12(12)
 	add 3,3,12
 	b .LTHUNK..0
+	.lglobl	._ZTv0_n12_N1B1fEv.localalias.5
+	.lglobl	_ZTv0_n12_N1B1fEv.localalias.5
+	.set	._ZTv0_n12_N1B1fEv.localalias.5,._ZTv0_n12_N1B1fEv
+	.set _ZTv0_n12_N1B1fEv.localalias.5,_ZTv0_n12_N1B1fEv
 LFE..16:
 	.align 2
 	.weak	_ZN1D1fEv[DS]