From 52b010e4424ced5700579389375a536b614f8b19 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 13 Jan 2010 14:08:54 +0000 Subject: [PATCH] * config/tc-h8300.c (h8300_elf_section): New function - issue a warning message if a new section is created without setting any attributes for it. (md_pseudo_table): Intercept section creation pseudos. (md_pcrel_from): Replace abort with an error message. * config/obj-elf.c (obj_elf_section_name): Export this function. * config/obj-elf.h (obj_elf_section_name): Prototype. * gas/elf/section0.d: Skip this test for the h8300. * gas/elf/section1.d: Likewise. * gas/elf/section6.d: Likewise. * gas/elf/elf.exp: Skip section2 and section5 tests when the target is the h8300. * ld-scrips/sort.exp: Skip these tests when the target is the h8300. --- gas/ChangeLog | 10 +++++++ gas/config/obj-elf.c | 2 +- gas/config/obj-elf.h | 1 + gas/config/tc-h8300.c | 56 ++++++++++++++++++++++++++++++++++++++-- gas/testsuite/ChangeLog | 8 ++++++ gas/testsuite/gas/elf/elf.exp | 12 +++++++-- gas/testsuite/gas/elf/section0.d | 3 +++ gas/testsuite/gas/elf/section1.d | 3 +++ gas/testsuite/gas/elf/section6.d | 3 +++ ld/testsuite/ChangeLog | 5 ++++ ld/testsuite/ld-scripts/sort.exp | 6 +++++ 11 files changed, 104 insertions(+), 5 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index e93a30c..f899ae9 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2010-01-13 Nick Clifton + + * config/tc-h8300.c (h8300_elf_section): New function - issue a + warning message if a new section is created without setting any + attributes for it. + (md_pseudo_table): Intercept section creation pseudos. + (md_pcrel_from): Replace abort with an error message. + * config/obj-elf.c (obj_elf_section_name): Export this function. + * config/obj-elf.h (obj_elf_section_name): Prototype. + 2010-01-12 Alan Modra PR 11122 diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 0948702..4bd4514 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -855,7 +855,7 @@ obj_elf_section_word (char *str, size_t len, int *type) } /* Get name of section. */ -static char * +char * obj_elf_section_name (void) { char *name; diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h index dc8284f..c734aab 100644 --- a/gas/config/obj-elf.h +++ b/gas/config/obj-elf.h @@ -164,6 +164,7 @@ extern void elf_file_symbol (const char *, int); extern void obj_elf_section_change_hook (void); extern void obj_elf_section (int); +extern char * obj_elf_section_name (void); extern void obj_elf_previous (int); extern void obj_elf_version (int); extern void obj_elf_common (int); diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 92c0d57..62af180 100644 --- a/gas/config/tc-h8300.c +++ b/gas/config/tc-h8300.c @@ -139,6 +139,48 @@ pint (int arg ATTRIBUTE_UNUSED) cons (Hmode ? 4 : 2); } +/* Like obj_elf_section, but issues a warning for new + sections which do not have an attribute specification. */ + +static void +h8300_elf_section (int push) +{ + static const char * known_data_sections [] = { ".rodata", ".tdata", ".tbss" }; + static const char * known_data_prefixes [] = { ".debug", ".gnu.warning" }; + char * saved_ilp = input_line_pointer; + char * name; + + name = obj_elf_section_name (); + if (name == NULL) + return; + + if (* input_line_pointer != ',' + && bfd_get_section_by_name (stdoutput, name) == NULL) + { + signed int i; + + /* Ignore this warning for well known data sections. */ + for (i = ARRAY_SIZE (known_data_sections); i--;) + if (strcmp (name, known_data_sections[i]) == 0) + break; + + if (i < 0) + for (i = ARRAY_SIZE (known_data_prefixes); i--;) + if (strncmp (name, known_data_prefixes[i], + strlen (known_data_prefixes[i])) == 0) + break; + + if (i < 0) + as_warn (_("new section '%s' defined without attributes - this might cause problems"), name); + } + + /* FIXME: We ought to free the memory allocated by obj_elf_section_name() + for 'name', but we do not know if it was taken from the obstack, via + demand_copy_C_string(), or xmalloc()ed. */ + input_line_pointer = saved_ilp; + obj_elf_section (push); +} + /* This table describes all the machine specific pseudo-ops the assembler has to support. The fields are: pseudo-op name without dot @@ -165,6 +207,14 @@ const pseudo_typeS md_pseudo_table[] = {"import", s_ignore, 0}, {"page", listing_eject, 0}, {"program", s_ignore, 0}, + +#ifdef OBJ_ELF + {"section", h8300_elf_section, 0}, + {"section.s", h8300_elf_section, 0}, + {"sect", h8300_elf_section, 0}, + {"sect.s", h8300_elf_section, 0}, +#endif + {0, 0, 0} }; @@ -2139,9 +2189,11 @@ md_number_to_chars (char *ptr, valueT use, int nbytes) } long -md_pcrel_from (fixS *fixP ATTRIBUTE_UNUSED) +md_pcrel_from (fixS *fixp) { - abort (); + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Unexpected reference to a symbol in a non-code section")); + return 0; } arelent * diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index ad7eb57..2fafd11 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2010-01-13 Nick Clifton + + * gas/elf/section0.d: Skip this test for the h8300. + * gas/elf/section1.d: Likewise. + * gas/elf/section6.d: Likewise. + * gas/elf/elf.exp: Skip section2 and section5 tests when the + target is the h8300. + 2010-01-06 Quentin Neill * gas/i386/i386.exp: Add new amdfam15 test cases. diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index e65d2cf..05b5a4b 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -126,10 +126,18 @@ if { ([istarget "*-*-*elf*"] } run_dump_test "section0" run_dump_test "section1" - run_elf_list_test "section2" "$target_machine" "-al" "-s" "" + if {! [istarget "h8300-*-*"]} then { + # The h8300 port issues a warning message for + # new sections created without atrributes. + run_elf_list_test "section2" "$target_machine" "-al" "-s" "" + } run_dump_test "section3" run_dump_test "section4" - run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\"" + if {! [istarget "h8300-*-*"]} then { + # The h8300 port issues a warning message for + # new sections created without atrributes. + run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\"" + } run_dump_test "struct" run_dump_test "symtab" run_dump_test "symver" diff --git a/gas/testsuite/gas/elf/section0.d b/gas/testsuite/gas/elf/section0.d index 6978d0a..be1d547 100644 --- a/gas/testsuite/gas/elf/section0.d +++ b/gas/testsuite/gas/elf/section0.d @@ -1,5 +1,8 @@ #objdump: -s #name: elf section0 +# The h8300 port issues a warning message for +# new sections created without atrributes. +#skip: h8300-* .*: +file format .* diff --git a/gas/testsuite/gas/elf/section1.d b/gas/testsuite/gas/elf/section1.d index c6b7fd4..b02a9e4 100644 --- a/gas/testsuite/gas/elf/section1.d +++ b/gas/testsuite/gas/elf/section1.d @@ -1,5 +1,8 @@ #objdump: -s #name: elf section1 +# The h8300 port issues a warning message for +# new sections created without atrributes. +#skip: h8300-* .*: +file format .* diff --git a/gas/testsuite/gas/elf/section6.d b/gas/testsuite/gas/elf/section6.d index e8e0a66..c42d95c 100644 --- a/gas/testsuite/gas/elf/section6.d +++ b/gas/testsuite/gas/elf/section6.d @@ -1,5 +1,8 @@ #objdump: -s #name: elf section6 +# The h8300 port issues a warning message for +# new sections created without atrributes. +#skip: h8300-* .*: +file format .* diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 51783a6..dbd6fc1 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-13 Nick Clifton + + * ld-scrips/sort.exp: Skip these tests when the target is the + h8300. + 2010-01-11 H.J. Lu PR ld/11146 diff --git a/ld/testsuite/ld-scripts/sort.exp b/ld/testsuite/ld-scripts/sort.exp index 412f107..47950a7 100644 --- a/ld/testsuite/ld-scripts/sort.exp +++ b/ld/testsuite/ld-scripts/sort.exp @@ -25,6 +25,12 @@ if ![is_elf_format] { return } +# The h8300 port issues a warning message for +# new sections created without atrributes. +if [istarget "h8300-*-*"] { + return +} + load_lib ld-lib.exp set sort_test_list [lsort [glob -nocomplain $srcdir/$subdir/sort*.d]] -- 2.7.4