* config/obj-elf.c (get_sym_from_input_line_and_check): New
function to catch missing pseudo-op arguments. (obj_elf_local): Call new function. (obj_elf_weak): Likewise. (obj_elf_visibility): Likewise. (obj_elf_vtable_entry): Likewise. (obj_elf_type): Likewise. testsuite/ * gas/elf/pseudo.s: New. * gas/elf/pseudo.l: New. * gas/elf/pseudo.d: New. * gas/elf/elf.exp: Run the new test.
This commit is contained in:
parent
1e17085dea
commit
6e8bd58f83
|
@ -1,3 +1,13 @@
|
|||
2010-07-15 Rhonda Wittels <rhonda@codesourcery.com>
|
||||
|
||||
* config/obj-elf.c (get_sym_from_input_line_and_check): New
|
||||
function to catch missing pseudo-op arguments.
|
||||
(obj_elf_local): Call new function.
|
||||
(obj_elf_weak): Likewise.
|
||||
(obj_elf_visibility): Likewise.
|
||||
(obj_elf_vtable_entry): Likewise.
|
||||
(obj_elf_type): Likewise.
|
||||
|
||||
2010-07-15 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* config/obj-coff-seh.c
|
||||
|
|
|
@ -393,20 +393,35 @@ obj_elf_lcomm (int ignore ATTRIBUTE_UNUSED)
|
|||
symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT;
|
||||
}
|
||||
|
||||
static symbolS *
|
||||
get_sym_from_input_line_and_check (void)
|
||||
{
|
||||
char *name;
|
||||
char c;
|
||||
symbolS *sym;
|
||||
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
sym = symbol_find_or_make (name);
|
||||
*input_line_pointer = c;
|
||||
SKIP_WHITESPACE ();
|
||||
|
||||
/* There is no symbol name if input_line_pointer has not moved. */
|
||||
if (name == input_line_pointer)
|
||||
as_bad (_("Missing symbol name in directive"));
|
||||
return sym;
|
||||
}
|
||||
|
||||
static void
|
||||
obj_elf_local (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name;
|
||||
int c;
|
||||
symbolS *symbolP;
|
||||
|
||||
do
|
||||
{
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
symbolP = symbol_find_or_make (name);
|
||||
*input_line_pointer = c;
|
||||
SKIP_WHITESPACE ();
|
||||
symbolP = get_sym_from_input_line_and_check ();
|
||||
c = *input_line_pointer;
|
||||
S_CLEAR_EXTERNAL (symbolP);
|
||||
symbol_get_obj (symbolP)->local = 1;
|
||||
if (c == ',')
|
||||
|
@ -424,17 +439,13 @@ obj_elf_local (int ignore ATTRIBUTE_UNUSED)
|
|||
static void
|
||||
obj_elf_weak (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name;
|
||||
int c;
|
||||
symbolS *symbolP;
|
||||
|
||||
do
|
||||
{
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
symbolP = symbol_find_or_make (name);
|
||||
*input_line_pointer = c;
|
||||
SKIP_WHITESPACE ();
|
||||
symbolP = get_sym_from_input_line_and_check ();
|
||||
c = *input_line_pointer;
|
||||
S_SET_WEAK (symbolP);
|
||||
symbol_get_obj (symbolP)->local = 1;
|
||||
if (c == ',')
|
||||
|
@ -452,7 +463,6 @@ obj_elf_weak (int ignore ATTRIBUTE_UNUSED)
|
|||
static void
|
||||
obj_elf_visibility (int visibility)
|
||||
{
|
||||
char *name;
|
||||
int c;
|
||||
symbolS *symbolP;
|
||||
asymbol *bfdsym;
|
||||
|
@ -460,12 +470,7 @@ obj_elf_visibility (int visibility)
|
|||
|
||||
do
|
||||
{
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
symbolP = symbol_find_or_make (name);
|
||||
*input_line_pointer = c;
|
||||
|
||||
SKIP_WHITESPACE ();
|
||||
symbolP = get_sym_from_input_line_and_check ();
|
||||
|
||||
bfdsym = symbol_get_bfdsym (symbolP);
|
||||
elfsym = elf_symbol_from (bfd_asymbol_bfd (bfdsym), bfdsym);
|
||||
|
@ -475,6 +480,7 @@ obj_elf_visibility (int visibility)
|
|||
elfsym->internal_elf_sym.st_other &= ~3;
|
||||
elfsym->internal_elf_sym.st_other |= visibility;
|
||||
|
||||
c = *input_line_pointer;
|
||||
if (c == ',')
|
||||
{
|
||||
input_line_pointer ++;
|
||||
|
@ -1242,14 +1248,8 @@ obj_elf_symver (int ignore ATTRIBUTE_UNUSED)
|
|||
char old_lexat;
|
||||
symbolS *sym;
|
||||
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
sym = get_sym_from_input_line_and_check ();
|
||||
|
||||
sym = symbol_find_or_make (name);
|
||||
|
||||
*input_line_pointer = c;
|
||||
|
||||
SKIP_WHITESPACE ();
|
||||
if (*input_line_pointer != ',')
|
||||
{
|
||||
as_bad (_("expected comma after name in .symver"));
|
||||
|
@ -1378,20 +1378,13 @@ obj_elf_vtable_inherit (int ignore ATTRIBUTE_UNUSED)
|
|||
struct fix *
|
||||
obj_elf_vtable_entry (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name;
|
||||
symbolS *sym;
|
||||
offsetT offset;
|
||||
char c;
|
||||
|
||||
if (*input_line_pointer == '#')
|
||||
++input_line_pointer;
|
||||
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
sym = symbol_find_or_make (name);
|
||||
*input_line_pointer = c;
|
||||
|
||||
SKIP_WHITESPACE ();
|
||||
sym = get_sym_from_input_line_and_check ();
|
||||
if (*input_line_pointer != ',')
|
||||
{
|
||||
as_bad (_("expected comma after name in .vtable_entry"));
|
||||
|
@ -1613,20 +1606,16 @@ obj_elf_type_name (char *cp)
|
|||
static void
|
||||
obj_elf_type (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name;
|
||||
char c;
|
||||
int type;
|
||||
const char *type_name;
|
||||
symbolS *sym;
|
||||
elf_symbol_type *elfsym;
|
||||
|
||||
name = input_line_pointer;
|
||||
c = get_symbol_end ();
|
||||
sym = symbol_find_or_make (name);
|
||||
sym = get_sym_from_input_line_and_check ();
|
||||
c = *input_line_pointer;
|
||||
elfsym = (elf_symbol_type *) symbol_get_bfdsym (sym);
|
||||
*input_line_pointer = c;
|
||||
|
||||
SKIP_WHITESPACE ();
|
||||
if (*input_line_pointer == ',')
|
||||
++input_line_pointer;
|
||||
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2010-07-14 Rhonda Wittels <rhonda@codesourcery.com>
|
||||
|
||||
* gas/elf/pseudo.s: New.
|
||||
* gas/elf/pseudo.l: New.
|
||||
* gas/elf/pseudo.d: New.
|
||||
* gas/elf/elf.exp: Run the new test.
|
||||
|
||||
2010-07-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/default.exp (ADDR2LINE): New.
|
||||
|
|
|
@ -127,6 +127,7 @@ if { ([istarget "*-*-*elf*"]
|
|||
run_dump_test equ-reloc
|
||||
}
|
||||
}
|
||||
run_dump_test "pseudo"
|
||||
run_dump_test "section0"
|
||||
run_dump_test "section1"
|
||||
if {! [istarget "h8300-*-*"]} then {
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#name: Ill-formed directives
|
||||
#error-output: pseudo.l
|
|
@ -0,0 +1,12 @@
|
|||
[^:]*: Assembler messages:
|
||||
[^:]*:2: Error: Missing symbol name in directive
|
||||
[^:]*:4: Error: Missing symbol name in directive
|
||||
[^:]*:6: Error: Missing symbol name in directive
|
||||
[^:]*:8: Error: Missing symbol name in directive
|
||||
[^:]*:10: Error: Missing symbol name in directive
|
||||
[^:]*:12: Error: Missing symbol name in directive
|
||||
[^:]*:14: Error: Missing symbol name in directive
|
||||
[^:]*:14: Error: expected comma after name in .symver
|
||||
[^:]*:16: Error: Missing symbol name in directive
|
||||
[^:]*:18: Error: Missing symbol name in directive
|
||||
[^:]*:18: Error: unrecognized symbol type ""
|
|
@ -0,0 +1,18 @@
|
|||
.hidden h1n1
|
||||
.hidden
|
||||
# next line has spaces
|
||||
.hidden
|
||||
# next line has tabs
|
||||
.hidden
|
||||
.internal i2
|
||||
.internal
|
||||
.protected porpoise
|
||||
.protected
|
||||
.local foo
|
||||
.local
|
||||
.symver foo, foo@version1
|
||||
.symver
|
||||
.weak wimp
|
||||
.weak
|
||||
.type foo1,object
|
||||
.type
|
Loading…
Reference in New Issue