* 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.
This commit is contained in:
Nick Clifton 2010-01-13 14:08:54 +00:00
parent 11db68fd8d
commit 52b010e442
11 changed files with 104 additions and 5 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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 *

View File

@ -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.

View File

@ -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"

View File

@ -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 .*

View File

@ -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 .*

View File

@ -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 .*

View File

@ -1,3 +1,8 @@
2010-01-13 Nick Clifton <nickc@redhat.com>
* ld-scrips/sort.exp: Skip these tests when the target is the
h8300.
2010-01-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11146

View File

@ -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]]