diff --git a/gas/ChangeLog b/gas/ChangeLog index 19b4ee9861..fe934ea51e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,14 @@ +2005-02-13 Jan Beulich + + * config/tc-ia64.c (md_parse_option): Handle -xnone and -xdebugn. + (md_show_usage): Add -xnone, -xdebugn, and -xdebugx. Relocate default + indicator. + (ia64_init): Set md.detect_dv. + (ia64_start_line): New static variable warned. Warn only once when + encountering explicit stops in automatic mode. + * doc/c-ia64.texi: Describe -xnone, -xdebugn, and -xdebugx. + * NEWS: Mention new default mode. + 2005-02-13 Jan Beulich * config/tc-ia64.c (dot_rot): Add comment that name strings should diff --git a/gas/NEWS b/gas/NEWS index f9ab510f48..feaee1f732 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -3,6 +3,9 @@ * New command line option -munwind-check=[warning|error] for IA64 targets. +* The IA64 port now uses automatic dependency violation removal as its default + mode. + * Port to MAXQ processor contributed by HCL Tech. * Added support for generating unwind tables for ARM ELF targets. diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index 7dcb67cf90..3da3ddaa9d 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -6830,6 +6830,10 @@ md_parse_option (c, arg) { md.default_explicit_mode = 0; } + else if (strcmp (arg, "none") == 0) + { + md.detect_dv = 0; + } else if (strcmp (arg, "debug") == 0) { md.debug_dv = 1; @@ -6839,6 +6843,11 @@ md_parse_option (c, arg) md.default_explicit_mode = 1; md.debug_dv = 1; } + else if (strcmp (arg, "debugn") == 0) + { + md.debug_dv = 1; + md.detect_dv = 0; + } else { as_bad (_("Unrecognized option '-x%s'"), arg); @@ -6880,9 +6889,14 @@ IA-64 options:\n\ -mle | -mbe select little- or big-endian byte order (default -mle)\n\ -munwind-check=[warning|error]\n\ unwind directive check (default -munwind-check=warning)\n\ - -x | -xexplicit turn on dependency violation checking (default)\n\ - -xauto automagically remove dependency violations\n\ - -xdebug debug dependency violation checker\n"), + -x | -xexplicit turn on dependency violation checking\n\ + -xauto automagically remove dependency violations (default)\n\ + -xnone turn off dependency violation checking\n\ + -xdebug debug dependency violation checker\n\ + -xdebugn debug dependency violation checker but turn off\n\ + dependency violation checking\n\ + -xdebugx debug dependency violation checker and turn on\n\ + dependency violation checking\n"), stream); } @@ -7224,6 +7238,7 @@ ia64_init (argc, argv) char **argv ATTRIBUTE_UNUSED; { md.flags = MD_FLAGS_DEFAULT; + md.detect_dv = 1; /* FIXME: We should change it to unwind_check_error someday. */ md.unwind_check = unwind_check_warning; } @@ -7301,7 +7316,15 @@ ia64_start_line () if (input_line_pointer[0] == ';' && input_line_pointer[-1] == ';') { if (md.detect_dv && !md.explicit_mode) - as_warn (_("Explicit stops are ignored in auto mode")); + { + static int warned; + + if (!warned) + { + warned = 1; + as_warn (_("Explicit stops are ignored in auto mode")); + } + } else insn_group_break (1, 0, 0); } diff --git a/gas/doc/c-ia64.texi b/gas/doc/c-ia64.texi index cfe64696d9..4858cb9e3b 100644 --- a/gas/doc/c-ia64.texi +++ b/gas/doc/c-ia64.texi @@ -75,17 +75,25 @@ assembler issue an error when an unwind directive check fails. @item -x @item -xexplicit -These options turn on dependency violation checking. This checking is turned on by -default. +These options turn on dependency violation checking. @item -xauto This option instructs the assembler to automatically insert stop bits where necessary -to remove dependency violations. +to remove dependency violations. This is the default mode. + +@item -xnone +This option turns off dependency violation checking. @item -xdebug This turns on debug output intended to help tracking down bugs in the dependency violation checker. +@item -xdebugn +This is a shortcut for -xnone -xdebug. + +@item -xdebugx +This is a shortcut for -xexplicit -xdebug. + @end table @cindex IA-64 Syntax diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 823d36e057..07662e9ff1 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,20 @@ +2005-02-13 Jan Beulich + + * gas/ia64/label.l: Adjust line numbers. + * gas/ia64/label.s: Add .explicit. + * gas/ia64/nop_x.s: Likewise. + * gas/ia64/opc-a.d: Add assembler option -xnone. + * gas/ia64/opc-b.d: Likewise. + * gas/ia64/opc-f.d: Likewise. + * gas/ia64/opc-i.d: Likewise. + * gas/ia64/opc-m.d: Likewise. + * gas/ia64/opc-x.d: Likewise. + * gas/ia64/pseudo.d: Likewise. + * gas/ia64/regs.d: Likewise. + * gas/ia64/tls.d: Likewise. + * gas/ia64/unwind-err.l: Adjust line numbers. + * gas/ia64/unwind-err.s: Remove explicit stops. + 2005-02-13 Jan Beulich * gas/ia64/pound.[ls]: New. diff --git a/gas/testsuite/gas/ia64/label.l b/gas/testsuite/gas/ia64/label.l index 288fce580b..89eba5926e 100644 --- a/gas/testsuite/gas/ia64/label.l +++ b/gas/testsuite/gas/ia64/label.l @@ -1,3 +1,3 @@ .*: Assembler messages: -.*:11: Error: Label must be first in a bundle -.*:18: Error: Label must be first in a bundle +.*:12: Error: Label must be first in a bundle +.*:19: Error: Label must be first in a bundle diff --git a/gas/testsuite/gas/ia64/label.s b/gas/testsuite/gas/ia64/label.s index 6eff4c9aad..dbe5c38ec9 100644 --- a/gas/testsuite/gas/ia64/label.s +++ b/gas/testsuite/gas/ia64/label.s @@ -1,3 +1,4 @@ +.explicit start: {.mii label0: diff --git a/gas/testsuite/gas/ia64/nop_x.s b/gas/testsuite/gas/ia64/nop_x.s index 33c7e0c536..61265b39fd 100644 --- a/gas/testsuite/gas/ia64/nop_x.s +++ b/gas/testsuite/gas/ia64/nop_x.s @@ -1,3 +1,4 @@ +.explicit _start: {.mlx nop 0 diff --git a/gas/testsuite/gas/ia64/opc-a.d b/gas/testsuite/gas/ia64/opc-a.d index 44d7daf532..ed599bd266 100644 --- a/gas/testsuite/gas/ia64/opc-a.d +++ b/gas/testsuite/gas/ia64/opc-a.d @@ -1,3 +1,4 @@ +# as: -xnone # objdump: -d # name: ia64 opc-a diff --git a/gas/testsuite/gas/ia64/opc-b.d b/gas/testsuite/gas/ia64/opc-b.d index 9dd9874115..64a492839c 100644 --- a/gas/testsuite/gas/ia64/opc-b.d +++ b/gas/testsuite/gas/ia64/opc-b.d @@ -1,3 +1,4 @@ +#as: -xnone #objdump: -d #name: ia64 opc-b diff --git a/gas/testsuite/gas/ia64/opc-f.d b/gas/testsuite/gas/ia64/opc-f.d index 4b39b9bf1f..fa531169aa 100644 --- a/gas/testsuite/gas/ia64/opc-f.d +++ b/gas/testsuite/gas/ia64/opc-f.d @@ -1,3 +1,4 @@ +# as: -xnone # objdump: -d --disassemble-zeroes # name: ia64 opc-f diff --git a/gas/testsuite/gas/ia64/opc-i.d b/gas/testsuite/gas/ia64/opc-i.d index 3b99593072..5c2bf0c399 100644 --- a/gas/testsuite/gas/ia64/opc-i.d +++ b/gas/testsuite/gas/ia64/opc-i.d @@ -1,3 +1,4 @@ +# as: -xnone # objdump: -d # name: ia64 opc-i diff --git a/gas/testsuite/gas/ia64/opc-m.d b/gas/testsuite/gas/ia64/opc-m.d index ea5ddac0a6..dcd0195986 100644 --- a/gas/testsuite/gas/ia64/opc-m.d +++ b/gas/testsuite/gas/ia64/opc-m.d @@ -1,3 +1,4 @@ +# as: -xnone # objdump: -d # name: ia64 opc-m diff --git a/gas/testsuite/gas/ia64/opc-x.d b/gas/testsuite/gas/ia64/opc-x.d index 77010e8d5e..dc64558780 100644 --- a/gas/testsuite/gas/ia64/opc-x.d +++ b/gas/testsuite/gas/ia64/opc-x.d @@ -1,3 +1,4 @@ +#as: -xnone #objdump: -d #name: ia64 opc-x diff --git a/gas/testsuite/gas/ia64/pseudo.d b/gas/testsuite/gas/ia64/pseudo.d index c636e5010c..67a1103557 100644 --- a/gas/testsuite/gas/ia64/pseudo.d +++ b/gas/testsuite/gas/ia64/pseudo.d @@ -1,3 +1,4 @@ +# as: -xnone # objdump: -d # name: ia64 pseudo-ops diff --git a/gas/testsuite/gas/ia64/regs.d b/gas/testsuite/gas/ia64/regs.d index 8ff41a449e..e51c50008c 100644 --- a/gas/testsuite/gas/ia64/regs.d +++ b/gas/testsuite/gas/ia64/regs.d @@ -1,3 +1,4 @@ +#as: -xnone #objdump: -d #name: ia64 regs diff --git a/gas/testsuite/gas/ia64/tls.d b/gas/testsuite/gas/ia64/tls.d index 57e07678e7..f067e05e63 100644 --- a/gas/testsuite/gas/ia64/tls.d +++ b/gas/testsuite/gas/ia64/tls.d @@ -1,3 +1,4 @@ +#as: -xnone #objdump: -dr #name: ia64 tls diff --git a/gas/testsuite/gas/ia64/unwind-err.l b/gas/testsuite/gas/ia64/unwind-err.l index 7641df7742..153451f38b 100644 --- a/gas/testsuite/gas/ia64/unwind-err.l +++ b/gas/testsuite/gas/ia64/unwind-err.l @@ -29,6 +29,6 @@ .*:36: Error: .save.b outside of prologue .*:37: Error: .altrp outside of prologue .*:42: Error: .prologue within prologue -.*:52: Error: .body outside of procedure -.*:59: Warning: Initial .prologue.* -.*:66: Warning: Initial .body.* +.*:50: Error: .body outside of procedure +.*:57: Warning: Initial .prologue.* +.*:64: Warning: Initial .body.* diff --git a/gas/testsuite/gas/ia64/unwind-err.s b/gas/testsuite/gas/ia64/unwind-err.s index 49cb6c92f7..f50cc3d13d 100644 --- a/gas/testsuite/gas/ia64/unwind-err.s +++ b/gas/testsuite/gas/ia64/unwind-err.s @@ -42,11 +42,9 @@ start: .prologue .save ar.lc, r31 mov r31 = ar.lc - ;; .body .body br.ret.sptk rp - ;; .personality personality .handlerdata .body diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 336b4e5b0c..b0ab8c499b 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2005-02-13 Jan Beulich + + * ld-elfvers/vers.exp (as_options): New. Set to -x for ia64. + (build_binary): Pass as_options to ld_assemble. + (test_ldfail): Likewise. + (build_exec): Likewise. + Pass as_options to run_ld_link_tests. + * ld-ia64/tlsbin.s: Add .explicit. + * ld-ia64/tlsbinpic.s: Likewise. + * ld-ia64/tlspic1.s: Likewise. + 2005-02-13 Eric Botcazou * ld-sparc/tlssunnopic32.rd: Adjust for .dynsym changes. diff --git a/ld/testsuite/ld-elfvers/vers.exp b/ld/testsuite/ld-elfvers/vers.exp index 9662a6b2b9..d2562b70ac 100644 --- a/ld/testsuite/ld-elfvers/vers.exp +++ b/ld/testsuite/ld-elfvers/vers.exp @@ -91,6 +91,11 @@ if [istarget mips*-*-*] { } } +case $target_triplet in { + { ia64-*-* } { set as_options "-x" } + default { set as_options "" } +} + proc test_ar { test lib object expect } { global ar global nm @@ -506,6 +511,7 @@ proc build_binary { shared pic test source libname other mapfile verexp versymex global host_triplet global tmpdir global as + global as_options global objdump global CC global CFLAGS @@ -516,7 +522,7 @@ proc build_binary { shared pic test source libname other mapfile verexp versymex return } - if ![ld_assemble $as $tmpdir/$libname.s $tmpdir/$libname.o ] { + if ![ld_assemble $as "$as_options $tmpdir/$libname.s" $tmpdir/$libname.o ] { unresolved "$test" return } @@ -593,6 +599,7 @@ proc test_ldfail { test flag source execname other mapfile whyfail } { global host_triplet global tmpdir global as + global as_options global objdump global CC global CFLAGS @@ -609,7 +616,7 @@ proc test_ldfail { test flag source execname other mapfile whyfail } { return } - if ![ld_assemble $as $tmpdir/$execname.s $tmpdir/$execname.o ] { + if ![ld_assemble $as "$as_options $tmpdir/$execname.s" $tmpdir/$execname.o ] { unresolved "$test" return } @@ -697,6 +704,7 @@ proc build_exec { test source execname flags solibname verexp versymexp symexp } global host_triplet global tmpdir global as + global as_options global objdump global CC global CFLAGS @@ -708,7 +716,7 @@ proc build_exec { test source execname flags solibname verexp versymexp symexp } return } - if ![ld_assemble $as $tmpdir/$execname.s $tmpdir/$execname.o ] { + if ![ld_assemble $as "$as_options $tmpdir/$execname.s" $tmpdir/$execname.o ] { unresolved "$test" return } @@ -910,15 +918,15 @@ if [istarget sparc*-*-*] { } run_ld_link_tests [list "\"vers24a\" \"-shared --version-script $srcdir/$subdir/vers24.map\" - \"$as_pic_flags\" {vers24a.c vers24b.c} { { readelf -Wrs vers24.rd } } + \"$as_pic_flags $as_options\" {vers24a.c vers24b.c} { { readelf -Wrs vers24.rd } } \"libvers24a.so\" \"-fpic\""] run_ld_link_tests [list "\"vers24b\" \"-shared --version-script $srcdir/$subdir/vers24.map\" - \"$as_pic_flags\" {vers24b.c vers24a.c} { { readelf -Wrs vers24.rd } } + \"$as_pic_flags $as_options\" {vers24b.c vers24a.c} { { readelf -Wrs vers24.rd } } \"libvers24b.so\" \"-fpic\""] run_ld_link_tests [list "\"vers24c\" \"-shared --version-script $srcdir/$subdir/vers24.map\" - \"$as_pic_flags\" {vers24c.c} { { readelf -Wrs vers24.rd } } + \"$as_pic_flags $as_options\" {vers24c.c} { { readelf -Wrs vers24.rd } } \"libvers24c.so\" \"-fpic\""] # Test versioned definition vs. normal definition in different files. diff --git a/ld/testsuite/ld-ia64/tlsbin.s b/ld/testsuite/ld-ia64/tlsbin.s index f27318c560..7b5f34aca2 100644 --- a/ld/testsuite/ld-ia64/tlsbin.s +++ b/ld/testsuite/ld-ia64/tlsbin.s @@ -16,6 +16,7 @@ bl5: .space 4 bl6: .space 4 bl7: .space 4 bl8: .space 4 + .explicit .pred.safe_across_calls p1-p5,p16-p63 .text .globl _start# diff --git a/ld/testsuite/ld-ia64/tlsbinpic.s b/ld/testsuite/ld-ia64/tlsbinpic.s index 88a054355e..f0613434cb 100644 --- a/ld/testsuite/ld-ia64/tlsbinpic.s +++ b/ld/testsuite/ld-ia64/tlsbinpic.s @@ -31,9 +31,10 @@ sh5: .long 261 sh6: .long 262 sh7: .long 263 sh8: .long 264 + .explicit + .pred.safe_across_calls p1-p5,p16-p63 /* Force .text aligned to 4K, so it very likely gets at 0x4000000000001000. */ - .pred.safe_across_calls p1-p5,p16-p63 .text .balign 4096 .globl fn2# diff --git a/ld/testsuite/ld-ia64/tlspic1.s b/ld/testsuite/ld-ia64/tlspic1.s index 84656076ca..5242d28b46 100644 --- a/ld/testsuite/ld-ia64/tlspic1.s +++ b/ld/testsuite/ld-ia64/tlspic1.s @@ -30,8 +30,9 @@ sh5: .long 261 sh6: .long 262 sh7: .long 263 sh8: .long 264 - /* Force .text aligned to 4K, so it very likely gets at 0x1000. */ + .explicit .pred.safe_across_calls p1-p5,p16-p63 + /* Force .text aligned to 4K, so it very likely gets at 0x1000. */ .text .balign 4096 .globl fn1#