aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2010-01-13 14:08:54 +0000
committerNick Clifton <nickc@redhat.com>2010-01-13 14:08:54 +0000
commit52b010e4424ced5700579389375a536b614f8b19 (patch)
tree67dca4c0f96d271dfa9bf01d4ff329419763f674 /gas
parent11db68fd8df09b071049208a7e7b64e3b1cb8946 (diff)
downloadgdb-52b010e4424ced5700579389375a536b614f8b19.zip
gdb-52b010e4424ced5700579389375a536b614f8b19.tar.gz
gdb-52b010e4424ced5700579389375a536b614f8b19.tar.bz2
* 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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/obj-elf.c2
-rw-r--r--gas/config/obj-elf.h1
-rw-r--r--gas/config/tc-h8300.c56
-rw-r--r--gas/testsuite/ChangeLog8
-rw-r--r--gas/testsuite/gas/elf/elf.exp12
-rw-r--r--gas/testsuite/gas/elf/section0.d3
-rw-r--r--gas/testsuite/gas/elf/section1.d3
-rw-r--r--gas/testsuite/gas/elf/section6.d3
9 files changed, 93 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 <nickc@redhat.com>
+
+ * 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 <amodra@gmail.com>
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 <nickc@redhat.com>
+
+ * 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 <quentin.neill@amd.com>
* 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 .*