Annotation of GNUtools/cctools/as/notes, revision 1.1.1.1

1.1       root        1: Known bugs:
                      2: - The m88k instruction "tb0 0,r0,undef" trashes the instruction because of
                      3:   the undefined.
                      4: - 68k does not handle packed immediates (the tables have been changed to dis-
                      5:   allow this) because there is no routine to convert a flonum to a 68k packed
                      6:   form.
                      7: - The logical operators && and || are not implemented.
                      8: 
                      9: To do:
                     10: - Mark the instructions that are 601 specific (book IV) and registers with
                     11:   /* 601 only */ comments on them and flag as an error unless
                     12:   -force_cpusubtype_ALL is specified.
                     13: 
                     14: Bugs to be fixed:
                     15: - The m68k "jmp @(_foo)" is not legal and needs to be flaged.
                     16: 
                     17: Changes for the 4.0 release (the cctools-138 release):
                     18: - Picked up sparc.c & sparc-opcode.h.
                     19: 
                     20: Changes for the 4.0 release (the cctools-137 release):
                     21: - Picked up sparc.c.
                     22: 
                     23: Changes for the 4.0 release (the cctools-136 release):
                     24: - Change for sparc.c which cause relocation entries for call instructions to
                     25:   localy defined symbols to be emitted.
                     26: 
                     27: Changes for the 4.0 release (the cctools-135 release):
                     28: - Fix for Tracker 41317 [as(hppa) : does not support cache control hints.]
                     29:   as/hppa.c and as/hppa-opcode.h changed to add new parsing rule characters
                     30:   for cache control hints. The general format of the insruction supporting
                     31:   cache control hints is :
                     32:     <opcode>, cmpltr,cc  <operands>
                     33:  Here cmpltr can be <none>, in which case the formats supported are :
                     34:     <opcode>,,cc  <operands> or
                     35:     <opcode>,cc  <operands>
                     36:  The parser will take care of both.
                     37: 
                     38: Changes for the 4.0 release (the cctools-134 release):
                     39: - Picked up the sparc changes to the sparc.c.
                     40: 
                     41: Changes for the 4.0 release (the cctools-133 release):
                     42: - Picked up the sparc changes to the sparc.c and sparc-check.c.
                     43: 
                     44: Changes for the 4.0 release (the cctools-132 release):
                     45: - Picked up the sparc changes to the sparc.c.
                     46: - Picked up the sparc changes to the write_object.c for putting out the
                     47:   relocation entries.
                     48: - Picked up the sparc changes to the comments in fixup_section() in layout.c.
                     49: - Picked up the sparc s_seg() routine in read.c.
                     50: - Picked up the sparc-check stuff in the Makefile and sparc-check.c.
                     51: - Made the assembler ProjectBuilder aware and send its error and warning
                     52:   messages to ProjectBuilder (bug #40745).
                     53: - Added -dynamic to eventually replace -NEXTSTEP-deployment-target 3.3 and
                     54:   -static to eventually replace -NEXTSTEP-deployment-target 3.2.  Changed all
                     55:   the incompatiblity error messages to use -dynamic.
                     56: 
                     57: Changes for the 3.3 release (the cctools-131 release):
                     58: - Fixed a bug in md_estimate_size_before_relax() in i386.c that caused all
                     59:   branches to be long.  The problem was with the change ti a full Mach-O
                     60:   assembler the test for symbols in the section changed and the code was not
                     61:   changed (bug #43745).
                     62: 
                     63: Changes for the 3.3 release (the cctools-128 release):
                     64: - Picked up the bug fix for 42587 made in cctools-119.1 for the 3.2hp release.
                     65:   "Hangs if tried to enter a register number in hex format".  The test case
                     66:   is the instruction "ldcwx 0xc(0,%r1),%r2".
                     67: 
                     68: Changes for the 3.3 release (the cctools-127 release):
                     69: - Changed the hppa picsymbol_stub size to 32 bytes.
                     70: - Changed the order of the output of the assembler's symbolic info to this:
                     71:     relocation entries (by section)
                     72:     indirect symbol table
                     73:     symbol table
                     74:     string table
                     75: - Moved the sparc assember to /usr/local/bin for now (bug #42033).
                     76: 
                     77: Changes for the 3.3 release (the cctools-122 release):
                     78: - Had to give up on checking indirect symbol because the m68k pic symbol stubs
                     79:   generate machine dependent frags that get relaxed later.  The code in symbol.c
                     80:   in indirect_symbol_new() was ifdef'ed CHECK_INDIRECTS which is off.
                     81: - Fixed another bug in the m68k assembler when trying to parse '#L0-"x:y:z"'
                     82:   in crack_operand() in m68k.c.  It needed to know about "'ed symbol names to
                     83:   correctly step over them.
                     84: - Fixed a bug that showed up in the m68k assembler when trying to assemble the
                     85:   expression in the instruction: 'addl #L0-"L1",a1' .  This is a problem in the
                     86:   way get_symbol_end() works and is used.  get_symbol_end() writes a '\0' on the
                     87:   symbol's trailing " which does not get replaced with a " later.  So I fixed
                     88:   This on in operand() when it calls get_symbol_end() and it knows the name
                     89:   started with a ".  Later when it is replacing the character returned from
                     90:   get_symbol_end() back into input_line_pointer it also replaces the " if the
                     91:   name started with a ".  This a may have to be done in other places some day.
                     92: - Fixed a bug in indirect_symbol_new() where we first see if the last frag
                     93:   recorded for an indirect symbol turned out to be zero sized then changed that
                     94:   recorded frag to the next non-zero frag in the list.  I think this happens
                     95:   because we record the frag before we fill it and if we run out of space that
                     96:   frag gets a zero size and a new one is created.
                     97: - Added the flag -NEXTSTEP-deployment-target which takes either 3.2 or 3.3 as
                     98:   arguments.  With 3.3 it turns on the -k flag.  Also the warnings about
                     99:   incompatible features that printed -k were changed.
                    100: 
                    101: Changes for the 3.3 release (the cctools-120 release):
                    102: - Fixed a bug in that caused the symbol table to be trashed when -L was used and
                    103:   the input file had a global symbol that started with 'L'.  The fix was in
                    104:   layout_symbols() in write_object.c that corrected the assumption that all 'L'
                    105:   symbols were non-external.
                    106: - Fixed a bug in the i386 assembler that did not allow symbols like "[Foo bar:]"
                    107:   to be parsed as operands.  This fix was made in i386.c, first was to add "
                    108:   to operand_special_chars[] array, second was to add some code in md_assemble()
                    109:   in the loop that parses operands to scan for the ending " if an operand has
                    110:   one.
                    111: - Set the sizes for the i386 .symbol_stub and .picsymbol_stub to 24 and 26.
                    112: 
                    113: Changes for the 3.3 release (the cctools-119 release):
                    114: - Picked up first round of changes for the sparc target.  This work is
                    115:   incomplete.
                    116: 
                    117: Changes for the 3.3 release (the cctools-116 release):
                    118: - Fixed a bug when -n is used on a file containing just a .zerofill directive
                    119:   the assembler core dumped indirecting through frag_now in layout_addresses()
                    120:   in layout.c.  A check for frag_now being NULL was added.
                    121:   
                    122: Changes for the 3.3 release (the cctools-115 release):
                    123: - Changed the way the m68k assembler handles the operand "pc@(symbol-.)" to
                    124:   make the value of "." the value of the instruction after the opcode.  This
                    125:   is needed so that when this operand is used in a symbol stub to reference the
                    126:   lazy pointer an any offset in the expression "symbol1-symbol2+offset" will
                    127:   correctly apply to symbol1 and the check in the link editor can figure out
                    128:   which lazy pointer is being referenced by the relocation entry.
                    129: - Fixed a bug in indirect_symbol_new() when a section changed occured between
                    130:   .indirect_symbol directives it thought it was a bad or missing indirect
                    131:   symbol.  This was because there were zero length frags created on the section
                    132:   change.  Code was added to find the last real frag by skiping the zero length
                    133:   frags at the end.
                    134: 
                    135: Changes for the 3.3 release (the cctools-112 also 111.1 release):
                    136: - Picked up a fix for the hppa assembler that caused (bug #39710):
                    137:        comib,<> 0,%r19,LBE2
                    138:        nop
                    139:        nop
                    140:        nop
                    141:        nop
                    142:     LBE2:
                    143:        nop
                    144:   Not to assemble correctly as it didn't do the relocation.  The fix was in
                    145:   hppa.c where the following constant was stuff in char field which it does not
                    146:   fit:
                    147:     32c32
                    148:     < #define HPPA_RELOC_12BRANCH (127) /* only used internal in here */
                    149:     ---
                    150:     > #define HPPA_RELOC_12BRANCH (1000) /* only used internal in here */
                    151: - Fix a bug in the hppa assembler (bug 40043) that did not assemble 
                    152:   "ble R`0xc0000004(%sr4,%r1)" correctly.  The code noticed that the expression
                    153:   was absolute but failed to remember the instruction takes a word (not a byte)
                    154:   displacement.  In hppa.c:
                    155:     804c804
                    156:     <                                       dis_assemble_17(im14>>2,&w1,&w2,&w);
                    157:     ---
                    158:     >                                       dis_assemble_17(im14,&w1,&w2,&w);
                    159: 
                    160: Changes for the 3.3 release (the cctools-111 release):
                    161: - Fixed a bug in parsing octal characters \ooo out of strings that would not
                    162:   stop after picking up at most 3 characters and not stop if the digit was not
                    163:   an octal digit.  The fix was in next_char_of_string() in read.c (bug #39363).
                    164: - Fixed a bug in the i386 assember that the instruction "call 0" caused the
                    165:   assembler to core dump.  The fix was to md_assemble() in i386.c at line 1352
                    166:   where an SEG_ABSOLUTE has a NULL i.disps[0]->X_add_symbol which was not tested
                    167:   for.  This was in the code that caused relocation entries for calls to be
                    168:   generated for scattered loading.
                    169: - Fixed a bug when an unlink() was needed before the creation of the output
                    170:   file so that clones are handled correctly.  The fix was in write_object()
                    171:   at the end just before the call to open().
                    172: - Fixed a bug in the native hppa assembler that put an extra 4 bytes of zero in
                    173:   the text section.  The problem was caused by frags being aligned to the
                    174:   default which turns out to be 8 on the hppa in the obstack code.  The fix was
                    175:   to change the obstack_begin() call in section_new() in sections.c to use
                    176:   _obstack_begin() and specifiy a 4 byte alignment.
                    177: 
                    178: Changes for the 3.3 release (the cctools-108 release):
                    179: - Fixed a bug for the i386 which caused scattered loading not to work because
                    180:   it did not create a relocation entry for local calls to symbols that were in
                    181:   the output file.  The change is at line 1352 in i386.c in md_assemble().
                    182: 
                    183: Changes for the 3.3 release (the cctools-104 release):
                    184: - Changed the code from using COMPAT_NeXT3_2 ifdef's to using flagseen['k'] and
                    185:   requiring -k when the new incompatable features are being used.
                    186: - Fixed a bug in the JBSR relocation type for non-external relocation types
                    187:   where the other_part (stored in the r_address of the pair) which is an offset
                    188:   from the start of the section address had the base address of the section in
                    189:   it (the fix was to subtract sect_addr in this case in at the end of 
                    190:   fix_to_relocation_entries() in write_object.c in the JBSR case).
                    191:  - Fixed a 3.2 compatiblity problem introduced with putting the symbol table
                    192:   before the relocation entries which caused strip not to work since the
                    193:   symbol table and string table were not at the end of the file.  A set of
                    194:   #ifdef COMPAT_NeXT3_2 were added to write_object.c when assigning the 
                    195:   offset to the symbol table.
                    196: - Added the use of the reserved1 field in the section header for indirect
                    197:   sections to be the index into the indirect symbol table for that section.
                    198:   One line change in layout_indirect_symbols() in write_object.c.
                    199: 
                    200: Changes for the 3.3 release (the cctools-103 release):
                    201: - Fixed a bug in s_lcomm() in read.c that did not propagate the alignment to
                    202:   the section header leaving the bss section with an alignment of 0 and failing
                    203:   to align the starting address of the section.
                    204: 
                    205: Changes for the 3.3 release (the cctools-102 release):
                    206: - Integrated in the hppa support.
                    207:   * Added the SECTDIFF support for the hppa with the HI21 and LO14 SECTDIFF
                    208:     relocation types.
                    209:   * Fixed the use of calc_hppa_HILO() in md_number_to_imm() in hppa.c to
                    210:     correctly pass the symbol value and offset value as the two first
                    211:     parameters.
                    212: different as/Mach-O.c (integrated for cctools-102, logicly into write_object.c)
                    213:      Using cctoolshppa-37 with diffs minimized for format changes.  New stuff
                    214:      for hppa relocation entries.
                    215: different as/Makefile (integrated for cctools-102)
                    216:      Using cctoolshppa-37 with diffs minimized for format changes.  New stuff
                    217:      for hppa assembler and new hppa files.
                    218:   Changes for cctools-102
                    219:      Added -DNEW_FORMAT to ahppa_test target's COPTS.  Removed ASFLAGS=-W from
                    220:      ahppa_test target.
                    221: different as/app.c (started integrating for cctools-102)
                    222:      Using cctoolshppa-37. Has a bunch of code to deal with field selectors
                    223:      (of the form L'expression) the code has comments about a BUG to be fixed.
                    224:   Changes for cctools-102
                    225:      Picked up 4 additional "#if ... defined(HPPA)" so '@' can be used as a
                    226:      statement separator and // used as a comment.
                    227:      Not picked up: the field selectors stuff.  In talking to Umesh he said this
                    228:      was no longer needed as they changed from L' to L` for field selectors.
                    229: different as/as.c (integrated for cctools-102)
                    230:      Using cctoolshppa-37. New stuff for hppa cputype, CPU_SUBTYPE_HPPA_ALL and
                    231:      -arch hppa.
                    232: different as/read.c (no changes for cctools-102)
                    233:      Two real changes plucked from cctoolshppa-37:
                    234:      1) Add the include hppa.h ifdef'ed HPPA
                    235:      2) Also there is an issue with the completer ",=" not being treated as an
                    236:        assignment.  The cctools-100 changes appear to also fix this.
                    237:      There still is a bug with spaces around "=" for assignments.
                    238:      The cctools-100 changes have fixed this.
                    239: different as/write.c (integrated for cctools-102, this now in write_object.c)
                    240:      One real changes plucked from cctoolshppa-37:
                    241:      1) Add the include hppa.h ifdef'ed HPPA
                    242: Only in cctoolshppa-37/as: hppa-aux.c (picked up for cctools-102)
                    243:     Pick up cctoolshppa-37/as/hppa-aux.c from cctoolshppa-37.
                    244: Only in cctoolshppa-37/as: hppa-aux.h (picked up for cctools-102)
                    245:     Pick up cctoolshppa-37/as/hppa-aux.h from cctoolshppa-37.
                    246: Only in cctoolshppa-37/as: hppa-check.c (picked up for cctools-102)
                    247:     Pick up cctoolshppa-37/as/hppa-check.c from cctoolshppa-37.
                    248: Only in cctoolshppa-37/as: hppa-ctrl-func.c (picked up for cctools-102)
                    249:     Pick up cctoolshppa-37/as/hppa-ctrl-func.c from cctoolshppa-37.
                    250: Only in cctoolshppa-37/as: hppa-ctrl-func.h (picked up for cctools-102)
                    251:     Pick up cctoolshppa-37/as/hppa-ctrl-func.h from cctoolshppa-37.
                    252: Only in cctoolshppa-37/as: hppa-opcode.h (picked up for cctools-102)
                    253:     Pick up cctoolshppa-37/as/hppa-opcode.h from cctoolshppa-37.
                    254: Only in cctoolshppa-37/as: hppa.c (picked up for cctools-102)
                    255:     Pick up cctoolshppa-37/as/hppa.c from cctoolshppa-37 and changed
                    256:     HPPA_RELOC_NORELOC to NO_RELOC in three places.
                    257:   Changes for cctools-102 to allow hppa.h to be removed:
                    258:        were to add these lines:
                    259:        #include <mach-o/hppa/reloc.h>
                    260:        #define HPPA_RELOC_12BRANCH (1000) /* only used internal in here */
                    261: Only in cctoolshppa-37/as: hppa.h (NOT picked up for cctools-102)
                    262:     Pick up cctoolshppa-37/as/hppa.h from cctoolshppa-37 and change:
                    263:     Changed lines 33 and 34 from:
                    264:        #define    NO_RELOC             HPPA_RELOC_NORELOC
                    265:        #define    HPPA_RELOC_12BRANCH  (HPPA_RELOC_NORELOC + 1000)
                    266:     to:
                    267:        #define    NO_RELOC             0x10 /* out side the range of r_type:4*/
                    268:        #define    HPPA_RELOC_12BRANCH  (NO_RELOC + 1000)
                    269:     So HPPA_RELOC_NORELOC could be removed from mach-o/hppa/reloc.h .
                    270: 
                    271:     Removed line 38 which was:
                    272:        extern int next_char_of_string();
                    273:     It is static in read.c and was changed for no apperent reason.
                    274: 
                    275: Changes for the 3.3 release (the cctools-101 release):
                    276: - Second major round of changes for the new shlib stuff.
                    277:   1) Added the LC_DYSYMTAB load command to the object file format and
                    278:      organization of the symbol table and string table as well as the layout
                    279:      of the relocation entries.
                    280:   2) Added the support for the indirect symbol sections and stub sections.  This
                    281:      added 3 new types of sections, some new section directives, and indirect
                    282:      symbols and the creation of the indirect symbol table and marking of
                    283:      symbols as lazy bound undefined.
                    284: - For the m68k fixed the code in m68k_ip() for the "Bg", "Bw", and "Bc" branches
                    285:   as many parts did not work.  Now things like "bra foo:w" works.  To make this
                    286:   work m68k_ip_op() was changed to not strip off the ":w" and not set the 
                    287:   opP->isiz field but to use get_num() and use the e_siz field.  This only
                    288:   effected the ABSL case.
                    289: - Made a bit of an ugly fix for "jbsr foo:w" and "jra foo:w" which is trying to
                    290:   force the word from.  So to make this always work when foo is an absolute
                    291:   number that fits in a word the instruction is changed from the "bsr" form to
                    292:   the "jsr" form (or from the "bra" to "jmp") which does not use a displacement
                    293:   and is not effected by the address of the instruction.
                    294: 
                    295: Changes for the 3.3 release (the cctools-100 release):
                    296: - First major round of changes for the new shlib stuff.
                    297:   1) Major restructuring and clean up for support of a true Mach-O assembler
                    298:      which includes .section and .zerofill directives for arbitrary sections.
                    299:   2) Support for possition-independent code through the SECTDIFF relocataion
                    300:      type (these changes are ifdef'ed COMPAT_NeXT_3_2 as the will produce
                    301:      object files that are incompatible with the 3.2 release).
                    302:   3) Support for .private_extern directive (again ifdef'ed COMPAT_NeXT_3_2).
                    303: - Fixed a bug in try_to_make_absolute() which when changing an expression to
                    304:   absolute did not set the add_symbol and subtract_symbol fields to NULL which
                    305:   caused the wrong fixup to be done that used the expression with a fixup
                    306:   (bug #37382).
                    307: 
                    308: Changes for the 3.2 release (the cctools-25 release):
                    309: - Added forms of shld and shrd with two operands that imply the cl register.
                    310: - Added missing opcode table entries for the i386 instructions fcom and fcomp
                    311:   with no arguments in i386-opcode.h.
                    312: - Fixed "0: jmp 0b" which did not work, 0 was the problem in the 0b (1-9 work).
                    313:   This was a problem in operand() in expr.c when 0b... expressions were added
                    314:   (bug #8331) and the fix was to look to see of the next character was the end
                    315:   of the line or not a hex digit.
                    316: 
                    317: Changes for the 3.1 release (the cctools-20 release):
                    318: - Fixed a bug for the m98k that did not correctly check for too few parameters.
                    319:   Two bugs here one in calcomp that was testing != NONE which should have been
                    320:   == NONE and a bug in md_assemble in advanceing past the '+' or '-' when it
                    321:   did not exist and there was nothing but a '\0' after the op it advanced past
                    322:   it.
                    323: 
                    324: Changes for the 3.1 release (the cctools-16 release):
                    325: - Fixed a bug with the m98k opcodes for stwcx. stdcx. where bit 0 was not set
                    326:   to a 1.
                    327: - Changed the following instructions so that for the SH field the value 32 (or
                    328:   64) assembles as 0: rldicl rldicl.  rldicr rldicr.  rldic rldic.  rldimi
                    329:   rldimi.  rlwinm rlwinm.  rlwimi rlwimi.
                    330: - Fixed a bug in the m98k assembler where the value of exprressions which was
                    331:   exactly (1 << width) was not treated as an error (4 places > was changed to
                    332:   >= in m98k.c).
                    333: 
                    334: Changes for the 3.1 release (the cctools-15 release):
                    335: - Moved the m88k and m98k to be install in /usr/local/lib not /lib.
                    336: - Fixed a bug in the m98k assembler that did not detect instructions with too
                    337:   many parameters.
                    338: - Added macros and register names for batX[ul] the same as ibatX[ul] since the
                    339:   601 does not have split i and d for these.
                    340: - Changed the m98k instruction's "icbi" first paramenter to G0REG from GREG.
                    341: - Back out the below fix and added new code in try_to_make_absolute() that
                    342:   walked the frags between the the symbols L0 and L1 to calculate the absolute
                    343:   value.
                    344: - Fixed a bug where the expression L1-L0 was not coming up right when it had a
                    345:   .align between L0 and L1.  A hack was removed from try_to_make_absolute() in
                    346:   expr.c that had the code ifdef out that was trying to say the expresion could 
                    347:   change due to relaxation.  The the routine s_align() in read.c was ifdef
                    348:   RISC to do the alignment instead of creating an align frag.
                    349: 
                    350: Changes for the 3.1 release (the cctools-14 release):
                    351: - Added a form of fcmpu and fcmpo that takes a crX as it's first argument.
                    352: - Added the opcodes for tlbiex (31,338) and tlbia (31,370).
                    353: - Fixed a bug in the m68k assembler where the code to handle implementation
                    354:   specific instructions had || in two places where && was supposed to be.
                    355:   The change was on lines 2693 and 2706 in md_assemble() in m68k.c .
                    356: - Changed the m98k instructions: lwarx, ldarx, stwcx. and stdcx. second arg from
                    357:   GREG to G0REG.
                    358: - Fixed the Makefile to install the m98k assembler it built.
                    359: 
                    360: Changes for the 3.1 release (the cctools-13 release):
                    361: - Added the m98k (PowerPC) architecture.
                    362: 
                    363: Changes for the 3.1 release (the cctools-10 release):
                    364: - Changed the default .include directories to /NextDeveloper/Headers and
                    365:   /LocalDeveloper/Headers in as.c and made them work (the default never
                    366:   worked).
                    367: - Corrected the following table entries for i386 floating point instructions
                    368:   which had a FloatD or'ed into them which was wrong: faddp, fmulp.
                    369: - Fixed a bug that caused an error message that a segment override was specified
                    370:   more than once for string instructions for the i386.  The fix was in i386.c
                    371:   where i.seg was need to be set to zero after the string instruction operands
                    372:   were parsed (bug #29867).
                    373: - Fixed the assembler driver /bin/as to take machine specific architecture
                    374:   flags and run the family architecture named assembler.  So "as -arch m68040"
                    375:   will run /lib/m68k/as and not /lib/m68040/as.
                    376: - Changed the handling of the cpusubtypes to support this design:
                    377:     The design allows each architecture family (m68k, m88k, i386) to have a
                    378:     cpusubtype that will run on all implementations of that architecture and
                    379:     have cpusubtypes that will run only on specific implementations of an
                    380:     architecture.  The design also gives the programmer the option to force the
                    381:     cpusubtype indicating all implementations (at build time with a flag) when
                    382:     using instructions that are implementation specific leaving it up to the
                    383:     program to runtime select the correct code to execute.
                    384:   The assemblers implementation of this design is:
                    385:     By default the assembler will produce the cpusubtype ALL for the object file
                    386:     it is assembling if it finds no implementation specific instructions.  Again
                    387:     by default the assembler will allow implementation specific instructions for
                    388:     implementations and combine the cpusubtype for those specific
                    389:     implementations.  The combining of specific implementations is architecture
                    390:     dependent and may not be allowed for some architectures and are flagged as
                    391:     an error.  With the optional -force_cpusubtype_ALL flag all instructions
                    392:     are allowed and the object file's cpusubtype will be ALL.
                    393:     If an -arch flag for a specific implementation (ie. -arch m68040 or -arch
                    394:     i586) is used the assembler will flag as errors instructions that are not
                    395:     supported on that architecture and produce the cpusubtype for that specific
                    396:     implementation in the object file (even if no specific instructions are
                    397:     used).
                    398:   This effected as.c, as.h, Mach-O.c, m68k.c, m68k-opcode.h, i386.c, i386.h, and
                    399:   i386-opcode.h.  The m88k and i860 assemblers had no machine specific
                    400:   modifications.
                    401: 
                    402: Changes for the 3.1 release (the cctools-9 release):
                    403: - Fixed a bug that caused the .include feature to fail in some cases.  The value
                    404:   of the stuff saved by save_scrub_context() in app.c was not reset which caused
                    405:   the app preprecessor to start parsing the included file and think it was in
                    406:   the case of a string.
                    407: 
                    408: Changes for the 3.1 release (the cctools-8 release):
                    409: - Fixed a bug the did not cause m68k floating point branchs to undefined symbols
                    410:   to have relocation entries that make it to the object file to work with
                    411:   scattered loading.  On line 3299 in m68k.c was:
                    412:        fix_new(fragP,(int)(fragP->fr_fix),4,fragP->fr_symbol,
                    413:                (symbolS *)0,fragP->fr_offset+4,1);
                    414:   changed to:
                    415:        fix_new(fragP,(int)(fragP->fr_fix),4,fragP->fr_symbol,
                    416:                (symbolS *)0,fragP->fr_offset+4,1+2);
                    417: - Fixed a bug in the i386 assembler for these two instructions where the segment
                    418:   override did not get picked up from:
                    419:        mov     %eax,%gs:sr_mem_offset
                    420:        jmp     %gs:sr_mem_offset
                    421:   The first is bug #29555 the second is just another form of the same logic bug
                    422:   in another place.  There maybe more of this same logic bug.  The fixes are in
                    423:   i386.c in md_assemble() when putting out the opcode.
                    424: - Fixed a bug in the string instructions where segment overrides in the operand
                    425:   fields were not picked up.  To do this the kludge that ignored the operands
                    426:   of string instructions had to be removed as special case table entries and
                    427:   matching checking had to be added (bug #26409).
                    428: - Fixed a bug in the i386 assembler where the invlpg instruction did not take
                    429:   a Mem operand (it was Mem32).  The fix was in the table entry for invlpg in
                    430:   i386-opcode.h (change requested by the Lono group).  The manual is confusing
                    431:   on this instruction.
                    432: - Fixed a bug in the i386 assembler where a call or jmp instruction to an
                    433:   absolute address was not getting put out pc relitive and no relocation entry
                    434:   was produced (line 1050 and line 1155 in i386.c).
                    435: - Fixed the problem of getting alignment correct for .align directives that are
                    436:   greater than the default alignment.  This effected the struct frchain in
                    437:   subsegs.h, the routine set_section_align() in Mach-O.c and the routine
                    438:   write_object_file() in write.c and the initialization of the new field in
                    439:   subsegs.c (bug #29432).
                    440: - Changed the I386 bound instruction such that the parameters are consistant
                    441:   with gas (reversed them).  Also fixed the boundw so it only put out one '0x66'
                    442:   data16 prefix byte.
                    443: - Fixed a bug for the I386 that padded the text section with zeros (changed to
                    444:   pad with nops) in write.c.
                    445: - Added the wait (0x9b) prefix to the following instructions: "finit", "fstcw",
                    446:   "fstsw", "fclex", "fstenv" and "fsave" the "XnXXX" form does not have the
                    447:   wait prefix.
                    448: - Added "fucom" as an alias for "fucom %st(1)"
                    449: - Added "fucomp" as an alias for "fucomp %st(1)"
                    450: 
                    451: Changes for the 3.1 release (the cctools-7 release):
                    452: - Added the i486 and i586 specific stuff to i386-opcode.h (bug #27475).  The
                    453:   changes are ifdef'ed i486 and i586 and these are turned in in the Makefile.
                    454:   Also the define STRICT_i586 is ifdef'ed (but not defined) where the i586 does
                    455:   not allow certian things (test register instructions).
                    456: - Fixed a bug in md_assemble() in i386.c where the instruction "mov %ah,%al"
                    457:   would assemble wrong.  The problem was when the suffix was selected based
                    458:   on the register type the "i.types[o]" needed to and'ed with `Reg' because
                    459:   %al and %ax have `Acc' in their types and they were coming up with a 'l'
                    460:   suffix.  This is ifdefed NeXT.
                    461: - Fixed a bug in m68k_reg_parse() in m68k.c where the registers "ic", dc" and
                    462:   "bc" were incorrectly parsed because of an "if (c2 = 'c')" (bug #27954).
                    463: - Added an ifdef CHECK_WORD_IMMEDIATES in m68k.c and code to make checking of
                    464:   16-bit immediates consistant in the m68k assembler (bug #26863).  Also to make
                    465:   this work the "link" (no suffix) for an immediate word entry in m68k-opcode.h
                    466:   had a new "place" character created for it (#z for #w) and code was added to
                    467:   m68k.c to handle it.  The define CHECK_WORD_IMMEDIATES is left off to cause
                    468:   truncation of too large immediate words.
                    469: - Fixed a bug that did not allow -arch and -arch_multiple (as.c).  This was
                    470:   put in to the NRW cctools-6 but not into lono's.
                    471: 
                    472: Changes for the 3.1 release (the cctools-6 release):
                    473: - Added the -arch_multiple flag that will cause one line to printed before all
                    474:   error messages which will contain the architecture name.
                    475: - Fixed the m88k pmul and punpk instructions where the last register is not
                    476:   required to be an even register.
                    477: - Fixed a bug in atof-ieee.c in gen_to_words() that did not round IEEE denorms
                    478:   correctly and caused the smallest denorm to become zero (bug #23178).
                    479: 
                    480: Changes for the 3.1 release (the cctools-5 release):
                    481: - Picked up the lono team's cctools-4_2 i386-opcode.h .
                    482: - Added the pseudo op for the m88k assembler ".dot symbol" that sets the value
                    483:   of the location counter into the value of the symbol.
                    484: - Removed the trnc.x mnemonic as it is not legal "trnc.sx" is the correct form
                    485:   which remains in m88k-opcode.h
                    486:  { 0x8400d900, "trnc.x",      { {21,5,REG},      {0,5,XREG},   {0,0,NIL}   } },
                    487: 
                    488: Changes for the 3.1 release (the cctools-4 release):
                    489: - Fixed a bug in parse_cst() in m88k.c that did not allow expressions for
                    490:   constant operands.  This bug was found with "tb0 0,r0,(129)" where the
                    491:   ()'s caused the problem. (bug #21052)
                    492: - Changed installing the i386 assembler into /lib/i386/as from ix86 (and changed
                    493:   the -arch name to i386).
                    494: - Changed CPU_TYPE_I80x86 to CPU_TYPE_I386 in Mach-O.c
                    495: - Picked up the changes for the i386 assembler to allow scattered loading from
                    496:   the lono team.
                    497: 
                    498: Changes for the 3.0 release (the -57 compiler release)
                    499: - Removed the following opcodes from m88k-opcode.h as siff(1) and the newest
                    500:   110 manual says they are not valid.
                    501:  { 0X840008A0, "fcvt.dd",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
                    502:  { 0X840088A0, "fcvt.dd",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
                    503:  { 0X84000800, "fcvt.ss",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
                    504:  { 0X84008800, "fcvt.ss",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
                    505:  { 0X84000800, "fcvt.ss",     { {21,5,REG},      {0,5,REG},    {0,0,NIL}   } },
                    506:  { 0X84008800, "fcvt.ss",     { {21,5,XREG},     {0,5,XREG},   {0,0,NIL}   } },
                    507:   (bug #20021)
                    508: - Fixed a bug introduced with the change of the SUB_SEGMENT_ALIGN.  It turns
                    509:   out it broke the objective-C runtime that assumed that the __protocol section
                    510:   (amoung others) can be indexed like an array of structs which are not
                    511:   multiples of 8 bytes.  The fix was to align all objective-C sections to 4
                    512:   bytes.  Again the change was in write_object_file() in write.c (bug #20022).
                    513: 
                    514: Changes for the 3.0 release (the -56 compiler release) (performance month):
                    515: - Changed the order of the objective-C sections.  The message_refs and the
                    516:   cls_refs section were switched.  The meta_cls_refs section was removed.
                    517:   This change effected Mach-O.c, write.c and read.c.
                    518: - Changed write_object_file() in write.c to used the normal subsegment
                    519:   alignment:
                    520:     #ifdef RISC
                    521:     #define SUB_SEGMENT_ALIGN (3)
                    522:     #else
                    523:     #define SUB_SEGMENT_ALIGN (2)
                    524:     #endif
                    525:   and handle the literal pointer sections special (by knowing their subsegment
                    526:   values).  This fixes a problem on the m88k where the const section had a
                    527:   .align 3 directive but started on a align of 2 boundary.  This still has
                    528:   the problem if a section has an align greater 3 the data in the output file
                    529:   will end up aligned correctly but the section start will not resulting in
                    530:   the link edited object to having the data not aligned correctly. (bug #19492)
                    531: 
                    532: Changes for the 3.0 release (the -55 compiler release) (performance month):
                    533: - Changed the Makefile to install the driver in /usr/local/bin and the 68k
                    534:   assembler in /bin/as and all other assemblers in /usr/local/lib/* .
                    535: - Changed the as driver (driver.c) to look in /lib and in /usr/local/lib for
                    536:   assemblers.
                    537: - Changed the order of the objective-C setions to:
                    538:     2  (__OBJC,__class)
                    539:     3  (__OBJC,__meta_class)
                    540:     4  (__OBJC,__string_object)
                    541:     5  (__OBJC,__protocol)
                    542:     6  (__OBJC,__cat_cls_meth)
                    543:     7  (__OBJC,__cat_inst_meth)
                    544:     8  (__OBJC,__cls_meth)
                    545:     9  (__OBJC,__inst_meth)
                    546:     10 (__OBJC,__cls_refs)
                    547:     11 (__OBJC,__meta_cls_refs)
                    548:     12 (__OBJC,__message_refs)
                    549:     13 (__OBJC,__class_names)
                    550:     14 (__OBJC,__module_info)
                    551:     15 (__OBJC,__symbols)
                    552:     16 (__OBJC,__category)
                    553:     17 (__OBJC,__meth_var_types)
                    554:     18 (__OBJC,__class_vars)
                    555:     19 (__OBJC,__instance_vars)
                    556:     20 (__OBJC,__meth_var_names)
                    557:     21 (__OBJC,__selector_strs)
                    558:   Also the special casing of the objective-C section in determing to created a
                    559:   scatter or non-scattered relocation entry was removed for all but the
                    560:   (__OBJC,__selector_strs) section.  The directive ".objc_selector_refs"
                    561:   is still there and the cc-55 compiler will be changed to use the correct
                    562:   directive ".objc_message_refs" and then this can be removed.  These changes
                    563:   effected read.c and Mach-O.c
                    564: 
                    565: Changes for the 3.0 release (the -54 compiler release) (performance fortnight):
                    566: - Added three string sections to the Objective-C segment:
                    567:        .objc_class_names,      __OBJC __class_names
                    568:        .objc_meth_var_names,   __OBJC __meth_var_names
                    569:        .objc_meth_var_types,   __OBJC __meth_var_types
                    570:   This effected read.c and Mach-O.c.
                    571: - Added the following lines to i386-opcode.h at the request of the lono guys:
                    572:     {"repz", 0, 0xf3, _, NoModrm, 0, 0, 0},
                    573:     { "repnz", 0, 0xf2, _, NoModrm, 0, 0, 0},
                    574:   Plus allow .word on the ix86 (ifdef added in read.c).
                    575: - Added const to lex_type, is_end_of_line, potable in read.c to make read-only.
                    576: - Added const to op_encoding in expr.c to make read-only.
                    577: - Added const to m68k_opcodes and endop in m68k-opcode.h to make read-only.
                    578: - Changed in_buf in input-file.c to allways be malloc()'ed.
                    579: - Added const to the Makefile for the next_version.c echo line.
                    580: 
                    581: Changes for the 3.0 release (the -51 compiler release):
                    582: - Changed Mach-O.c to pad out the string table to a multiple of 4 and set the
                    583:   padded bytes to '\0'.
                    584: 
                    585: Changes for the 3.0 release (the -50 compiler release):
                    586: - Changed the instructions f[sd]sqrtx for operands FPm,FPn and FPm to f[sd]sqrt
                    587:   (without the trailing 'x').  This was just wrong (but the moto opcode is
                    588:   inconsistant with all others in this case).
                    589: - Fixed a bug in the fsincos instruction where the FPc and FPs registers were
                    590:   switched in the instruction.
                    591: - Changed the order of the objective-C classes to:
                    592: __class                - always written on
                    593: __meta_class   - always written on
                    594: __string_object        - always written on
                    595: __protocol     - always written on
                    596: __cls_meth     - sometimes written on
                    597: __inst_meth    - sometimes written on
                    598: __cat_cls_meth - sometimes written on <these will not be used soon>
                    599: __cat_inst_meth        - sometimes written on <these will not be used soon>
                    600: __cls_refs     - sometimes written on (uniqued) <these are not used now>
                    601: __meta_cls_refs        - sometimes written on (uniqued) <these are not used now>
                    602: __message_refs - sometimes written on (uniqued)
                    603: __symbols      - never written on
                    604: __category     - never written on
                    605: __class_vars   - never written on
                    606: __instance_vars        - never written on
                    607: __module_info  - never written on
                    608: __selector_strs        - never written on (uniqued)
                    609:   The six sections starting from the __string_object section were effected.
                    610:   The change was made in read.c and Mach-O.c .
                    611: 
                    612: Changes for the 3.0 release (the -49 compiler release):
                    613: - Fixed a bug where the assembler was padding literal pointer sections with a
                    614:   zero for RISC machines and causing the link editor to complain.  The fix was
                    615:   to change the macro SUB_SEGMENT_ALIGN from 3 to 2 in write.c and to set the
                    616:   alignment of S_LITERAL_POINTER sections in Mach_O.c to 2.
                    617: - Fixed the passing and using of RC_CFLAGS correctly in the Makefile.
                    618: 
                    619: Changes for the 3.0 release (the -49 compiler release):
                    620: - Changed the Makefile to meet the RC api.
                    621: 
                    622: Changes for the 3.0 release (the -47 compiler release):
                    623: - Added the missing 040 "ptest[rw] An@" instructions.
                    624: - Changed the constant CPU_TYPE_I386 to CPU_TYPE_I80x86 to match header file.
                    625: - Changed the behavior so if warning message is produced (with as_warn()) that
                    626:   an object is not produced.  The change was in as_warn() in messages.c and is
                    627:   ifdef'ed NeXT which sets bad_error to 1 just like as_bad(). (bug #16137 and
                    628:   #16044)
                    629: - Added the (__OBJC,__string_object) section with the directive
                    630:   .objc_string_object (read.c and Mach-O.c where changed).
                    631: 
                    632: Changes for the 3.0 release (the -44 compiler release):
                    633: - Created an assembler driver to be placed in /bin/as and the assemblers are
                    634:   then moved to /lib/<arch_flag>/as .   The Makefile was updated to build and
                    635:   install this way.  as.c was changed to take "-arch <arch_flag>" and check it
                    636:   against the type of assembler it is.
                    637: - Switch over to the new header file organization.
                    638: 
                    639: Changes for the 3.0 release (the -43 compiler release):
                    640: - Changed the Makefile to install the i860 assembler in /usr/local/bin/as860 .
                    641: - Picked up md.h from 1.38.1 which added const to md_pseudo_table and
                    642:   md_relax_table so i860.c, m68k.c and m88k.c were all updated as were the
                    643:   uses in read.c and write.c.
                    644: - Picked up the files: i386.c, i386.h and i386-opcode.h from the 1.38.1 release.
                    645: 
                    646: Changes for the 3.0 release (the -39 compiler release):
                    647: - Fixed so that strings can have characters with the 8th bit set in them. This
                    648:   involved adding the lines in next_char_of_string() in read.c:
                    649:     #ifdef NeXT /* allow 8 bit chars in strings */
                    650:       c = (c & MASK_CHAR); /* to make sure the 0xff char is not returned as -1*/
                    651:     #endif NeXT
                    652:   so that the high bit does not get sign extened and the -1 return code that is
                    653:   tested for at the call sites as >= 0 is not tripped over.
                    654:   Second changed all 8th bit set chars in lex_type[] in read.c to be allowed in
                    655:   names.  Also had to change the macros in read.h
                    656:     #define is_name_beginner(c)     ( lex_type[(c) & 0xff] & LEX_BEGIN_NAME )
                    657:     #define is_part_of_name(c)      ( lex_type[(c) & 0xff] & LEX_NAME       )
                    658:   to add the "& 0xff" because of the sign extension of chars (bug #15597).
                    659: 
                    660: Changes for the 3.0 release (the -37 compiler release):
                    661: - Fixed the relocation entries for the 88k so that 88k objects can be scatter
                    662:   loaded by the link editor.  This involves adding a PAIR relocation entry for
                    663:   the LO16 type (as well as having one for the HI16 type) and moving the place
                    664:   in the relocation entry where the other half of the relocatable expression is
                    665:   store from the r_symbolnum field to the r_address field (so that a scattered
                    666:   relocation can be used, since it does not have an r_symbolnum field).  Also
                    667:   removed all support for signed immediates on the 88110 since NeXT will not
                    668:   use this feature.  Also to be consistant the i860's PAIR's will also use the
                    669:   r_address field even though they will not use scattered relocation entries.
                    670:   These changes were made in Mach-O.c .
                    671:   Also required forcing relocation entries for non-local labels for 88k branch
                    672:   instructions which was done with the same kludge as the 68k by setting the
                    673:   0x2 bit in the fx_pcrel fix structure when it is created in m88k.c in
                    674:   md_assemble().  This also required an extra ifdef M68k in Mach-O.c in 
                    675:   fix_to_relocation_info() when choosing to put out a scattered relocation
                    676:   entry because of the way 68 branch instructions work.
                    677: 
                    678: Changes for the 3.0 release (the -36f compiler release):
                    679: - Fixed a bug that did not catch a bit field expression error between the <>'s.
                    680:   A check for the trailing '<' was missing.  This was added in parse_bf() in 
                    681:   m88k.c .
                    682: - Fixed the .abs directive for 88k registers.  The fix was for it to handle
                    683:   scaled register expressions and also not generate an undefined symbol for the
                    684:   register name "U r1".  The changes were to m88k.c adding s_m88k_abs() for the
                    685:   .abs pseudo-op and to read.c to leave s_abs() but to ifdef it out of the
                    686:   table for the 88k as s_m88k_abs() uses s_abs().
                    687: - Corrected the lex_type table in read.c to not allow the character '[' as
                    688:   part of a name.
                    689: - Added '@' as a statement separator for the 88k (change the "# <line> <file>
                    690:   <level>" stuff to use it when generating ".line <line> @ .file <file>" ).
                    691:   Changed app.c and read.c ifdef'ed M88K.  Also s_reg(), s_scaled() and
                    692:   no_delay() in m88k.c also need this because they can't use the macros in
                    693:   read.c .
                    694: - Added the .no_delay 88k pseudo-op.  Changed m88k.c and m88k-opcode.h to add
                    695:   the delay_slot field to the instruction table and a static variable,
                    696:   in_delay_slot, that gets set each time an instruction is assembled.
                    697: - Fixed a bug not allowing macro names to start with '.' .  The fix was in
                    698:   read.c in parse_a_buffer() right before it detects an unknown pseudo-op.
                    699:   Also change it so the unknown pseudo-op is printed when an error happens.
                    700:   Also changed s_macro() in read.c to print a warning if a known pseudo-op name
                    701:   is used a macro name.
                    702: 
                    703: Changes for the 3.0 release (the -36e compiler release):
                    704: - Fixed a bug where the operand "pc@" did not assemble correctly.  The fix was
                    705:   in m68_ip() in m68k.c on linr 1604 for the "case AINDR" which can be set with
                    706:   PC in the opP->reg.  In this case the mode pc@(d16) is used.  This is ifdef'ed
                    707:   NeXT.
                    708: - Fixed a bug where "foo :" did not recognize "foo" as a label.  The fix was in
                    709:   app.c in do_scrub_begin() where the line:
                    710:        lex [':'] |= LEX_IS_LINE_SEPERATOR;
                    711:   was ifdef'ed out since ':' did not work.  But ...  This DOES not cause ':' to
                    712:   be a LINE SEPERATOR but does make the second if logic after flushchar: in
                    713:   do_scrub_next_char() to handle "foo :" and strip the blanks.  This is the way
                    714:   has always been and must be this way to work.
                    715: 
                    716: Changes for the 3.0 release (the -36d compiler release):
                    717: - Fixed a bug in the 88k assember that did not handle "# <line> <file> <level>"
                    718:   comments correctly because it uses ";" which is a comment and the .file gets
                    719:   ignored.  The fix was ugly.  The change was to app.c and read.c ifdef'ed M88K
                    720:   to allow '\001' as a statement seporator (CHANGED IN -36f see above).
                    721: - Changed the marking of literal sections from not marking them for RISC to
                    722:   not marking them for only the I860.  This change is since the 88k compiler
                    723:   will ALLWAYS make a 32 bit reference to an item and leave it to the link
                    724:   editor to find ways to make 16 bit references these sections can marked for
                    725:   uniqueing for the 88k.
                    726: - Added the following directives for the following new sections:
                    727:     .constructor for __TEXT, __constructor
                    728:     .destructor for __TEXT, __destructor
                    729:     .objc_protocol for __OBJC, __protocol
                    730:     .objc_cls_refs for __OBJC, __cls_refs (S_LITERAL_POINTERS)
                    731:     .objc_meta_cls_refs for __OBJC, __meta_cls_refs (S_LITERAL_POINTERS)
                    732: 
                    733: Changes for the 3.0 release (the -36c compiler release):
                    734: - Fixed a bug involving expressions with unknown symbols for operators other
                    735:   than '+' or '-'.  The problem is that in expr() in expr.c if an expression
                    736:   operator is something other than '+' or '-' then it sets the need_pass_2
                    737:   flag and no other "frags" (bytes of output) are generated.  You would think
                    738:   it would want to run another pass but the code doesn't do that (major bug)!
                    739:   So now it just does what it would in the case the symbol is known which is
                    740:   report the expression can't be relocated.
                    741: - Fixed m88k.c to use LO16 relocation types not LO16EXT types.
                    742: 
                    743: Changes for the 3.0 release (the -36b compiler release):
                    744: - Added the m88k directive .scaled as requested by the OS group.
                    745: - Allow expressions for the bit number, parse_cmp() like in bb0, condition
                    746:   match, parse_cnd() like in bcnd, and even 4 bit rotation, parse_e4rot like
                    747:   in prot.
                    748: 
                    749: Changes for the 3.0 release (the -36a compiler release):
                    750: - Added the opcodes "illop[123]" as per the version 3.0 88110 spec.
                    751: - Removed the "lda.b rD,rS1[rS2]" instruction and replaced that opcode with
                    752:   "lda.x rD,rS1[rS2]" as per the version 3.0 88110 spec.
                    753: - Corrected "nint.[sdx]" to be "nint.s[sdx]" and "int.[sdx]" to be "int.s[sdx]"
                    754:   which was just wrong in the GNU assembler (trnc was previous corrected but
                    755:   flaged as an 88110 versrion 3 change but that was incorrect as the assembler
                    756:   was just wrong (even for the 88100)).
                    757: - Corrected "mov.s xD,xS2" to be "mov xD,xS2" as per the version 3.0 88110 spec.
                    758: - Removed the old (version 2.0 of the 88110) opcodes: "mov.t xrD,rD2" and
                    759:   "mov.t rD,xrS2" which used blank instead of .s for single.
                    760: - Removed the old (version 2.0 of the 88110) opcodes: "trnc.t rD,xrs2" and
                    761:   "trnc.t rD,rS2" (where t is the type of the result) which used only the type
                    762:   of the result and implied the .s for single.
                    763: - Removed the "ppack.8.b", "ppack.8.h", and "ppack.16.b" opcodes from the m88k
                    764:   opcode table.  These operations are undefined.
                    765: 
                    766: Changes for the 3.0 release (the -35 compiler release):
                    767: - Fixed a bug in parse_bf() when expressions were added expressions that did
                    768:   not start with a digit (for example a '(', '+', '-', '~' or '!') were not
                    769:   recognized.
                    770: - Changed the action for .abort to print the remaining line as part of the
                    771:   error message.  Feature request by the OS group.
                    772: - Added an option [,alignment] expression to the end of the .lcomm directive
                    773:   which aligns the symbol to the power of 2 alignment expression (same as the
                    774:   .align directive).  This is ifdef'ed NeXT in s_lcomm() in read.c .
                    775: - Changed which directives are allowed on which machines
                    776:        .word   68k and i860 only (machine specific) NOT 88k
                    777:        .long   68k and i860 only NOT 88k
                    778:        .quad   68k only
                    779:        .octa   68k only
                    780:        .float  68k and i860 only NOT 88k
                    781:   These changes are in read.c, m68k.c and i860.c .  Feature request by the OS
                    782:   group and removal of .quad and .octa for the i860 approved by the NeXT
                    783:   Dimension group.
                    784: - Added the directive .elseif .  This involed a bit of reworking the .if, .else
                    785:   and .endif stuff in read.c .  Feature request by the OS group.
                    786: - Fixed a bug that would allow you to use the macro in a macro definition
                    787:   and cause the assember to core dump.  A limit, MAX_MACRO_DEPTH of 20, is
                    788:   used to avoid this.
                    789: - Added the directives .macros_on .macros_off.  This is to allow macros to be
                    790:   turned off, which allows macros to override a machine instruction and still
                    791:   use the machine instruction.  This is in read.c and toggles the variable 
                    792:   macros_on in s_macros_on() and s_macros_off() which is tested in
                    793:   parse_a_buffer().  Feature request by the OS group.
                    794: - Added s_abs() in read.c to implement ".abs symbol,exp" which set symbol to 1
                    795:   or 0 depending on if the expression is an absolute expression.  This is
                    796:   intended for use in macros.  Feature request by the OS group.
                    797: - Added s_reg() to m88k.c to implement ".greg symbol,exp" and ".xreg symbol,exp"
                    798:   which set symbol to 1 or 0 depending on if the expression is a general
                    799:   register or extended register respectfully.  These are intended for use in
                    800:   macros.  Feature request by the OS group.
                    801: - Added $n in expand_macro() in read.c to substitute the number of actual
                    802:   arguments for the macro.  Feature request by the OS group.
                    803: - Changed the code for setting the line separator's (character for multiple
                    804:   statements on a line) in do_scrub_begin() in app.c .  The character '/'
                    805:   tried to be a separator for the 88k but code down stream prevented it from
                    806:   working so it was removed and the 88k does not allow multiple statements on
                    807:   a line.  Also removed the NeXT ifdef for the ':' character which also did
                    808:   not work.
                    809: 
                    810: Changes for the 3.0 release (the -34 compiler release):
                    811: - Fixed a bug that for all floating-point branches it did not generate a
                    812:   relocation entry.  The fix is in md_estimate_size_before_relax() in m68k.c
                    813:   where the case of 'TAB(FBRANCH,SZ_UNDEF)' was not handled in the first
                    814:   switch and code to generate the relocation entry (a call to add_fix) was
                    815:   not done.  This is ifdef'ed NeXT.
                    816: - Fixed a bug for branches that use displacements to absolute addresses which
                    817:   produced a displacement off by -4.  This is ifdef'ed NeXT in m68_ip() in
                    818:   m68k.c in the second main switch statement that sets the bits in the
                    819:   instruction for the 'B' case.  There are two ifdef's, one for 'g' sub case
                    820:   (normal branches) and one for the 'c' sub case (floating-point branches).
                    821: - Disallow all floating-point packed immediates for the 68k assembler because
                    822:   the gen_to_words() routine in atof-ieee.c does not produce the correct 68k
                    823:   packed decimal format.  This simply disallows this but does not fix it.
                    824:   So "fmovep #0r1.0,fp0" will no longer assemble instead of assemble wrong.
                    825:   This is ifdef'ed PACKED_IMMEDIATE in m68k-opcode.h and m68k.c in m68_ip().
                    826:   (internal bug #5)
                    827: - Fixed a bug in the assembler which matched the "fmoveml #1,fpc" where the
                    828:   immediate #1 cause an internal FATAL error because it can't decode the mode
                    829:   "*s".  The fix is in m68_ip() in m68k.c where the case for 's' was ifdef'ed
                    830:   NeXT in just like the long case.  This is legal but the instruction
                    831:   "fmoveml #1,fpc/fpi" is not and the assembler STILL accepts it.
                    832:   (internal bug #4).
                    833: - Fixed a bug in the assembler which matched the "movec        sfc,#1" where the
                    834:   immediate #1 cause an internal FATAL error because it can't decode the mode
                    835:   "#j". The fix in m68_ip() in m68k.c in the loop to install the operand bits
                    836:   for the '#' case was missing the second sub case for 'j' that check the
                    837:   range of the value and installed the operand.  If the immediate is a variable
                    838:   my guess this will still fail but in a different way.
                    839:   (internal bug #3).
                    840: - Fixed a bug that caused the assembler to call abort with no error message
                    841:   when assembling "andiw #0x8001,fpir/fpcr/fpsr".  In get_num() in m68k.c
                    842:   the case for a SEG_PASS1 was missing from the switch statement from the
                    843:   type of the expression() call.  It was ifdef'ed NeXT in and handled like
                    844:   SEG_UNKNOWN and a bunch of others that just print out it can't handle the
                    845:   expression.
                    846: STILL BROKEN!
                    847:   (internal bug #2).
                    848: - Fixed a bug that the operand of the form "zpc@(0)" was trying to use the
                    849:   pc@(16) (AOFF) form which does not allow the base register to be suppressed
                    850:   which is what zpc is.  So this now uses the pc@(bd,Xn) form (AINDX).  The
                    851:   bug caused "zpc@(0)" to generate garbage, namely "d1".  The change is in 
                    852:   m68k_ip_op() in m68k.c and ifdef'ed NeXT with a comment like above.
                    853:   (internal bug #1).
                    854: - Ifdef'ed out the turning operands into PC relative in m68_ip() in m68k.c (this
                    855:   is a 1.36 feature) because it breaks scattered loading.
                    856: - Fixed a bug in the 1.36 version of GAS where the table of fmovem instructions
                    857:   were reordered.  See the comment in m68k-opcode.h with the header "REGISTER 
                    858:   LIST BUG:".  The fix was to put the list back in the previous order.  There
                    859:   is a design bug here that needs to be fixed.
                    860: - Fixed a bug where the .align directives were not propagated into the section
                    861:   headers of the object file.  A new routine, set_section_align() in Mach_O.c,
                    862:   is called from s_align() in read.c .
                    863: - Put the change in atof-ieee() in atof-ieee.c that creates infinities on
                    864:   overflows.  This fixes bug #13409.
                    865: - Picked up a change in i860_ip() in i860.c from the NDTools-6 version.
                    866:   Having to do with constant offset alignments.
                    867: - Added expressions to the width and <offset> bit field instructions.  Since the
                    868:   parameter syntax is width<offset> and offset may be a two character 'cmp' bit
                    869:   designator, the width expression may not contain the character '<' and the
                    870:   offset expression must start with a digit.
                    871: - Changed "mov.t xrD,rD2" and "mov.t rD,xrS2" to use .s for single instead
                    872:   of blank. (version 3.0 of 88110 spec).
                    873: - Changed "trnc.t rD,xrs2" and "trnc.t rD,rS2" (where t is the type of the 
                    874:   result) to use .st where the s is for single and t is the type of the result.
                    875:   (version 3.0 of 88110 spec).
                    876: - Changed the pflusha instruction to pflusha030 and pflusha040 because there is
                    877:   no way to tell them apart.
                    878: - Added automatic creation of stabs for assembly code debugging with -g.  The
                    879:   comment that explains in detail how this is done is in read_a_source_file()
                    880:   in read.c, The other changes are in make_stab_for_symbol() in symbols.c,
                    881:   s_include(), s_line() in read.c, and md_assemble() in m68k.c and m88k.c also
                    882:   two static declarations were removed from input-scrub.c.  These changes are
                    883:   marked with pairs of:
                    884:     #ifdef NeXT        /* generate stabs for debugging assembly code */
                    885:     ...
                    886:     #endif NeXT        /* generate stabs for debugging assembly code */
                    887: - Added the MMU instructions for the 030 and 040 (ifdef'ed BUILTIN_MMUS) and
                    888:   turned off the m68851 define for that set of MMU instructions.  The reason to
                    889:   turn it off is because of the register names it must recognize (see bug #7525
                    890:   why we don't want to do this).  This change is not ifdef'ed NeXT because it
                    891:   is very intertwined with the 68851 stuff.  Also with this change the "MMU
                    892:   status register" correct name of "mmusr" was added but the old name of "psr"
                    893:   was retained for compatiblity because of assembler code that might use it.
                    894: - Added installsrc, installIBMsrc and installGNUsrc targets to the Makefile.
                    895: - Bug #8331, feature request for hex immediate bit-patterns for floating-point
                    896:   immediates.  Added the constant radix 0b... like 0x... except that it would be
                    897:   assumed to be a "bignum" and then a binary bit pattern for a hex immediate.
                    898:   This effected the routines operand() in expr.c, get_num() in m68k.c and
                    899:   m68_ip() in m68k.c .  All of these are ifdef'ed NeXT with the comment
                    900:   /* fix for bug #8331 */ .
                    901: - Bug #13017, this is where ".fill x,3,x" would cause the assembler to call
                    902:   abort because the repeat size is 3 bytes.  This is now dissallowed in s_fill()
                    903:   in read.c and only repeat sizes of 0,1,2 and 4 are allowed.
                    904: - Bug #11209,  this is where if the file system fills up or something and the
                    905:   file can't be closed the object file was left and would confuse later
                    906:   make(1)'s because the object file would be present but would then just hand
                    907:   this off to the link editor and it would complain about a bad object file.
                    908:   The fix in output_file_close() in output-file.c was to remove the file in this
                    909:   case because it might be bad.
                    910: - Bug #8920, where s file containing just "bra L1" would produce a bad object
                    911:   file because the undefined local lable L1 was not defined is fixed.  The fix
                    912:   is in write_object_file() in write.c (and one line in write_Mach_O() in
                    913:   Mach-O.c to test bad_error).  The undefined local symbols are printed with an
                    914:   error message in this case and then the object file is not written.
                    915: - Bug #8918, where a line of the form "# 40 MP1 = M + 1" gets confused with a
                    916:   line of the form "# 1 "hello.c" 1" and causes a bug that ignores the rest of
                    917:   the file.  This was fixed in app.c when in state 4 (after putting out a .line,
                    918:   put out digits) and then not finding an expected '"' for the name of the file
                    919:   it ignores the rest of the line but forgets to set the state to 0 (begining of
                    920:   a line).  This is ifdef'ed NeXT.
                    921: - Bug #7525 (second part), where "bfffo d0{#2,#32},d1" would not work with the
                    922:   field width of 32 is now fixed.  (I'm not sure exactly what the fix was it
                    923:   probably came from the 1.36 version of GNU).
                    924: - Bug #5384, where if a ".globl foo" precedes "foo=1" foo does not end up global
                    925:   has been verfied to be fixed (I'm not sure exactly what the fix was it
                    926:   probably came from the 1.36 version of GNU).
                    927: - Changed the default alignment of sections to 3 (8) for RISC machines from 2
                    928:   (4) in both write.c and MachO.c.
                    929: - Print a warning for -R (make data text) to used .const and not put the data
                    930:   in the text.
                    931: - Cleaned up Mach-O.c and read.c by changing/adding message_refs where
                    932:   selector_refs was used.
                    933: --- Changes to merge in John Anderson's (DJA) version of GAS ---
                    934: - added relational binary operators (<, ==, >, <= and >=) and modified the
                    935:   precedence to conform to 'C'.  The code is marked with pairs of:
                    936:     #ifdef NeXT        /* added relational ops, changed precedence to be same as C */
                    937:     ...
                    938:     #endif NeXT        /* added relational ops, changed precedence to be same as C */
                    939:   and is contained in the file expr.c and is the DJA version with a few bug
                    940:   fixes to make it work.  Found a logic bug when "<>" was used as an operator
                    941:   it was recognized as a "<".  This "operator" appears in the WriteNow source
                    942:   so I added "<>" as a form of "!=".
                    943: - added logical negation unary operator (!).  The code is marked with pairs of:
                    944:     #ifdef NeXT        /* logical negation feature */
                    945:     ...
                    946:     #endif NeXT        /* logical negation feature */
                    947:   and is contained in the file expr.c and is exactly the DJA version.
                    948: - added code to try to make expresions absolute.  The code is marked with
                    949:   pairs of:
                    950:     #ifdef NeXT        /* feature to try to make expressions absolute */
                    951:     ...
                    952:     #endif NeXT        /* feature to try to make expressions absolute */
                    953:   and is contained in the files expr.c and m68k.c (the code is exactly the DJA
                    954:   version).
                    955: - added the .dump/.load feature (this is based on top of the .include and
                    956:   .macro features).  The code is marked with pairs of:
                    957:     #ifdef NeXT        /* the .dump/.load feature */
                    958:     ...
                    959:     #endif NeXT        /* the .dump/.load feature */
                    960:   and is in read.c (and one line in symbols.c) and is the DJA version.  Fixed
                    961:   a bug in write_symbol() in read.c where the symbol's n_type field needed to
                    962:   be and'ed with the N_TYPE macro before checking for equal to N_ABS.
                    963:   not checked
                    964: - added the conditional assembly feature (pseudo ops .if .else .endif) and the
                    965:   macro feature (pseudo ops .macro and .endmacro).  This is all contined read.c
                    966:   and required a major rewrite of the main parsing routine read_a_source_file().
                    967:   This was replaced by three routines read_a_source_file(), parse_a_buffer() and
                    968:   parse_line_comment().  Since the their was no way to ifdef the old code it was
                    969:   removed.  Where possible the conditional assembly feature code is marked with
                    970:   pairs of:
                    971:     #ifdef NeXT        /* the conditional assembly feature (.if, .else, and .endif) */
                    972:     ...
                    973:     #endif NeXT        /* the conditional assembly feature (.if, .else, and .endif) */
                    974:   and the macro feature code is marked with pairs of:
                    975:     #ifdef NeXT        /* the .macro feature */
                    976:     ...
                    977:     #endif NeXT        /* the .macro feature */
                    978:   All of these changes are in read.c and except for the rewrite
                    979:   read_a_source_file() the changes are the DJA version.
                    980: - added the .include "filename" pseudo op.  This is marked with pairs of:
                    981:        #ifdef NeXT     /* .include feature */
                    982:        ...
                    983:        #endif NeXT     /* .include feature */
                    984:   the code in in read.c, as.c, app.c, as.h and input-scrub.c.  Except for the
                    985:   code in app.c and the typedef scrub_context_data in as.h (related to the
                    986:   major changes in the app.c code from the DJA version) it is exactly what
                    987:   was in the DJA version.  Fixed a bug in input_file_open() in input-file.c
                    988:   where it was doing a setbuffer() call using a staticly allocated buffer for
                    989:   all the file's in read.  This was changed to use a dynamicly allocated buffer
                    990:   when processing an include file so the buffer does not get reused by include
                    991:   files.
                    992: 
                    993: Changes for the 3.0 release (the -33 compiler release):
                    994: - Fixed trap*.w and trap*.l to take one immediate operand of word or long
                    995:   (this was just wrong in GAS).
                    996: --- Changes to merged in the 1.36 version of GAS ---
                    997: app.c: (1.36 version picked up)
                    998:   - This deals with the "# <number> <filename> <garbage>" in the state
                    999:     machine (the NeXT fix in s_line() was much cleaner).
                   1000:   - Picked up the 1.36 version.  The only odd difference is that ':' was
                   1001:     ifdef'ed OUT in the 1.36 version and IN the the NeXT 1.28 version.
                   1002:        #ifdef DONTDEF <- 1.36
                   1003:        #ifndef DONTDEF <- NeXT 1.28
                   1004:                lex [':']               |= LEX_IS_LINE_SEPERATOR;
                   1005:        #endif
                   1006:     I did the NeXT thing in fear of breaking something.  Done with:
                   1007:        #if defined(DONTDEF) || defined(NeXT)
                   1008: append.c: (1.36 version picked up)
                   1009:   - Only Copyright comment changed
                   1010: as.c: (1.36 version picked up)
                   1011:   - The machine specific command line options have been moved to routines
                   1012:     named md_parse_option() in the machine specific files.
                   1013:   - The handling of assembly errors has changed from using as_warn() to the
                   1014:     new routine as_bad() which if called sets bad_error and will not produce
                   1015:     an output file if that gets set (see the file messages.c for
                   1016:     definitions).
                   1017:   - Handling of signals has changed to an array of signal numbers and a
                   1018:     routine that catches them and prints out the signal number.
                   1019: messages.c: (1.36 version picked up)
                   1020:   - The addition of the routine as_bad() and the variable bad_error.  If
                   1021:     as_bad() is called then bad_error gets set and the output file does not
                   1022:     get produced (see main() in as.c).
                   1023: as.h: (1.36 version picked up)
                   1024:   - The following macros had ()'s added around their parameters:
                   1025:        #define bzero(s,n) memset((s),0,(n))
                   1026:        #define bcopy(from,to,n) memcpy((to),(from),(n))
                   1027: atof-generic.c: (1.36 version picked up)
                   1028:   - Macro for alloca ifdef'ed __GNUC__ added:
                   1029:        #ifdef __GNUC__
                   1030:        #define alloca __builtin_alloca
                   1031:        #else
                   1032:        #ifdef sparc
                   1033:        #include <alloca.h>
                   1034:        #endif
                   1035:        #endif
                   1036:   - Macros for bzero and index ifdef'ed USG added:
                   1037:        #ifdef USG
                   1038:        #define bzero(s,n) memset(s,0,n)
                   1039:        #define index strchr
                   1040:        #endif
                   1041:   - The strings "nan", "inf" or "infinity" (in either case) are recognized
                   1042:     first and NaN's get the sign set to 0, +infinity gets the sign set to
                   1043:     'P' and -infinity gets the sign set to 'N' (see flonum.h).  They used to
                   1044:     be caught at the end and the strings "Infinity", "infinity", "NaN",
                   1045:     "nan", "SNan", or "snan" had been recognized and some note about
                   1046:     see atof-m68k.c was there (this file was removed and atof-ieee.c was
                   1047:     added).
                   1048:   - A loop was added to strip leading '0' characters:
                   1049:        while(number_of_digits_after_decimal &&
                   1050:             first_digit[number_of_digits_before_decimal +
                   1051:                         number_of_digits_after_decimal] == '0')
                   1052:                --number_of_digits_after_decimal;
                   1053:     After they were picked up.
                   1054:   - Looks like the extra precision was move into two extra littlenums worth
                   1055:     in the implementation of converting digit strings into flonum's.
                   1056: flonum-const.c:  (1.36 version picked up)
                   1057:   - Comment changes.
                   1058: flonum-copy.c: (1.36 version picked up)
                   1059:   - Copyright comment changed.
                   1060: flonum-mult.c: (1.36 version picked up)
                   1061:   - Added a check if the signs of the two numbers are one of '+' or  '-' it
                   1062:     is an error and returns zero.  This happens with infinities as the sign
                   1063:     is set to 'P' or 'M' or NaNs and the sign is set to zero ('\0' or 0).
                   1064:   - Also some extra term in an if statement:
                   1065:        146c141
                   1066:        <       if (significant || P<0)
                   1067:        ---
                   1068:        >       if (significant)
                   1069:     I did figure out what it was.
                   1070: flonum.h: (1.36 version picked up)
                   1071:   - Comment about NaN and infinities was added:
                   1072:        /* JF:  A sign value of 0 means we have been asked to assemble NaN
                   1073:           A sign value of 'P' means we've been asked to assemble +Inf
                   1074:           A sign value of 'N' means we've been asked to assemble -Inf
                   1075:         */
                   1076: atof-ieee.c: (1.36 version picked up)
                   1077:   - Replaces atof-m68k.c
                   1078: bignum-copy.c: (1.36 version picked up)
                   1079:   - The addtion of the explit return type of 'int' was added to the routine
                   1080:     bignum_copy().
                   1081:   - Copyright comment changed
                   1082: bignum.h: (1.36 version picked up)
                   1083:   - The commented out extra digits of LOG_TO_BASE_2_OF_10 were uncommented.
                   1084:     the comment above this was that this was done to get around a problem
                   1085:     in GCC (I'm assuming that has been fixed).
                   1086:      < #define LOG_TO_BASE_2_OF_10 (3.3219280948873623478703194294893901758651)
                   1087:      ---
                   1088:      > #define LOG_TO_BASE_2_OF_10 (3.321928
                   1089:                                   /* 0948873623478703194294893901758651 */)
                   1090:   - Copyright comment changed.
                   1091: expr.c: (1.36 version picked up with Mach_O and NeXT ifdef's merged in)
                   1092:   - Copyright comment changed and top comment removed.
                   1093:   - A hack was changed with respect to the variable generic_bignum[].
                   1094:     The comment explains:
                   1095:      /* Seems atof_machine can backscan through generic_bignum and hit
                   1096:        whatever happens to be loaded before it in memory.  And its way
                   1097:        too complicated for me to fix right.  Thus a hack.  JF:  Just make
                   1098:        generic_bignum bigger, and never write into the early words, thus
                   1099:        they'll always be zero.  I hate Dean's floating-point code.  Bleh.
                   1100:       */
                   1101:   - This varable and comment was added but no one uses it.  See flonum.h
                   1102:     for how NaNs and infinities are handled.
                   1103:        /* If nonzero, we've been asked to assemble nan, +inf or -inf */
                   1104:        int generic_floating_point_magic;
                   1105:   - Changes to allow d$ where d is a digit has been added ifdef'ed
                   1106:     SUN_ASM_SYNTAX.  But according to the Sun assembler manual, page 10
                   1107:     section 2.4, the local labels are n$ where n is any integer (I wounder
                   1108:     if it really supports negitive integers).  There is also code in expr.c,
                   1109:     symbols.c and read.c to support this.
                   1110: expr.h: (1.36 version picked up)
                   1111:   - Copyright comment changed.
                   1112: frags.h: (1.36 version picked up)
                   1113:   - Copyright comment changed.
                   1114: hash.c: (1.36 version picked up with error() calls ifdef NeXT to as_fatal)
                   1115:   - Copyright comment changed and two /* in comments changed to / *
                   1116:   - A change from:
                   1117:        newsize = handle->hash_stat[STAT_SIZE] <<= 1;
                   1118:     to 
                   1119:        handle->hash_stat[STAT_SIZE] <<= 1;
                   1120:        newsize = handle->hash_stat[STAT_SIZE];
                   1121:     in hash_grow();
                   1122: hash.h: (1.36 version picked up)
                   1123:   - Copyright comment changed.
                   1124:   - The following line removed:
                   1125:        static char * hash_grow(); /* error text (internal)  */
                   1126: hex-value.c: (1.36 version picked up)
                   1127:   - Copyright comment changed.
                   1128:   - The following routine was added:
                   1129:        #ifdef VMS
                   1130:        dummy2()
                   1131:        {
                   1132:        }
                   1133:        #endif
                   1134: input-file.c: (1.36 version picked up)
                   1135:   - Copyright comment changed.
                   1136:   - The commented out declaration was removed (but not the comment out code)
                   1137:        /* static int   file_handle;    /* <0 === not open */
                   1138:   - The explict declaration of the pre prameter was added to the routine
                   1139:     input_file_open().
                   1140:   - The explict declaration of the routine do_scrub_next_char() was added
                   1141:     inside the routine input_file_give_next_buffer() in a local scope.
                   1142: input-file.h: (1.36 version picked up)
                   1143:   - Copyright comment changed.
                   1144: input-scrub.c: (1.36 version picked up)
                   1145:   - Copyright comment changed.
                   1146:   - The macro AFTER_STRING was changed from:
                   1147:        #define AFTER_STRING (" ")      /* bcopy of 0 chars might choke. */
                   1148:     to:
                   1149:        #define AFTER_STRING ("\0")     /* bcopy of 0 chars might choke. */
                   1150:   - The varables used by the ifdef'ed DONTDEF code was removed (why not just
                   1151:     also ifdef'ed?):
                   1152:        char *p;
                   1153:        char *out_string;
                   1154:        int out_length;
                   1155:        static char *save_buffer = 0;
                   1156:        extern int preprocess;
                   1157: m68k-opcode.h: (1.36 version merged in)
                   1158:   - Copyright comment changed.
                   1159:   - The bras and bsrs were ifdef'ed NeXT to not use word displacements.
                   1160:   - some reordering of the movem and fmovem type instructions.
                   1161:   - all m68851 stuff pulled in (comments and opcodes), pmmu.h was removed.
                   1162: m68k.c: (1.36 version merged in)
                   1163:   - Copyright comment changed
                   1164:   - Lots of changes related to the DBCC and DBCC68000 with jumps to jumps (see
                   1165:     GAS 1.36 version change log).
                   1166:   - The characters 'e' and 'E' were added to FLT_CHARS[]
                   1167:   - In the md_relax_table the long branches (BRANCH,FBRANCH & PCREL) had their
                   1168:     forward and backward reach changed by 2 where (the 2 was removed from the
                   1169:     expression).
                   1170:   - Constants for the BCC68000 and DBCC branch types were added as well as
                   1171:     entries in the md_relax_table.
                   1172:   - The .proc pseudo op was added
                   1173:   - The register defines for m68851 were added to m68k.c and pmmu.h was removed.
                   1174:   - Fixed a bunch of the macros like add_fix which did NOT have ()'s around the
                   1175:     parameters which was the source of a nasty bug NeXT tracked down.
                   1176:   - The routine m68k_reg_parse() takes something of the form fp0: and turns
                   1177:     the ':'  into a ',' .
                   1178:   - A fix to handling big numbers (greater than 32 bits) as a floating-point
                   1179:     bit pattern was made to put the bits out in the correct order.  The loop
                   1180:     was changed from:
                   1181:        for(wordp=generic_bignum;offs(opP->con1)--;wordp++)
                   1182:     to:
                   1183:        for(wordp=generic_bignum+offs(opP->con1)-1;offs(opP->con1)--;--wordp)
                   1184:   - The the routine md_atof() was changed to use atof_ieee() from atof_m68k().
                   1185:   - Picked up the md_parse_option() routine.
                   1186: 
                   1187:   - The NeXT made change to allow hex immediates for floating-point (which
                   1188:     broke decimal immediates like #1 and did not work for doubles) was removed.
                   1189:     Also see bug #8331 in bug tracker.
                   1190:        This change is in the routine m68_ip() (which converts a string into a
                   1191:        68k instruction) in the code for handling immediates which are some
                   1192:        type of floating point number that is not a SEG_BIG.
                   1193:        This next #if 0 #endif pair comments out these two lines:
                   1194:                                    int_to_gen(nextword);
                   1195:                                    gen_to_words(words,baseo,(long int)outro);
                   1196:        and replaces it with this line:
                   1197:                            /* modified by mself to support hex immediates. */
                   1198:                                        *(int *)words = nextword;
                   1199:        The effect is that the non SEG_BIG expression (which is just an integer,
                   1200:        not a floating point value) is not converted to a float but just used
                   1201:        as a bit pattern for the floating point number.  This fails for doubles
                   1202:        since some random bits left in the local array words[] get stuffed into
                   1203:        the 64 bit double value and of course breaks the common case of #1 for
                   1204:        decimal numbers.
                   1205: 
                   1206:   - The NeXT use of atof_m68k was removed in the case of getting a floating
                   1207:     point immediate and the code to call gen_to_words() was put back.
                   1208:   - The NeXT change of #if 0'ing out the line: (I don't know why):
                   1209:                gen_to_words(words,2,8L);/* These numbers are magic! */
                   1210:     was removed the the #if removed and the code left in.
                   1211: obstack.c: (1.36 version picked up)
                   1212:   - Lots of changes but diffed with the same file in the cc directory (which
                   1213:     is based on 1.36) it looks very close to the same.  Since the NeXT 2.0
                   1214:     compiler uses it it is picked up here on faith.
                   1215: obstack.h: (1.36 version picked up)
                   1216:   - Lots of changes but diffed with the same file in the cc directory (which
                   1217:     is based on 1.36) it looks very close to the same.  Since the NeXT 2.0
                   1218:     compiler uses it it is picked up here on faith.
                   1219: output-file.c: (1.36 version picked up with NeXT and Mach_O ifdef's put in)
                   1220:   - Copyright comment changed.
                   1221:   - The NeXT ifdef is to unlink the file before doing a create on it.
                   1222:   - The Mach_O ifdef is for the routine output_write().
                   1223: pmmu.h: removed (1.36 has this stuff moved into m68k-opcode.h and m68k.c)
                   1224: read.c: (1.36 version picked up with NeXT, Mach_O and I860 ifdefs added)
                   1225:   - Copyright comment changed.
                   1226:   - There is a differing set of changes related to the bumping of the line
                   1227:     counters with respect to #NO_APP and #APP.  One in the 1.28 version
                   1228:     ifdef'ed NeXT and the other in the 1.36 version.  The 1.36 set of
                   1229:     changes were picked up.
                   1230:   - A bunch of changes to the s_set routine (not use in the NeXT compiler
                   1231:     suite).
                   1232: read.h: (1.36 version picked up)
                   1233:   - Copyright comment changed.
                   1234: strstr.c: (1.36 version picked up with NeXT ifdef code added)
                   1235:   - Only Copyright comment changed
                   1236:   - The routine strstrn() apperently was added by NeXT and is used in read.c
                   1237:     for searching for "#NO_APP\n".
                   1238: struc-symbol.h: (1.36 version picked up with NeXT ifdef code added)
                   1239:   - Only Copyright comment changed
                   1240:   - The ifdef NeXT code is to the sy_other macro to refer to the n_sect
                   1241:     field instead of the n_other field.
                   1242: subsegs.c: (1.36 version picked up)
                   1243:   - Only Copyright comment changed
                   1244: subsegs.h: (1.36 version picked up)
                   1245:   - Only Copyright comment changed
                   1246: symbols.c: (1.36 version picked up with Mach_O ifdef code added)
                   1247:   - Only Copyright comment changed
                   1248:   - Changes to allow d$ where d is a digit has been added ifdef'ed
                   1249:     SUN_ASM_SYNTAX.  But according to the Sun assembler manual, page 10
                   1250:     section 2.4, the local labels are n$ where n is any integer (I wounder
                   1251:     if it really supports negitive integers).  There is also code in expr.c,
                   1252:     symbols.c and read.c to support this.
                   1253:   - The ifdef Mach_O code is to set the n_sect field.
                   1254: symbols.h: (1.36 version picked up)
                   1255:   - Only Copyright comment changed
                   1256: version.c: (1.36 version picked up)
                   1257:   - The comments were removed and place in a file ChangeLog
                   1258: write.c: (1.36 version picked up with NeXT, M68K, Mach_O and I860 ifdefs added)
                   1259: write.h: (1.36 version picked up with the NeXT ifdef added)
                   1260: xmalloc.c: (1.36 version picked up with NeXT ifdef code added)
                   1261:   - Only Copyright comment changed
                   1262:   - The NeXT ifdefs are changing the call to error() to as_fatal() so the
                   1263:     macro -Derror=as_fatal does not have to be used (since it could
                   1264:     substitue in places where it shouldn't.
                   1265: xrealloc.c: (1.36 version picked up with NeXT ifdef code added)
                   1266:   - Only Copyright comment changed
                   1267:   - The NeXT ifdefs are changing the call to error() to as_fatal() so the
                   1268:     macro -Derror=as_fatal does not have to be used (since it could
                   1269:     substitue in places where it shouldn't.
                   1270: 
                   1271: --- Changes to merged in the i860 version of GAS by NeXT Dimension team ---
                   1272:     (NDTools-4)
                   1273:   - i860.h:
                   1274:     This contained the i860 relocation stuff.  This was moved into reloc.h
                   1275:        Also there was a bug in the GNU version of ld that relocated the
                   1276:        RELOC_HIGHADJ wrong.  The adjustment was always done out of the
                   1277:        assembler and should have been taken out and put back everytime.
                   1278:        This is now the case in the NeXT Mach-O link editor in i860_reloc.c .
                   1279: 
                   1280:   - I860 changes to read.c:
                   1281:     big_cons(), get_known_segmented_expression() and stringer() no longer static
                   1282: 
                   1283:     Mike changed s_file() and s_line() to handle the cpp line directive nesting
                   1284:     level by adding discard_rest_of_line() to it.  The complier group's version
                   1285:     just recognized the extra digits in s_file().  The compiler group's version
                   1286:      was retained and Mike's changes were left out.
                   1287: 
                   1288:     The i860 has it's own align syntax and the "align" pseudo-op is ifdef'ed out
                   1289:     for the i860 (what is this symtax?).
                   1290: 
                   1291:     The i860 has the "org" and "quad" pseudo-op's ifdef'ed out.
                   1292: 
                   1293:     The as_fatal() call in pobegin() has "... (%s)", errtxt ); added to it.
                   1294: 
                   1295:     An Intel "lable::" crock, which also makes the symbol global
                   1296: 
                   1297:     The fix_new() call in cons() has an extra RELOC_VANILLA argument added to it
                   1298:     that is ifdef'ed I860.  This also requires i860.h to be included which
                   1299:     defines RELOC_VANILLA to be added at line 37:
                   1300:        #if defined(I860)
                   1301:        #include <i860.h>
                   1302:        #endif
                   1303: 
                   1304:   - I860 changes to write.c:
                   1305:     Added at line 50 (for the NO_RELOC relocation r_type)
                   1306:        #if defined(I860)
                   1307:        #include "i860.h"
                   1308:        #endif
                   1309: 
                   1310:     The variable next_object_file_charP is not static for the i860 (ifdef'ed
                   1311:     I860).
                   1312: 
                   1313:     fix_new has an extra prameter r_type (ifdef'ed I860) and it is set in to the
                   1314:     fixP struct via:
                   1315:        fixP->fx_r_type = r_type;
                   1316:     also ifdef'ed I860.
                   1317: 
                   1318:     In write_object_file() after the relax segment calls the text alignment is
                   1319:     forced to 32 byte alignment, the data and bss to 16 byte alignment.  The
                   1320:     code for text at line 316 is:
                   1321:         /* Check/force alignment here! */
                   1322:        #if defined(I860)
                   1323:          text_siz = (text_siz + 0x1F) & (~0x1F);/* Keep 32 byte alignment (most
                   1324:                                                    restrictive) */
                   1325:          text_last_frag->fr_address = text_siz; /* and pad the last fragment.*/
                   1326:        #endif
                   1327:     for data at line 388 is:
                   1328:        #if defined(I860)
                   1329:              data_siz += (16 - (data_siz % 16)) % 16; /* Pad data seg to
                   1330:                                                          preserve alignment */
                   1331:              data_last_frag->fr_address = data_siz;   /* to quad-word
                   1332:                                                          boundries */
                   1333:        #endif
                   1334:     and for bss at line 361 is:
                   1335:        #if defined(I860)
                   1336:          local_bss_counter=(local_bss_counter+0xF)&(~0xF); /* Pad BSS to
                   1337:                                                        preserve alignment */
                   1338:        #endif
                   1339: 
                   1340:     The call to fix_new() in write_object_file() has an extra parameter added
                   1341:     to it, NO_RELOC, which is ifdef'ed I860.  At line 522:
                   1342:     #if defined(I860)
                   1343:              fix_new(lie->frag,lie->word_goes_here - lie->frag->fr_literal,2,
                   1344:                      lie->add,lie->sub,lie->addnum,0,NO_RELOC);
                   1345:     #else
                   1346:              fix_new(lie->frag,lie->word_goes_here - lie->frag->fr_literal,2,
                   1347:                      lie->add,lie->sub,lie->addnum,0);
                   1348:     #endif
                   1349: 
                   1350:     In write_object_file() a bunch of checks were added.  Just before emitting
                   1351:     relocations at line 675:
                   1352:        know(next_object_file_charP==
                   1353:        (the_object_file+(N_TXTOFF(the_exec)+the_exec.a_text+the_exec.a_data)));
                   1354:     Just before emiting the symbols at line 684:
                   1355:        know(next_object_file_charP == (the_object_file + N_SYMOFF(the_exec)) );
                   1356:     Just before emiting the strings at line 710:
                   1357:        know(next_object_file_charP == (the_object_file + N_STROFF(the_exec)) );
                   1358: 
                   1359:     In fixup_segment() the switch statement for immediate displacement types for
                   1360:     case 0 is ifdef'ed I860 with this change (at line 1209):
                   1361:        #if defined(I860)
                   1362:              fixP->fx_addnumber = add_number;
                   1363:              /*
                   1364:               * fixup_segment is expected to return a count of the number of 
                   1365:               * relocation_info structures needed for an object module.
                   1366:               * Two specific relocation types encode only the high half
                   1367:               * of an address, and so are followed by a second relocation_info
                   1368:               * structure which encodes the low half.  We allow for this
                   1369:               * by bumping seg_reloc_count an extra time here.
                   1370:               *
                   1371:               * The extra item is generated in emit_relocations().
                   1372:               */
                   1373:              if ( fixP->fx_addsy && 
                   1374:                    (fixP->fx_r_type==RELOC_HIGH ||
                   1375:                     fixP->fx_r_type==RELOC_HIGHADJ))
                   1376:              {
                   1377:                ++seg_reloc_count;
                   1378:              }
                   1379:              md_number_to_imm (place, add_number, size,fixP,this_segment_type);
                   1380:        #else
                   1381:              md_number_to_imm (place, add_number, size);
                   1382:        #endif
                   1383:     and for case 1 the comment was added (at line 1232):
                   1384:            case 1:             /* Not used in i860 version */
                   1385: 
                   1386:     In emit_relocations() the following line was ifdef'ed in the other two were
                   1387:     else'ed out (at line 1276):
                   1388:        #if defined(I860)
                   1389:                  ri . r_type           = fixP -> fx_r_type;
                   1390:        #else /* I860 */
                   1391:                        /* These two 'cuz of NS32K */
                   1392:                  ri . r_bsr            = fixP -> fx_bsr;
                   1393:                  ri . r_disp           = fixP -> fx_im_disp;
                   1394:        #endif /* I860 */
                   1395: 
                   1396:     In emit_relocations() at the end of the loop processing the fixS structures
                   1397:     the following lines were added to handle split relocations (at line 1425):
                   1398:     #if defined(I860)
                   1399:          /* Whenever we have a relocation item using the high half of an
                   1400:           * address, we also emit a relocation item describing the low
                   1401:           * half of the address, so the linker can reconstruct the address
                   1402:           * being relocated in a reasonable manner.
                   1403:           *
                   1404:           * We set r_extern to 0, so other apps won't try to use r_symbolnum
                   1405:           * as a symbol table indice.  We OR in some bits in bits 16-23 of
                   1406:           * r_symbolnum so it is guaranteed to be outside the range we use
                   1407:           * for non-external types to denote what segment the relocation is in.
                   1408:           */
                   1409:          if ( fixP->fx_r_type == RELOC_HIGH ||
                   1410:               fixP->fx_r_type == RELOC_HIGHADJ )
                   1411:          {
                   1412:                ri.r_length     = nbytes_r_length [fixP->fx_size];
                   1413:                ri.r_pcrel      = fixP->fx_pcrel;
                   1414:                ri.r_address    = fixP -> fx_frag->fr_address + fixP->fx_where
                   1415:                                  - segment_address_in_file;
                   1416:                ri.r_extern     = 0;
                   1417:                ri.r_type       = RELOC_PAIR;
                   1418:                /* Hide the low half of the addr in r_symbolnum.  More
                   1419:                   overloading...*/
                   1420:                ri.r_symbolnum  = (fixP->fx_addnumber & 0xFFFF) | 0x7F0000;
                   1421:                md_ri_to_chars((char *) &ri, ri); 
                   1422:                append(&next_object_file_charP, (char *)&ri,
                   1423:                       (unsigned long)sizeof(ri));
                   1424:          }
                   1425:     #endif
                   1426: 
                   1427: --- Changes made to do the merges of 1.36 and i860 versions ---
                   1428: - Removed the cpp macro "error" which was set on the compiler line to 
                   1429:   -Derror=as_fatal and changed the 4 uses in hash.c, xmalloc.c and xrealloc.c
                   1430:   to just use as_fatal.
                   1431: - Added the cpp macro M68K for 68k specific ifdef that are needed (like in
                   1432:   Mach-O.c).  This is instead of the "default case" without a target processor
                   1433:   macro meaning that it is the 68k case.  This is set in the Makefile as the
                   1434:   target processor that the assembler is for in the make macro COPTS.
                   1435: - Changed the only use of the cpp macro CROSS in output-file.c to use NeXT to
                   1436:   get rid of this macro.  The line of code that is ifdef'ed is is the unlink of
                   1437:   "name" in output_file_create().
                   1438: - Removed a.out.h and letting the one in ../include get used which is a merge
                   1439:   of the original and includes NeXT's files (nlist.h and reloc.h).
                   1440: - Removed the file atom.c since Mach-O.c replaces it (also removed all the
                   1441:   code in write.c that used it).
                   1442: - Removed all machine specific files except for the target processors that
                   1443:   NeXT uses.  The remaining code that used this stuff has been ifdef'ed where
                   1444:   needed to preserved the code in the files we use.
                   1445: - Removed the files gdb.c, gdb-file.c, gdb-symbols.c, gdb-blocks.c and
                   1446:   gdb-lines.c and ifdef'ed DONTDEF the code in as.c, read.c and write.c that
                   1447:   used this stuff since the GNU 1.36 version of GAS did the same.
                   1448: - Removed the files m-68k.h, m-sun3.h, m-hpux and m-generic and ifndef'ed the
                   1449:   include of m-68k.h out of m-68k.c.
                   1450: - Removed the files atof-m68k.c atof-m68k-assist.s since they are no longer
                   1451:   used (see the change below for the -27 compiler release).  And replaced the
                   1452:   the file atof-m68k.c with the 1.36 atof-ieee.c .
                   1453: 
                   1454: The 2.0 Release (the -32 compiler release)
                   1455: 
                   1456: Changes for the Warp ?? release (the -27 compiler release):
                   1457: - Fixed m68_ip() to handle hex immediate operands to floating point insn's.
                   1458:   Now fadds #0xffffffff,fp0 works correctly.  The fix only works for .s, not
                   1459:   for .d or .x.  This orignally worked, but was broken by NeXT's mods to
                   1460:   atof-m68k.c. (mself)
                   1461: - Added new 68040 floating-point instructions to m68k-opcode.h (mself)
                   1462: - Changed the name of the the section generated by the .objc_selector_refs
                   1463:   directive from __selector_refs to __message_refs and set the flags field of
                   1464:   this section to S_LITERAL_POINTERS.  This change requires a link editor that
                   1465:   knows how to handle a S_LITERAL_POINTERS section.
                   1466: - Changed m68k.c to use the reguar atof (actually strtod) instead of using
                   1467:   atof-m68k.c and atof-m68k-assist.s, since these instructions will be
                   1468:   emulated on th '040. (mself)
                   1469: 
                   1470: Changes for the Warp ?? release (the -26 compiler release):
                   1471: - Added the file Mach-O.c and the ablity to have a subset of a fixed number of
                   1472:   sections.  All changes ifdef'ed MACH_O.  This removes atom.c (ifdef'ed out).
                   1473:   New sections include const, literal4, literal8, 11 new objc sections, etc.
                   1474:   Basicly a lot of changes.
                   1475: 
                   1476: Changes for the Warp 3 (OS update) release (the -25 compiler release):
                   1477: - Added scattered relocation entries to the assembler in emit_relocation() in
                   1478:   write.c (see extensive comments in there and in <reloc.h>).
                   1479: - Changed fixup_segment() in write.c and md_estimate_size_before_relax() in
                   1480:   m68k.c to make branches to lables that persist on output to be long in length
                   1481:   and have a relocation entry (to make scattered loading in the link editor
                   1482:   work).  This was done by using the value of 3 in fx_pcrel (see the comment in
                   1483:   write.h) for force this to happen.
                   1484: 
                   1485: Changes for the Warp ?? release (the -24 compiler release):
                   1486: - Fixed the bug that would not assemble the following instruction:
                   1487:        L2:movl #1,@(_down:l,d7:l:4)
                   1488:   The fix was a bug in the macro use in m68k.c for add_fix() which the macro
                   1489:   did not put ()'s around it's arguments (bugs 5207 and 5270).
                   1490: - Fixed the bug with cpp processed assembler files (bug 4280).  The new syntax
                   1491:   of the cpp output now includes an optional number after the file name, for
                   1492:   example: `# 1 "x.c" 2' the 2 is the new number.  This was done by changing
                   1493:   the routine s_file() in read.c which recognizes the .file directive (that the
                   1494:   assembler's preprecessor inserts) to optionally recognize this new number.
                   1495: - Changed the section alignment of the text section to 2 byte alignment so that
                   1496:   scattered loading will work (the branch table of the shlibs will not move).
                   1497: 
                   1498: Changes for the 2.0 impulse X.X release (the -23 compiler release):
                   1499: - Now is linked with libsys.
                   1500: 
                   1501: Changes for the 2.0 impulse X.X release (the -22 compiler release):
                   1502: - Allow symbol names to appear in ""'s .  This is so that the symbol names for
                   1503:   methods can be "+[Class(category) method:name:]" and tools will not have to
                   1504:   go through the objective-C section to get these names. Changes how
                   1505:   get_symbol_end() works and how the callers of it use it.
                   1506: 
                   1507: Changes for the 2.0 impulse X.X release (the -19 compiler release):
                   1508: - as is no longer installed as as-<version_number> to match the rest of the
                   1509:   project.
                   1510: - Updated atom.c to the changes to CPU_TYPE and CPU_SUBTYPE with the changes to
                   1511:   <sys/machine.h>
                   1512: 
                   1513: Changes for the 0.91 release (the -10 compiler release):
                   1514: * s.stone fixed a bug in `#APP', `#NO_APP' that affected read.c & strstr.c.
                   1515: + Fixed a bug in converting to Mach-O object files with the new sections
                   1516:   for the objective-C runtime.  The bug was if a local relocation item refered
                   1517:   to a symbol plus an offset the incorrect section number could be assigned if
                   1518:   the value of the symbol plus offset was in a different section than the value
                   1519:   of the symbol.  This is an un fixable bug in atom(1) but fixed in here by
                   1520:   moving the assignment of the section number into the r_symbolnum field into
                   1521:   the assembler and using just the symbol's value (not plus the offset) to pick
                   1522:   the section number.  The fix is in write.c in emit_relocation() (plus a call
                   1523:   to a new function get_objc_section_bounds() before calling emit_relocation).
                   1524: + Fixed a bug where a file had no symbols and the result was a Mach-O file.
                   1525:   What would happen was a 4 (the size of the string table) was written at offset
                   1526:   0 in the output file (overwriting the magic number).  Also did some major
                   1527:   clean up of atom.c and removed all the garbage that did not apply (about half
                   1528:   of what was there).
                   1529: + Added the .reference pseudo op to read.c.  This was added for the new
                   1530:   objective-C runtime to use so that archive semantaic could be maintained but
                   1531:   no globals (that 'C' could use) are created.
                   1532: + Fixed the exponent overflow handling in atof-m68k.c to not print a warning
                   1533:   (ifdef NeXT) and to get the right answer (a bzero of the 'words' as added,
                   1534:   and corrected the reversed sign for infinities).
                   1535: 
                   1536: New notes go at the TOP of this file.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.