2
0

systems.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. {
  2. $Id$
  3. Copyright (C) 1998-2000 by Florian Klaempfl
  4. This unit contains information about the target systems supported
  5. (these are not processor specific)
  6. This progsam is free software; you can redistribute it and/or modify
  7. iu under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 3 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 675 Mass Ave, Cambridge- MA 02139, USA.
  17. ****************************************************************************
  18. }
  19. unit systems;
  20. {$i defines.inc}
  21. interface
  22. type
  23. tendian = (endian_little,endian_big);
  24. ttargetcpu=(no_cpu
  25. ,i386,m68k,alpha,powerpc
  26. );
  27. tprocessors = (no_processor
  28. ,Class386,ClassP5,ClassP6
  29. ,MC68000,MC68100,MC68020
  30. );
  31. tsection=(sec_none,
  32. sec_code,sec_data,sec_bss,
  33. sec_idata2,sec_idata4,sec_idata5,sec_idata6,sec_idata7,sec_edata,
  34. sec_stab,sec_stabstr
  35. );
  36. tasmmode= (asmmode_none
  37. ,asmmode_i386_direct,asmmode_i386_att,asmmode_i386_intel
  38. ,asmmode_m68k_mot
  39. ,asmmode_alpha_direct
  40. ,asmmode_powerpc_direct
  41. );
  42. { IMPORTANT NOTE:
  43. the integer value of this enum is stored in PPU
  44. files to recognize the target, so if you add new targets
  45. allways add them at end PM }
  46. ttarget = (target_none,
  47. target_i386_GO32V1,target_i386_GO32V2,target_i386_linux,
  48. target_i386_OS2,target_i386_Win32,target_i386_freebsd,
  49. target_i386_Netware,target_i386_sunos,target_i386_beos,
  50. target_i386_NetBsd,
  51. target_m68k_Amiga,target_m68k_Atari,target_m68k_Mac,
  52. target_m68k_linux,target_m68k_PalmOS,target_m68k_NetBsd,
  53. target_alpha_linux,
  54. target_powerpc_linux,target_powerpc_macos
  55. );
  56. tasm = (as_none
  57. ,as_i386_as,as_i386_as_aout,as_i386_asw,
  58. as_i386_nasmcoff,as_i386_nasmwin32,
  59. as_i386_nasmelf,as_i386_nasmobj,
  60. as_i386_tasm,as_i386_masm,
  61. as_i386_dbg,as_i386_coff,as_i386_pecoff,as_i386_elf32
  62. ,as_m68k_as,as_m68k_gas,as_m68k_mit,as_m68k_mot,
  63. as_m68k_mpw,as_m68k_palm
  64. ,as_alpha_as
  65. ,as_powerpc_as,as_powerpc_mpw
  66. );
  67. tld = (ld_none,
  68. ld_i386_GO32V1,ld_i386_GO32V2,ld_i386_linux,
  69. ld_i386_OS2,ld_i386_Win32,ld_i386_freebsd,
  70. ld_i386_Netware,ld_i386_sunos,ld_i386_beos,
  71. ld_m68k_Amiga,ld_m68k_Atari,ld_m68k_Mac,
  72. ld_m68k_linux,ld_m68k_PalmOS,ld_m68k_freebsd,
  73. ld_alpha_linux,
  74. ld_powerpc_linux,ld_powerpc_macos
  75. );
  76. tar = (ar_none
  77. ,ar_gnu_ar,ar_gnu_arw
  78. );
  79. tres = (res_none
  80. ,res_gnu_windres,res_emxbind
  81. );
  82. tscripttype = (script_none
  83. ,script_dos,script_unix,script_amiga
  84. );
  85. {*****************************************************************************
  86. Structures
  87. *****************************************************************************}
  88. type
  89. palignmentinfo = ^talignmentinfo;
  90. talignmentinfo = packed record
  91. procalign,
  92. loopalign,
  93. jumpalign,
  94. constalignmin,
  95. constalignmax,
  96. varalignmin,
  97. varalignmax,
  98. localalignmin,
  99. localalignmax,
  100. paraalign,
  101. recordalignmin,
  102. recordalignmax,
  103. maxCrecordalign : longint;
  104. end;
  105. pasminfo = ^tasminfo;
  106. tasminfo = packed record
  107. id : tasm;
  108. idtxt : string[9];
  109. asmbin : string[8];
  110. asmcmd : string[50];
  111. supported_target : ttarget;
  112. outputbinary,
  113. allowdirect,
  114. externals,
  115. needar,
  116. labelprefix_only_inside_procedure : boolean;
  117. labelprefix : string[3];
  118. comment : string[2];
  119. secnames : array[tsection] of string[20];
  120. end;
  121. parinfo = ^tarinfo;
  122. tarinfo = packed record
  123. id : tar;
  124. arcmd : string[50];
  125. end;
  126. presinfo = ^tresinfo;
  127. tresinfo = packed record
  128. id : tres;
  129. resbin : string[8];
  130. rescmd : string[50];
  131. end;
  132. ttargetflags = (tf_none,
  133. tf_under_development,tf_supports_stack_checking,
  134. tf_need_export,tf_needs_isconsole
  135. {$ifdef m68k}
  136. ,tf_code_small,tf_static_a5_based
  137. {$endif m68k}
  138. );
  139. ptargetinfo = ^ttargetinfo;
  140. ttargetinfo = packed record
  141. target : ttarget;
  142. name : string[30];
  143. shortname : string[9];
  144. flags : set of ttargetflags;
  145. cpu : ttargetcpu;
  146. unit_env : string[12];
  147. extradefines : string[40];
  148. sourceext,
  149. pasext,
  150. exeext,
  151. defext,
  152. scriptext,
  153. smartext,
  154. unitext,
  155. unitlibext,
  156. asmext,
  157. objext,
  158. resext,
  159. resobjext : string[4];
  160. sharedlibext : string[10];
  161. staticlibext,
  162. staticlibprefix : string[4];
  163. sharedlibprefix : string[4];
  164. sharedClibext : string[10];
  165. staticClibext,
  166. staticClibprefix : string[4];
  167. sharedClibprefix : string[4];
  168. Cprefix : string[2];
  169. newline : string[2];
  170. dirsep : char;
  171. files_case_relevent : boolean;
  172. assem : tasm;
  173. assemextern : tasm; { external assembler, used by -a }
  174. link : tld;
  175. linkextern : tld; { external linker, used by -s }
  176. ar : tar;
  177. res : tres;
  178. script : tscripttype;
  179. endian : tendian;
  180. alignment : talignmentinfo;
  181. size_of_pointer : byte;
  182. size_of_longint : byte;
  183. heapsize,
  184. maxheapsize,
  185. stacksize : longint;
  186. DllScanSupported : boolean;
  187. use_bound_instruction : boolean;
  188. use_function_relative_addresses : boolean;
  189. end;
  190. pasmmodeinfo = ^tasmmodeinfo;
  191. tasmmodeinfo = packed record
  192. id : tasmmode;
  193. idtxt : string[8];
  194. end;
  195. const
  196. { alias for supported_target field in tasminfo }
  197. target_any = target_none;
  198. var
  199. targetinfos : array[ttarget] of ptargetinfo;
  200. asminfos : array[tasm] of pasminfo;
  201. arinfos : array[tar] of parinfo;
  202. resinfos : array[tres] of presinfo;
  203. asmmodeinfos : array[tasmmode] of pasmmodeinfo;
  204. source_info : ttargetinfo;
  205. target_cpu : ttargetcpu;
  206. target_info : ttargetinfo;
  207. target_asm : tasminfo;
  208. target_ar : tarinfo;
  209. target_res : tresinfo;
  210. target_path : string[12]; { for rtl/<X>/,fcl/<X>/, etc. }
  211. function set_target(t:ttarget):boolean;
  212. function set_target_asm(t:tasm):boolean;
  213. function set_target_ar(t:tar):boolean;
  214. function set_target_res(t:tres):boolean;
  215. function set_target_by_string(const s : string) : boolean;
  216. function set_target_asm_by_string(const s : string) : boolean;
  217. function set_asmmode_by_string(const s:string;var t:tasmmode):boolean;
  218. procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
  219. procedure RegisterTarget(const r:ttargetinfo);
  220. procedure RegisterAsmMode(const r:tasmmodeinfo);
  221. procedure RegisterRes(const r:tresinfo);
  222. procedure RegisterAr(const r:tarinfo);
  223. procedure InitSystems;
  224. implementation
  225. uses
  226. cutils;
  227. {****************************************************************************
  228. Target setting
  229. ****************************************************************************}
  230. function set_target(t:ttarget):boolean;
  231. begin
  232. set_target:=false;
  233. if assigned(targetinfos[t]) then
  234. begin
  235. target_info:=targetinfos[t]^;
  236. set_target_asm(target_info.assem);
  237. set_target_ar(target_info.ar);
  238. set_target_res(target_info.res);
  239. target_path:=lower(target_info.shortname);
  240. target_cpu:=target_info.cpu;
  241. set_target:=true;
  242. exit;
  243. end;
  244. end;
  245. function set_target_asm(t:tasm):boolean;
  246. begin
  247. set_target_asm:=false;
  248. if assigned(asminfos[t]) then
  249. begin
  250. target_asm:=asminfos[t]^;
  251. set_target_asm:=true;
  252. exit;
  253. end;
  254. end;
  255. function set_target_ar(t:tar):boolean;
  256. begin
  257. set_target_ar:=false;
  258. if assigned(arinfos[t]) then
  259. begin
  260. target_ar:=arinfos[t]^;
  261. set_target_ar:=true;
  262. exit;
  263. end;
  264. end;
  265. function set_target_res(t:tres):boolean;
  266. begin
  267. set_target_res:=false;
  268. if assigned(resinfos[t]) then
  269. begin
  270. target_res:=resinfos[t]^;
  271. set_target_res:=true;
  272. exit;
  273. end;
  274. end;
  275. function set_target_by_string(const s : string) : boolean;
  276. var
  277. hs : string;
  278. t : ttarget;
  279. begin
  280. set_target_by_string:=false;
  281. { this should be case insensitive !! PM }
  282. hs:=upper(s);
  283. for t:=low(ttarget) to high(ttarget) do
  284. if assigned(targetinfos[t]) and
  285. (upper(targetinfos[t]^.shortname)=hs) then
  286. begin
  287. set_target_by_string:=set_target(t);
  288. exit;
  289. end;
  290. end;
  291. function set_target_asm_by_string(const s : string) : boolean;
  292. var
  293. hs : string;
  294. t : tasm;
  295. begin
  296. set_target_asm_by_string:=false;
  297. { this should be case insensitive !! PM }
  298. hs:=upper(s);
  299. for t:=low(tasm) to high(tasm) do
  300. if assigned(asminfos[t]) and
  301. (asminfos[t]^.idtxt=hs) then
  302. begin
  303. set_target_asm_by_string:=set_target_asm(t);
  304. exit;
  305. end;
  306. end;
  307. function set_asmmode_by_string(const s:string;var t:tasmmode):boolean;
  308. var
  309. hs : string;
  310. ht : tasmmode;
  311. begin
  312. set_asmmode_by_string:=false;
  313. { this should be case insensitive !! PM }
  314. hs:=upper(s);
  315. for ht:=low(tasmmode) to high(tasmmode) do
  316. if assigned(asmmodeinfos[ht]) and
  317. (asmmodeinfos[ht]^.idtxt=hs) then
  318. begin
  319. t:=asmmodeinfos[ht]^.id;
  320. set_asmmode_by_string:=true;
  321. end;
  322. end;
  323. procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
  324. begin
  325. with d do
  326. begin
  327. { general update rules:
  328. minimum: if higher then update
  329. maximum: if lower then update or if undefined then update }
  330. if s.procalign>procalign then
  331. procalign:=s.procalign;
  332. if s.loopalign>loopalign then
  333. loopalign:=s.loopalign;
  334. if s.jumpalign>jumpalign then
  335. jumpalign:=s.jumpalign;
  336. if s.constalignmin>constalignmin then
  337. constalignmin:=s.constalignmin;
  338. if (constalignmax=0) or (s.constalignmax<constalignmax) then
  339. constalignmax:=s.constalignmax;
  340. if s.varalignmin>varalignmin then
  341. varalignmin:=s.varalignmin;
  342. if (varalignmax=0) or (s.varalignmax<varalignmax) then
  343. varalignmax:=s.varalignmax;
  344. if s.localalignmin>localalignmin then
  345. localalignmin:=s.localalignmin;
  346. if (localalignmax=0) or (s.localalignmax<localalignmax) then
  347. localalignmax:=s.localalignmax;
  348. if s.paraalign>paraalign then
  349. paraalign:=s.paraalign;
  350. if s.recordalignmin>recordalignmin then
  351. recordalignmin:=s.recordalignmin;
  352. if (recordalignmax=0) or (s.recordalignmax<recordalignmax) then
  353. recordalignmax:=s.recordalignmax;
  354. if (maxCrecordalign=0) or (s.maxCrecordalign<maxCrecordalign) then
  355. maxCrecordalign:=s.maxCrecordalign;
  356. end;
  357. end;
  358. {****************************************************************************
  359. Target registration
  360. ****************************************************************************}
  361. procedure RegisterTarget(const r:ttargetinfo);
  362. var
  363. t : ttarget;
  364. begin
  365. t:=r.target;
  366. if assigned(targetinfos[t]) then
  367. writeln('Warning: Target is already registered!')
  368. else
  369. Getmem(targetinfos[t],sizeof(ttargetinfo));
  370. targetinfos[t]^:=r;
  371. end;
  372. procedure RegisterAsmmode(const r:tasmmodeinfo);
  373. var
  374. t : tasmmode;
  375. begin
  376. t:=r.id;
  377. if assigned(asmmodeinfos[t]) then
  378. writeln('Warning: Asmmode is already registered!')
  379. else
  380. Getmem(asmmodeinfos[t],sizeof(tasmmodeinfo));
  381. asmmodeinfos[t]^:=r;
  382. end;
  383. procedure RegisterRes(const r:tresinfo);
  384. var
  385. t : tres;
  386. begin
  387. t:=r.id;
  388. if assigned(resinfos[t]) then
  389. writeln('Warning: resourcecompiler is already registered!')
  390. else
  391. Getmem(resinfos[t],sizeof(tresinfo));
  392. resinfos[t]^:=r;
  393. end;
  394. procedure RegisterAr(const r:tarinfo);
  395. var
  396. t : tar;
  397. begin
  398. t:=r.id;
  399. if assigned(arinfos[t]) then
  400. writeln('Warning: ar is already registered!')
  401. else
  402. Getmem(arinfos[t],sizeof(tarinfo));
  403. arinfos[t]^:=r;
  404. end;
  405. procedure DeregisterInfos;
  406. var
  407. assem : tasm;
  408. target : ttarget;
  409. ar : tar;
  410. asmmode : tasmmode;
  411. res : tres;
  412. begin
  413. for target:=low(ttarget) to high(ttarget) do
  414. if assigned(targetinfos[target]) then
  415. begin
  416. freemem(targetinfos[target],sizeof(ttargetinfo));
  417. targetinfos[target]:=nil;
  418. end;
  419. for assem:=low(tasm) to high(tasm) do
  420. if assigned(asminfos[assem]) then
  421. begin
  422. freemem(asminfos[assem],sizeof(tasminfo));
  423. asminfos[assem]:=nil;
  424. end;
  425. for ar:=low(tar) to high(tar) do
  426. if assigned(arinfos[ar]) then
  427. begin
  428. freemem(arinfos[ar],sizeof(tarinfo));
  429. arinfos[ar]:=nil;
  430. end;
  431. for res:=low(tres) to high(tres) do
  432. if assigned(resinfos[res]) then
  433. begin
  434. freemem(resinfos[res],sizeof(tresinfo));
  435. resinfos[res]:=nil;
  436. end;
  437. for asmmode:=low(tasmmode) to high(tasmmode) do
  438. if assigned(asmmodeinfos[asmmode]) then
  439. begin
  440. freemem(asmmodeinfos[asmmode],sizeof(tasmmodeinfo));
  441. asmmodeinfos[asmmode]:=nil;
  442. end;
  443. end;
  444. {****************************************************************************
  445. Initialization of default target
  446. ****************************************************************************}
  447. procedure default_target(t:ttarget);
  448. begin
  449. set_target(t);
  450. if source_info.name='' then
  451. source_info:=target_info;
  452. end;
  453. procedure set_source(t:ttarget);
  454. begin
  455. { can't use message() here (PFV) }
  456. if source_info.name<>'' then
  457. Writeln('Warning: Source OS Redefined!');
  458. if assigned(targetinfos[t]) then
  459. source_info:=targetinfos[t]^
  460. else
  461. Writeln('Warning: Source OS Not Supported!');
  462. end;
  463. procedure InitSystems;
  464. begin
  465. { first get source OS }
  466. source_info.name:='';
  467. { please note then we use cpu86 and cpu68 here on purpose !! }
  468. {$ifdef cpu86}
  469. {$ifdef GO32V1}
  470. set_source(target_i386_GO32V1);
  471. {$else}
  472. {$ifdef GO32V2}
  473. set_source(target_i386_GO32V2);
  474. {$else}
  475. {$ifdef OS2}
  476. set_source(target_i386_OS2);
  477. if (target_Mode = osDOS) or (target_Mode = osDPMI) then
  478. source_info.scriptext := '.bat';
  479. { OS/2 via EMX can be run under DOS as well }
  480. {$else}
  481. {$ifdef WIN32}
  482. set_source(target_i386_WIN32);
  483. {$else}
  484. {$Ifdef BSD}
  485. set_source(target_i386_FreeBSD);
  486. {$else}
  487. {$ifdef sunos}
  488. set_source(target_i386_sunos);
  489. {$else}
  490. { Must be the last as some freebsd also
  491. defined linux }
  492. {$ifdef Linux}
  493. set_source(target_i386_LINUX);
  494. {$endif linux}
  495. {$endif sunos}
  496. {$endif bsd}
  497. {$endif win32}
  498. {$endif os2}
  499. {$endif go32v2}
  500. {$endif go32v1}
  501. {$endif cpu86}
  502. {$ifdef cpu68}
  503. {$ifdef AMIGA}
  504. set_source(target_m68k_Amiga);
  505. {$else}
  506. {$ifdef ATARI}
  507. set_source(target_m68k_Atari);
  508. {$else}
  509. {$ifdef MACOS}
  510. set_source(target_m68k_MAC);
  511. {$else}
  512. {$ifdef LINUX}
  513. set_source(target_m68k_linux);
  514. {$endif linux}
  515. {$endif macos}
  516. {$endif atari}
  517. {$endif amiga}
  518. {$endif cpu68}
  519. { Now default target !! }
  520. {$ifdef i386}
  521. {$ifdef GO32V1}
  522. default_target(target_i386_GO32V1);
  523. {$else}
  524. {$ifdef GO32V2}
  525. default_target(target_i386_GO32V2);
  526. {$else}
  527. {$ifdef OS2}
  528. default_target(target_i386_OS2);
  529. {$else}
  530. {$ifdef unix}
  531. {$ifdef BSD}
  532. default_target(target_i386_FreeBSD);
  533. {$else}
  534. default_target(target_i386_LINUX);
  535. {$endif}
  536. {$else}
  537. {$ifdef WIN32}
  538. default_target(target_i386_WIN32);
  539. {$else}
  540. default_target(target_i386_GO32V2);
  541. {$endif win32}
  542. {$endif linux}
  543. {$endif os2}
  544. {$endif go32v2}
  545. {$endif go32v1}
  546. {$endif i386}
  547. {$ifdef m68k}
  548. {$ifdef AMIGA}
  549. default_target(target_m68k_Amiga);
  550. {$else}
  551. {$ifdef ATARI}
  552. default_target(target_m68k_Atari);
  553. {$else}
  554. {$ifdef MACOS}
  555. default_target(target_m68k_Mac);
  556. {$else}
  557. {$ifdef LINUX}
  558. default_target(target_m68k_linux);
  559. {$else}
  560. default_target(target_m68k_Amiga);
  561. {$endif linux}
  562. {$endif macos}
  563. {$endif atari}
  564. {$endif amiga}
  565. {$endif m68k}
  566. {$ifdef alpha}
  567. default_target(target_alpha_linux);
  568. {$endif alpha}
  569. {$ifdef powerpc}
  570. default_target(target_powerpc_linux);
  571. {$endif powerpc}
  572. end;
  573. initialization
  574. finalization
  575. DeregisterInfos;
  576. end.
  577. {
  578. $Log$
  579. Revision 1.27 2001-09-18 11:30:48 michael
  580. * Fixes win32 linking problems with import libraries
  581. * LINKLIB Libraries are now looked for using C file extensions
  582. * get_exepath fix
  583. Revision 1.26 2001/09/17 21:29:13 peter
  584. * merged netbsd, fpu-overflow from fixes branch
  585. Revision 1.25 2001/08/30 20:57:10 peter
  586. * asbsd merged
  587. Revision 1.24 2001/08/19 11:22:24 peter
  588. * palmos support from v10 merged
  589. Revision 1.23 2001/08/12 17:57:07 peter
  590. * under development flag for targets
  591. Revision 1.22 2001/08/07 18:47:13 peter
  592. * merged netbsd start
  593. * profile for win32
  594. Revision 1.21 2001/07/01 20:16:18 peter
  595. * alignmentinfo record added
  596. * -Oa argument supports more alignment settings that can be specified
  597. per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
  598. RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
  599. required alignment and the maximum usefull alignment. The final
  600. alignment will be choosen per variable size dependent on these
  601. settings
  602. Revision 1.20 2001/06/19 14:43:31 marco
  603. * Fixed ifdef linux bug
  604. Revision 1.19 2001/06/03 20:21:08 peter
  605. * Kylix fixes, mostly case names of units
  606. Revision 1.18 2001/06/03 15:15:31 peter
  607. * dllprt0 stub for linux shared libs
  608. * pass -init and -fini for linux shared libs
  609. * libprefix splitted into staticlibprefix and sharedlibprefix
  610. Revision 1.17 2001/06/02 19:21:45 peter
  611. * extradefines field added to target_info, so that targets don't
  612. need to put code in options.pas for it
  613. Revision 1.16 2001/04/18 22:02:00 peter
  614. * registration of targets and assemblers
  615. Revision 1.15 2001/03/06 18:28:02 peter
  616. * patch from Pavel with a new and much faster DLL Scanner for
  617. automatic importing so $linklib works for DLLs. Thanks Pavel!
  618. Revision 1.14 2001/02/26 19:44:55 peter
  619. * merged generic m68k updates from fixes branch
  620. Revision 1.13 2001/02/20 21:36:40 peter
  621. * tasm/masm fixes merged
  622. Revision 1.12 2001/01/06 20:15:43 peter
  623. * merged libp library prefix
  624. Revision 1.11 2000/10/15 09:08:58 peter
  625. * use System for the systemunit instead of target dependent
  626. Revision 1.10 2000/09/24 21:12:41 hajny
  627. * OS/2 stack alignment corrected + default stack increased
  628. Revision 1.9 2000/09/24 15:06:30 peter
  629. * use defines.inc
  630. Revision 1.8 2000/09/20 10:49:39 marco
  631. * Set writer to elf. (Only a prob for smart with -OG3p3r)
  632. Revision 1.7 2000/09/16 12:22:52 peter
  633. * freebsd support merged
  634. Revision 1.6 2000/09/11 17:00:23 florian
  635. + first implementation of Netware Module support, thanks to
  636. Armin Diehl ([email protected]) for providing the patches
  637. Revision 1.5 2000/08/12 19:14:59 peter
  638. * ELF writer works now also with -g
  639. * ELF writer is default again for linux
  640. Revision 1.4 2000/07/14 21:29:38 michael
  641. * Back to external assembler till peter fixes gdb
  642. Revision 1.3 2000/07/13 12:08:28 michael
  643. + patched to 1.1.0 with former 1.09patch from peter
  644. Revision 1.2 2000/07/13 11:32:50 michael
  645. + removed logs
  646. }