i_linux.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. {
  2. $Id$
  3. Copyright (c) 1998-2002 by Peter Vreman
  4. This unit implements support information structures for linux
  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. }
  18. { This unit implements support information structures for linux. }
  19. unit i_linux;
  20. interface
  21. uses
  22. systems;
  23. const
  24. system_i386_linux_info : tsysteminfo =
  25. (
  26. system : system_i386_LINUX;
  27. name : 'Linux for i386';
  28. shortname : 'Linux';
  29. flags : [tf_needs_symbol_size,tf_pic_uses_got{,tf_smartlink_sections}];
  30. cpu : cpu_i386;
  31. unit_env : 'LINUXUNITS';
  32. extradefines : 'UNIX;HASUNIX';
  33. sourceext : '.pp';
  34. pasext : '.pas';
  35. exeext : '';
  36. defext : '.def';
  37. scriptext : '.sh';
  38. smartext : '.sl';
  39. unitext : '.ppu';
  40. unitlibext : '.ppl';
  41. asmext : '.s';
  42. objext : '.o';
  43. resext : '.res';
  44. resobjext : '.or';
  45. sharedlibext : '.so';
  46. staticlibext : '.a';
  47. staticlibprefix : 'libp';
  48. sharedlibprefix : 'lib';
  49. sharedClibext : '.so';
  50. staticClibext : '.a';
  51. staticClibprefix : 'lib';
  52. sharedClibprefix : 'lib';
  53. Cprefix : '';
  54. newline : #10;
  55. dirsep : '/';
  56. files_case_relevent : true;
  57. assem : as_i386_elf32;
  58. assemextern : as_gas;
  59. link : nil;
  60. linkextern : nil;
  61. ar : ar_gnu_ar;
  62. res : res_none;
  63. script : script_unix;
  64. endian : endian_little;
  65. alignment :
  66. (
  67. procalign : 16;
  68. loopalign : 4;
  69. jumpalign : 0;
  70. constalignmin : 0;
  71. constalignmax : 8;
  72. varalignmin : 0;
  73. varalignmax : 8;
  74. localalignmin : 4;
  75. localalignmax : 4;
  76. recordalignmin : 0;
  77. recordalignmax : 4;
  78. maxCrecordalign : 4
  79. );
  80. first_parm_offset : 8;
  81. stacksize : 262144;
  82. DllScanSupported:false;
  83. use_function_relative_addresses : true;
  84. abi : abi_default
  85. );
  86. system_m68k_linux_info : tsysteminfo =
  87. (
  88. system : system_m68k_linux;
  89. name : 'Linux for m68k';
  90. shortname : 'Linux';
  91. flags : [tf_needs_symbol_size];
  92. cpu : cpu_m68k;
  93. unit_env : 'LINUXUNITS';
  94. extradefines : 'UNIX;HASUNIX';
  95. sourceext : '.pp';
  96. pasext : '.pas';
  97. exeext : '';
  98. defext : '';
  99. scriptext : '.sh';
  100. smartext : '.sl';
  101. unitext : '.ppu';
  102. unitlibext : '.ppl';
  103. asmext : '.s';
  104. objext : '.o';
  105. resext : '.res';
  106. resobjext : '.or';
  107. sharedlibext : '.so';
  108. staticlibext : '.a';
  109. staticlibprefix : 'libp';
  110. sharedlibprefix : 'lib';
  111. sharedClibext : '.so';
  112. staticClibext : '.a';
  113. staticClibprefix : 'lib';
  114. sharedClibprefix : 'lib';
  115. Cprefix : '';
  116. newline : #10;
  117. dirsep : '/';
  118. files_case_relevent : true;
  119. assem : as_gas;
  120. assemextern : as_gas;
  121. link : nil;
  122. linkextern : nil;
  123. ar : ar_gnu_ar;
  124. res : res_none;
  125. script : script_unix;
  126. endian : endian_big;
  127. alignment :
  128. (
  129. procalign : 4;
  130. loopalign : 4;
  131. jumpalign : 0;
  132. constalignmin : 0;
  133. constalignmax : 4;
  134. varalignmin : 0;
  135. varalignmax : 4;
  136. localalignmin : 4;
  137. localalignmax : 4;
  138. recordalignmin : 0;
  139. recordalignmax : 2;
  140. maxCrecordalign : 4
  141. );
  142. first_parm_offset : 8;
  143. stacksize : 32*1024*1024;
  144. DllScanSupported:false;
  145. use_function_relative_addresses : true;
  146. abi : abi_default
  147. );
  148. system_powerpc_linux_info : tsysteminfo =
  149. (
  150. system : system_powerpc_LINUX;
  151. name : 'Linux for PowerPC';
  152. shortname : 'Linux';
  153. flags : [tf_needs_symbol_size];
  154. cpu : cpu_powerpc;
  155. unit_env : '';
  156. extradefines : 'UNIX;HASUNIX';
  157. sourceext : '.pp';
  158. pasext : '.pas';
  159. exeext : '';
  160. defext : '.def';
  161. scriptext : '.sh';
  162. smartext : '.sl';
  163. unitext : '.ppu';
  164. unitlibext : '.ppl';
  165. asmext : '.s';
  166. objext : '.o';
  167. resext : '.res';
  168. resobjext : '.or';
  169. sharedlibext : '.so';
  170. staticlibext : '.a';
  171. staticlibprefix : 'libp';
  172. sharedlibprefix : 'lib';
  173. sharedClibext : '.so';
  174. staticClibext : '.a';
  175. staticClibprefix : 'lib';
  176. sharedClibprefix : 'lib';
  177. Cprefix : '';
  178. newline : #10;
  179. dirsep : '/';
  180. files_case_relevent : true;
  181. assem : as_gas;
  182. assemextern : as_gas;
  183. link : nil;
  184. linkextern : nil;
  185. ar : ar_gnu_ar;
  186. res : res_none;
  187. script : script_unix;
  188. endian : endian_big;
  189. alignment :
  190. (
  191. procalign : 4;
  192. loopalign : 4;
  193. jumpalign : 0;
  194. constalignmin : 0;
  195. constalignmax : 4;
  196. varalignmin : 0;
  197. varalignmax : 4;
  198. localalignmin : 4;
  199. localalignmax : 4;
  200. recordalignmin : 0;
  201. recordalignmax : 4;
  202. maxCrecordalign : 8
  203. );
  204. first_parm_offset : 8;
  205. stacksize : 32*1024*1024;
  206. DllScanSupported:false;
  207. use_function_relative_addresses : true;
  208. abi : abi_powerpc_sysv;
  209. );
  210. system_alpha_linux_info : tsysteminfo =
  211. (
  212. system : system_alpha_LINUX;
  213. name : 'Linux for Alpha';
  214. shortname : 'Linux';
  215. flags : [tf_needs_symbol_size];
  216. cpu : cpu_alpha;
  217. unit_env : 'LINUXUNITS';
  218. extradefines : 'UNIX;HASUNIX';
  219. sourceext : '.pp';
  220. pasext : '.pas';
  221. exeext : '';
  222. defext : '.def';
  223. scriptext : '.sh';
  224. smartext : '.sl';
  225. unitext : '.ppu';
  226. unitlibext : '.ppl';
  227. asmext : '.s';
  228. objext : '.o';
  229. resext : '.res';
  230. resobjext : '.or';
  231. sharedlibext : '.so';
  232. staticlibext : '.a';
  233. staticlibprefix : 'libp';
  234. sharedlibprefix : 'lib';
  235. sharedClibext : '.so';
  236. staticClibext : '.a';
  237. staticClibprefix : 'lib';
  238. sharedClibprefix : 'lib';
  239. Cprefix : '';
  240. newline : #10;
  241. dirsep : '/';
  242. files_case_relevent : true;
  243. assem : as_gas;
  244. assemextern : as_gas;
  245. link : nil;
  246. linkextern : nil;
  247. ar : ar_gnu_ar;
  248. res : res_none;
  249. script : script_unix;
  250. endian : endian_little;
  251. alignment :
  252. (
  253. procalign : 4;
  254. loopalign : 4;
  255. jumpalign : 0;
  256. constalignmin : 0;
  257. constalignmax : 4;
  258. varalignmin : 0;
  259. varalignmax : 4;
  260. localalignmin : 4;
  261. localalignmax : 4;
  262. recordalignmin : 0;
  263. recordalignmax : 2;
  264. maxCrecordalign : 4
  265. );
  266. first_parm_offset : 8;
  267. stacksize : 32*1024*1024;
  268. DllScanSupported:false;
  269. use_function_relative_addresses : true;
  270. abi : abi_default
  271. );
  272. system_x86_64_linux_info : tsysteminfo =
  273. (
  274. system : system_x86_64_LINUX;
  275. name : 'Linux for x86-64';
  276. shortname : 'Linux';
  277. flags : [tf_needs_symbol_size,tf_needs_dwarf_cfi];
  278. cpu : cpu_x86_64;
  279. unit_env : 'LINUXUNITS';
  280. extradefines : 'UNIX;HASUNIX';
  281. sourceext : '.pp';
  282. pasext : '.pas';
  283. exeext : '';
  284. defext : '.def';
  285. scriptext : '.sh';
  286. smartext : '.sl';
  287. unitext : '.ppu';
  288. unitlibext : '.ppl';
  289. asmext : '.s';
  290. objext : '.o';
  291. resext : '.res';
  292. resobjext : '.or';
  293. sharedlibext : '.so';
  294. staticlibext : '.a';
  295. staticlibprefix : 'libp';
  296. sharedlibprefix : 'lib';
  297. sharedClibext : '.so';
  298. staticClibext : '.a';
  299. staticClibprefix : 'lib';
  300. sharedClibprefix : 'lib';
  301. Cprefix : '';
  302. newline : #10;
  303. dirsep : '/';
  304. files_case_relevent : true;
  305. assem : as_gas;
  306. assemextern : as_gas;
  307. link : nil;
  308. linkextern : nil;
  309. ar : ar_gnu_ar;
  310. res : res_none;
  311. script : script_unix;
  312. endian : endian_little;
  313. alignment :
  314. (
  315. procalign : 8;
  316. loopalign : 4;
  317. jumpalign : 0;
  318. constalignmin : 0;
  319. constalignmax : 8;
  320. varalignmin : 0;
  321. varalignmax : 8;
  322. localalignmin : 4;
  323. localalignmax : 8;
  324. recordalignmin : 0;
  325. recordalignmax : 8;
  326. maxCrecordalign : 8
  327. );
  328. first_parm_offset : 16;
  329. stacksize : 256*1024;
  330. DllScanSupported:false;
  331. use_function_relative_addresses : true;
  332. abi : abi_default
  333. );
  334. system_sparc_linux_info : tsysteminfo =
  335. (
  336. system : system_SPARC_Linux;
  337. name : 'Linux for SPARC';
  338. shortname : 'Linux';
  339. flags : [tf_needs_symbol_size];
  340. cpu : cpu_SPARC;
  341. unit_env : 'LINUXUNITS';
  342. extradefines : 'UNIX;HASUNIX';
  343. sourceext : '.pp';
  344. pasext : '.pas';
  345. exeext : '';
  346. defext : '.def';
  347. scriptext : '.sh';
  348. smartext : '.sl';
  349. unitext : '.ppu';
  350. unitlibext : '.ppl';
  351. asmext : '.s';
  352. objext : '.o';
  353. resext : '.res';
  354. resobjext : '.or';
  355. sharedlibext : '.so';
  356. staticlibext : '.a';
  357. staticlibprefix : 'libp';
  358. sharedlibprefix : 'lib';
  359. sharedClibext : '.so';
  360. staticClibext : '.a';
  361. staticClibprefix : 'lib';
  362. sharedClibprefix : 'lib';
  363. Cprefix : '';
  364. newline : #10;
  365. dirsep : '/';
  366. files_case_relevent : true;
  367. assem : as_gas;
  368. assemextern : as_gas;
  369. link : nil;
  370. linkextern : nil;
  371. ar : ar_gnu_ar;
  372. res : res_none;
  373. script : script_unix;
  374. endian : endian_big;
  375. alignment :
  376. (
  377. procalign : 4;
  378. loopalign : 4;
  379. jumpalign : 0;
  380. constalignmin : 0;
  381. constalignmax : 8;
  382. varalignmin : 0;
  383. varalignmax : 8;
  384. localalignmin : 4;
  385. localalignmax : 8;
  386. recordalignmin : 0;
  387. recordalignmax : 8;
  388. maxCrecordalign : 8
  389. );
  390. first_parm_offset : 92;
  391. stacksize : 262144;
  392. DllScanSupported:false;
  393. use_function_relative_addresses : true;
  394. abi : abi_default
  395. );
  396. system_arm_linux_info : tsysteminfo =
  397. (
  398. system : system_arm_Linux;
  399. name : 'Linux for ARM';
  400. shortname : 'Linux';
  401. flags : [tf_needs_symbol_size];
  402. cpu : cpu_arm;
  403. unit_env : 'LINUXUNITS';
  404. extradefines : 'UNIX;HASUNIX';
  405. sourceext : '.pp';
  406. pasext : '.pas';
  407. exeext : '';
  408. defext : '.def';
  409. scriptext : '.sh';
  410. smartext : '.sl';
  411. unitext : '.ppu';
  412. unitlibext : '.ppl';
  413. asmext : '.s';
  414. objext : '.o';
  415. resext : '.res';
  416. resobjext : '.or';
  417. sharedlibext : '.so';
  418. staticlibext : '.a';
  419. staticlibprefix : 'libp';
  420. sharedlibprefix : 'lib';
  421. sharedClibext : '.so';
  422. staticClibext : '.a';
  423. staticClibprefix : 'lib';
  424. sharedClibprefix : 'lib';
  425. Cprefix : '';
  426. newline : #10;
  427. dirsep : '/';
  428. files_case_relevent : true;
  429. assem : as_gas;
  430. assemextern : as_gas;
  431. link : nil;
  432. linkextern : nil;
  433. ar : ar_gnu_ar;
  434. res : res_none;
  435. script : script_unix;
  436. endian : endian_little;
  437. alignment :
  438. (
  439. procalign : 4;
  440. loopalign : 4;
  441. jumpalign : 0;
  442. constalignmin : 0;
  443. constalignmax : 4;
  444. varalignmin : 0;
  445. varalignmax : 4;
  446. localalignmin : 4;
  447. localalignmax : 8;
  448. recordalignmin : 0;
  449. recordalignmax : 4;
  450. maxCrecordalign : 4
  451. );
  452. first_parm_offset : 8;
  453. stacksize : 262144;
  454. DllScanSupported:false;
  455. use_function_relative_addresses : true;
  456. abi : abi_default
  457. );
  458. implementation
  459. initialization
  460. {$ifdef CPU86}
  461. {$ifdef linux}
  462. { some FreeBSD versions define linux as well }
  463. {$ifndef FreeBSD}
  464. set_source_info(system_i386_linux_info);
  465. {$endif FreeBSD}
  466. {$endif}
  467. {$endif CPU86}
  468. {$ifdef CPU68}
  469. {$ifdef linux}
  470. set_source_info(system_m68k_linux_info);
  471. {$endif linux}
  472. {$endif CPU68}
  473. {$ifdef CPUX86_64}
  474. {$ifdef linux}
  475. set_source_info(system_x86_64_linux_info);
  476. {$endif linux}
  477. {$endif CPUX86_64}
  478. {$ifdef CPUALPHA}
  479. {$ifdef linux}
  480. set_source_info(system_alpha_linux_info);
  481. {$endif linux}
  482. {$endif CPUALPHA}
  483. {$ifdef CPUSPARC}
  484. {$ifdef linux}
  485. set_source_info(system_sparc_linux_info);
  486. {$endif linux}
  487. {$endif CPUSPARC}
  488. {$ifdef CPUPOWERPC}
  489. {$ifdef linux}
  490. set_source_info(system_powerpc_linux_info);
  491. {$endif linux}
  492. {$endif CPUPOWERPC}
  493. {$ifdef CPUARM}
  494. {$ifdef linux}
  495. set_source_info(system_arm_linux_info);
  496. {$endif linux}
  497. {$endif CPUARM}
  498. end.
  499. {
  500. $Log$
  501. Revision 1.34 2005-01-30 17:45:38 florian
  502. * better alignment on linux
  503. Revision 1.33 2005/01/25 18:48:15 peter
  504. * tf_pic_uses_got added
  505. Revision 1.32 2004/12/11 14:39:03 florian
  506. * made some target short names look more nicer
  507. Revision 1.31 2004/10/25 15:38:41 peter
  508. * heap and heapsize removed
  509. * checkpointer fixes
  510. Revision 1.30 2004/10/24 13:36:26 peter
  511. * gc-sections added when section smartlinking is used
  512. Revision 1.29 2004/08/15 13:30:18 florian
  513. * fixed alignment of variant records
  514. * more alignment problems fixed
  515. Revision 1.28 2004/06/29 21:00:08 peter
  516. * only enable dwarf for supported platforms
  517. Revision 1.27 2004/06/20 08:55:32 florian
  518. * logs truncated
  519. Revision 1.26 2004/06/16 20:07:11 florian
  520. * dwarf branch merged
  521. Revision 1.25.2.5 2004/05/31 22:08:21 peter
  522. * fix passing of >6 arguments
  523. Revision 1.25.2.4 2004/05/19 21:34:58 peter
  524. * disable section smartlink, it is not working stable
  525. Revision 1.25.2.3 2004/05/10 21:28:34 peter
  526. * section_smartlink enabled for gas under linux
  527. Revision 1.25.2.2 2004/05/02 14:17:27 peter
  528. * fix cpux86_64 ifdef
  529. }