@R changes to work with gcc-6.2.0
This commit is contained in:
parent
ce410ad89a
commit
590f1f95a2
|
@ -204,7 +204,7 @@ USUAL_MAKEINFO = `if [ -f $$r/texinfo/makeinfo/makeinfo ] ; \
|
||||||
# sub-makes. It lets flags be given on the command line while still
|
# sub-makes. It lets flags be given on the command line while still
|
||||||
# using the makeinfo from the object tree.
|
# using the makeinfo from the object tree.
|
||||||
# (Default to avoid splitting info files.)
|
# (Default to avoid splitting info files.)
|
||||||
MAKEINFOFLAGS = --no-split
|
MAKEINFOFLAGS = --no-split --force
|
||||||
|
|
||||||
EXPECT = `if [ -f $$r/expect/expect ] ; \
|
EXPECT = `if [ -f $$r/expect/expect ] ; \
|
||||||
then echo $$r/expect/expect ; \
|
then echo $$r/expect/expect ; \
|
||||||
|
|
|
@ -207,7 +207,7 @@ USUAL_MAKEINFO = `if [ -f $$r/texinfo/makeinfo/makeinfo ] ; \
|
||||||
# sub-makes. It lets flags be given on the command line while still
|
# sub-makes. It lets flags be given on the command line while still
|
||||||
# using the makeinfo from the object tree.
|
# using the makeinfo from the object tree.
|
||||||
# (Default to avoid splitting info files.)
|
# (Default to avoid splitting info files.)
|
||||||
MAKEINFOFLAGS = --no-split
|
MAKEINFOFLAGS = --no-split --force
|
||||||
|
|
||||||
EXPECT = `if [ -f $$r/expect/expect ] ; \
|
EXPECT = `if [ -f $$r/expect/expect ] ; \
|
||||||
then echo $$r/expect/expect ; \
|
then echo $$r/expect/expect ; \
|
||||||
|
|
25
gas/app.c
25
gas/app.c
|
@ -351,6 +351,8 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
char *fromend;
|
char *fromend;
|
||||||
int fromlen;
|
int fromlen;
|
||||||
register int ch, ch2 = 0;
|
register int ch, ch2 = 0;
|
||||||
|
/* Character that started the string we're working on. */
|
||||||
|
static char quotechar;
|
||||||
|
|
||||||
/*State 0: beginning of normal line
|
/*State 0: beginning of normal line
|
||||||
1: After first whitespace on line (flush more white)
|
1: After first whitespace on line (flush more white)
|
||||||
|
@ -536,11 +538,8 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
for (s = from; s < fromend; s++)
|
for (s = from; s < fromend; s++)
|
||||||
{
|
{
|
||||||
ch = *s;
|
ch = *s;
|
||||||
/* This condition must be changed if the type of any
|
|
||||||
other character can be LEX_IS_STRINGQUOTE. */
|
|
||||||
if (ch == '\\'
|
if (ch == '\\'
|
||||||
|| ch == '"'
|
|| ch == quotechar
|
||||||
|| ch == '\''
|
|
||||||
|| ch == '\n')
|
|| ch == '\n')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -558,12 +557,12 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
ch = GET ();
|
ch = GET ();
|
||||||
if (ch == EOF)
|
if (ch == EOF)
|
||||||
{
|
{
|
||||||
as_warn (_("end of file in string; inserted '\"'"));
|
as_warn (_("end of file in string; '%c' inserted"), quotechar);
|
||||||
state = old_state;
|
state = old_state;
|
||||||
UNGET ('\n');
|
UNGET ('\n');
|
||||||
PUT ('"');
|
PUT (quotechar);
|
||||||
}
|
}
|
||||||
else if (lex[ch] == LEX_IS_STRINGQUOTE)
|
else if (ch == quotechar)
|
||||||
{
|
{
|
||||||
state = old_state;
|
state = old_state;
|
||||||
PUT (ch);
|
PUT (ch);
|
||||||
|
@ -603,8 +602,8 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case EOF:
|
case EOF:
|
||||||
as_warn (_("end of file in string; '\"' inserted"));
|
as_warn (_("end of file in string; '%c' inserted"), quotechar);
|
||||||
PUT ('"');
|
PUT (quotechar);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case '"':
|
case '"':
|
||||||
|
@ -638,10 +637,9 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
ch = GET ();
|
ch = GET ();
|
||||||
|
quotechar = ch;
|
||||||
state = 5;
|
state = 5;
|
||||||
old_state = 8;
|
old_state = 8;
|
||||||
if (ch == EOF)
|
|
||||||
goto fromeof;
|
|
||||||
PUT (ch);
|
PUT (ch);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -952,6 +950,7 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LEX_IS_STRINGQUOTE:
|
case LEX_IS_STRINGQUOTE:
|
||||||
|
quotechar = ch;
|
||||||
if (state == 10)
|
if (state == 10)
|
||||||
{
|
{
|
||||||
/* Preserve the whitespace in foo "bar". */
|
/* Preserve the whitespace in foo "bar". */
|
||||||
|
@ -1279,6 +1278,8 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
case 1: *to++ = *from++;
|
case 1: *to++ = *from++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (to >= toend)
|
||||||
|
goto tofull;
|
||||||
ch = GET ();
|
ch = GET ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1297,7 +1298,7 @@ do_scrub_chars (get, tostart, tolen)
|
||||||
}
|
}
|
||||||
else if (state == 9)
|
else if (state == 9)
|
||||||
{
|
{
|
||||||
if (lex[ch] != LEX_IS_SYMBOL_COMPONENT)
|
if (!IS_SYMBOL_COMPONENT (ch))
|
||||||
state = 3;
|
state = 3;
|
||||||
}
|
}
|
||||||
else if (state == 10)
|
else if (state == 10)
|
||||||
|
|
|
@ -1,212 +1,277 @@
|
||||||
/* AmigaOS object file format
|
/* AmigaOS object file format
|
||||||
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
GAS is free software; you can redistribute it and/or modify
|
GAS is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as
|
it under the terms of the GNU General Public License as
|
||||||
published by the Free Software Foundation; either version 2,
|
published by the Free Software Foundation; either version 2,
|
||||||
or (at your option) any later version.
|
or (at your option) any later version.
|
||||||
|
|
||||||
GAS is distributed in the hope that it will be useful, but
|
GAS is distributed in the hope that it will be useful, but
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
||||||
the GNU General Public License for more details.
|
the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with GAS; see the file COPYING. If not, write to the Free
|
along with GAS; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA. */
|
02111-1307, USA. */
|
||||||
|
|
||||||
#include "as.h"
|
#include "as.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
N_UNDF=0,
|
N_UNDF=0,
|
||||||
/*N_ABS=2,*/
|
/*N_ABS=2,*/
|
||||||
/*N_TEXT=4,*/
|
/*N_TEXT=4,*/
|
||||||
/*N_DATA=6,*/
|
/*N_DATA=6,*/
|
||||||
/*N_BSS=8,*/
|
/*N_BSS=8,*/
|
||||||
N_INDR=0xa,
|
N_INDR=0xa,
|
||||||
/*N_COMM=0x12,*/
|
/*N_COMM=0x12,*/
|
||||||
N_SETA=0x14,
|
N_SETA=0x14,
|
||||||
N_SETT=0x16,
|
N_SETT=0x16,
|
||||||
N_SETD=0x18,
|
N_SETD=0x18,
|
||||||
N_SETB=0x1a,
|
N_SETB=0x1a,
|
||||||
/*N_SETV=0x1c,*/
|
/*N_SETV=0x1c,*/
|
||||||
N_WARNING=0x1e,
|
N_WARNING=0x1e,
|
||||||
/*N_FN=0x1f*/
|
/*N_FN=0x1f*/
|
||||||
N_EXT=1,
|
N_EXT=1,
|
||||||
N_TYPE=0x1e,
|
N_TYPE=0x1e,
|
||||||
/*N_STAB=0xe0,*/
|
/*N_STAB=0xe0,*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static void obj_amiga_line PARAMS ((int));
|
static void obj_amiga_line PARAMS ((int));
|
||||||
static void obj_amiga_weak PARAMS ((int));
|
static void obj_amiga_weak PARAMS ((int));
|
||||||
|
static void obj_amiga_section PARAMS((int));
|
||||||
const pseudo_typeS obj_pseudo_table[] =
|
static char * obj_amiga_section_name PARAMS ((void));
|
||||||
{
|
|
||||||
{"line", obj_amiga_line, 0}, /* source code line number */
|
const pseudo_typeS obj_pseudo_table[] =
|
||||||
{"weak", obj_amiga_weak, 0}, /* mark symbol as weak. */
|
{
|
||||||
|
{"line", obj_amiga_line, 0}, /* source code line number */
|
||||||
/* other stuff */
|
{"weak", obj_amiga_weak, 0}, /* mark symbol as weak. */
|
||||||
{"ABORT", s_abort, 0},
|
|
||||||
|
{"2byte", cons, 2},
|
||||||
{NULL, NULL, 0} /* end sentinel */
|
{"4byte", cons, 4},
|
||||||
};
|
{"8byte", cons, 8},
|
||||||
|
{"hidden", s_ignore, 0},
|
||||||
#ifdef BFD_ASSEMBLER
|
{"local", s_ignore, 0},
|
||||||
|
{"section", obj_amiga_section, 0},
|
||||||
void
|
{"section.s", obj_amiga_section, 0},
|
||||||
obj_amiga_frob_symbol (sym, punt)
|
{"sect", obj_amiga_section, 0},
|
||||||
symbolS *sym;
|
{"sect.s", obj_amiga_section, 0},
|
||||||
int *punt ATTRIBUTE_UNUSED;
|
{"swbeg", s_ignore, 0},
|
||||||
{
|
|
||||||
sec_ptr sec = S_GET_SEGMENT (sym);
|
/* other stuff */
|
||||||
unsigned int type = amiga_symbol (symbol_get_bfdsym (sym))->type;
|
{"ABORT", s_abort, 0},
|
||||||
|
|
||||||
/* Only frob simple symbols this way right now. */
|
{NULL, NULL, 0} /* end sentinel */
|
||||||
if (! (type & ~ (N_TYPE | N_EXT)))
|
};
|
||||||
{
|
|
||||||
if (type == (N_UNDF | N_EXT)
|
#ifdef BFD_ASSEMBLER
|
||||||
&& sec == &bfd_abs_section)
|
|
||||||
{
|
void
|
||||||
sec = bfd_und_section_ptr;
|
obj_amiga_frob_symbol (sym, punt)
|
||||||
S_SET_SEGMENT (sym, sec);
|
symbolS *sym;
|
||||||
}
|
int *punt ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
if ((type & N_TYPE) != N_INDR
|
sec_ptr sec = S_GET_SEGMENT (sym);
|
||||||
&& (type & N_TYPE) != N_SETA
|
unsigned int type = amiga_symbol (symbol_get_bfdsym (sym))->type;
|
||||||
&& (type & N_TYPE) != N_SETT
|
|
||||||
&& (type & N_TYPE) != N_SETD
|
/* Only frob simple symbols this way right now. */
|
||||||
&& (type & N_TYPE) != N_SETB
|
if (! (type & ~ (N_TYPE | N_EXT)))
|
||||||
&& type != N_WARNING
|
{
|
||||||
&& (sec == &bfd_abs_section
|
if (type == (N_UNDF | N_EXT)
|
||||||
|| sec == &bfd_und_section))
|
&& sec == &bfd_abs_section)
|
||||||
return;
|
{
|
||||||
if (symbol_get_bfdsym (sym)->flags & BSF_EXPORT)
|
sec = bfd_und_section_ptr;
|
||||||
type |= N_EXT;
|
S_SET_SEGMENT (sym, sec);
|
||||||
|
}
|
||||||
switch (type & N_TYPE)
|
|
||||||
{
|
if ((type & N_TYPE) != N_INDR
|
||||||
case N_SETA:
|
&& (type & N_TYPE) != N_SETA
|
||||||
case N_SETT:
|
&& (type & N_TYPE) != N_SETT
|
||||||
case N_SETD:
|
&& (type & N_TYPE) != N_SETD
|
||||||
case N_SETB:
|
&& (type & N_TYPE) != N_SETB
|
||||||
/* Set the debugging flag for constructor symbols so that
|
&& type != N_WARNING
|
||||||
BFD leaves them alone. */
|
&& (sec == &bfd_abs_section
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING;
|
|| sec == &bfd_und_section))
|
||||||
|
return;
|
||||||
/* You can't put a common symbol in a set. The way a set
|
if (symbol_get_bfdsym (sym)->flags & BSF_EXPORT)
|
||||||
element works is that the symbol has a definition and a
|
type |= N_EXT;
|
||||||
name, and the linker adds the definition to the set of
|
|
||||||
that name. That does not work for a common symbol,
|
switch (type & N_TYPE)
|
||||||
because the linker can't tell which common symbol the
|
{
|
||||||
user means. FIXME: Using as_bad here may be
|
case N_SETA:
|
||||||
inappropriate, since the user may want to force a
|
case N_SETT:
|
||||||
particular type without regard to the semantics of sets;
|
case N_SETD:
|
||||||
on the other hand, we certainly don't want anybody to be
|
case N_SETB:
|
||||||
mislead into thinking that their code will work. */
|
/* Set the debugging flag for constructor symbols so that
|
||||||
if (S_IS_COMMON (sym))
|
BFD leaves them alone. */
|
||||||
as_bad (_("Attempt to put a common symbol into set %s"),
|
symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING;
|
||||||
S_GET_NAME (sym));
|
|
||||||
/* Similarly, you can't put an undefined symbol in a set. */
|
/* You can't put a common symbol in a set. The way a set
|
||||||
else if (! S_IS_DEFINED (sym))
|
element works is that the symbol has a definition and a
|
||||||
as_bad (_("Attempt to put an undefined symbol into set %s"),
|
name, and the linker adds the definition to the set of
|
||||||
S_GET_NAME (sym));
|
that name. That does not work for a common symbol,
|
||||||
|
because the linker can't tell which common symbol the
|
||||||
break;
|
user means. FIXME: Using as_bad here may be
|
||||||
case N_INDR:
|
inappropriate, since the user may want to force a
|
||||||
/* Put indirect symbols in the indirect section. */
|
particular type without regard to the semantics of sets;
|
||||||
S_SET_SEGMENT (sym, bfd_ind_section_ptr);
|
on the other hand, we certainly don't want anybody to be
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_INDIRECT;
|
mislead into thinking that their code will work. */
|
||||||
if (type & N_EXT)
|
if (S_IS_COMMON (sym))
|
||||||
{
|
as_bad (_("Attempt to put a common symbol into set %s"),
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_EXPORT;
|
S_GET_NAME (sym));
|
||||||
symbol_get_bfdsym (sym)->flags &=~ BSF_LOCAL;
|
/* Similarly, you can't put an undefined symbol in a set. */
|
||||||
}
|
else if (! S_IS_DEFINED (sym))
|
||||||
break;
|
as_bad (_("Attempt to put an undefined symbol into set %s"),
|
||||||
case N_WARNING:
|
S_GET_NAME (sym));
|
||||||
/* Mark warning symbols. */
|
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_WARNING;
|
break;
|
||||||
break;
|
case N_INDR:
|
||||||
}
|
/* Put indirect symbols in the indirect section. */
|
||||||
}
|
S_SET_SEGMENT (sym, bfd_ind_section_ptr);
|
||||||
else
|
symbol_get_bfdsym (sym)->flags |= BSF_INDIRECT;
|
||||||
{
|
if (type & N_EXT)
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING;
|
{
|
||||||
}
|
symbol_get_bfdsym (sym)->flags |= BSF_EXPORT;
|
||||||
|
symbol_get_bfdsym (sym)->flags &=~ BSF_LOCAL;
|
||||||
amiga_symbol (symbol_get_bfdsym (sym))->type = type;
|
}
|
||||||
|
break;
|
||||||
/* Double check weak symbols. */
|
case N_WARNING:
|
||||||
if (S_IS_WEAK (sym))
|
/* Mark warning symbols. */
|
||||||
{
|
symbol_get_bfdsym (sym)->flags |= BSF_WARNING;
|
||||||
if (S_IS_COMMON (sym))
|
break;
|
||||||
as_bad (_("Symbol `%s' can not be both weak and common"),
|
}
|
||||||
S_GET_NAME (sym));
|
}
|
||||||
}
|
else
|
||||||
}
|
{
|
||||||
|
symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING;
|
||||||
void
|
}
|
||||||
obj_amiga_frob_file_before_fix ()
|
|
||||||
{
|
amiga_symbol (symbol_get_bfdsym (sym))->type = type;
|
||||||
/* Relocation processing may require knowing the VMAs of the sections.
|
|
||||||
Since writing to a section will cause the BFD back end to compute the
|
/* Double check weak symbols. */
|
||||||
VMAs, fake it out here.... */
|
if (S_IS_WEAK (sym))
|
||||||
bfd_byte b = 0;
|
{
|
||||||
bfd_boolean x = TRUE;
|
if (S_IS_COMMON (sym))
|
||||||
if (bfd_section_size (stdoutput, text_section) != 0)
|
as_bad (_("Symbol `%s' can not be both weak and common"),
|
||||||
{
|
S_GET_NAME (sym));
|
||||||
x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0,
|
}
|
||||||
(bfd_size_type) 1);
|
}
|
||||||
}
|
|
||||||
else if (bfd_section_size (stdoutput, data_section) != 0)
|
void
|
||||||
{
|
obj_amiga_frob_file_before_fix ()
|
||||||
x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0,
|
{
|
||||||
(bfd_size_type) 1);
|
/* Relocation processing may require knowing the VMAs of the sections.
|
||||||
}
|
Since writing to a section will cause the BFD back end to compute the
|
||||||
assert (x);
|
VMAs, fake it out here.... */
|
||||||
}
|
bfd_byte b = 0;
|
||||||
|
bfd_boolean x = TRUE;
|
||||||
#endif /* BFD_ASSEMBLER */
|
if (bfd_section_size (stdoutput, text_section) != 0)
|
||||||
|
{
|
||||||
static void
|
x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0,
|
||||||
obj_amiga_line (ignore)
|
(bfd_size_type) 1);
|
||||||
int ignore ATTRIBUTE_UNUSED;
|
}
|
||||||
{
|
else if (bfd_section_size (stdoutput, data_section) != 0)
|
||||||
/* Assume delimiter is part of expression.
|
{
|
||||||
BSD4.2 as fails with delightful bug, so we
|
x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0,
|
||||||
are not being incompatible here. */
|
(bfd_size_type) 1);
|
||||||
new_logical_line ((char *) NULL, (int) (get_absolute_expression ()));
|
}
|
||||||
demand_empty_rest_of_line ();
|
assert (x);
|
||||||
} /* obj_amiga_line() */
|
}
|
||||||
|
|
||||||
/* Handle .weak. This is a GNU extension. */
|
#endif /* BFD_ASSEMBLER */
|
||||||
|
|
||||||
static void
|
/* Get name of section. */
|
||||||
obj_amiga_weak (ignore)
|
static char *
|
||||||
int ignore ATTRIBUTE_UNUSED;
|
obj_amiga_section_name ()
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
int c;
|
|
||||||
symbolS *symbolP;
|
SKIP_WHITESPACE ();
|
||||||
|
if (*input_line_pointer == '"')
|
||||||
do
|
{
|
||||||
{
|
int dummy;
|
||||||
name = input_line_pointer;
|
|
||||||
c = get_symbol_end ();
|
name = demand_copy_C_string (&dummy);
|
||||||
symbolP = symbol_find_or_make (name);
|
if (name == NULL)
|
||||||
*input_line_pointer = c;
|
{
|
||||||
SKIP_WHITESPACE ();
|
ignore_rest_of_line ();
|
||||||
S_SET_WEAK (symbolP);
|
return NULL;
|
||||||
if (c == ',')
|
}
|
||||||
{
|
}
|
||||||
input_line_pointer++;
|
else
|
||||||
SKIP_WHITESPACE ();
|
{
|
||||||
if (*input_line_pointer == '\n')
|
char *end = input_line_pointer;
|
||||||
c = '\n';
|
|
||||||
}
|
while (0 == strchr ("\n\t,; ", *end))
|
||||||
}
|
end++;
|
||||||
while (c == ',');
|
if (end == input_line_pointer)
|
||||||
demand_empty_rest_of_line ();
|
{
|
||||||
}
|
as_warn (_("missing name"));
|
||||||
|
ignore_rest_of_line ();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
name = xmalloc (end - input_line_pointer + 1);
|
||||||
|
memcpy (name, input_line_pointer, end - input_line_pointer);
|
||||||
|
name[end - input_line_pointer] = '\0';
|
||||||
|
input_line_pointer = end;
|
||||||
|
}
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void obj_amiga_section(int push) {
|
||||||
|
char const * name = obj_amiga_section_name();
|
||||||
|
if (name == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (0 == strcmp(".rodata", name))
|
||||||
|
s_text();
|
||||||
|
else
|
||||||
|
s_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
obj_amiga_line (ignore)
|
||||||
|
int ignore ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
|
/* Assume delimiter is part of expression.
|
||||||
|
BSD4.2 as fails with delightful bug, so we
|
||||||
|
are not being incompatible here. */
|
||||||
|
new_logical_line ((char *) NULL, (int) (get_absolute_expression ()));
|
||||||
|
demand_empty_rest_of_line ();
|
||||||
|
} /* obj_amiga_line() */
|
||||||
|
|
||||||
|
/* Handle .weak. This is a GNU extension. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
obj_amiga_weak (ignore)
|
||||||
|
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 ();
|
||||||
|
S_SET_WEAK (symbolP);
|
||||||
|
if (c == ',')
|
||||||
|
{
|
||||||
|
input_line_pointer++;
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
if (*input_line_pointer == '\n')
|
||||||
|
c = '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (c == ',');
|
||||||
|
demand_empty_rest_of_line ();
|
||||||
|
}
|
||||||
|
|
|
@ -75,6 +75,8 @@ const segT N_TYPE_seg[N_TYPE + 2] =
|
||||||
static void obj_aout_line PARAMS ((int));
|
static void obj_aout_line PARAMS ((int));
|
||||||
static void obj_aout_weak PARAMS ((int));
|
static void obj_aout_weak PARAMS ((int));
|
||||||
static void obj_aout_type PARAMS ((int));
|
static void obj_aout_type PARAMS ((int));
|
||||||
|
static void obj_section PARAMS((int));
|
||||||
|
static char * obj_section_name PARAMS ((void));
|
||||||
|
|
||||||
const pseudo_typeS aout_pseudo_table[] =
|
const pseudo_typeS aout_pseudo_table[] =
|
||||||
{
|
{
|
||||||
|
@ -100,6 +102,17 @@ const pseudo_typeS aout_pseudo_table[] =
|
||||||
|
|
||||||
{"optim", s_ignore, 0}, /* For sun386i cc (?) */
|
{"optim", s_ignore, 0}, /* For sun386i cc (?) */
|
||||||
|
|
||||||
|
{"2byte", cons, 2},
|
||||||
|
{"4byte", cons, 4},
|
||||||
|
{"8byte", cons, 8},
|
||||||
|
{"hidden", s_ignore, 0},
|
||||||
|
{"local", s_ignore, 0},
|
||||||
|
{"section", obj_section, 0},
|
||||||
|
{"section.s", obj_section, 0},
|
||||||
|
{"sect", obj_section, 0},
|
||||||
|
{"sect.s", obj_section, 0},
|
||||||
|
{"swbeg", s_ignore, 0},
|
||||||
|
|
||||||
/* other stuff */
|
/* other stuff */
|
||||||
{"ABORT", s_abort, 0},
|
{"ABORT", s_abort, 0},
|
||||||
|
|
||||||
|
@ -229,6 +242,59 @@ obj_aout_frob_file_before_fix ()
|
||||||
|
|
||||||
#else /* ! BFD_ASSEMBLER */
|
#else /* ! BFD_ASSEMBLER */
|
||||||
|
|
||||||
|
/* Get name of section. */
|
||||||
|
static char *
|
||||||
|
obj_section_name ()
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
if (*input_line_pointer == '"')
|
||||||
|
{
|
||||||
|
int dummy;
|
||||||
|
|
||||||
|
name = demand_copy_C_string (&dummy);
|
||||||
|
if (name == NULL)
|
||||||
|
{
|
||||||
|
ignore_rest_of_line ();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *end = input_line_pointer;
|
||||||
|
|
||||||
|
while (0 == strchr ("\n\t,; ", *end))
|
||||||
|
end++;
|
||||||
|
if (end == input_line_pointer)
|
||||||
|
{
|
||||||
|
as_warn (_("missing name"));
|
||||||
|
ignore_rest_of_line ();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
name = xmalloc (end - input_line_pointer + 1);
|
||||||
|
memcpy (name, input_line_pointer, end - input_line_pointer);
|
||||||
|
name[end - input_line_pointer] = '\0';
|
||||||
|
input_line_pointer = end;
|
||||||
|
}
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void obj_section(int push) {
|
||||||
|
char const * name = obj_section_name();
|
||||||
|
if (name == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (0 == strcmp(".rodata", name))
|
||||||
|
s_text(push);
|
||||||
|
else
|
||||||
|
s_data(push);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Relocation. */
|
/* Relocation. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -132,6 +132,10 @@ int elf_s_get_other PARAMS ((symbolS *));
|
||||||
(elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
|
(elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef S_GET_TYPE
|
||||||
|
#define S_GET_TYPE(S) (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
extern asection *gdb_section;
|
extern asection *gdb_section;
|
||||||
|
|
||||||
#ifndef obj_frob_file
|
#ifndef obj_frob_file
|
||||||
|
|
19
gas/read.c
19
gas/read.c
|
@ -237,6 +237,10 @@ static segT get_known_segmented_expression PARAMS ((expressionS * expP));
|
||||||
static void pobegin PARAMS ((void));
|
static void pobegin PARAMS ((void));
|
||||||
static int get_line_sb PARAMS ((sb *));
|
static int get_line_sb PARAMS ((sb *));
|
||||||
static void generate_file_debug PARAMS ((void));
|
static void generate_file_debug PARAMS ((void));
|
||||||
|
void ignore_rest_of_line (void);
|
||||||
|
static void ignore_rest_of_line2 (int);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
read_begin ()
|
read_begin ()
|
||||||
|
@ -1425,7 +1429,8 @@ s_comm (ignore)
|
||||||
#endif /* not OBJ_VMS */
|
#endif /* not OBJ_VMS */
|
||||||
know (symbolP->sy_frag == &zero_address_frag);
|
know (symbolP->sy_frag == &zero_address_frag);
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
ignore_rest_of_line2 (0);
|
||||||
|
// demand_empty_rest_of_line ();
|
||||||
|
|
||||||
if (flag_mri)
|
if (flag_mri)
|
||||||
mri_comment_end (stop, stopc);
|
mri_comment_end (stop, stopc);
|
||||||
|
@ -3167,15 +3172,21 @@ demand_empty_rest_of_line ()
|
||||||
|
|
||||||
void
|
void
|
||||||
ignore_rest_of_line ()
|
ignore_rest_of_line ()
|
||||||
|
{
|
||||||
|
ignore_rest_of_line2(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ignore_rest_of_line2 (int out)
|
||||||
{
|
{
|
||||||
/* For suspect lines: gives warning. */
|
/* For suspect lines: gives warning. */
|
||||||
if (!is_end_of_line[(unsigned char) *input_line_pointer])
|
if (!is_end_of_line[(unsigned char) *input_line_pointer])
|
||||||
{
|
{
|
||||||
if (ISPRINT (*input_line_pointer))
|
if (ISPRINT (*input_line_pointer))
|
||||||
as_warn (_("rest of line ignored; first ignored character is `%c'"),
|
if (out) as_warn (_("rest of line ignored; first ignored character is `%c'"),
|
||||||
*input_line_pointer);
|
*input_line_pointer);
|
||||||
else
|
else
|
||||||
as_warn (_("rest of line ignored; first ignored character valued 0x%x"),
|
if (out) as_warn (_("rest of line ignored; first ignored character valued 0x%x"),
|
||||||
*input_line_pointer);
|
*input_line_pointer);
|
||||||
|
|
||||||
while (input_line_pointer < buffer_limit
|
while (input_line_pointer < buffer_limit
|
||||||
|
@ -3355,7 +3366,7 @@ parse_repeat_cons PARAMS ((expressionS *exp, unsigned int nbytes));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cons_worker (nbytes, rva)
|
cons_worker (nbytes, rva)
|
||||||
register int nbytes; /* 1=.byte, 2=.word, 4=.long. */
|
register int nbytes; /* 1=.byte, 2=.word, 4=.long, 8=.8bytes. */
|
||||||
int rva;
|
int rva;
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
|
@ -192,7 +192,7 @@ TODO acinclude.m4 aclocal.m4 configure configure.in gconfig.in
|
||||||
|
|
||||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
TAR = gtar
|
TAR = tar
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
SOURCES = $(gprof_SOURCES)
|
SOURCES = $(gprof_SOURCES)
|
||||||
OBJECTS = $(gprof_OBJECTS)
|
OBJECTS = $(gprof_OBJECTS)
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/* Header file the type CGEN_BITSET.
|
||||||
|
|
||||||
|
Copyright 2002, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB, the GNU debugger, and the GNU Binutils.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
#ifndef CGEN_BITSET_H
|
||||||
|
#define CGEN_BITSET_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* A bitmask represented as a string.
|
||||||
|
Each member of the set is represented as a bit
|
||||||
|
in the string. Bytes are indexed from left to right in the string and
|
||||||
|
bits from most significant to least within each byte.
|
||||||
|
|
||||||
|
For example, the bit representing member number 6 is (set->bits[0] & 0x02).
|
||||||
|
*/
|
||||||
|
typedef struct cgen_bitset
|
||||||
|
{
|
||||||
|
unsigned length;
|
||||||
|
char *bits;
|
||||||
|
} CGEN_BITSET;
|
||||||
|
|
||||||
|
extern CGEN_BITSET *cgen_bitset_create PARAMS ((unsigned));
|
||||||
|
extern void cgen_bitset_init PARAMS ((CGEN_BITSET *, unsigned));
|
||||||
|
extern void cgen_bitset_clear PARAMS ((CGEN_BITSET *));
|
||||||
|
extern void cgen_bitset_add PARAMS ((CGEN_BITSET *, unsigned));
|
||||||
|
extern void cgen_bitset_set PARAMS ((CGEN_BITSET *, unsigned));
|
||||||
|
extern int cgen_bitset_compare PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
|
||||||
|
extern void cgen_bitset_union PARAMS ((CGEN_BITSET *, CGEN_BITSET *, CGEN_BITSET *));
|
||||||
|
extern int cgen_bitset_intersect_p PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
|
||||||
|
extern int cgen_bitset_contains PARAMS ((CGEN_BITSET *, unsigned));
|
||||||
|
extern CGEN_BITSET *cgen_bitset_copy PARAMS ((CGEN_BITSET *));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -341,7 +341,7 @@ sh64-*-elf*)
|
||||||
m68k-sony-*) targ_emul=news ;;
|
m68k-sony-*) targ_emul=news ;;
|
||||||
m68k-hp-bsd*) targ_emul=hp300bsd ;;
|
m68k-hp-bsd*) targ_emul=hp300bsd ;;
|
||||||
m68*-motorola-sysv*) targ_emul=delta68 ;;
|
m68*-motorola-sysv*) targ_emul=delta68 ;;
|
||||||
m68*-*-amigaos*) targ_emul=amiga ; targ_extra_emuls=amiga_bss;;
|
m68*-amigaos* | m68*-*-amigaos*) targ_emul=amiga ; targ_extra_emuls=amiga_bss;;
|
||||||
m68*-*-aout) targ_emul=m68kaout ;;
|
m68*-*-aout) targ_emul=m68kaout ;;
|
||||||
m68*-*-coff) targ_emul=m68kcoff ;;
|
m68*-*-coff) targ_emul=m68kcoff ;;
|
||||||
m68*-*-elf) targ_emul=m68kelf ;;
|
m68*-*-elf) targ_emul=m68kelf ;;
|
||||||
|
|
|
@ -4,3 +4,4 @@ TEXT_START_ADDR=0x0
|
||||||
SEGMENT_SIZE=0x0
|
SEGMENT_SIZE=0x0
|
||||||
TEMPLATE_NAME=amiga
|
TEMPLATE_NAME=amiga
|
||||||
ARCH=m68k
|
ARCH=m68k
|
||||||
|
EMULATION_NAME=amiga
|
|
@ -4,3 +4,4 @@ TEXT_START_ADDR=0x0
|
||||||
SEGMENT_SIZE=0x0
|
SEGMENT_SIZE=0x0
|
||||||
TEMPLATE_NAME=amiga
|
TEMPLATE_NAME=amiga
|
||||||
ARCH=m68k
|
ARCH=m68k
|
||||||
|
EMULATION_NAME=amiga_bss
|
5
ltconfig
5
ltconfig
|
@ -1038,10 +1038,9 @@ aix4* | aix5*)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
amigaos*)
|
amigaos*)
|
||||||
library_names_spec='$libname.library $libname.a'
|
library_names_spec='$libname.ixlibrary $libname.a'
|
||||||
# Create ${libname}_ixlibrary.a entries in /sys/libs.
|
# Create ${libname}_ixlibrary.a entries in /sys/libs.
|
||||||
#FIXME: finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
|
finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
|
||||||
finish_eval='/bin/true';
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
beos*)
|
beos*)
|
||||||
|
|
8
md5.sum
8
md5.sum
|
@ -5424,3 +5424,11 @@ aa9faff15fc4bc65940d62236b7f1de8 opcodes/z8k-opc.h
|
||||||
671f95a4f3f078b483390601bc8a729d symlink-tree
|
671f95a4f3f078b483390601bc8a729d symlink-tree
|
||||||
869b0770320db2cd18093b1a9ffafef8 texinfo/texinfo.tex
|
869b0770320db2cd18093b1a9ffafef8 texinfo/texinfo.tex
|
||||||
7588c5103af27cc93537977f059f52dc ylwrap
|
7588c5103af27cc93537977f059f52dc ylwrap
|
||||||
|
148fad0cc1f763de146e8b24585ecc7c cgen/cpu/fr30.cpu
|
||||||
|
9c5d5fa5b445b9355b85077bd49a5f97 cgen/cpu/fr30.opc
|
||||||
|
75592d87915e75debae73108ddc302b2 cgen/cpu/ip2k.cpu
|
||||||
|
8d5edda5f98445600dee230f555a2456 cgen/cpu/ip2k.opc
|
||||||
|
867a60d05d64405fdb1ef21000caeedc cgen/cpu/openrisc.cpu
|
||||||
|
945e53326e14b969cd64bb0cb5a37c30 cgen/cpu/openrisc.opc
|
||||||
|
660d36f7635ce300de54206767f36c5b cgen/cpu/xstormy16.cpu
|
||||||
|
ce470f63afdfaaaffd13956b0d3b51db cgen/cpu/xstormy16.opc
|
||||||
|
|
Loading…
Reference in New Issue