home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / cctools / as / notes < prev    next >
Text File  |  1996-04-18  |  89KB  |  1,652 lines

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