i_linux.pas 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. {
  2. Copyright (c) 1998-2008 by Peter Vreman
  3. This unit implements support information structures for linux
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15. ****************************************************************************
  16. }
  17. { This unit implements support information structures for linux. }
  18. unit i_linux;
  19. {$i fpcdefs.inc}
  20. interface
  21. uses
  22. systems, rescmn;
  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}{,tf_winlikewidestring},
  30. {$ifdef segment_threadvars}
  31. tf_section_threadvars,
  32. {$endif segment_threadvars}
  33. tf_needs_symbol_type,tf_files_case_sensitive,
  34. tf_smartlink_library,tf_needs_dwarf_cfi,tf_has_winlike_resources];
  35. cpu : cpu_i386;
  36. unit_env : 'LINUXUNITS';
  37. extradefines : 'UNIX;HASUNIX';
  38. exeext : '';
  39. defext : '.def';
  40. scriptext : '.sh';
  41. smartext : '.sl';
  42. unitext : '.ppu';
  43. unitlibext : '.ppl';
  44. asmext : '.s';
  45. objext : '.o';
  46. resext : '.res';
  47. resobjext : '.or';
  48. sharedlibext : '.so';
  49. staticlibext : '.a';
  50. staticlibprefix : 'libp';
  51. sharedlibprefix : 'lib';
  52. sharedClibext : '.so';
  53. staticClibext : '.a';
  54. staticClibprefix : 'lib';
  55. sharedClibprefix : 'lib';
  56. importlibprefix : 'libimp';
  57. importlibext : '.a';
  58. Cprefix : '';
  59. newline : #10;
  60. dirsep : '/';
  61. assem : as_i386_elf32;
  62. assemextern : as_gas;
  63. link : nil;
  64. linkextern : nil;
  65. ar : ar_gnu_ar;
  66. res : res_elf;
  67. dbg : dbg_stabs;
  68. script : script_unix;
  69. endian : endian_little;
  70. alignment :
  71. (
  72. procalign : 16;
  73. loopalign : 4;
  74. jumpalign : 0;
  75. constalignmin : 0;
  76. constalignmax : 8;
  77. varalignmin : 0;
  78. varalignmax : 16;
  79. localalignmin : 4;
  80. localalignmax : 8;
  81. recordalignmin : 0;
  82. recordalignmax : 16;
  83. maxCrecordalign : 4
  84. );
  85. first_parm_offset : 8;
  86. stacksize : 8*1024*1024;
  87. abi : abi_default
  88. );
  89. system_x86_6432_linux_info : tsysteminfo =
  90. (
  91. system : system_x86_6432_LINUX;
  92. name : 'Linux for x64_6432';
  93. shortname : 'Linux6432';
  94. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  95. tf_pic_uses_got{,tf_smartlink_sections},
  96. tf_smartlink_library,tf_has_winlike_resources];
  97. cpu : cpu_x86_64;
  98. unit_env : 'LINUXUNITS';
  99. extradefines : 'UNIX;HASUNIX';
  100. exeext : '';
  101. defext : '.def';
  102. scriptext : '.sh';
  103. smartext : '.sl';
  104. unitext : '.ppu';
  105. unitlibext : '.ppl';
  106. asmext : '.s';
  107. objext : '.o';
  108. resext : '.res';
  109. resobjext : '.or';
  110. sharedlibext : '.so';
  111. staticlibext : '.a';
  112. staticlibprefix : 'libp';
  113. sharedlibprefix : 'lib';
  114. sharedClibext : '.so';
  115. staticClibext : '.a';
  116. staticClibprefix : 'lib';
  117. sharedClibprefix : 'lib';
  118. importlibprefix : 'libimp';
  119. importlibext : '.a';
  120. Cprefix : '';
  121. newline : #10;
  122. dirsep : '/';
  123. assem : as_i386_elf32;
  124. assemextern : as_gas;
  125. link : nil;
  126. linkextern : nil;
  127. ar : ar_gnu_ar;
  128. res : res_elf;
  129. dbg : dbg_stabs;
  130. script : script_unix;
  131. endian : endian_little;
  132. alignment :
  133. (
  134. procalign : 16;
  135. loopalign : 4;
  136. jumpalign : 0;
  137. constalignmin : 0;
  138. constalignmax : 16;
  139. varalignmin : 0;
  140. varalignmax : 16;
  141. localalignmin : 4;
  142. localalignmax : 8;
  143. recordalignmin : 0;
  144. recordalignmax : 16;
  145. maxCrecordalign : 4
  146. );
  147. first_parm_offset : 8;
  148. stacksize : 8*1024*1024;
  149. abi : abi_default
  150. );
  151. system_m68k_linux_info : tsysteminfo =
  152. (
  153. system : system_m68k_linux;
  154. name : 'Linux for m68k';
  155. shortname : 'Linux';
  156. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  157. tf_smartlink_library,tf_has_winlike_resources];
  158. cpu : cpu_m68k;
  159. unit_env : 'LINUXUNITS';
  160. extradefines : 'UNIX;HASUNIX';
  161. exeext : '';
  162. defext : '';
  163. scriptext : '.sh';
  164. smartext : '.sl';
  165. unitext : '.ppu';
  166. unitlibext : '.ppl';
  167. asmext : '.s';
  168. objext : '.o';
  169. resext : '.res';
  170. resobjext : '.or';
  171. sharedlibext : '.so';
  172. staticlibext : '.a';
  173. staticlibprefix : 'libp';
  174. sharedlibprefix : 'lib';
  175. sharedClibext : '.so';
  176. staticClibext : '.a';
  177. staticClibprefix : 'lib';
  178. sharedClibprefix : 'lib';
  179. importlibprefix : 'libimp';
  180. importlibext : '.a';
  181. Cprefix : '';
  182. newline : #10;
  183. dirsep : '/';
  184. assem : as_gas;
  185. assemextern : as_gas;
  186. link : nil;
  187. linkextern : nil;
  188. ar : ar_gnu_ar;
  189. res : res_elf;
  190. dbg : dbg_stabs;
  191. script : script_unix;
  192. endian : endian_big;
  193. alignment :
  194. (
  195. procalign : 4;
  196. loopalign : 4;
  197. jumpalign : 0;
  198. constalignmin : 0;
  199. constalignmax : 4;
  200. varalignmin : 0;
  201. varalignmax : 4;
  202. localalignmin : 4;
  203. localalignmax : 4;
  204. recordalignmin : 0;
  205. recordalignmax : 2;
  206. maxCrecordalign : 4
  207. );
  208. first_parm_offset : 8;
  209. stacksize : 32*1024*1024;
  210. abi : abi_default
  211. );
  212. system_powerpc_linux_info : tsysteminfo =
  213. (
  214. system : system_powerpc_LINUX;
  215. name : 'Linux for PowerPC';
  216. shortname : 'Linux';
  217. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  218. tf_smartlink_library,tf_has_winlike_resources];
  219. cpu : cpu_powerpc;
  220. unit_env : '';
  221. extradefines : 'UNIX;HASUNIX';
  222. exeext : '';
  223. defext : '.def';
  224. scriptext : '.sh';
  225. smartext : '.sl';
  226. unitext : '.ppu';
  227. unitlibext : '.ppl';
  228. asmext : '.s';
  229. objext : '.o';
  230. resext : '.res';
  231. resobjext : '.or';
  232. sharedlibext : '.so';
  233. staticlibext : '.a';
  234. staticlibprefix : 'libp';
  235. sharedlibprefix : 'lib';
  236. sharedClibext : '.so';
  237. staticClibext : '.a';
  238. staticClibprefix : 'lib';
  239. sharedClibprefix : 'lib';
  240. importlibprefix : 'libimp';
  241. importlibext : '.a';
  242. Cprefix : '';
  243. newline : #10;
  244. dirsep : '/';
  245. assem : as_gas;
  246. assemextern : as_gas;
  247. link : nil;
  248. linkextern : nil;
  249. ar : ar_gnu_ar;
  250. res : res_elf;
  251. dbg : dbg_stabs;
  252. script : script_unix;
  253. endian : endian_big;
  254. alignment :
  255. (
  256. procalign : 4;
  257. loopalign : 4;
  258. jumpalign : 0;
  259. constalignmin : 0;
  260. constalignmax : 4;
  261. varalignmin : 0;
  262. varalignmax : 4;
  263. localalignmin : 4;
  264. localalignmax : 4;
  265. recordalignmin : 0;
  266. recordalignmax : 4;
  267. maxCrecordalign : 8
  268. );
  269. first_parm_offset : 8;
  270. stacksize : 32*1024*1024;
  271. abi : abi_powerpc_sysv;
  272. );
  273. system_powerpc64_linux_info : tsysteminfo =
  274. (
  275. system : system_powerpc64_LINUX;
  276. name : 'Linux for PowerPC64';
  277. shortname : 'Linux';
  278. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  279. tf_requires_proper_alignment,tf_smartlink_library,tf_has_winlike_resources];
  280. cpu : cpu_powerpc64;
  281. unit_env : '';
  282. extradefines : 'UNIX;HASUNIX';
  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. importlibprefix : 'libimp';
  302. importlibext : '.a';
  303. Cprefix : '';
  304. newline : #10;
  305. dirsep : '/';
  306. assem : as_gas;
  307. assemextern : as_gas;
  308. link : nil;
  309. linkextern : nil;
  310. ar : ar_gnu_ar;
  311. res : res_elf;
  312. dbg : dbg_dwarf2;
  313. script : script_unix;
  314. endian : endian_big;
  315. alignment :
  316. (
  317. procalign : 8;
  318. loopalign : 4;
  319. jumpalign : 0;
  320. constalignmin : 4;
  321. constalignmax : 16;
  322. varalignmin : 4;
  323. varalignmax : 16;
  324. localalignmin : 0;
  325. localalignmax : 16;
  326. recordalignmin : 0;
  327. recordalignmax : 16;
  328. maxCrecordalign : 16
  329. );
  330. first_parm_offset : 8;
  331. stacksize : 10*1024*1024;
  332. abi : abi_powerpc_sysv
  333. );
  334. system_alpha_linux_info : tsysteminfo =
  335. (
  336. system : system_alpha_LINUX;
  337. name : 'Linux for Alpha';
  338. shortname : 'Linux';
  339. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  340. tf_smartlink_library,tf_has_winlike_resources];
  341. cpu : cpu_alpha;
  342. unit_env : 'LINUXUNITS';
  343. extradefines : 'UNIX;HASUNIX';
  344. exeext : '';
  345. defext : '.def';
  346. scriptext : '.sh';
  347. smartext : '.sl';
  348. unitext : '.ppu';
  349. unitlibext : '.ppl';
  350. asmext : '.s';
  351. objext : '.o';
  352. resext : '.res';
  353. resobjext : '.or';
  354. sharedlibext : '.so';
  355. staticlibext : '.a';
  356. staticlibprefix : 'libp';
  357. sharedlibprefix : 'lib';
  358. sharedClibext : '.so';
  359. staticClibext : '.a';
  360. staticClibprefix : 'lib';
  361. sharedClibprefix : 'lib';
  362. importlibprefix : 'libimp';
  363. importlibext : '.a';
  364. Cprefix : '';
  365. newline : #10;
  366. dirsep : '/';
  367. assem : as_gas;
  368. assemextern : as_gas;
  369. link : nil;
  370. linkextern : nil;
  371. ar : ar_gnu_ar;
  372. res : res_elf;
  373. dbg : dbg_stabs;
  374. script : script_unix;
  375. endian : endian_little;
  376. alignment :
  377. (
  378. procalign : 4;
  379. loopalign : 4;
  380. jumpalign : 0;
  381. constalignmin : 0;
  382. constalignmax : 4;
  383. varalignmin : 0;
  384. varalignmax : 4;
  385. localalignmin : 4;
  386. localalignmax : 4;
  387. recordalignmin : 0;
  388. recordalignmax : 2;
  389. maxCrecordalign : 4
  390. );
  391. first_parm_offset : 8;
  392. stacksize : 32*1024*1024;
  393. abi : abi_default
  394. );
  395. system_x86_64_linux_info : tsysteminfo =
  396. (
  397. system : system_x86_64_LINUX;
  398. name : 'Linux for x86-64';
  399. shortname : 'Linux';
  400. flags : [tf_needs_symbol_size,tf_needs_dwarf_cfi,tf_smartlink_library,
  401. tf_library_needs_pic,tf_needs_symbol_type,tf_files_case_sensitive,
  402. tf_has_winlike_resources];
  403. cpu : cpu_x86_64;
  404. unit_env : 'LINUXUNITS';
  405. extradefines : 'UNIX;HASUNIX';
  406. exeext : '';
  407. defext : '.def';
  408. scriptext : '.sh';
  409. smartext : '.sl';
  410. unitext : '.ppu';
  411. unitlibext : '.ppl';
  412. asmext : '.s';
  413. objext : '.o';
  414. resext : '.res';
  415. resobjext : '.or';
  416. sharedlibext : '.so';
  417. staticlibext : '.a';
  418. staticlibprefix : 'libp';
  419. sharedlibprefix : 'lib';
  420. sharedClibext : '.so';
  421. staticClibext : '.a';
  422. staticClibprefix : 'lib';
  423. sharedClibprefix : 'lib';
  424. importlibprefix : 'libimp';
  425. importlibext : '.a';
  426. Cprefix : '';
  427. newline : #10;
  428. dirsep : '/';
  429. assem : as_x86_64_elf64;
  430. assemextern : as_gas;
  431. link : nil;
  432. linkextern : nil;
  433. ar : ar_gnu_ar;
  434. res : res_elf;
  435. dbg : dbg_dwarf2;
  436. script : script_unix;
  437. endian : endian_little;
  438. alignment :
  439. (
  440. procalign : 8;
  441. loopalign : 4;
  442. jumpalign : 0;
  443. constalignmin : 0;
  444. constalignmax : 8;
  445. varalignmin : 0;
  446. varalignmax : 16;
  447. localalignmin : 4;
  448. localalignmax : 16;
  449. recordalignmin : 0;
  450. recordalignmax : 16;
  451. maxCrecordalign : 16
  452. );
  453. first_parm_offset : 16;
  454. stacksize : 8*1024*1024;
  455. abi : abi_default
  456. );
  457. system_sparc_linux_info : tsysteminfo =
  458. (
  459. system : system_SPARC_Linux;
  460. name : 'Linux for SPARC';
  461. shortname : 'Linux';
  462. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  463. tf_needs_symbol_type,tf_files_case_sensitive,tf_smartlink_library,
  464. tf_requires_proper_alignment,
  465. tf_has_winlike_resources];
  466. cpu : cpu_SPARC;
  467. unit_env : 'LINUXUNITS';
  468. extradefines : 'UNIX;HASUNIX';
  469. exeext : '';
  470. defext : '.def';
  471. scriptext : '.sh';
  472. smartext : '.sl';
  473. unitext : '.ppu';
  474. unitlibext : '.ppl';
  475. asmext : '.s';
  476. objext : '.o';
  477. resext : '.res';
  478. resobjext : '.or';
  479. sharedlibext : '.so';
  480. staticlibext : '.a';
  481. staticlibprefix : 'libp';
  482. sharedlibprefix : 'lib';
  483. sharedClibext : '.so';
  484. staticClibext : '.a';
  485. staticClibprefix : 'lib';
  486. sharedClibprefix : 'lib';
  487. importlibprefix : 'libimp';
  488. importlibext : '.a';
  489. Cprefix : '';
  490. newline : #10;
  491. dirsep : '/';
  492. assem : as_gas;
  493. assemextern : as_gas;
  494. link : nil;
  495. linkextern : nil;
  496. ar : ar_gnu_ar;
  497. res : res_elf;
  498. dbg : dbg_stabs;
  499. script : script_unix;
  500. endian : endian_big;
  501. alignment :
  502. (
  503. procalign : 4;
  504. loopalign : 4;
  505. jumpalign : 0;
  506. constalignmin : 4;
  507. constalignmax : 8;
  508. varalignmin : 4;
  509. varalignmax : 8;
  510. localalignmin : 4;
  511. localalignmax : 8;
  512. recordalignmin : 0;
  513. recordalignmax : 8;
  514. maxCrecordalign : 8
  515. );
  516. first_parm_offset : 92;
  517. stacksize : 8*1024*1024;
  518. abi : abi_default
  519. );
  520. {$ifdef FPC_ARMEL}
  521. system_arm_linux_info : tsysteminfo =
  522. (
  523. system : system_arm_Linux;
  524. name : 'Linux for ARMEL';
  525. shortname : 'Linux';
  526. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  527. tf_requires_proper_alignment,
  528. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  529. cpu : cpu_arm;
  530. unit_env : 'LINUXUNITS';
  531. extradefines : 'UNIX;HASUNIX;CPUARMEL';
  532. exeext : '';
  533. defext : '.def';
  534. scriptext : '.sh';
  535. smartext : '.sl';
  536. unitext : '.ppu';
  537. unitlibext : '.ppl';
  538. asmext : '.s';
  539. objext : '.o';
  540. resext : '.res';
  541. resobjext : '.or';
  542. sharedlibext : '.so';
  543. staticlibext : '.a';
  544. staticlibprefix : 'libp';
  545. sharedlibprefix : 'lib';
  546. sharedClibext : '.so';
  547. staticClibext : '.a';
  548. staticClibprefix : 'lib';
  549. sharedClibprefix : 'lib';
  550. importlibprefix : 'libimp';
  551. importlibext : '.a';
  552. Cprefix : '';
  553. newline : #10;
  554. dirsep : '/';
  555. assem : as_gas;
  556. assemextern : as_gas;
  557. link : nil;
  558. linkextern : nil;
  559. ar : ar_gnu_ar;
  560. res : res_elf;
  561. dbg : dbg_stabs;
  562. script : script_unix;
  563. endian : endian_little;
  564. alignment :
  565. (
  566. procalign : 4;
  567. loopalign : 4;
  568. jumpalign : 0;
  569. constalignmin : 0;
  570. constalignmax : 8;
  571. varalignmin : 0;
  572. varalignmax : 8;
  573. localalignmin : 4;
  574. localalignmax : 8;
  575. recordalignmin : 0;
  576. recordalignmax : 8;
  577. maxCrecordalign : 8
  578. );
  579. first_parm_offset : 8;
  580. stacksize : 8*1024*1024;
  581. abi : abi_eabi
  582. );
  583. {$else FPC_ARMEL}
  584. {$ifdef FPC_ARMEB}
  585. system_arm_linux_info : tsysteminfo =
  586. (
  587. system : system_arm_Linux;
  588. name : 'Linux for ARMEB';
  589. shortname : 'Linux';
  590. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  591. tf_requires_proper_alignment,
  592. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  593. cpu : cpu_arm;
  594. unit_env : 'LINUXUNITS';
  595. extradefines : 'UNIX;HASUNIX;CPUARMEB';
  596. exeext : '';
  597. defext : '.def';
  598. scriptext : '.sh';
  599. smartext : '.sl';
  600. unitext : '.ppu';
  601. unitlibext : '.ppl';
  602. asmext : '.s';
  603. objext : '.o';
  604. resext : '.res';
  605. resobjext : '.or';
  606. sharedlibext : '.so';
  607. staticlibext : '.a';
  608. staticlibprefix : 'libp';
  609. sharedlibprefix : 'lib';
  610. sharedClibext : '.so';
  611. staticClibext : '.a';
  612. staticClibprefix : 'lib';
  613. sharedClibprefix : 'lib';
  614. importlibprefix : 'libimp';
  615. importlibext : '.a';
  616. Cprefix : '';
  617. newline : #10;
  618. dirsep : '/';
  619. assem : as_gas;
  620. assemextern : as_gas;
  621. link : nil;
  622. linkextern : nil;
  623. ar : ar_gnu_ar;
  624. res : res_elf;
  625. dbg : dbg_stabs;
  626. script : script_unix;
  627. endian : endian_big;
  628. alignment :
  629. (
  630. procalign : 4;
  631. loopalign : 4;
  632. jumpalign : 0;
  633. constalignmin : 0;
  634. constalignmax : 4;
  635. varalignmin : 0;
  636. varalignmax : 4;
  637. localalignmin : 4;
  638. localalignmax : 8;
  639. recordalignmin : 0;
  640. recordalignmax : 4;
  641. maxCrecordalign : 4
  642. );
  643. first_parm_offset : 8;
  644. stacksize : 8*1024*1024;
  645. abi : abi_default
  646. );
  647. {$else FPC_ARMEB}
  648. system_arm_linux_info : tsysteminfo =
  649. (
  650. system : system_arm_Linux;
  651. name : 'Linux for ARM';
  652. shortname : 'Linux';
  653. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  654. tf_requires_proper_alignment,
  655. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  656. cpu : cpu_arm;
  657. unit_env : 'LINUXUNITS';
  658. extradefines : 'UNIX;HASUNIX';
  659. exeext : '';
  660. defext : '.def';
  661. scriptext : '.sh';
  662. smartext : '.sl';
  663. unitext : '.ppu';
  664. unitlibext : '.ppl';
  665. asmext : '.s';
  666. objext : '.o';
  667. resext : '.res';
  668. resobjext : '.or';
  669. sharedlibext : '.so';
  670. staticlibext : '.a';
  671. staticlibprefix : 'libp';
  672. sharedlibprefix : 'lib';
  673. sharedClibext : '.so';
  674. staticClibext : '.a';
  675. staticClibprefix : 'lib';
  676. sharedClibprefix : 'lib';
  677. importlibprefix : 'libimp';
  678. importlibext : '.a';
  679. Cprefix : '';
  680. newline : #10;
  681. dirsep : '/';
  682. assem : as_gas;
  683. assemextern : as_gas;
  684. link : nil;
  685. linkextern : nil;
  686. ar : ar_gnu_ar;
  687. res : res_elf;
  688. dbg : dbg_stabs;
  689. script : script_unix;
  690. endian : endian_little;
  691. alignment :
  692. (
  693. procalign : 4;
  694. loopalign : 4;
  695. jumpalign : 0;
  696. constalignmin : 0;
  697. constalignmax : 4;
  698. varalignmin : 0;
  699. varalignmax : 4;
  700. localalignmin : 4;
  701. localalignmax : 4;
  702. recordalignmin : 0;
  703. recordalignmax : 4;
  704. maxCrecordalign : 4
  705. );
  706. first_parm_offset : 8;
  707. stacksize : 8*1024*1024;
  708. abi : abi_default
  709. );
  710. {$endif FPC_ARMEB}
  711. {$endif FPC_ARMEL}
  712. system_mips_linux_info : tsysteminfo =
  713. (
  714. system : system_mips_LINUX;
  715. name : 'Linux for MIPS';
  716. shortname : 'Linux';
  717. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  718. tf_requires_proper_alignment,
  719. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  720. cpu : cpu_mips;
  721. unit_env : 'LINUXUNITS';
  722. extradefines : 'UNIX;HASUNIX';
  723. exeext : '';
  724. defext : '.def';
  725. scriptext : '.sh';
  726. smartext : '.sl';
  727. unitext : '.ppu';
  728. unitlibext : '.ppl';
  729. asmext : '.s';
  730. objext : '.o';
  731. resext : '.res';
  732. resobjext : '.or';
  733. sharedlibext : '.so';
  734. staticlibext : '.a';
  735. staticlibprefix : 'libp';
  736. sharedlibprefix : 'lib';
  737. sharedClibext : '.so';
  738. staticClibext : '.a';
  739. staticClibprefix : 'lib';
  740. sharedClibprefix : 'lib';
  741. importlibprefix : 'libimp';
  742. importlibext : '.a';
  743. // p_ext_support : false;
  744. Cprefix : '';
  745. newline : #10;
  746. dirsep : '/';
  747. assem : as_gas;
  748. assemextern : as_gas;
  749. link : nil;
  750. linkextern : nil;
  751. ar : ar_gnu_ar;
  752. res : res_none;
  753. dbg : dbg_stabs;
  754. script : script_unix;
  755. endian : endian_big;
  756. alignment :
  757. (
  758. procalign : 4;
  759. loopalign : 4;
  760. jumpalign : 0;
  761. constalignmin : 0;
  762. constalignmax : 8;
  763. varalignmin : 0;
  764. varalignmax : 8;
  765. localalignmin : 4;
  766. localalignmax : 8;
  767. recordalignmin : 0;
  768. recordalignmax : 2;
  769. maxCrecordalign : 4
  770. );
  771. first_parm_offset : 8;
  772. stacksize : 32*1024*1024;
  773. abi : abi_default
  774. );
  775. system_mipsel_linux_info : tsysteminfo =
  776. (
  777. system : system_mipsel_LINUX;
  778. name : 'Linux for MIPSEL';
  779. shortname : 'Linux';
  780. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  781. tf_requires_proper_alignment,
  782. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  783. cpu : cpu_mipsel;
  784. unit_env : 'LINUXUNITS';
  785. extradefines : 'UNIX;HASUNIX;MIPSEL';
  786. exeext : '';
  787. defext : '.def';
  788. scriptext : '.sh';
  789. smartext : '.sl';
  790. unitext : '.ppu';
  791. unitlibext : '.ppl';
  792. asmext : '.s';
  793. objext : '.o';
  794. resext : '.res';
  795. resobjext : '.or';
  796. sharedlibext : '.so';
  797. staticlibext : '.a';
  798. staticlibprefix : 'libp';
  799. sharedlibprefix : 'lib';
  800. sharedClibext : '.so';
  801. staticClibext : '.a';
  802. staticClibprefix : 'lib';
  803. sharedClibprefix : 'lib';
  804. importlibprefix : 'libimp';
  805. importlibext : '.a';
  806. // p_ext_support : false;
  807. Cprefix : '';
  808. newline : #10;
  809. dirsep : '/';
  810. assem : as_gas;
  811. assemextern : as_gas;
  812. link : nil;
  813. linkextern : nil;
  814. ar : ar_gnu_ar;
  815. res : res_none;
  816. dbg : dbg_stabs;
  817. script : script_unix;
  818. endian : endian_little;
  819. alignment :
  820. (
  821. procalign : 4;
  822. loopalign : 4;
  823. jumpalign : 0;
  824. constalignmin : 0;
  825. constalignmax : 8;
  826. varalignmin : 0;
  827. varalignmax : 8;
  828. localalignmin : 4;
  829. localalignmax : 8;
  830. recordalignmin : 0;
  831. recordalignmax : 2;
  832. maxCrecordalign : 4
  833. );
  834. first_parm_offset : 8;
  835. stacksize : 32*1024*1024;
  836. abi : abi_default
  837. );
  838. implementation
  839. initialization
  840. {$ifdef CPU86}
  841. {$ifdef linux}
  842. { some FreeBSD versions define linux as well }
  843. {$ifndef FreeBSD}
  844. set_source_info(system_i386_linux_info);
  845. {$endif FreeBSD}
  846. {$endif}
  847. {$endif CPU86}
  848. {$ifdef CPU68}
  849. {$ifdef linux}
  850. set_source_info(system_m68k_linux_info);
  851. {$endif linux}
  852. {$endif CPU68}
  853. {$ifdef CPUX86_64}
  854. {$ifdef linux}
  855. set_source_info(system_x86_64_linux_info);
  856. {$endif linux}
  857. {$endif CPUX86_64}
  858. {$ifdef CPUALPHA}
  859. {$ifdef linux}
  860. set_source_info(system_alpha_linux_info);
  861. {$endif linux}
  862. {$endif CPUALPHA}
  863. {$ifdef CPUSPARC}
  864. {$ifdef linux}
  865. set_source_info(system_sparc_linux_info);
  866. {$endif linux}
  867. {$endif CPUSPARC}
  868. {$ifdef CPUPOWERPC32}
  869. {$ifdef linux}
  870. set_source_info(system_powerpc_linux_info);
  871. {$endif linux}
  872. {$endif CPUPOWERPC32}
  873. {$ifdef CPUPOWERPC64}
  874. {$ifdef linux}
  875. set_source_info(system_powerpc64_linux_info);
  876. {$endif linux}
  877. {$endif CPUPOWERPC64}
  878. {$ifdef CPUARM}
  879. {$ifdef linux}
  880. set_source_info(system_arm_linux_info);
  881. {$endif linux}
  882. {$endif CPUARM}
  883. {$ifdef CPUMIPS}
  884. {$ifdef linux}
  885. set_source_info(system_mipsel_linux_info);
  886. {$endif linux}
  887. {$endif CPUMIPS}
  888. end.