assemble.pas 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. {
  2. $Id$
  3. Copyright (c) 1998 by the FPC development team
  4. This unit handles the assemblerfile write and assembler calls of FPC
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************}
  17. unit assemble;
  18. interface
  19. uses
  20. {$ifdef Delphi}
  21. dmisc,
  22. {$endif Delphi}
  23. dos,cobjects,globtype,globals,aasm;
  24. const
  25. {$ifdef tp}
  26. AsmOutSize=1024;
  27. {$else}
  28. AsmOutSize=32768;
  29. {$endif}
  30. type
  31. PAsmList=^TAsmList;
  32. TAsmList=object
  33. {filenames}
  34. path : pathstr;
  35. name : namestr;
  36. asmfile, { current .s and .o file }
  37. objfile,
  38. as_bin : string;
  39. IsEndFile : boolean; { special 'end' file for import dir ? }
  40. {outfile}
  41. AsmSize,
  42. AsmStartSize,
  43. outcnt : longint;
  44. outbuf : array[0..AsmOutSize-1] of char;
  45. outfile : file;
  46. Constructor Init;
  47. Destructor Done;
  48. Function FindAssembler:string;
  49. Function CallAssembler(const command,para:string):Boolean;
  50. Function DoAssemble:boolean;
  51. Procedure RemoveAsm;
  52. procedure NextSmartName;
  53. Procedure AsmFlush;
  54. Procedure AsmClear;
  55. Procedure AsmWrite(const s:string);
  56. Procedure AsmWritePChar(p:pchar);
  57. Procedure AsmWriteLn(const s:string);
  58. Procedure AsmLn;
  59. procedure AsmCreate;
  60. procedure AsmClose;
  61. procedure Synchronize;
  62. procedure WriteTree(p:paasmoutput);virtual;
  63. procedure WriteAsmList;virtual;
  64. end;
  65. Procedure GenerateAsm;
  66. Procedure OnlyAsm;
  67. var
  68. SmartLinkFilesCnt : longint;
  69. Implementation
  70. uses
  71. script,files,systems,verbose
  72. {$ifdef linux}
  73. ,linux
  74. {$endif}
  75. ,strings
  76. {$ifdef i386}
  77. {$ifndef NoAg386Bin}
  78. ,ag386bin
  79. {$endif}
  80. {$ifndef NoAg386Att}
  81. ,ag386att
  82. {$endif NoAg386Att}
  83. {$ifndef NoAg386Nsm}
  84. ,ag386nsm
  85. {$endif NoAg386Nsm}
  86. {$ifndef NoAg386Int}
  87. ,ag386int
  88. {$endif NoAg386Int}
  89. {$ifdef Ag386Cof}
  90. ,ag386cof
  91. {$endif Ag386Cof}
  92. {$endif}
  93. {$ifdef m68k}
  94. {$ifndef NoAg68kGas}
  95. ,ag68kgas
  96. {$endif NoAg68kGas}
  97. {$ifndef NoAg68kMot}
  98. ,ag68kmot
  99. {$endif NoAg68kMot}
  100. {$ifndef NoAg68kMit}
  101. ,ag68kmit
  102. {$endif NoAg68kMit}
  103. {$ifndef NoAg68kMpw}
  104. ,ag68kmpw
  105. {$endif NoAg68kMpw}
  106. {$endif}
  107. ;
  108. {*****************************************************************************
  109. TAsmList
  110. *****************************************************************************}
  111. Function DoPipe:boolean;
  112. begin
  113. DoPipe:=(cs_asm_pipe in aktglobalswitches) and
  114. not(cs_asm_leave in aktglobalswitches)
  115. {$ifdef i386}
  116. and (aktoutputformat=as_i386_as)
  117. {$endif i386}
  118. {$ifdef m68k}
  119. and (aktoutputformat=as_m68k_as);
  120. {$endif m68k}
  121. end;
  122. const
  123. lastas : byte=255;
  124. var
  125. LastASBin : string;
  126. Function TAsmList.FindAssembler:string;
  127. var
  128. asfound : boolean;
  129. begin
  130. if lastas<>ord(target_asm.id) then
  131. begin
  132. lastas:=ord(target_asm.id);
  133. { is an assembler passed ? }
  134. if utilsdirectory<>'' then
  135. begin
  136. LastASBin:=Search(target_asm.asmbin+source_os.exeext,
  137. utilsdirectory,asfound)+target_asm.asmbin+source_os.exeext;
  138. end
  139. else
  140. LastASBin:=FindExe(target_asm.asmbin,asfound);
  141. if (not asfound) and not(cs_asm_extern in aktglobalswitches) then
  142. begin
  143. Message1(exec_w_assembler_not_found,LastASBin);
  144. aktglobalswitches:=aktglobalswitches+[cs_asm_extern];
  145. end;
  146. if asfound then
  147. Message1(exec_t_using_assembler,LastASBin);
  148. end;
  149. FindAssembler:=LastASBin;
  150. end;
  151. Function TAsmList.CallAssembler(const command,para:string):Boolean;
  152. begin
  153. callassembler:=true;
  154. if not(cs_asm_extern in aktglobalswitches) then
  155. begin
  156. swapvectors;
  157. exec(command,para);
  158. swapvectors;
  159. if (doserror<>0) then
  160. begin
  161. Message1(exec_w_cant_call_assembler,tostr(doserror));
  162. aktglobalswitches:=aktglobalswitches+[cs_asm_extern];
  163. callassembler:=false;
  164. end
  165. else
  166. if (dosexitcode<>0) then
  167. begin
  168. Message1(exec_w_error_while_assembling,tostr(dosexitcode));
  169. callassembler:=false;
  170. end;
  171. end
  172. else
  173. AsmRes.AddAsmCommand(command,para,name);
  174. end;
  175. procedure TAsmList.RemoveAsm;
  176. var
  177. g : file;
  178. i : word;
  179. begin
  180. if cs_asm_leave in aktglobalswitches then
  181. exit;
  182. if cs_asm_extern in aktglobalswitches then
  183. AsmRes.AddDeleteCommand(AsmFile)
  184. else
  185. begin
  186. assign(g,AsmFile);
  187. {$I-}
  188. erase(g);
  189. {$I+}
  190. i:=ioresult;
  191. end;
  192. end;
  193. Function TAsmList.DoAssemble:boolean;
  194. var
  195. s : string;
  196. begin
  197. DoAssemble:=true;
  198. if DoPipe then
  199. exit;
  200. if (SmartLinkFilesCnt<=1) and not(cs_asm_extern in aktglobalswitches) then
  201. Message1(exec_i_assembling,name);
  202. s:=target_asm.asmcmd;
  203. Replace(s,'$ASM',AsmFile);
  204. Replace(s,'$OBJ',ObjFile);
  205. if CallAssembler(FindAssembler,s) then
  206. RemoveAsm
  207. else
  208. begin
  209. DoAssemble:=false;
  210. GenerateError;
  211. end;
  212. end;
  213. procedure TAsmList.NextSmartName;
  214. var
  215. s : string;
  216. begin
  217. inc(SmartLinkFilesCnt);
  218. if SmartLinkFilesCnt>999999 then
  219. Message(asmw_f_too_many_asm_files);
  220. if IsEndFile then
  221. begin
  222. s:=current_module^.asmprefix^+'e';
  223. IsEndFile:=false;
  224. end
  225. else
  226. s:=current_module^.asmprefix^;
  227. AsmFile:=Path+FixFileName(s+tostr(SmartLinkFilesCnt)+target_info.asmext);
  228. ObjFile:=Path+FixFileName(s+tostr(SmartLinkFilesCnt)+target_info.objext);
  229. end;
  230. {*****************************************************************************
  231. TAsmList AsmFile Writing
  232. *****************************************************************************}
  233. Procedure TAsmList.AsmFlush;
  234. begin
  235. if outcnt>0 then
  236. begin
  237. BlockWrite(outfile,outbuf,outcnt);
  238. outcnt:=0;
  239. end;
  240. end;
  241. Procedure TAsmList.AsmClear;
  242. begin
  243. outcnt:=0;
  244. end;
  245. Procedure TAsmList.AsmWrite(const s:string);
  246. begin
  247. if OutCnt+length(s)>=AsmOutSize then
  248. AsmFlush;
  249. Move(s[1],OutBuf[OutCnt],length(s));
  250. inc(OutCnt,length(s));
  251. inc(AsmSize,length(s));
  252. end;
  253. Procedure TAsmList.AsmWriteLn(const s:string);
  254. begin
  255. AsmWrite(s);
  256. AsmLn;
  257. end;
  258. Procedure TAsmList.AsmWritePChar(p:pchar);
  259. var
  260. i,j : longint;
  261. begin
  262. i:=StrLen(p);
  263. j:=i;
  264. while j>0 do
  265. begin
  266. i:=min(j,AsmOutSize);
  267. if OutCnt+i>=AsmOutSize then
  268. AsmFlush;
  269. Move(p[0],OutBuf[OutCnt],i);
  270. inc(OutCnt,i);
  271. inc(AsmSize,i);
  272. dec(j,i);
  273. p:=pchar(@p[i]);
  274. end;
  275. end;
  276. Procedure TAsmList.AsmLn;
  277. begin
  278. if OutCnt>=AsmOutSize-2 then
  279. AsmFlush;
  280. OutBuf[OutCnt]:=target_os.newline[1];
  281. inc(OutCnt);
  282. inc(AsmSize);
  283. if length(target_os.newline)>1 then
  284. begin
  285. OutBuf[OutCnt]:=target_os.newline[2];
  286. inc(OutCnt);
  287. inc(AsmSize);
  288. end;
  289. end;
  290. procedure TAsmList.AsmCreate;
  291. begin
  292. if (cs_smartlink in aktmoduleswitches) then
  293. NextSmartName;
  294. {$ifdef linux}
  295. if DoPipe then
  296. begin
  297. Message1(exec_i_assembling_pipe,asmfile);
  298. POpen(outfile,'as -o '+objfile,'W');
  299. end
  300. else
  301. {$endif}
  302. begin
  303. Assign(outfile,asmfile);
  304. {$I-}
  305. Rewrite(outfile,1);
  306. {$I+}
  307. if ioresult<>0 then
  308. Message1(exec_d_cant_create_asmfile,asmfile);
  309. end;
  310. outcnt:=0;
  311. AsmSize:=0;
  312. AsmStartSize:=0;
  313. end;
  314. procedure TAsmList.AsmClose;
  315. var
  316. f : file;
  317. l : longint;
  318. begin
  319. AsmFlush;
  320. {$ifdef linux}
  321. if DoPipe then
  322. Close(outfile)
  323. else
  324. {$endif}
  325. begin
  326. {Touch Assembler time to ppu time is there is a ppufilename}
  327. if Assigned(current_module^.ppufilename) then
  328. begin
  329. Assign(f,current_module^.ppufilename^);
  330. {$I-}
  331. reset(f,1);
  332. {$I+}
  333. if ioresult=0 then
  334. begin
  335. getftime(f,l);
  336. close(f);
  337. reset(outfile,1);
  338. setftime(outfile,l);
  339. end;
  340. end;
  341. close(outfile);
  342. end;
  343. end;
  344. {Touch Assembler and object time to ppu time is there is a ppufilename}
  345. procedure TAsmList.Synchronize;
  346. begin
  347. {Touch Assembler time to ppu time is there is a ppufilename}
  348. if Assigned(current_module^.ppufilename) then
  349. begin
  350. SynchronizeFileTime(current_module^.ppufilename^,asmfile);
  351. if not(cs_asm_extern in aktglobalswitches) then
  352. SynchronizeFileTime(current_module^.ppufilename^,objfile);
  353. end;
  354. end;
  355. procedure TAsmList.WriteTree(p:paasmoutput);
  356. begin
  357. end;
  358. procedure TAsmList.WriteAsmList;
  359. begin
  360. end;
  361. Constructor TAsmList.Init;
  362. var
  363. i : word;
  364. begin
  365. { load start values }
  366. asmfile:=current_module^.asmfilename^;
  367. objfile:=current_module^.objfilename^;
  368. name:=FixFileName(current_module^.modulename^);
  369. OutCnt:=0;
  370. SmartLinkFilesCnt:=0;
  371. IsEndFile:=false;
  372. { Which path will be used ? }
  373. if (cs_smartlink in aktmoduleswitches) then
  374. begin
  375. path:=current_module^.path^+FixFileName(current_module^.modulename^)+target_info.smartext;
  376. {$I-}
  377. mkdir(path);
  378. {$I+}
  379. i:=ioresult;
  380. path:=FixPath(path,false);
  381. end
  382. else
  383. path:=current_module^.path^;
  384. end;
  385. Destructor TAsmList.Done;
  386. begin
  387. end;
  388. {*****************************************************************************
  389. Generate Assembler Files Main Procedure
  390. *****************************************************************************}
  391. Procedure GenerateAsm;
  392. var
  393. a : PAsmList;
  394. {$ifdef i386}
  395. {$ifndef NoAg386Bin}
  396. b : Pi386binasmlist;
  397. {$endif}
  398. {$endif}
  399. begin
  400. case aktoutputformat of
  401. as_none : ;
  402. {$ifdef i386}
  403. {$ifndef NoAg386Bin}
  404. as_i386_dbg,
  405. as_i386_coff,
  406. as_i386_pecoff :
  407. begin
  408. case aktoutputformat of
  409. as_i386_dbg :
  410. b:=new(pi386binasmlist,Init(og_dbg));
  411. as_i386_coff :
  412. b:=new(pi386binasmlist,Init(og_coff));
  413. as_i386_pecoff :
  414. b:=new(pi386binasmlist,Init(og_pecoff));
  415. end;
  416. b^.WriteBin;
  417. dispose(b,done);
  418. if assigned(current_module^.ppufilename) then
  419. begin
  420. if (cs_smartlink in aktmoduleswitches) then
  421. SynchronizeFileTime(current_module^.ppufilename^,current_module^.staticlibfilename^)
  422. else
  423. SynchronizeFileTime(current_module^.ppufilename^,current_module^.objfilename^);
  424. end;
  425. if assigned(current_module^.ppufilename) then
  426. SynchronizeFileTime(current_module^.ppufilename^,current_module^.objfilename^);
  427. exit;
  428. end;
  429. {$endif NoAg386Bin}
  430. {$ifndef NoAg386Att}
  431. as_i386_as,
  432. as_i386_as_aout,
  433. as_i386_asw :
  434. a:=new(pi386attasmlist,Init);
  435. {$endif NoAg386Att}
  436. {$ifndef NoAg386Nsm}
  437. as_i386_nasmcoff,
  438. as_i386_nasmelf,
  439. as_i386_nasmobj :
  440. a:=new(pi386nasmasmlist,Init);
  441. {$endif NoAg386Nsm}
  442. {$ifndef NoAg386Int}
  443. as_i386_tasm :
  444. a:=new(pi386intasmlist,Init);
  445. {$endif NoAg386Int}
  446. {$endif}
  447. {$ifdef m68k}
  448. {$ifndef NoAg68kGas}
  449. as_m68k_as,
  450. as_m68k_gas :
  451. a:=new(pm68kgasasmlist,Init);
  452. {$endif NoAg86KGas}
  453. {$ifndef NoAg68kMot}
  454. as_m68k_mot :
  455. a:=new(pm68kmotasmlist,Init);
  456. {$endif NoAg86kMot}
  457. {$ifndef NoAg68kMit}
  458. as_m68k_mit :
  459. a:=new(pm68kmitasmlist,Init);
  460. {$endif NoAg86KMot}
  461. {$ifndef NoAg68kMpw}
  462. as_m68k_mpw :
  463. a:=new(pm68kmpwasmlist,Init);
  464. {$endif NoAg68kMpw}
  465. {$endif}
  466. else
  467. {$ifdef TP}
  468. exit;
  469. {$else}
  470. Message(asmw_f_assembler_output_not_supported);
  471. {$endif}
  472. end;
  473. a^.AsmCreate;
  474. a^.WriteAsmList;
  475. a^.AsmClose;
  476. a^.DoAssemble;
  477. a^.synchronize;
  478. dispose(a,Done);
  479. end;
  480. Procedure OnlyAsm;
  481. var
  482. a : PAsmList;
  483. begin
  484. a:=new(pasmlist,Init);
  485. a^.DoAssemble;
  486. dispose(a,Done);
  487. end;
  488. end.
  489. {
  490. $Log$
  491. Revision 1.48 1999-05-27 19:44:03 peter
  492. * removed oldasm
  493. * plabel -> pasmlabel
  494. * -a switches to source writing automaticly
  495. * assembler readers OOPed
  496. * asmsymbol automaticly external
  497. * jumptables and other label fixes for asm readers
  498. Revision 1.47 1999/05/13 21:59:19 peter
  499. * removed oldppu code
  500. * warning if objpas is loaded from uses
  501. * first things for new deref writing
  502. Revision 1.46 1999/05/05 22:21:48 peter
  503. * updated messages
  504. Revision 1.45 1999/05/04 21:44:33 florian
  505. * changes to compile it with Delphi 4.0
  506. Revision 1.44 1999/05/02 23:28:42 peter
  507. * don't include ag386bin for oldasm
  508. Revision 1.43 1999/05/02 22:41:51 peter
  509. * moved section names to systems
  510. * fixed nasm,intel writer
  511. Revision 1.42 1999/05/01 13:24:00 peter
  512. * merged nasm compiler
  513. * old asm moved to oldasm/
  514. Revision 1.41 1999/03/24 23:16:42 peter
  515. * fixed bugs 212,222,225,227,229,231,233
  516. Revision 1.40 1999/03/18 20:30:44 peter
  517. + .a writer
  518. Revision 1.39 1999/03/01 15:43:48 peter
  519. * synchronize also the objfile for ag386bin
  520. Revision 1.38 1999/02/26 00:48:15 peter
  521. * assembler writers fixed for ag386bin
  522. Revision 1.37 1999/02/24 00:59:11 peter
  523. * small updates for ag386bin
  524. Revision 1.36 1999/02/22 02:15:01 peter
  525. * updates for ag386bin
  526. Revision 1.35 1999/02/17 10:16:26 peter
  527. * small fixes for the binary writer
  528. Revision 1.34 1999/01/10 15:37:52 peter
  529. * moved some tables from ra386*.pas -> i386.pas
  530. + start of coff writer
  531. * renamed asmutils unit to rautils
  532. Revision 1.33 1998/12/11 00:02:45 peter
  533. + globtype,tokens,version unit splitted from globals
  534. Revision 1.32 1998/11/06 09:46:46 pierre
  535. * assemble failure increments status errorcount again !!
  536. Revision 1.31 1998/10/26 22:23:28 peter
  537. + fixpath() has an extra option to allow a ./ as path
  538. Revision 1.30 1998/10/16 13:37:14 florian
  539. + switch -FD added to specify the path for utilities
  540. Revision 1.29 1998/10/15 16:19:42 peter
  541. * fixed asmsynchronize
  542. Revision 1.28 1998/10/14 15:56:43 pierre
  543. * all references to comp suppressed for m68k
  544. Revision 1.27 1998/10/13 16:50:01 pierre
  545. * undid some changes of Peter that made the compiler wrong
  546. for m68k (I had to reinsert some ifdefs)
  547. * removed several memory leaks under m68k
  548. * removed the meory leaks for assembler readers
  549. * cross compiling shoud work again better
  550. ( crosscompiling sysamiga works
  551. but as68k still complain about some code !)
  552. Revision 1.26 1998/10/13 13:10:11 peter
  553. * new style for m68k/i386 infos and enums
  554. Revision 1.25 1998/10/13 08:19:24 pierre
  555. + source_os is now set correctly for cross-processor compilers
  556. (tos contains all target_infos and
  557. we use CPU86 and CPU68 conditionnals to
  558. get the source operating system
  559. this only works if you do not undefine
  560. the source target !!)
  561. * several cg68k memory leaks fixed
  562. + started to change the code so that it should be possible to have
  563. a complete compiler (both for m68k and i386 !!)
  564. Revision 1.24 1998/10/08 23:28:50 peter
  565. * -vu shows unit info, -vt shows tried/used files
  566. Revision 1.23 1998/10/07 04:27:37 carl
  567. + MPW support
  568. Revision 1.22 1998/09/16 16:41:39 peter
  569. * merged fixes
  570. Revision 1.21.2.1 1998/09/16 16:11:38 peter
  571. * missing isendfile reset in .init
  572. Revision 1.21 1998/09/07 18:33:32 peter
  573. + smartlinking for win95 imports
  574. Revision 1.20 1998/09/04 17:34:20 pierre
  575. * bug with datalabel corrected
  576. + assembler errors better commented
  577. * one nested record crash removed
  578. Revision 1.19 1998/08/26 10:06:34 peter
  579. * reduce amount of asmfiles generated
  580. * no stabs are written in writefilelineinfo when debuginfo is off
  581. Revision 1.18 1998/08/21 14:08:39 pierre
  582. + TEST_FUNCRET now default (old code removed)
  583. works also for m68k (at least compiles)
  584. Revision 1.17 1998/08/17 09:17:43 peter
  585. * static/shared linking updates
  586. Revision 1.16 1998/08/14 21:56:30 peter
  587. * setting the outputfile using -o works now to create static libs
  588. Revision 1.15 1998/08/14 18:16:09 peter
  589. * return after a failed call will now add it to ppas
  590. Revision 1.14 1998/08/10 14:49:41 peter
  591. + localswitches, moduleswitches, globalswitches splitting
  592. Revision 1.13 1998/07/14 21:46:40 peter
  593. * updated messages file
  594. Revision 1.12 1998/07/08 14:58:34 daniel
  595. * First check if call to assembler is succesfull, then check it's exit code.
  596. This is more logical than first checking the exit code. For some mysterious
  597. reason this did not give problems on DOS & Linux. On OS/2 it did.
  598. Revision 1.11 1998/06/08 22:59:43 peter
  599. * smartlinking works for win32
  600. * some defines to exclude some compiler parts
  601. Revision 1.10 1998/06/04 23:51:33 peter
  602. * m68k compiles
  603. + .def file creation moved to gendef.pas so it could also be used
  604. for win32
  605. Revision 1.9 1998/05/23 01:21:01 peter
  606. + aktasmmode, aktoptprocessor, aktoutputformat
  607. + smartlink per module $SMARTLINK-/+ (like MMX) and moved to aktswitches
  608. + $LIBNAME to set the library name where the unit will be put in
  609. * splitted cgi386 a bit (codeseg to large for bp7)
  610. * nasm, tasm works again. nasm moved to ag386nsm.pas
  611. Revision 1.8 1998/05/11 13:07:53 peter
  612. + $ifdef NEWPPU for the new ppuformat
  613. + $define GDB not longer required
  614. * removed all warnings and stripped some log comments
  615. * no findfirst/findnext anymore to remove smartlink *.o files
  616. Revision 1.7 1998/05/07 00:17:00 peter
  617. * smartlinking for sets
  618. + consts labels are now concated/generated in hcodegen
  619. * moved some cpu code to cga and some none cpu depended code from cga
  620. to tree and hcodegen and cleanup of hcodegen
  621. * assembling .. output reduced for smartlinking ;)
  622. Revision 1.6 1998/05/04 17:54:24 peter
  623. + smartlinking works (only case jumptable left todo)
  624. * redesign of systems.pas to support assemblers and linkers
  625. + Unitname is now also in the PPU-file, increased version to 14
  626. Revision 1.5 1998/04/29 10:33:44 pierre
  627. + added some code for ansistring (not complete nor working yet)
  628. * corrected operator overloading
  629. * corrected nasm output
  630. + started inline procedures
  631. + added starstarn : use ** for exponentiation (^ gave problems)
  632. + started UseTokenInfo cond to get accurate positions
  633. Revision 1.4 1998/04/27 23:10:27 peter
  634. + new scanner
  635. * $makelib -> if smartlink
  636. * small filename fixes pmodule.setfilename
  637. * moved import from files.pas -> import.pas
  638. Revision 1.3 1998/04/10 14:41:43 peter
  639. * removed some Hints
  640. * small speed optimization for AsmLn
  641. Revision 1.2 1998/04/08 11:34:18 peter
  642. * nasm works (linux only tested)
  643. }