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