mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
b10b530a45
Add extended mnemonics used in the HLASM assembler. All of them are just aliases for instructions we already support and help when assembling code which was written for the HLASM assembler. The HLASM mnemonics are documented here: https://www.ibm.com/support/knowledgecenter/SSENW6_1.6.0/com.ibm.hlasm.v1r6.asm/asmr1023.pdf See the 'Branching with extended mnemonic codes' chapter. objdump will still print the existing mnemonics with the exception of relative nop branches (i.e. conditional branches with an empty condition code mask). Now we have jnop and jgnop which will be used by objdump when possible. The same change have been applied to the LLVM assembler: https://reviews.llvm.org/D92185 opcodes/ * s390-opc.txt: Add extended mnemonics. gas/ * testsuite/gas/s390/esa-g5.s: Test new extended mnemonics. * testsuite/gas/s390/esa-g5.d: Likewise. * testsuite/gas/s390/esa-z900.s: Likewise. * testsuite/gas/s390/esa-z900.d: Likewise. * testsuite/gas/s390/zarch-z900.s: Likewise. * testsuite/gas/s390/zarch-z900.d: Likewise. ld/ * testsuite/ld-s390/tlsbin_64.dd: The newly added jgnop mnemonic replaces long relative branches with empty condition code mask.
224 lines
9.2 KiB
Plaintext
224 lines
9.2 KiB
Plaintext
#source: tlsbinpic_64.s
|
|
#source: tlsbin_64.s
|
|
#as: -m64 -Aesame
|
|
#ld: -shared -melf64_s390
|
|
#objdump: -dzrj.text
|
|
#target: s390x-*-*
|
|
|
|
# PT_TLS layout is:
|
|
# Offset from Offset from Name
|
|
# TCB base TCB end
|
|
# 0x00 -0xa0 sg1..sg2
|
|
# 0x20 -0x80 sl1..sl2
|
|
# 0x40 -0x60 sh1..sh2
|
|
# 0x60 -0x40 bg1..bg2
|
|
# 0x80 -0x20 bl1..bl2
|
|
|
|
.*: +file format elf64-s390
|
|
|
|
Disassembly of section .text:
|
|
|
|
0+[0-9a-f]+ <fn2>:
|
|
# function prolog
|
|
+[0-9a-f]+: eb 6e f0 30 00 24 stmg %r6,%r14,48\(%r15\)
|
|
+[0-9a-f]+: a7 d5 00 3e bras %r13,[0-9a-f]+ <fn2\+0x82>
|
|
# sG1@tlsgd
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 00 00 00 60 .long 0x00000060
|
|
# sG2@tlsgd
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 00 00 00 48 .long 0x00000048
|
|
# sg1@tlsgd
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 60 .long 0xffffff60
|
|
# sl1@tlsgd
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 80 .long 0xffffff80
|
|
# sh1@tlsgd
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
|
|
# sl1@tlsldm
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
# sl1@dtpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 80 .long 0xffffff80
|
|
# sl2@dtpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 84 .long 0xffffff84
|
|
# sh1@tlsldm
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
# sh1@dtpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
|
|
# sh2@dtpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff a4 .long 0xffffffa4
|
|
# sG2@gotntpoff
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 00 00 00 48 .long 0x00000048
|
|
# sg1@gotntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 60 .long 0xffffff60
|
|
# sl1@gotntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 80 .long 0xffffff80
|
|
# sh1@gotntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
|
|
# function prolog
|
|
+[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
|
|
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
|
|
+[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
|
|
+[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
|
|
# extract TCB
|
|
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
|
|
+[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
|
|
+[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
|
|
# GD -> IE because variable is not defined in executable
|
|
+[0-9a-f]+: e3 c0 d0 00 00 04 lg %r12,0\(%r13\)
|
|
+[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
|
|
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
|
|
# GD -> IE because variable is not defined in executable where
|
|
# the variable is referenced through IE too
|
|
+[0-9a-f]+: e3 20 d0 08 00 04 lg %r2,8\(%r13\)
|
|
+[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
|
|
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
|
|
# GD -> LE with global variable defined in executable
|
|
+[0-9a-f]+: e3 20 d0 10 00 04 lg %r2,16\(%r13\)
|
|
+[0-9a-f]+: c0 04 00 00 00 00 jgnop [0-9a-f]+ <fn2\+0xca>
|
|
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
|
|
# GD -> LE with local variable defined in executable
|
|
+[0-9a-f]+: e3 20 d0 18 00 04 lg %r2,24\(%r13\)
|
|
+[0-9a-f]+: c0 04 00 00 00 00 jgnop [0-9a-f]+ <fn2\+0xda>
|
|
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
|
|
# GD -> LE with hidden variable defined in executable
|
|
+[0-9a-f]+: e3 20 d0 20 00 04 lg %r2,32\(%r13\)
|
|
+[0-9a-f]+: c0 04 00 00 00 00 jgnop [0-9a-f]+ <fn2\+0xea>
|
|
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
|
|
# LD -> LE
|
|
+[0-9a-f]+: e3 20 d0 28 00 04 lg %r2,40\(%r13\)
|
|
+[0-9a-f]+: c0 04 00 00 00 00 jgnop [0-9a-f]+ <fn2\+0xfa>
|
|
+[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
|
|
+[0-9a-f]+: e3 40 d0 30 00 04 lg %r4,48\(%r13\)
|
|
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
|
|
+[0-9a-f]+: e3 40 d0 38 00 04 lg %r4,56\(%r13\)
|
|
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
|
|
+[0-9a-f]+: e3 20 d0 40 00 04 lg %r2,64\(%r13\)
|
|
+[0-9a-f]+: c0 04 00 00 00 00 jgnop [0-9a-f]+ <fn2\+0x11e>
|
|
+[0-9a-f]+: 41 32 90 00 la %r3,0\(%r2,%r9\)
|
|
+[0-9a-f]+: e3 40 d0 48 00 04 lg %r4,72\(%r13\)
|
|
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
|
|
+[0-9a-f]+: e3 40 d0 50 00 04 lg %r4,80\(%r13\)
|
|
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
|
|
# IE against global var
|
|
+[0-9a-f]+: e3 30 d0 58 00 04 lg %r3,88\(%r13\)
|
|
+[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE -> LE against global var defined in exec
|
|
+[0-9a-f]+: e3 30 d0 60 00 04 lg %r3,96\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE -> LE against local var
|
|
+[0-9a-f]+: e3 30 d0 68 00 04 lg %r3,104\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE -> LE against hidden var
|
|
+[0-9a-f]+: e3 30 d0 70 00 04 lg %r3,112\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE against global var with larl got access
|
|
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <.*>
|
|
+[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE against global var defined in exec with larl got access
|
|
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x38>
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE against local var with larl got access
|
|
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20>
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE against hidden var with larl got access
|
|
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x40>
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE against global var with small got access (no optimization)
|
|
+[0-9a-f]+: e3 30 c0 28 00 04 lg %r3,40\(%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE against global var defined in exec with small got access
|
|
# (no optimization)
|
|
+[0-9a-f]+: e3 30 c0 38 00 04 lg %r3,56\(%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE against local var with small got access (no optimization)
|
|
+[0-9a-f]+: e3 30 c0 20 00 04 lg %r3,32\(%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE against hidden var with small got access (no optimization)
|
|
+[0-9a-f]+: e3 30 c0 40 00 04 lg %r3,64\(%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# function epilog
|
|
+[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
|
|
+[0-9a-f]+: 07 fe br %r14
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
+[0-9a-f]+: 07 07 nopr %r7
|
|
|
|
0+[0-9a-f]+ <_start>:
|
|
# function prolog
|
|
+[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
|
|
+[0-9a-f]+: a7 d5 00 16 bras %r13,[0-9a-f]+ <_start\+0x30>
|
|
# sG6@indntpoff
|
|
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
|
|
+[0-9a-f]+: 01 00 18 18 .long 0x01001818
|
|
# bg6@indntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff d4 .long 0xffffffd4
|
|
# bl6@indntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff f4 .long 0xfffffff4
|
|
# sh6@indntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff b4 .long 0xffffffb4
|
|
# sg3@indntpoff
|
|
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
|
|
+[0-9a-f]+: ff ff ff 68 .long 0xffffff68
|
|
# function prolog
|
|
+[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
|
|
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
|
|
+[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
|
|
# extract TCB
|
|
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
|
|
+[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
|
|
+[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
|
|
# IE against global var
|
|
+[0-9a-f]+: e3 30 d0 00 00 04 lg %r3,0\(%r13\)
|
|
+[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
|
|
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
|
|
# IE -> LE against global var defined in exec
|
|
+[0-9a-f]+: e3 30 d0 08 00 04 lg %r3,8\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE -> LE against local var
|
|
+[0-9a-f]+: e3 30 d0 10 00 04 lg %r3,16\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# IE -> LE against hidden but not local var
|
|
+[0-9a-f]+: e3 30 d0 18 00 04 lg %r3,24\(%r13\)
|
|
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# LE, global var defined in exec
|
|
+[0-9a-f]+: e3 40 d0 20 00 04 lg %r4,32\(%r13\)
|
|
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
|
|
# function epilog
|
|
+[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
|
|
+[0-9a-f]+: 07 fe br %r14
|
|
+[0-9a-f]+: 07 07 nopr %r7
|