mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
* 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:
@ -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>
|
2010-07-15 Kai Tietz <kai.tietz@onevision.com>
|
||||||
|
|
||||||
* config/obj-coff-seh.c
|
* config/obj-coff-seh.c
|
||||||
|
@ -393,20 +393,35 @@ obj_elf_lcomm (int ignore ATTRIBUTE_UNUSED)
|
|||||||
symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT;
|
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
|
static void
|
||||||
obj_elf_local (int ignore ATTRIBUTE_UNUSED)
|
obj_elf_local (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
int c;
|
int c;
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
name = input_line_pointer;
|
symbolP = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
c = *input_line_pointer;
|
||||||
symbolP = symbol_find_or_make (name);
|
|
||||||
*input_line_pointer = c;
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
S_CLEAR_EXTERNAL (symbolP);
|
S_CLEAR_EXTERNAL (symbolP);
|
||||||
symbol_get_obj (symbolP)->local = 1;
|
symbol_get_obj (symbolP)->local = 1;
|
||||||
if (c == ',')
|
if (c == ',')
|
||||||
@ -424,17 +439,13 @@ obj_elf_local (int ignore ATTRIBUTE_UNUSED)
|
|||||||
static void
|
static void
|
||||||
obj_elf_weak (int ignore ATTRIBUTE_UNUSED)
|
obj_elf_weak (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
int c;
|
int c;
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
name = input_line_pointer;
|
symbolP = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
c = *input_line_pointer;
|
||||||
symbolP = symbol_find_or_make (name);
|
|
||||||
*input_line_pointer = c;
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
S_SET_WEAK (symbolP);
|
S_SET_WEAK (symbolP);
|
||||||
symbol_get_obj (symbolP)->local = 1;
|
symbol_get_obj (symbolP)->local = 1;
|
||||||
if (c == ',')
|
if (c == ',')
|
||||||
@ -452,7 +463,6 @@ obj_elf_weak (int ignore ATTRIBUTE_UNUSED)
|
|||||||
static void
|
static void
|
||||||
obj_elf_visibility (int visibility)
|
obj_elf_visibility (int visibility)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
int c;
|
int c;
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
asymbol *bfdsym;
|
asymbol *bfdsym;
|
||||||
@ -460,12 +470,7 @@ obj_elf_visibility (int visibility)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
name = input_line_pointer;
|
symbolP = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
|
||||||
symbolP = symbol_find_or_make (name);
|
|
||||||
*input_line_pointer = c;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
|
|
||||||
bfdsym = symbol_get_bfdsym (symbolP);
|
bfdsym = symbol_get_bfdsym (symbolP);
|
||||||
elfsym = elf_symbol_from (bfd_asymbol_bfd (bfdsym), bfdsym);
|
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 &= ~3;
|
||||||
elfsym->internal_elf_sym.st_other |= visibility;
|
elfsym->internal_elf_sym.st_other |= visibility;
|
||||||
|
|
||||||
|
c = *input_line_pointer;
|
||||||
if (c == ',')
|
if (c == ',')
|
||||||
{
|
{
|
||||||
input_line_pointer ++;
|
input_line_pointer ++;
|
||||||
@ -1242,14 +1248,8 @@ obj_elf_symver (int ignore ATTRIBUTE_UNUSED)
|
|||||||
char old_lexat;
|
char old_lexat;
|
||||||
symbolS *sym;
|
symbolS *sym;
|
||||||
|
|
||||||
name = input_line_pointer;
|
sym = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
|
||||||
|
|
||||||
sym = symbol_find_or_make (name);
|
|
||||||
|
|
||||||
*input_line_pointer = c;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
if (*input_line_pointer != ',')
|
if (*input_line_pointer != ',')
|
||||||
{
|
{
|
||||||
as_bad (_("expected comma after name in .symver"));
|
as_bad (_("expected comma after name in .symver"));
|
||||||
@ -1378,20 +1378,13 @@ obj_elf_vtable_inherit (int ignore ATTRIBUTE_UNUSED)
|
|||||||
struct fix *
|
struct fix *
|
||||||
obj_elf_vtable_entry (int ignore ATTRIBUTE_UNUSED)
|
obj_elf_vtable_entry (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
symbolS *sym;
|
symbolS *sym;
|
||||||
offsetT offset;
|
offsetT offset;
|
||||||
char c;
|
|
||||||
|
|
||||||
if (*input_line_pointer == '#')
|
if (*input_line_pointer == '#')
|
||||||
++input_line_pointer;
|
++input_line_pointer;
|
||||||
|
|
||||||
name = input_line_pointer;
|
sym = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
|
||||||
sym = symbol_find_or_make (name);
|
|
||||||
*input_line_pointer = c;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
if (*input_line_pointer != ',')
|
if (*input_line_pointer != ',')
|
||||||
{
|
{
|
||||||
as_bad (_("expected comma after name in .vtable_entry"));
|
as_bad (_("expected comma after name in .vtable_entry"));
|
||||||
@ -1613,20 +1606,16 @@ obj_elf_type_name (char *cp)
|
|||||||
static void
|
static void
|
||||||
obj_elf_type (int ignore ATTRIBUTE_UNUSED)
|
obj_elf_type (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
char c;
|
char c;
|
||||||
int type;
|
int type;
|
||||||
const char *type_name;
|
const char *type_name;
|
||||||
symbolS *sym;
|
symbolS *sym;
|
||||||
elf_symbol_type *elfsym;
|
elf_symbol_type *elfsym;
|
||||||
|
|
||||||
name = input_line_pointer;
|
sym = get_sym_from_input_line_and_check ();
|
||||||
c = get_symbol_end ();
|
c = *input_line_pointer;
|
||||||
sym = symbol_find_or_make (name);
|
|
||||||
elfsym = (elf_symbol_type *) symbol_get_bfdsym (sym);
|
elfsym = (elf_symbol_type *) symbol_get_bfdsym (sym);
|
||||||
*input_line_pointer = c;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
if (*input_line_pointer == ',')
|
if (*input_line_pointer == ',')
|
||||||
++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>
|
2010-07-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config/default.exp (ADDR2LINE): New.
|
* config/default.exp (ADDR2LINE): New.
|
||||||
|
@ -127,6 +127,7 @@ if { ([istarget "*-*-*elf*"]
|
|||||||
run_dump_test equ-reloc
|
run_dump_test equ-reloc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
run_dump_test "pseudo"
|
||||||
run_dump_test "section0"
|
run_dump_test "section0"
|
||||||
run_dump_test "section1"
|
run_dump_test "section1"
|
||||||
if {! [istarget "h8300-*-*"]} then {
|
if {! [istarget "h8300-*-*"]} then {
|
||||||
|
2
gas/testsuite/gas/elf/pseudo.d
Normal file
2
gas/testsuite/gas/elf/pseudo.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#name: Ill-formed directives
|
||||||
|
#error-output: pseudo.l
|
12
gas/testsuite/gas/elf/pseudo.l
Normal file
12
gas/testsuite/gas/elf/pseudo.l
Normal file
@ -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 ""
|
18
gas/testsuite/gas/elf/pseudo.s
Normal file
18
gas/testsuite/gas/elf/pseudo.s
Normal file
@ -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
|
Reference in New Issue
Block a user