--no-pushj-stubs option.
* gas/mmix/reloclab-r.d, gas/mmix/reloclab.d: Add --no-stubs
option.
* gas/mmix/reloclab.l: Adjust for PUSHJ stub.
* gas/mmix/pushj-cs.d, gas/mmix/reloclab-s.d, gas/mmix/relax2.s,
gas/mmix/relax2.d, gas/mmix/op-0-1s.d, gas/mmix/reloclab-rs.d,
gas/mmix/weak1-s.d: New tests.
+2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * gas/mmix/op-0-1.d, gas/mmix/pushj-c.d, gas/mmix/weak1.d: Add
+ --no-pushj-stubs option.
+ * gas/mmix/reloclab-r.d, gas/mmix/reloclab.d: Add --no-stubs
+ option.
+ * gas/mmix/reloclab.l: Adjust for PUSHJ stub.
+ * gas/mmix/pushj-cs.d, gas/mmix/reloclab-s.d, gas/mmix/relax2.s,
+ gas/mmix/relax2.d, gas/mmix/op-0-1s.d, gas/mmix/reloclab-rs.d,
+ gas/mmix/weak1-s.d: New tests.
+
2003-10-17 Ian Lance Taylor <ian@wasabisystems.com>
* gas/arm/iwmmxt-bad.s: New file.
#objdump: -srt
-#as: -x
+#as: -x --no-stubs
.*: file format elf64-mmix
--- /dev/null
+#objdump: -srt
+#source: op-0-1.s
+#as: -x
+
+.*: file format elf64-mmix
+SYMBOL TABLE:
+0+ l d \.text 0+
+0+ l d \.data 0+
+0+ l d \.bss 0+
+0+ l \*ABS\* 0+ zero0
+0+ l \*ABS\* 0+ zero1
+0+ l \*ABS\* 0+ zero2
+0+ g F \.text 0+ Main
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET TYPE VALUE
+0+ R_MMIX_JMP \*ABS\*
+0+14 R_MMIX_GETA \*ABS\*
+0+24 R_MMIX_PUSHJ_STUBBABLE \*ABS\*
+Contents of section \.text:
+ 0000 f0000000 fd000000 fd000000 fd000000 .*
+ 0010 fd000000 f4070000 fd000000 fd000000 .*
+ 0020 fd000000 f2080000 .*
-#as: -x
+#as: -x --no-pushj-stubs
#objdump: -tdr
.*: file format elf64-mmix
--- /dev/null
+#as: -x
+#source: pushj-c.s
+#objdump: -tdr
+
+.*: file format elf64-mmix
+SYMBOL TABLE:
+0+ l d .text 0+
+0+ l d .data 0+
+0+ l d .bss 0+
+ffff0000ffff0000 l \*ABS\* 0+ i1
+ffff0000ffff0000 l \*ABS\* 0+ i2
+0+ g F .text 0+ Main
+Disassembly of section \.text:
+0+ <Main>:
+ 0: f2010000 pushj \$1,0 <Main>
+ 0: R_MMIX_PUSHJ_STUBBABLE \*ABS\*\+0xffff0000ffff0000
+ 4: f2020000 pushj \$2,4 <Main\+0x4>
+ 4: R_MMIX_PUSHJ_STUBBABLE i2
--- /dev/null
+#objdump: -r
+#as: -x
+
+.*: file format elf64-mmix
+R.* \[\.text\.a0\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a0
+0+40018 R_MMIX_PUSHJ \.text\.a0\+0x0+4
+R.* \[\.text\.b0\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b0
+0+40018 R_MMIX_PUSHJ \.text\.b0\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b0\+0x0+8
+R.* \[\.text\.c0\]:
+O.*
+0+ R_MMIX_PUSHJ ca0
+0+14 R_MMIX_PUSHJ cb0
+R.* \[\.text\.d0\]:
+O.*
+0+ R_MMIX_PUSHJ da0
+0+14 R_MMIX_PUSHJ db0
+0+28 R_MMIX_PUSHJ dc0
+R.* \[\.text\.a1\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a1
+0+40018 R_MMIX_PUSHJ_STUBBABLE \.text\.a1\+0x0+4
+R.* \[\.text\.b1\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b1
+0+40018 R_MMIX_PUSHJ \.text\.b1\+0x0+4
+0+4002c R_MMIX_PUSHJ_STUBBABLE \.text\.b1\+0x0+8
+R.* \[\.text\.c1\]:
+O.*
+0+ R_MMIX_PUSHJ ca1
+0+14 R_MMIX_PUSHJ_STUBBABLE cb1
+R.* \[\.text\.d1\]:
+O.*
+0+ R_MMIX_PUSHJ da1
+0+14 R_MMIX_PUSHJ db1
+0+28 R_MMIX_PUSHJ_STUBBABLE dc1
+
+# The following shows a limitation of the PUSHJ relaxation code when
+# PUSHJ:s are close, and about 256k away from the section limit: On the
+# first relaxation iteration, the first (or second) PUSHJ looks like it
+# could reach a stub. However, the last PUSHJ is expanded and on the
+# second iteration, the stubbed PUSHJ has to be expanded too because it
+# can't reach the stubs anymore. This continues for the next iterations,
+# because the max stub size is five tetrabytes (4-bytes). At the expense
+# of much more complex relaxation code (including the relaxation machinery
+# in write.c), this is fixable. Anyway, as long as PUSHJ:s aren't closer
+# than five instructions, the existing code does suffice; we're just here
+# to check that the border case *works* and doesn't generate invalid code.
+
+R.* \[\.text\.a2\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a2
+0+40018 R_MMIX_PUSHJ \.text\.a2\+0x0+4
+R.* \[\.text\.b2\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b2
+0+40018 R_MMIX_PUSHJ \.text\.b2\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b2\+0x0+8
+R.* \[\.text\.c2\]:
+O.*
+0+ R_MMIX_PUSHJ ca2
+0+14 R_MMIX_PUSHJ cb2
+R.* \[\.text\.d2\]:
+O.*
+0+ R_MMIX_PUSHJ da2
+0+14 R_MMIX_PUSHJ db2
+0+28 R_MMIX_PUSHJ dc2
+R.* \[\.text\.a3\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a3
+0+40018 R_MMIX_PUSHJ \.text\.a3\+0x0+4
+R.* \[\.text\.b3\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b3
+0+40018 R_MMIX_PUSHJ \.text\.b3\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b3\+0x0+8
+R.* \[\.text\.c3\]:
+O.*
+0+ R_MMIX_PUSHJ ca3
+0+14 R_MMIX_PUSHJ cb3
+R.* \[\.text\.d3\]:
+O.*
+0+ R_MMIX_PUSHJ da3
+0+14 R_MMIX_PUSHJ db3
+0+28 R_MMIX_PUSHJ dc3
+R.* \[\.text\.a4\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a4
+0+40018 R_MMIX_PUSHJ \.text\.a4\+0x0+4
+R.* \[\.text\.b4\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b4
+0+40018 R_MMIX_PUSHJ \.text\.b4\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b4\+0x0+8
+R.* \[\.text\.c4\]:
+O.*
+0+ R_MMIX_PUSHJ ca4
+0+14 R_MMIX_PUSHJ cb4
+R.* \[\.text\.d4\]:
+O.*
+0+ R_MMIX_PUSHJ da4
+0+14 R_MMIX_PUSHJ db4
+0+28 R_MMIX_PUSHJ dc4
+R.* \[\.text\.a5\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.a5
+0+40018 R_MMIX_PUSHJ \.text\.a5\+0x0+4
+R.* \[\.text\.b5\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b5
+0+40018 R_MMIX_PUSHJ \.text\.b5\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b5\+0x0+8
+R.* \[\.text\.c5\]:
+O.*
+0+ R_MMIX_PUSHJ ca5
+0+14 R_MMIX_PUSHJ cb5
+R.* \[\.text\.d5\]:
+O.*
+0+ R_MMIX_PUSHJ da5
+0+14 R_MMIX_PUSHJ db5
+0+28 R_MMIX_PUSHJ dc5
+R.* \[\.text\.a6\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a6
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a6\+0x0+4
+R.* \[\.text\.b6\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b6
+0+40018 R_MMIX_PUSHJ \.text\.b6\+0x0+4
+0+4002c R_MMIX_PUSHJ_STUBBABLE \.text\.b6\+0x0+8
+R.* \[\.text\.c6\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca6
+0+4 R_MMIX_PUSHJ_STUBBABLE cb6
+R.* \[\.text\.d6\]:
+O.*
+0+ R_MMIX_PUSHJ da6
+0+14 R_MMIX_PUSHJ db6
+0+28 R_MMIX_PUSHJ_STUBBABLE dc6
+R.* \[\.text\.a7\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a7
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a7\+0x0+4
+R.* \[\.text\.b7\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b7
+0+40018 R_MMIX_PUSHJ \.text\.b7\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b7\+0x0+8
+R.* \[\.text\.c7\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca7
+0+4 R_MMIX_PUSHJ_STUBBABLE cb7
+R.* \[\.text\.d7\]:
+O.*
+0+ R_MMIX_PUSHJ da7
+0+14 R_MMIX_PUSHJ db7
+0+28 R_MMIX_PUSHJ dc7
+R.* \[\.text\.a8\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a8
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a8\+0x0+4
+R.* \[\.text\.b8\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b8
+0+40018 R_MMIX_PUSHJ \.text\.b8\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b8\+0x0+8
+R.* \[\.text\.c8\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca8
+0+4 R_MMIX_PUSHJ_STUBBABLE cb8
+R.* \[\.text\.d8\]:
+O.*
+0+ R_MMIX_PUSHJ da8
+0+14 R_MMIX_PUSHJ db8
+0+28 R_MMIX_PUSHJ dc8
+R.* \[\.text\.a9\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a9
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a9\+0x0+4
+R.* \[\.text\.b9\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b9
+0+40018 R_MMIX_PUSHJ \.text\.b9\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b9\+0x0+8
+R.* \[\.text\.c9\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca9
+0+4 R_MMIX_PUSHJ_STUBBABLE cb9
+R.* \[\.text\.d9\]:
+O.*
+0+ R_MMIX_PUSHJ da9
+0+14 R_MMIX_PUSHJ db9
+0+28 R_MMIX_PUSHJ dc9
+R.* \[\.text\.a10\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a10
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a10\+0x0+4
+R.* \[\.text\.b10\]:
+O.*
+0+40004 R_MMIX_PUSHJ \.text\.b10
+0+40018 R_MMIX_PUSHJ \.text\.b10\+0x0+4
+0+4002c R_MMIX_PUSHJ \.text\.b10\+0x0+8
+R.* \[\.text\.c10\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca10
+0+4 R_MMIX_PUSHJ_STUBBABLE cb10
+R.* \[\.text\.d10\]:
+O.*
+0+ R_MMIX_PUSHJ da10
+0+14 R_MMIX_PUSHJ db10
+0+28 R_MMIX_PUSHJ dc10
+R.* \[\.text\.a11\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a11
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a11\+0x0+4
+R.* \[\.text\.b11\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.b11
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.b11\+0x0+4
+0+4000c R_MMIX_PUSHJ_STUBBABLE \.text\.b11\+0x0+8
+R.* \[\.text\.c11\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca11
+0+4 R_MMIX_PUSHJ_STUBBABLE cb11
+R.* \[\.text\.d11\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE da11
+0+4 R_MMIX_PUSHJ_STUBBABLE db11
+0+8 R_MMIX_PUSHJ_STUBBABLE dc11
+R.* \[\.text\.a12\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.a12
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.a12\+0x0+4
+R.* \[\.text\.b12\]:
+O.*
+0+40004 R_MMIX_PUSHJ_STUBBABLE \.text\.b12
+0+40008 R_MMIX_PUSHJ_STUBBABLE \.text\.b12\+0x0+4
+0+4000c R_MMIX_PUSHJ_STUBBABLE \.text\.b12\+0x0+8
+R.* \[\.text\.c12\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE ca12
+0+4 R_MMIX_PUSHJ_STUBBABLE cb12
+R.* \[\.text\.d12\]:
+O.*
+0+ R_MMIX_PUSHJ_STUBBABLE da12
+0+4 R_MMIX_PUSHJ_STUBBABLE db12
+0+8 R_MMIX_PUSHJ_STUBBABLE dc12
--- /dev/null
+# PUSHJ stub border-cases: two with either or both stubs unreachable,
+# local symbols, ditto non-local labels, similar with three PUSHJs.
+
+Main SWYM
+
+ .irp x,0,1,2,3,4,5,6,7,8,9,10,11,12
+
+ .section .text.a\x,"ax"
+aa\x: .space 4,0
+a\x: .space 65536*4,0
+ PUSHJ $33,aa\x
+ PUSHJ $22,a\x
+ .space 65535*4-4*\x
+
+ .section .text.b\x,"ax"
+bbb\x: .space 4,0
+bb\x: .space 4,0
+b\x: .space 65535*4
+ PUSHJ $12,bbb\x
+ PUSHJ $13,bb\x
+ PUSHJ $14,b\x
+ .space 65535*4-4*\x
+
+ .section .text.c\x,"ax"
+c\x: PUSHJ $100,ca\x
+ PUSHJ $101,cb\x
+ .space 65535*4-4*\x
+
+ .section .text.d\x,"ax"
+d\x: PUSHJ $99,da\x
+ PUSHJ $98,db\x
+ PUSHJ $97,dc\x
+ .space 65535*4-4*\x
+
+ .endr
#objdump: -dr
-#as: -linkrelax -x
+#as: -linkrelax -x --no-stubs
#source: reloclab.s
.*: file format elf64-mmix
--- /dev/null
+#objdump: -dr
+#as: -linkrelax -x
+#source: reloclab.s
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0000000000000000 <Main>:
+ 0: f0000000 jmp 0 <Main>
+ 0: R_MMIX_JMP foo\+0x8
+ 4: fd000000 swym 0,0,0
+ 8: fd000000 swym 0,0,0
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: f0000004 jmp 24 <here>
+ 14: R_MMIX_ADDR27 \.text\+0x24
+ 18: f4080003 geta \$8,24 <here>
+ 18: R_MMIX_ADDR19 \.text\+0x24
+ 1c: 46630002 bod \$99,24 <here>
+ 1c: R_MMIX_ADDR19 \.text\+0x24
+ 20: fd000000 swym 0,0,0
+0000000000000024 <here>:
+ 24: 42de0000 bz \$222,24 <here>
+ 24: R_MMIX_CBRANCH bar\+0x10
+ 28: fd000000 swym 0,0,0
+ 2c: fd000000 swym 0,0,0
+ 30: fd000000 swym 0,0,0
+ 34: fd000000 swym 0,0,0
+ 38: fd000000 swym 0,0,0
+000000000000003c <there>:
+ 3c: f4040000 geta \$4,3c <there>
+ 3c: R_MMIX_GETA baz
+ 40: fd000000 swym 0,0,0
+ 44: fd000000 swym 0,0,0
+ 48: fd000000 swym 0,0,0
+ 4c: f2070000 pushj \$7,4c <there\+0x10>
+ 4c: R_MMIX_PUSHJ_STUBBABLE foobar
+ 50: f1fffffb jmp 3c <there>
+ 50: R_MMIX_ADDR27 \.text\+0x3c
+ 54: f558fffa geta \$88,3c <there>
+ 54: R_MMIX_ADDR19 \.text\+0x3c
+ 58: 476ffff9 bod \$111,3c <there>
+ 58: R_MMIX_ADDR19 \.text\+0x3c
--- /dev/null
+#objdump: -dr
+#source: reloclab.s
+#as: -x
+
+.*: file format elf64-mmix
+Disassembly of section \.text:
+0000000000000000 <Main>:
+ 0: f0000000 jmp 0 <Main>
+ 0: R_MMIX_JMP foo\+0x8
+ 4: fd000000 swym 0,0,0
+ 8: fd000000 swym 0,0,0
+ c: fd000000 swym 0,0,0
+ 10: fd000000 swym 0,0,0
+ 14: f0000004 jmp 24 <here>
+ 18: f4080003 geta \$8,24 <here>
+ 1c: 46630002 bod \$99,24 <here>
+ 20: fd000000 swym 0,0,0
+0000000000000024 <here>:
+ 24: 42de0000 bz \$222,24 <here>
+ 24: R_MMIX_CBRANCH bar\+0x10
+ 28: fd000000 swym 0,0,0
+ 2c: fd000000 swym 0,0,0
+ 30: fd000000 swym 0,0,0
+ 34: fd000000 swym 0,0,0
+ 38: fd000000 swym 0,0,0
+000000000000003c <there>:
+ 3c: f4040000 geta \$4,3c <there>
+ 3c: R_MMIX_GETA baz
+ 40: fd000000 swym 0,0,0
+ 44: fd000000 swym 0,0,0
+ 48: fd000000 swym 0,0,0
+ 4c: f2070000 pushj \$7,4c <there\+0x10>
+ 4c: R_MMIX_PUSHJ_STUBBABLE foobar
+ 50: f1fffffb jmp 3c <there>
+ 54: f558fffa geta \$88,3c <there>
+ 58: 476ffff9 bod \$111,3c <there>
#objdump: -dr
-#as: -x
+#as: -x --no-stubs
.*: file format elf64-mmix
10 FD000000
10 FD000000
11 004c F2070000 PUSHJ \$7,foobar
- 11 FD000000
- 11 FD000000
- 11 FD000000
- 11 FD000000
- 12 0060 F1FFFFF7 JMP there
- 13 0064 F558FFF6 GETA \$88,there
- 14 0068 476FFFF5 BOD \$111,there
+ 12 0050 F1FFFFFB JMP there
+ 13 0054 F558FFFA GETA \$88,there
+ 14 0058 476FFFF9 BOD \$111,there
\fGAS for MMIX .*/reloclab\.s page 2
--- /dev/null
+#as: -x
+#source: weak1.s
+#objdump: -str
+
+# Like weak1, but with PUSHJ stubs.
+
+.*: file format elf64-mmix
+SYMBOL TABLE:
+0+ l d \.text 0+
+0+ l d \.data 0+
+0+ l d \.bss 0+
+0+ w \.text 0+ foo
+0+4 g \.text 0+ main
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET TYPE VALUE
+0+8 R_MMIX_64 foo
+0+4 R_MMIX_PUSHJ_STUBBABLE foo
+Contents of section \.text:
+ 0000 f8010000 f20f0000 00000000 00000000 .*
-#as: -x
+#as: -x --no-pushj-stubs
#objdump: -str
# Relaxation thought a weak symbol was within reach.