From 590f1f95a253e46f4ef82e41430ad56fe94331de Mon Sep 17 00:00:00 2001 From: bebbo Date: Mon, 28 Nov 2016 22:19:06 +0100 Subject: [PATCH] @R changes to work with gcc-6.2.0 --- Makefile.in | 2 +- Makefile.tpl | 2 +- gas/app.c | 25 +- gas/config/obj-amigahunk.c | 489 ++++++++++++++++++++--------------- gas/config/obj-aout.c | 66 +++++ gas/config/obj-elf.h | 4 + gas/read.c | 19 +- gprof/Makefile.in | 2 +- include/opcode/cgen-bitset.h | 55 ++++ ld/configure.tgt | 2 +- ld/emulparams/amiga.sh | 1 + ld/emulparams/amiga_bss.sh | 1 + ltconfig | 5 +- md5.sum | 8 + 14 files changed, 446 insertions(+), 235 deletions(-) create mode 100755 include/opcode/cgen-bitset.h diff --git a/Makefile.in b/Makefile.in index 561dc76..d99e181 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 # using the makeinfo from the object tree. # (Default to avoid splitting info files.) -MAKEINFOFLAGS = --no-split +MAKEINFOFLAGS = --no-split --force EXPECT = `if [ -f $$r/expect/expect ] ; \ then echo $$r/expect/expect ; \ diff --git a/Makefile.tpl b/Makefile.tpl index 571fa42..e09c83a 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -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 # using the makeinfo from the object tree. # (Default to avoid splitting info files.) -MAKEINFOFLAGS = --no-split +MAKEINFOFLAGS = --no-split --force EXPECT = `if [ -f $$r/expect/expect ] ; \ then echo $$r/expect/expect ; \ diff --git a/gas/app.c b/gas/app.c index f752962..f11def0 100644 --- a/gas/app.c +++ b/gas/app.c @@ -351,6 +351,8 @@ do_scrub_chars (get, tostart, tolen) char *fromend; int fromlen; register int ch, ch2 = 0; + /* Character that started the string we're working on. */ + static char quotechar; /*State 0: beginning of normal line 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++) { ch = *s; - /* This condition must be changed if the type of any - other character can be LEX_IS_STRINGQUOTE. */ if (ch == '\\' - || ch == '"' - || ch == '\'' + || ch == quotechar || ch == '\n') break; } @@ -558,12 +557,12 @@ do_scrub_chars (get, tostart, tolen) ch = GET (); if (ch == EOF) { - as_warn (_("end of file in string; inserted '\"'")); + as_warn (_("end of file in string; '%c' inserted"), quotechar); state = old_state; UNGET ('\n'); - PUT ('"'); + PUT (quotechar); } - else if (lex[ch] == LEX_IS_STRINGQUOTE) + else if (ch == quotechar) { state = old_state; PUT (ch); @@ -603,8 +602,8 @@ do_scrub_chars (get, tostart, tolen) continue; case EOF: - as_warn (_("end of file in string; '\"' inserted")); - PUT ('"'); + as_warn (_("end of file in string; '%c' inserted"), quotechar); + PUT (quotechar); continue; case '"': @@ -638,10 +637,9 @@ do_scrub_chars (get, tostart, tolen) case 7: ch = GET (); + quotechar = ch; state = 5; old_state = 8; - if (ch == EOF) - goto fromeof; PUT (ch); continue; @@ -952,6 +950,7 @@ do_scrub_chars (get, tostart, tolen) break; case LEX_IS_STRINGQUOTE: + quotechar = ch; if (state == 10) { /* Preserve the whitespace in foo "bar". */ @@ -1279,6 +1278,8 @@ do_scrub_chars (get, tostart, tolen) case 1: *to++ = *from++; } } + if (to >= toend) + goto tofull; ch = GET (); } } @@ -1297,7 +1298,7 @@ do_scrub_chars (get, tostart, tolen) } else if (state == 9) { - if (lex[ch] != LEX_IS_SYMBOL_COMPONENT) + if (!IS_SYMBOL_COMPONENT (ch)) state = 3; } else if (state == 10) diff --git a/gas/config/obj-amigahunk.c b/gas/config/obj-amigahunk.c index 8755475..95c7f5b 100644 --- a/gas/config/obj-amigahunk.c +++ b/gas/config/obj-amigahunk.c @@ -1,212 +1,277 @@ -/* AmigaOS object file format - Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of GAS, the GNU Assembler. - -GAS 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, -or (at your option) any later version. - -GAS 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 GAS; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -#include "as.h" - -enum { - N_UNDF=0, -/*N_ABS=2,*/ -/*N_TEXT=4,*/ -/*N_DATA=6,*/ -/*N_BSS=8,*/ - N_INDR=0xa, -/*N_COMM=0x12,*/ - N_SETA=0x14, - N_SETT=0x16, - N_SETD=0x18, - N_SETB=0x1a, -/*N_SETV=0x1c,*/ - N_WARNING=0x1e, -/*N_FN=0x1f*/ - N_EXT=1, - N_TYPE=0x1e, -/*N_STAB=0xe0,*/ -}; - -static void obj_amiga_line PARAMS ((int)); -static void obj_amiga_weak PARAMS ((int)); - -const pseudo_typeS obj_pseudo_table[] = -{ - {"line", obj_amiga_line, 0}, /* source code line number */ - {"weak", obj_amiga_weak, 0}, /* mark symbol as weak. */ - - /* other stuff */ - {"ABORT", s_abort, 0}, - - {NULL, NULL, 0} /* end sentinel */ -}; - -#ifdef BFD_ASSEMBLER - -void -obj_amiga_frob_symbol (sym, punt) - symbolS *sym; - int *punt ATTRIBUTE_UNUSED; -{ - sec_ptr sec = S_GET_SEGMENT (sym); - unsigned int type = amiga_symbol (symbol_get_bfdsym (sym))->type; - - /* Only frob simple symbols this way right now. */ - if (! (type & ~ (N_TYPE | N_EXT))) - { - if (type == (N_UNDF | N_EXT) - && sec == &bfd_abs_section) - { - sec = bfd_und_section_ptr; - S_SET_SEGMENT (sym, sec); - } - - if ((type & N_TYPE) != N_INDR - && (type & N_TYPE) != N_SETA - && (type & N_TYPE) != N_SETT - && (type & N_TYPE) != N_SETD - && (type & N_TYPE) != N_SETB - && type != N_WARNING - && (sec == &bfd_abs_section - || sec == &bfd_und_section)) - return; - if (symbol_get_bfdsym (sym)->flags & BSF_EXPORT) - type |= N_EXT; - - switch (type & N_TYPE) - { - case N_SETA: - case N_SETT: - case N_SETD: - case N_SETB: - /* Set the debugging flag for constructor symbols so that - BFD leaves them alone. */ - symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; - - /* You can't put a common symbol in a set. The way a set - element works is that the symbol has a definition and a - name, and the linker adds the definition to the set of - that name. That does not work for a common symbol, - because the linker can't tell which common symbol the - user means. FIXME: Using as_bad here may be - inappropriate, since the user may want to force a - particular type without regard to the semantics of sets; - on the other hand, we certainly don't want anybody to be - mislead into thinking that their code will work. */ - if (S_IS_COMMON (sym)) - as_bad (_("Attempt to put a common symbol into set %s"), - S_GET_NAME (sym)); - /* Similarly, you can't put an undefined symbol in a set. */ - else if (! S_IS_DEFINED (sym)) - as_bad (_("Attempt to put an undefined symbol into set %s"), - S_GET_NAME (sym)); - - break; - case N_INDR: - /* Put indirect symbols in the indirect section. */ - S_SET_SEGMENT (sym, bfd_ind_section_ptr); - symbol_get_bfdsym (sym)->flags |= BSF_INDIRECT; - if (type & N_EXT) - { - symbol_get_bfdsym (sym)->flags |= BSF_EXPORT; - symbol_get_bfdsym (sym)->flags &=~ BSF_LOCAL; - } - break; - case N_WARNING: - /* Mark warning symbols. */ - symbol_get_bfdsym (sym)->flags |= BSF_WARNING; - break; - } - } - else - { - symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; - } - - amiga_symbol (symbol_get_bfdsym (sym))->type = type; - - /* Double check weak symbols. */ - if (S_IS_WEAK (sym)) - { - if (S_IS_COMMON (sym)) - as_bad (_("Symbol `%s' can not be both weak and common"), - S_GET_NAME (sym)); - } -} - -void -obj_amiga_frob_file_before_fix () -{ - /* Relocation processing may require knowing the VMAs of the sections. - Since writing to a section will cause the BFD back end to compute the - VMAs, fake it out here.... */ - bfd_byte b = 0; - bfd_boolean x = TRUE; - if (bfd_section_size (stdoutput, text_section) != 0) - { - 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) - { - x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, - (bfd_size_type) 1); - } - assert (x); -} - -#endif /* BFD_ASSEMBLER */ - -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 (); -} +/* AmigaOS object file format + Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. + +This file is part of GAS, the GNU Assembler. + +GAS 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, +or (at your option) any later version. + +GAS 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 GAS; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#include "as.h" + +enum { + N_UNDF=0, +/*N_ABS=2,*/ +/*N_TEXT=4,*/ +/*N_DATA=6,*/ +/*N_BSS=8,*/ + N_INDR=0xa, +/*N_COMM=0x12,*/ + N_SETA=0x14, + N_SETT=0x16, + N_SETD=0x18, + N_SETB=0x1a, +/*N_SETV=0x1c,*/ + N_WARNING=0x1e, +/*N_FN=0x1f*/ + N_EXT=1, + N_TYPE=0x1e, +/*N_STAB=0xe0,*/ +}; + +static void obj_amiga_line PARAMS ((int)); +static void obj_amiga_weak PARAMS ((int)); +static void obj_amiga_section PARAMS((int)); +static char * obj_amiga_section_name PARAMS ((void)); + +const pseudo_typeS obj_pseudo_table[] = +{ + {"line", obj_amiga_line, 0}, /* source code line number */ + {"weak", obj_amiga_weak, 0}, /* mark symbol as weak. */ + + {"2byte", cons, 2}, + {"4byte", cons, 4}, + {"8byte", cons, 8}, + {"hidden", s_ignore, 0}, + {"local", s_ignore, 0}, + {"section", obj_amiga_section, 0}, + {"section.s", obj_amiga_section, 0}, + {"sect", obj_amiga_section, 0}, + {"sect.s", obj_amiga_section, 0}, + {"swbeg", s_ignore, 0}, + + /* other stuff */ + {"ABORT", s_abort, 0}, + + {NULL, NULL, 0} /* end sentinel */ +}; + +#ifdef BFD_ASSEMBLER + +void +obj_amiga_frob_symbol (sym, punt) + symbolS *sym; + int *punt ATTRIBUTE_UNUSED; +{ + sec_ptr sec = S_GET_SEGMENT (sym); + unsigned int type = amiga_symbol (symbol_get_bfdsym (sym))->type; + + /* Only frob simple symbols this way right now. */ + if (! (type & ~ (N_TYPE | N_EXT))) + { + if (type == (N_UNDF | N_EXT) + && sec == &bfd_abs_section) + { + sec = bfd_und_section_ptr; + S_SET_SEGMENT (sym, sec); + } + + if ((type & N_TYPE) != N_INDR + && (type & N_TYPE) != N_SETA + && (type & N_TYPE) != N_SETT + && (type & N_TYPE) != N_SETD + && (type & N_TYPE) != N_SETB + && type != N_WARNING + && (sec == &bfd_abs_section + || sec == &bfd_und_section)) + return; + if (symbol_get_bfdsym (sym)->flags & BSF_EXPORT) + type |= N_EXT; + + switch (type & N_TYPE) + { + case N_SETA: + case N_SETT: + case N_SETD: + case N_SETB: + /* Set the debugging flag for constructor symbols so that + BFD leaves them alone. */ + symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; + + /* You can't put a common symbol in a set. The way a set + element works is that the symbol has a definition and a + name, and the linker adds the definition to the set of + that name. That does not work for a common symbol, + because the linker can't tell which common symbol the + user means. FIXME: Using as_bad here may be + inappropriate, since the user may want to force a + particular type without regard to the semantics of sets; + on the other hand, we certainly don't want anybody to be + mislead into thinking that their code will work. */ + if (S_IS_COMMON (sym)) + as_bad (_("Attempt to put a common symbol into set %s"), + S_GET_NAME (sym)); + /* Similarly, you can't put an undefined symbol in a set. */ + else if (! S_IS_DEFINED (sym)) + as_bad (_("Attempt to put an undefined symbol into set %s"), + S_GET_NAME (sym)); + + break; + case N_INDR: + /* Put indirect symbols in the indirect section. */ + S_SET_SEGMENT (sym, bfd_ind_section_ptr); + symbol_get_bfdsym (sym)->flags |= BSF_INDIRECT; + if (type & N_EXT) + { + symbol_get_bfdsym (sym)->flags |= BSF_EXPORT; + symbol_get_bfdsym (sym)->flags &=~ BSF_LOCAL; + } + break; + case N_WARNING: + /* Mark warning symbols. */ + symbol_get_bfdsym (sym)->flags |= BSF_WARNING; + break; + } + } + else + { + symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; + } + + amiga_symbol (symbol_get_bfdsym (sym))->type = type; + + /* Double check weak symbols. */ + if (S_IS_WEAK (sym)) + { + if (S_IS_COMMON (sym)) + as_bad (_("Symbol `%s' can not be both weak and common"), + S_GET_NAME (sym)); + } +} + +void +obj_amiga_frob_file_before_fix () +{ + /* Relocation processing may require knowing the VMAs of the sections. + Since writing to a section will cause the BFD back end to compute the + VMAs, fake it out here.... */ + bfd_byte b = 0; + bfd_boolean x = TRUE; + if (bfd_section_size (stdoutput, text_section) != 0) + { + 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) + { + x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, + (bfd_size_type) 1); + } + assert (x); +} + +#endif /* BFD_ASSEMBLER */ + +/* Get name of section. */ +static char * +obj_amiga_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_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 (); +} diff --git a/gas/config/obj-aout.c b/gas/config/obj-aout.c index f823c74..ba4a2f2 100644 --- a/gas/config/obj-aout.c +++ b/gas/config/obj-aout.c @@ -75,6 +75,8 @@ const segT N_TYPE_seg[N_TYPE + 2] = static void obj_aout_line PARAMS ((int)); static void obj_aout_weak 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[] = { @@ -100,6 +102,17 @@ const pseudo_typeS aout_pseudo_table[] = {"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 */ {"ABORT", s_abort, 0}, @@ -229,6 +242,59 @@ obj_aout_frob_file_before_fix () #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. */ /* diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h index 0fa2ba6..98ed3e5 100644 --- a/gas/config/obj-elf.h +++ b/gas/config/obj-elf.h @@ -132,6 +132,10 @@ int elf_s_get_other PARAMS ((symbolS *)); (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V)) #endif +#ifndef S_GET_TYPE +#define S_GET_TYPE(S) (0) +#endif + extern asection *gdb_section; #ifndef obj_frob_file diff --git a/gas/read.c b/gas/read.c index 5f4626e..3592e19 100644 --- a/gas/read.c +++ b/gas/read.c @@ -237,6 +237,10 @@ static segT get_known_segmented_expression PARAMS ((expressionS * expP)); static void pobegin PARAMS ((void)); static int get_line_sb PARAMS ((sb *)); static void generate_file_debug PARAMS ((void)); +void ignore_rest_of_line (void); +static void ignore_rest_of_line2 (int); + + void read_begin () @@ -1425,7 +1429,8 @@ s_comm (ignore) #endif /* not OBJ_VMS */ 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) mri_comment_end (stop, stopc); @@ -3167,15 +3172,21 @@ demand_empty_rest_of_line () void ignore_rest_of_line () +{ + ignore_rest_of_line2(1); +} + +void +ignore_rest_of_line2 (int out) { /* For suspect lines: gives warning. */ if (!is_end_of_line[(unsigned char) *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); 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); while (input_line_pointer < buffer_limit @@ -3355,7 +3366,7 @@ parse_repeat_cons PARAMS ((expressionS *exp, unsigned int nbytes)); static void 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 c; diff --git a/gprof/Makefile.in b/gprof/Makefile.in index 9dcd874..bd4bc6e 100644 --- a/gprof/Makefile.in +++ b/gprof/Makefile.in @@ -192,7 +192,7 @@ TODO acinclude.m4 aclocal.m4 configure configure.in gconfig.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = gtar +TAR = tar GZIP_ENV = --best SOURCES = $(gprof_SOURCES) OBJECTS = $(gprof_OBJECTS) diff --git a/include/opcode/cgen-bitset.h b/include/opcode/cgen-bitset.h new file mode 100755 index 0000000..1b6fbe3 --- /dev/null +++ b/include/opcode/cgen-bitset.h @@ -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 diff --git a/ld/configure.tgt b/ld/configure.tgt index b7b4ffa..c62255c 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -341,7 +341,7 @@ sh64-*-elf*) m68k-sony-*) targ_emul=news ;; m68k-hp-bsd*) targ_emul=hp300bsd ;; 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*-*-coff) targ_emul=m68kcoff ;; m68*-*-elf) targ_emul=m68kelf ;; diff --git a/ld/emulparams/amiga.sh b/ld/emulparams/amiga.sh index c2915d4..d7a440e 100644 --- a/ld/emulparams/amiga.sh +++ b/ld/emulparams/amiga.sh @@ -4,3 +4,4 @@ TEXT_START_ADDR=0x0 SEGMENT_SIZE=0x0 TEMPLATE_NAME=amiga ARCH=m68k +EMULATION_NAME=amiga \ No newline at end of file diff --git a/ld/emulparams/amiga_bss.sh b/ld/emulparams/amiga_bss.sh index 5405d73..6447307 100644 --- a/ld/emulparams/amiga_bss.sh +++ b/ld/emulparams/amiga_bss.sh @@ -4,3 +4,4 @@ TEXT_START_ADDR=0x0 SEGMENT_SIZE=0x0 TEMPLATE_NAME=amiga ARCH=m68k +EMULATION_NAME=amiga_bss \ No newline at end of file diff --git a/ltconfig b/ltconfig index 3e19b48..7a4d635 100755 --- a/ltconfig +++ b/ltconfig @@ -1038,10 +1038,9 @@ aix4* | aix5*) ;; amigaos*) - library_names_spec='$libname.library $libname.a' + library_names_spec='$libname.ixlibrary $libname.a' # 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='/bin/true'; + 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' ;; beos*) diff --git a/md5.sum b/md5.sum index 6c3a630..e1b18af 100644 --- a/md5.sum +++ b/md5.sum @@ -5424,3 +5424,11 @@ aa9faff15fc4bc65940d62236b7f1de8 opcodes/z8k-opc.h 671f95a4f3f078b483390601bc8a729d symlink-tree 869b0770320db2cd18093b1a9ffafef8 texinfo/texinfo.tex 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