systems.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  1. {
  2. $Id$
  3. Copyright (c) 1998-2002 by Florian Klaempfl
  4. This unit contains information about the target systems supported
  5. (these are not processor specific)
  6. This program 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 fpcdefs.inc}
  21. interface
  22. type
  23. tendian = (endian_little,endian_big);
  24. {
  25. IMPORTANT NOTE:
  26. The value of this enumeration is stored in PPU files.
  27. Therefore adding new CPU targets should not change the
  28. values of the pre-existing targets. (CEC)
  29. FURTHERMORE : Make sure that this branch values, are
  30. consistant with the main branch version always.
  31. }
  32. ttargetcpu=
  33. (
  34. cpu_no, { 0 }
  35. cpu_i386, { 1 }
  36. cpu_m68k, { 2 }
  37. cpu_alpha, { 3 }
  38. cpu_powerpc, { 4 }
  39. cpu_sparc, { 5 }
  40. cpu_vm { 6 }
  41. );
  42. tprocessors = (no_processor
  43. ,Class386,ClassP5,ClassP6
  44. ,MC68000,MC68100,MC68020
  45. );
  46. TSection=(sec_none,
  47. sec_code,sec_data,sec_bss,
  48. sec_idata2,sec_idata4,sec_idata5,sec_idata6,sec_idata7,sec_edata,
  49. sec_stab,sec_stabstr,sec_common
  50. );
  51. tasmmode= (asmmode_none
  52. ,asmmode_i386_direct,asmmode_i386_att,asmmode_i386_intel
  53. ,asmmode_m68k_mot
  54. ,asmmode_alpha_direct
  55. ,asmmode_powerpc_direct
  56. );
  57. { IMPORTANT NOTE:
  58. the integer value of this enum is stored in PPU
  59. files to recognize the target, so if you add new targets
  60. allways add them at end PM
  61. FURTHERMORE : Make sure that this branch values, are
  62. consistant with the main branch version always. (CEC)
  63. }
  64. type
  65. ttarget =
  66. (
  67. target_none, { 0 }
  68. obsolete_target_i386_GO32V1,{ 1 }
  69. target_i386_GO32V2, { 2 }
  70. target_i386_linux, { 3 }
  71. target_i386_OS2, { 4 }
  72. target_i386_Win32, { 5 }
  73. target_i386_freebsd, { 6 }
  74. target_m68k_Amiga, { 7 }
  75. target_m68k_Atari, { 8 }
  76. target_m68k_Mac, { 9 }
  77. target_m68k_linux, { 10 }
  78. target_m68k_PalmOS, { 11 }
  79. target_alpha_linux, { 12 }
  80. target_powerpc_linux, { 13 }
  81. target_powerpc_macos, { 14 }
  82. target_i386_sunos, { 15 }
  83. target_i386_beos, { 16 }
  84. target_i386_netbsd, { 17 }
  85. target_m68k_netbsd, { 18 }
  86. target_i386_Netware, { 19 }
  87. target_i386_qnx, { 20 }
  88. target_i386_wdosx, { 21 }
  89. target_sparc_sunos, { 22 }
  90. target_sparc_linux { 23 }
  91. );
  92. tasm = (as_none
  93. ,as_i386_as,as_i386_as_aout,as_i386_asw,as_i386_aswdosx,
  94. as_i386_nasmcoff,as_i386_nasmwin32,as_i386_nasmwdosx,
  95. as_i386_nasmelf,as_i386_nasmobj,
  96. as_i386_tasm,as_i386_masm,
  97. as_i386_dbg,as_i386_coff,as_i386_pecoff,as_i386_elf32,as_i386_pecoffwdosx
  98. ,as_m68k_as,as_m68k_gas,as_m68k_mit,as_m68k_mot,
  99. as_m68k_mpw,as_m68k_palm
  100. ,as_alpha_as
  101. ,as_powerpc_as,as_powerpc_mpw,
  102. as_SPARC_as,as_SPARC_elf32
  103. );
  104. tld = (ld_none,
  105. ld_i386_GO32V1,ld_i386_GO32V2,ld_i386_linux,
  106. ld_i386_OS2,ld_i386_Win32,ld_i386_freebsd,
  107. ld_i386_Netware,ld_i386_sunos,ld_i386_beos,
  108. ld_i386_coff,ld_i386_pecoff,
  109. ld_m68k_Amiga,ld_m68k_Atari,ld_m68k_Mac,
  110. ld_m68k_linux,ld_m68k_PalmOS,ld_m68k_freebsd,
  111. ld_alpha_linux,
  112. ld_powerpc_linux,ld_powerpc_macos,ld_i386_Wdosx,
  113. ld_SPARC_SunOs,ld_SPARC_linux
  114. );
  115. tar = (ar_none
  116. ,ar_gnu_ar,ar_gnu_arw
  117. );
  118. tres = (res_none
  119. ,res_gnu_windres,res_emxbind
  120. );
  121. tscripttype = (script_none
  122. ,script_dos,script_unix,script_amiga
  123. );
  124. {*****************************************************************************
  125. Structures
  126. *****************************************************************************}
  127. type
  128. palignmentinfo = ^talignmentinfo;
  129. talignmentinfo = packed record
  130. procalign,
  131. loopalign,
  132. jumpalign,
  133. constalignmin,
  134. constalignmax,
  135. varalignmin,
  136. varalignmax,
  137. localalignmin,
  138. localalignmax,
  139. paraalign,
  140. recordalignmin,
  141. recordalignmax,
  142. maxCrecordalign : longint;
  143. end;
  144. pasminfo = ^tasminfo;
  145. tasminfo = packed record
  146. id : tasm;
  147. idtxt : string[9];
  148. asmbin : string[8];
  149. asmcmd : string[50];
  150. supported_target : ttarget;
  151. outputbinary,
  152. allowdirect,
  153. externals,
  154. needar,
  155. labelprefix_only_inside_procedure : boolean;
  156. labelprefix : string[3];
  157. comment : string[2];
  158. secnames : array[TSection] of string[20];
  159. end;
  160. parinfo = ^tarinfo;
  161. tarinfo = packed record
  162. id : tar;
  163. arcmd : string[50];
  164. end;
  165. presinfo = ^tresinfo;
  166. tresinfo = packed record
  167. id : tres;
  168. resbin : string[8];
  169. rescmd : string[50];
  170. end;
  171. {# }
  172. ttargetflags = (tf_none,
  173. tf_under_development,
  174. tf_need_export,tf_needs_isconsole
  175. ,tf_code_small,tf_static_reg_based
  176. );
  177. ptargetinfo = ^ttargetinfo;
  178. ttargetinfo = packed record
  179. target : ttarget;
  180. name : string[30];
  181. shortname : string[9];
  182. flags : set of ttargetflags;
  183. cpu : ttargetcpu;
  184. unit_env : string[12];
  185. extradefines : string[40];
  186. sourceext,
  187. pasext,
  188. exeext,
  189. defext,
  190. scriptext,
  191. smartext,
  192. unitext,
  193. unitlibext,
  194. asmext,
  195. objext,
  196. resext,
  197. resobjext : string[4];
  198. sharedlibext : string[10];
  199. staticlibext,
  200. staticlibprefix : string[4];
  201. sharedlibprefix : string[4];
  202. sharedClibext : string[10];
  203. staticClibext,
  204. staticClibprefix : string[4];
  205. sharedClibprefix : string[4];
  206. Cprefix : string[2];
  207. newline : string[2];
  208. dirsep : char;
  209. files_case_relevent : boolean;
  210. assem : tasm;
  211. assemextern : tasm; { external assembler, used by -a }
  212. link : tld;
  213. linkextern : tld; { external linker, used by -s }
  214. ar : tar;
  215. res : tres;
  216. script : tscripttype;
  217. endian : tendian;
  218. alignment : talignmentinfo;
  219. {
  220. Offset from the argument pointer register to the first
  221. argument's address. On some machines it may depend on
  222. the data type of the function.
  223. (see also FIRST_PARM_OFFSET in GCC source)
  224. }
  225. first_parm_offset : longint;
  226. heapsize,
  227. stacksize : longint;
  228. DllScanSupported : boolean;
  229. use_function_relative_addresses : boolean;
  230. end;
  231. pasmmodeinfo = ^tasmmodeinfo;
  232. tasmmodeinfo = packed record
  233. id : tasmmode;
  234. idtxt : string[8];
  235. end;
  236. const
  237. { alias for supported_target field in tasminfo }
  238. target_any = target_none;
  239. var
  240. targetinfos : array[ttarget] of ptargetinfo;
  241. asminfos : array[tasm] of pasminfo;
  242. arinfos : array[tar] of parinfo;
  243. resinfos : array[tres] of presinfo;
  244. asmmodeinfos : array[tasmmode] of pasmmodeinfo;
  245. source_info : ttargetinfo;
  246. target_cpu : ttargetcpu;
  247. target_info : ttargetinfo;
  248. target_asm : tasminfo;
  249. target_ar : tarinfo;
  250. target_res : tresinfo;
  251. target_path : string[12]; { for rtl/<X>/,fcl/<X>/, etc. }
  252. function set_target(t:ttarget):boolean;
  253. function set_target_asm(t:tasm):boolean;
  254. function set_target_ar(t:tar):boolean;
  255. function set_target_res(t:tres):boolean;
  256. function set_target_by_string(const s : string) : boolean;
  257. function set_target_asm_by_string(const s : string) : boolean;
  258. function set_asmmode_by_string(const s:string;var t:tasmmode):boolean;
  259. procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
  260. procedure RegisterTarget(const r:ttargetinfo);
  261. procedure RegisterAsmMode(const r:tasmmodeinfo);
  262. procedure RegisterRes(const r:tresinfo);
  263. procedure RegisterAr(const r:tarinfo);
  264. procedure InitSystems;
  265. implementation
  266. uses
  267. cutils;
  268. {****************************************************************************
  269. Target setting
  270. ****************************************************************************}
  271. function set_target(t:ttarget):boolean;
  272. begin
  273. set_target:=false;
  274. if assigned(targetinfos[t]) then
  275. begin
  276. target_info:=targetinfos[t]^;
  277. set_target_asm(target_info.assem);
  278. set_target_ar(target_info.ar);
  279. set_target_res(target_info.res);
  280. target_path:=lower(target_info.shortname);
  281. target_cpu:=target_info.cpu;
  282. set_target:=true;
  283. exit;
  284. end;
  285. end;
  286. function set_target_asm(t:tasm):boolean;
  287. begin
  288. set_target_asm:=false;
  289. if assigned(asminfos[t]) then
  290. begin
  291. target_asm:=asminfos[t]^;
  292. set_target_asm:=true;
  293. exit;
  294. end;
  295. end;
  296. function set_target_ar(t:tar):boolean;
  297. begin
  298. set_target_ar:=false;
  299. if assigned(arinfos[t]) then
  300. begin
  301. target_ar:=arinfos[t]^;
  302. set_target_ar:=true;
  303. exit;
  304. end;
  305. end;
  306. function set_target_res(t:tres):boolean;
  307. begin
  308. set_target_res:=false;
  309. if assigned(resinfos[t]) then
  310. begin
  311. target_res:=resinfos[t]^;
  312. set_target_res:=true;
  313. exit;
  314. end;
  315. end;
  316. function set_target_by_string(const s : string) : boolean;
  317. var
  318. hs : string;
  319. t : ttarget;
  320. begin
  321. set_target_by_string:=false;
  322. { this should be case insensitive !! PM }
  323. hs:=upper(s);
  324. for t:=low(ttarget) to high(ttarget) do
  325. if assigned(targetinfos[t]) and
  326. (upper(targetinfos[t]^.shortname)=hs) then
  327. begin
  328. set_target_by_string:=set_target(t);
  329. exit;
  330. end;
  331. end;
  332. function set_target_asm_by_string(const s : string) : boolean;
  333. var
  334. hs : string;
  335. t : tasm;
  336. begin
  337. set_target_asm_by_string:=false;
  338. { this should be case insensitive !! PM }
  339. hs:=upper(s);
  340. for t:=low(tasm) to high(tasm) do
  341. if assigned(asminfos[t]) and
  342. (asminfos[t]^.idtxt=hs) then
  343. begin
  344. set_target_asm_by_string:=set_target_asm(t);
  345. exit;
  346. end;
  347. end;
  348. function set_asmmode_by_string(const s:string;var t:tasmmode):boolean;
  349. var
  350. hs : string;
  351. ht : tasmmode;
  352. begin
  353. set_asmmode_by_string:=false;
  354. { this should be case insensitive !! PM }
  355. hs:=upper(s);
  356. for ht:=low(tasmmode) to high(tasmmode) do
  357. if assigned(asmmodeinfos[ht]) and
  358. (asmmodeinfos[ht]^.idtxt=hs) then
  359. begin
  360. t:=asmmodeinfos[ht]^.id;
  361. set_asmmode_by_string:=true;
  362. end;
  363. end;
  364. procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
  365. begin
  366. with d do
  367. begin
  368. { general update rules:
  369. minimum: if higher then update
  370. maximum: if lower then update or if undefined then update }
  371. if s.procalign>procalign then
  372. procalign:=s.procalign;
  373. if s.loopalign>loopalign then
  374. loopalign:=s.loopalign;
  375. if s.jumpalign>jumpalign then
  376. jumpalign:=s.jumpalign;
  377. if s.constalignmin>constalignmin then
  378. constalignmin:=s.constalignmin;
  379. if (constalignmax=0) or
  380. ((s.constalignmax>0) and (s.constalignmax<constalignmax)) then
  381. constalignmax:=s.constalignmax;
  382. if s.varalignmin>varalignmin then
  383. varalignmin:=s.varalignmin;
  384. if (varalignmax=0) or
  385. ((s.varalignmax>0) and (s.varalignmax<varalignmax)) then
  386. varalignmax:=s.varalignmax;
  387. if s.localalignmin>localalignmin then
  388. localalignmin:=s.localalignmin;
  389. if (localalignmax=0) or
  390. ((s.localalignmax>0) and (s.localalignmax<localalignmax)) then
  391. localalignmax:=s.localalignmax;
  392. if s.paraalign>paraalign then
  393. paraalign:=s.paraalign;
  394. if s.recordalignmin>recordalignmin then
  395. recordalignmin:=s.recordalignmin;
  396. if (recordalignmax=0) or
  397. ((s.recordalignmax>0) and (s.recordalignmax<recordalignmax)) then
  398. recordalignmax:=s.recordalignmax;
  399. if (maxCrecordalign=0) or
  400. ((s.maxCrecordalign>0) and (s.maxCrecordalign<maxCrecordalign)) then
  401. maxCrecordalign:=s.maxCrecordalign;
  402. end;
  403. end;
  404. {****************************************************************************
  405. Target registration
  406. ****************************************************************************}
  407. procedure RegisterTarget(const r:ttargetinfo);
  408. var
  409. t : ttarget;
  410. begin
  411. t:=r.target;
  412. if assigned(targetinfos[t]) then
  413. writeln('Warning: Target is already registered!')
  414. else
  415. Getmem(targetinfos[t],sizeof(ttargetinfo));
  416. targetinfos[t]^:=r;
  417. end;
  418. procedure RegisterAsmmode(const r:tasmmodeinfo);
  419. var
  420. t : tasmmode;
  421. begin
  422. t:=r.id;
  423. if assigned(asmmodeinfos[t]) then
  424. writeln('Warning: Asmmode is already registered!')
  425. else
  426. Getmem(asmmodeinfos[t],sizeof(tasmmodeinfo));
  427. asmmodeinfos[t]^:=r;
  428. end;
  429. procedure RegisterRes(const r:tresinfo);
  430. var
  431. t : tres;
  432. begin
  433. t:=r.id;
  434. if assigned(resinfos[t]) then
  435. writeln('Warning: resourcecompiler is already registered!')
  436. else
  437. Getmem(resinfos[t],sizeof(tresinfo));
  438. resinfos[t]^:=r;
  439. end;
  440. procedure RegisterAr(const r:tarinfo);
  441. var
  442. t : tar;
  443. begin
  444. t:=r.id;
  445. if assigned(arinfos[t]) then
  446. writeln('Warning: ar is already registered!')
  447. else
  448. Getmem(arinfos[t],sizeof(tarinfo));
  449. arinfos[t]^:=r;
  450. end;
  451. procedure DeregisterInfos;
  452. var
  453. assem : tasm;
  454. target : ttarget;
  455. ar : tar;
  456. asmmode : tasmmode;
  457. res : tres;
  458. begin
  459. for target:=low(ttarget) to high(ttarget) do
  460. if assigned(targetinfos[target]) then
  461. begin
  462. freemem(targetinfos[target],sizeof(ttargetinfo));
  463. targetinfos[target]:=nil;
  464. end;
  465. for assem:=low(tasm) to high(tasm) do
  466. if assigned(asminfos[assem]) then
  467. begin
  468. freemem(asminfos[assem],sizeof(tasminfo));
  469. asminfos[assem]:=nil;
  470. end;
  471. for ar:=low(tar) to high(tar) do
  472. if assigned(arinfos[ar]) then
  473. begin
  474. freemem(arinfos[ar],sizeof(tarinfo));
  475. arinfos[ar]:=nil;
  476. end;
  477. for res:=low(tres) to high(tres) do
  478. if assigned(resinfos[res]) then
  479. begin
  480. freemem(resinfos[res],sizeof(tresinfo));
  481. resinfos[res]:=nil;
  482. end;
  483. for asmmode:=low(tasmmode) to high(tasmmode) do
  484. if assigned(asmmodeinfos[asmmode]) then
  485. begin
  486. freemem(asmmodeinfos[asmmode],sizeof(tasmmodeinfo));
  487. asmmodeinfos[asmmode]:=nil;
  488. end;
  489. end;
  490. {****************************************************************************
  491. Initialization of default target
  492. ****************************************************************************}
  493. procedure default_target(t:ttarget);
  494. begin
  495. set_target(t);
  496. if source_info.name='' then
  497. source_info:=target_info;
  498. end;
  499. procedure set_source(t:ttarget);
  500. begin
  501. { can't use message() here (PFV) }
  502. if source_info.name<>'' then
  503. Writeln('Warning: Source OS Redefined!');
  504. if assigned(targetinfos[t]) then
  505. source_info:=targetinfos[t]^
  506. else
  507. Writeln('Warning: Source OS Not Supported!');
  508. end;
  509. procedure InitSystems;
  510. begin
  511. { first get source OS }
  512. source_info.name:='';
  513. { please note then we use cpu86 and cpu68 here on purpose !! }
  514. {$ifdef cpu86}
  515. {$ifdef GO32V2}
  516. set_source(target_i386_GO32V2);
  517. {$else}
  518. {$ifdef OS2}
  519. set_source(target_i386_OS2);
  520. if (OS_Mode = osDOS) or (OS_Mode = osDPMI) then
  521. source_info.scriptext := '.bat';
  522. { OS/2 via EMX can be run under DOS as well }
  523. {$else}
  524. {$ifdef WIN32}
  525. {$ifdef WDOSX}
  526. set_source(target_i386_wdosx);
  527. {$else}
  528. set_source(target_i386_WIN32);
  529. {$endif}
  530. {$else}
  531. {$ifdef FreeBSD}
  532. set_source(target_i386_FreeBSD);
  533. {$else}
  534. {$ifdef netbsd}
  535. set_source(target_i386_NetBSD);
  536. {$else}
  537. {$ifdef sunos}
  538. set_source(target_i386_sunos);
  539. {$else}
  540. {$ifdef beos}
  541. set_source(target_i386_beos);
  542. {$else}
  543. { Must be the last as some freebsd also
  544. defined linux }
  545. {$ifdef linux}
  546. set_source(target_i386_linux);
  547. {$else}
  548. {$error Error setting source OS}
  549. {$endif linux}
  550. {$endif beos}
  551. {$endif sunos}
  552. {$endif netbsd}
  553. {$endif freebsd}
  554. {$endif win32}
  555. {$endif os2}
  556. {$endif go32v2}
  557. {$endif cpu86}
  558. {$ifdef cpu68}
  559. {$ifdef AMIGA}
  560. set_source(target_m68k_Amiga);
  561. {$else}
  562. {$ifdef ATARI}
  563. set_source(target_m68k_Atari);
  564. {$else}
  565. {$ifdef MACOS}
  566. set_source(target_m68k_MAC);
  567. {$else}
  568. {$ifdef linux}
  569. set_source(target_m68k_linux);
  570. {$endif linux}
  571. {$endif macos}
  572. {$endif atari}
  573. {$endif amiga}
  574. {$endif cpu68}
  575. { Now default target, this is dependent on the i386 or m68k define,
  576. when the define is the same as the current cpu then we use the source
  577. os, else we pick a default }
  578. {$ifdef i386}
  579. {$ifdef cpu86}
  580. default_target(source_info.target);
  581. {$else cpu86}
  582. default_target(target_i386_linux);
  583. {$endif cpu86}
  584. {$endif i386}
  585. {$ifdef m68k}
  586. {$ifdef cpu68}
  587. default_target(source_info.target);
  588. {$else cpu68}
  589. default_target(target_m68k_linux);
  590. {$endif cpu68}
  591. {$endif m68k}
  592. {$ifdef alpha}
  593. {$ifdef cpualpha}
  594. default_target(source_info.target);
  595. {$else cpualpha}
  596. default_target(target_alpha_linux);
  597. {$endif cpualpha}
  598. {$endif alpha}
  599. {$ifdef powerpc}
  600. {$ifdef cpuppc}
  601. default_target(source_info.target);
  602. {$else cpuppc}
  603. default_target(target_powerpc_linux);
  604. {$endif cpuppc}
  605. {$endif powerpc}
  606. {$IFDEF SPARC}
  607. default_target(target_SPARC_linux);
  608. {$ENDIF SPARC}
  609. end;
  610. initialization
  611. finalization
  612. DeregisterInfos;
  613. end.
  614. {
  615. $Log$
  616. Revision 1.46 2002-07-01 18:46:29 peter
  617. * internal linker
  618. * reorganized aasm layer
  619. Revision 1.45 2002/05/18 13:34:21 peter
  620. * readded missing revisions
  621. Revision 1.44 2002/05/16 19:46:45 carl
  622. + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
  623. + try to fix temp allocation (still in ifdef)
  624. + generic constructor calls
  625. + start of tassembler / tmodulebase class cleanup
  626. Revision 1.42 2002/05/06 19:52:04 carl
  627. + added more patches from Mazen for SPARC port
  628. Revision 1.41 2002/04/24 16:08:30 carl
  629. * fix compilation problem
  630. Revision 1.40 2002/04/20 21:32:26 carl
  631. + generic FPC_CHECKPOINTER
  632. + first parameter offset in stack now portable
  633. * rename some constants
  634. + move some cpu stuff to other units
  635. - remove unused constents
  636. * fix stacksize for some targets
  637. * fix generic size problems which depend now on EXTEND_SIZE constant
  638. Revision 1.39 2002/04/15 19:08:22 carl
  639. + target_info.size_of_pointer -> pointer_size
  640. + some cleanup of unused types/variables
  641. Revision 1.38 2002/04/14 16:56:30 carl
  642. - remove duplicate comment
  643. Revision 1.37 2002/04/07 10:20:15 carl
  644. + added SPARC targets
  645. + added VM target
  646. Revision 1.36 2002/04/04 19:18:06 carl
  647. - removed cmnts
  648. }