i_linux.pas 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  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,tf_use_function_relative_addresses,
  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_use_function_relative_addresses,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_use_function_relative_addresses,
  158. tf_smartlink_library,tf_has_winlike_resources];
  159. cpu : cpu_m68k;
  160. unit_env : 'LINUXUNITS';
  161. extradefines : 'UNIX;HASUNIX';
  162. exeext : '';
  163. defext : '';
  164. scriptext : '.sh';
  165. smartext : '.sl';
  166. unitext : '.ppu';
  167. unitlibext : '.ppl';
  168. asmext : '.s';
  169. objext : '.o';
  170. resext : '.res';
  171. resobjext : '.or';
  172. sharedlibext : '.so';
  173. staticlibext : '.a';
  174. staticlibprefix : 'libp';
  175. sharedlibprefix : 'lib';
  176. sharedClibext : '.so';
  177. staticClibext : '.a';
  178. staticClibprefix : 'lib';
  179. sharedClibprefix : 'lib';
  180. importlibprefix : 'libimp';
  181. importlibext : '.a';
  182. Cprefix : '';
  183. newline : #10;
  184. dirsep : '/';
  185. assem : as_gas;
  186. assemextern : as_gas;
  187. link : nil;
  188. linkextern : nil;
  189. ar : ar_gnu_ar;
  190. res : res_elf;
  191. dbg : dbg_stabs;
  192. script : script_unix;
  193. endian : endian_big;
  194. alignment :
  195. (
  196. procalign : 4;
  197. loopalign : 4;
  198. jumpalign : 0;
  199. constalignmin : 0;
  200. constalignmax : 4;
  201. varalignmin : 0;
  202. varalignmax : 4;
  203. localalignmin : 4;
  204. localalignmax : 4;
  205. recordalignmin : 0;
  206. recordalignmax : 2;
  207. maxCrecordalign : 4
  208. );
  209. first_parm_offset : 8;
  210. stacksize : 32*1024*1024;
  211. abi : abi_default
  212. );
  213. system_powerpc_linux_info : tsysteminfo =
  214. (
  215. system : system_powerpc_LINUX;
  216. name : 'Linux for PowerPC';
  217. shortname : 'Linux';
  218. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  219. tf_use_function_relative_addresses,
  220. tf_smartlink_library,tf_has_winlike_resources];
  221. cpu : cpu_powerpc;
  222. unit_env : '';
  223. extradefines : 'UNIX;HASUNIX';
  224. exeext : '';
  225. defext : '.def';
  226. scriptext : '.sh';
  227. smartext : '.sl';
  228. unitext : '.ppu';
  229. unitlibext : '.ppl';
  230. asmext : '.s';
  231. objext : '.o';
  232. resext : '.res';
  233. resobjext : '.or';
  234. sharedlibext : '.so';
  235. staticlibext : '.a';
  236. staticlibprefix : 'libp';
  237. sharedlibprefix : 'lib';
  238. sharedClibext : '.so';
  239. staticClibext : '.a';
  240. staticClibprefix : 'lib';
  241. sharedClibprefix : 'lib';
  242. importlibprefix : 'libimp';
  243. importlibext : '.a';
  244. Cprefix : '';
  245. newline : #10;
  246. dirsep : '/';
  247. assem : as_gas;
  248. assemextern : as_gas;
  249. link : nil;
  250. linkextern : nil;
  251. ar : ar_gnu_ar;
  252. res : res_elf;
  253. dbg : dbg_stabs;
  254. script : script_unix;
  255. endian : endian_big;
  256. alignment :
  257. (
  258. procalign : 4;
  259. loopalign : 4;
  260. jumpalign : 0;
  261. constalignmin : 0;
  262. constalignmax : 4;
  263. varalignmin : 0;
  264. varalignmax : 4;
  265. localalignmin : 4;
  266. localalignmax : 4;
  267. recordalignmin : 0;
  268. recordalignmax : 4;
  269. maxCrecordalign : 8
  270. );
  271. first_parm_offset : 8;
  272. stacksize : 32*1024*1024;
  273. abi : abi_powerpc_sysv;
  274. );
  275. system_powerpc64_linux_info : tsysteminfo =
  276. (
  277. system : system_powerpc64_LINUX;
  278. name : 'Linux for PowerPC64';
  279. shortname : 'Linux';
  280. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  281. tf_use_function_relative_addresses,
  282. tf_requires_proper_alignment,tf_smartlink_library,tf_has_winlike_resources];
  283. cpu : cpu_powerpc64;
  284. unit_env : '';
  285. extradefines : 'UNIX;HASUNIX';
  286. exeext : '';
  287. defext : '.def';
  288. scriptext : '.sh';
  289. smartext : '.sl';
  290. unitext : '.ppu';
  291. unitlibext : '.ppl';
  292. asmext : '.s';
  293. objext : '.o';
  294. resext : '.res';
  295. resobjext : '.or';
  296. sharedlibext : '.so';
  297. staticlibext : '.a';
  298. staticlibprefix : 'libp';
  299. sharedlibprefix : 'lib';
  300. sharedClibext : '.so';
  301. staticClibext : '.a';
  302. staticClibprefix : 'lib';
  303. sharedClibprefix : 'lib';
  304. importlibprefix : 'libimp';
  305. importlibext : '.a';
  306. Cprefix : '';
  307. newline : #10;
  308. dirsep : '/';
  309. assem : as_gas;
  310. assemextern : as_gas;
  311. link : nil;
  312. linkextern : nil;
  313. ar : ar_gnu_ar;
  314. res : res_elf;
  315. dbg : dbg_dwarf2;
  316. script : script_unix;
  317. endian : endian_big;
  318. alignment :
  319. (
  320. procalign : 8;
  321. loopalign : 4;
  322. jumpalign : 0;
  323. constalignmin : 4;
  324. constalignmax : 16;
  325. varalignmin : 4;
  326. varalignmax : 16;
  327. localalignmin : 0;
  328. localalignmax : 16;
  329. recordalignmin : 0;
  330. recordalignmax : 16;
  331. maxCrecordalign : 16
  332. );
  333. first_parm_offset : 8;
  334. stacksize : 10*1024*1024;
  335. abi : abi_powerpc_sysv
  336. );
  337. system_alpha_linux_info : tsysteminfo =
  338. (
  339. system : system_alpha_LINUX;
  340. name : 'Linux for Alpha';
  341. shortname : 'Linux';
  342. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  343. tf_use_function_relative_addresses,tf_smartlink_library,tf_has_winlike_resources];
  344. cpu : cpu_alpha;
  345. unit_env : 'LINUXUNITS';
  346. extradefines : 'UNIX;HASUNIX';
  347. exeext : '';
  348. defext : '.def';
  349. scriptext : '.sh';
  350. smartext : '.sl';
  351. unitext : '.ppu';
  352. unitlibext : '.ppl';
  353. asmext : '.s';
  354. objext : '.o';
  355. resext : '.res';
  356. resobjext : '.or';
  357. sharedlibext : '.so';
  358. staticlibext : '.a';
  359. staticlibprefix : 'libp';
  360. sharedlibprefix : 'lib';
  361. sharedClibext : '.so';
  362. staticClibext : '.a';
  363. staticClibprefix : 'lib';
  364. sharedClibprefix : 'lib';
  365. importlibprefix : 'libimp';
  366. importlibext : '.a';
  367. Cprefix : '';
  368. newline : #10;
  369. dirsep : '/';
  370. assem : as_gas;
  371. assemextern : as_gas;
  372. link : nil;
  373. linkextern : nil;
  374. ar : ar_gnu_ar;
  375. res : res_elf;
  376. dbg : dbg_stabs;
  377. script : script_unix;
  378. endian : endian_little;
  379. alignment :
  380. (
  381. procalign : 4;
  382. loopalign : 4;
  383. jumpalign : 0;
  384. constalignmin : 0;
  385. constalignmax : 4;
  386. varalignmin : 0;
  387. varalignmax : 4;
  388. localalignmin : 4;
  389. localalignmax : 4;
  390. recordalignmin : 0;
  391. recordalignmax : 2;
  392. maxCrecordalign : 4
  393. );
  394. first_parm_offset : 8;
  395. stacksize : 32*1024*1024;
  396. abi : abi_default
  397. );
  398. system_x86_64_linux_info : tsysteminfo =
  399. (
  400. system : system_x86_64_LINUX;
  401. name : 'Linux for x86-64';
  402. shortname : 'Linux';
  403. flags : [tf_needs_symbol_size,tf_needs_dwarf_cfi,tf_smartlink_library,
  404. tf_library_needs_pic,tf_needs_symbol_type,tf_files_case_sensitive,
  405. tf_use_function_relative_addresses,tf_has_winlike_resources];
  406. cpu : cpu_x86_64;
  407. unit_env : 'LINUXUNITS';
  408. extradefines : 'UNIX;HASUNIX';
  409. exeext : '';
  410. defext : '.def';
  411. scriptext : '.sh';
  412. smartext : '.sl';
  413. unitext : '.ppu';
  414. unitlibext : '.ppl';
  415. asmext : '.s';
  416. objext : '.o';
  417. resext : '.res';
  418. resobjext : '.or';
  419. sharedlibext : '.so';
  420. staticlibext : '.a';
  421. staticlibprefix : 'libp';
  422. sharedlibprefix : 'lib';
  423. sharedClibext : '.so';
  424. staticClibext : '.a';
  425. staticClibprefix : 'lib';
  426. sharedClibprefix : 'lib';
  427. importlibprefix : 'libimp';
  428. importlibext : '.a';
  429. Cprefix : '';
  430. newline : #10;
  431. dirsep : '/';
  432. assem : as_x86_64_elf64;
  433. assemextern : as_gas;
  434. link : nil;
  435. linkextern : nil;
  436. ar : ar_gnu_ar;
  437. res : res_elf;
  438. dbg : dbg_dwarf2;
  439. script : script_unix;
  440. endian : endian_little;
  441. alignment :
  442. (
  443. procalign : 8;
  444. loopalign : 4;
  445. jumpalign : 0;
  446. constalignmin : 0;
  447. constalignmax : 8;
  448. varalignmin : 0;
  449. varalignmax : 16;
  450. localalignmin : 4;
  451. localalignmax : 16;
  452. recordalignmin : 0;
  453. recordalignmax : 16;
  454. maxCrecordalign : 8
  455. );
  456. first_parm_offset : 16;
  457. stacksize : 8*1024*1024;
  458. abi : abi_default
  459. );
  460. system_sparc_linux_info : tsysteminfo =
  461. (
  462. system : system_SPARC_Linux;
  463. name : 'Linux for SPARC';
  464. shortname : 'Linux';
  465. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  466. tf_needs_symbol_type,tf_files_case_sensitive,tf_smartlink_library,
  467. tf_use_function_relative_addresses,tf_requires_proper_alignment,
  468. tf_has_winlike_resources];
  469. cpu : cpu_SPARC;
  470. unit_env : 'LINUXUNITS';
  471. extradefines : 'UNIX;HASUNIX';
  472. exeext : '';
  473. defext : '.def';
  474. scriptext : '.sh';
  475. smartext : '.sl';
  476. unitext : '.ppu';
  477. unitlibext : '.ppl';
  478. asmext : '.s';
  479. objext : '.o';
  480. resext : '.res';
  481. resobjext : '.or';
  482. sharedlibext : '.so';
  483. staticlibext : '.a';
  484. staticlibprefix : 'libp';
  485. sharedlibprefix : 'lib';
  486. sharedClibext : '.so';
  487. staticClibext : '.a';
  488. staticClibprefix : 'lib';
  489. sharedClibprefix : 'lib';
  490. importlibprefix : 'libimp';
  491. importlibext : '.a';
  492. Cprefix : '';
  493. newline : #10;
  494. dirsep : '/';
  495. assem : as_gas;
  496. assemextern : as_gas;
  497. link : nil;
  498. linkextern : nil;
  499. ar : ar_gnu_ar;
  500. res : res_elf;
  501. dbg : dbg_stabs;
  502. script : script_unix;
  503. endian : endian_big;
  504. alignment :
  505. (
  506. procalign : 4;
  507. loopalign : 4;
  508. jumpalign : 0;
  509. constalignmin : 4;
  510. constalignmax : 8;
  511. varalignmin : 4;
  512. varalignmax : 8;
  513. localalignmin : 4;
  514. localalignmax : 8;
  515. recordalignmin : 0;
  516. recordalignmax : 8;
  517. maxCrecordalign : 8
  518. );
  519. first_parm_offset : 92;
  520. stacksize : 8*1024*1024;
  521. abi : abi_default
  522. );
  523. {$ifdef FPC_ARMEL}
  524. system_arm_linux_info : tsysteminfo =
  525. (
  526. system : system_arm_Linux;
  527. name : 'Linux for ARMEL';
  528. shortname : 'Linux';
  529. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  530. tf_use_function_relative_addresses,tf_requires_proper_alignment,
  531. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  532. cpu : cpu_arm;
  533. unit_env : 'LINUXUNITS';
  534. extradefines : 'UNIX;HASUNIX;CPUARMEL';
  535. exeext : '';
  536. defext : '.def';
  537. scriptext : '.sh';
  538. smartext : '.sl';
  539. unitext : '.ppu';
  540. unitlibext : '.ppl';
  541. asmext : '.s';
  542. objext : '.o';
  543. resext : '.res';
  544. resobjext : '.or';
  545. sharedlibext : '.so';
  546. staticlibext : '.a';
  547. staticlibprefix : 'libp';
  548. sharedlibprefix : 'lib';
  549. sharedClibext : '.so';
  550. staticClibext : '.a';
  551. staticClibprefix : 'lib';
  552. sharedClibprefix : 'lib';
  553. importlibprefix : 'libimp';
  554. importlibext : '.a';
  555. Cprefix : '';
  556. newline : #10;
  557. dirsep : '/';
  558. assem : as_gas;
  559. assemextern : as_gas;
  560. link : nil;
  561. linkextern : nil;
  562. ar : ar_gnu_ar;
  563. res : res_elf;
  564. dbg : dbg_stabs;
  565. script : script_unix;
  566. endian : endian_little;
  567. alignment :
  568. (
  569. procalign : 4;
  570. loopalign : 4;
  571. jumpalign : 0;
  572. constalignmin : 0;
  573. constalignmax : 8;
  574. varalignmin : 0;
  575. varalignmax : 8;
  576. localalignmin : 4;
  577. localalignmax : 8;
  578. recordalignmin : 0;
  579. recordalignmax : 8;
  580. maxCrecordalign : 8
  581. );
  582. first_parm_offset : 8;
  583. stacksize : 8*1024*1024;
  584. abi : abi_eabi
  585. );
  586. {$else FPC_ARMEL}
  587. {$ifdef FPC_ARMEB}
  588. system_arm_linux_info : tsysteminfo =
  589. (
  590. system : system_arm_Linux;
  591. name : 'Linux for ARMEB';
  592. shortname : 'Linux';
  593. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  594. tf_use_function_relative_addresses,tf_requires_proper_alignment,
  595. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  596. cpu : cpu_arm;
  597. unit_env : 'LINUXUNITS';
  598. extradefines : 'UNIX;HASUNIX;CPUARMEB';
  599. exeext : '';
  600. defext : '.def';
  601. scriptext : '.sh';
  602. smartext : '.sl';
  603. unitext : '.ppu';
  604. unitlibext : '.ppl';
  605. asmext : '.s';
  606. objext : '.o';
  607. resext : '.res';
  608. resobjext : '.or';
  609. sharedlibext : '.so';
  610. staticlibext : '.a';
  611. staticlibprefix : 'libp';
  612. sharedlibprefix : 'lib';
  613. sharedClibext : '.so';
  614. staticClibext : '.a';
  615. staticClibprefix : 'lib';
  616. sharedClibprefix : 'lib';
  617. importlibprefix : 'libimp';
  618. importlibext : '.a';
  619. Cprefix : '';
  620. newline : #10;
  621. dirsep : '/';
  622. assem : as_gas;
  623. assemextern : as_gas;
  624. link : nil;
  625. linkextern : nil;
  626. ar : ar_gnu_ar;
  627. res : res_elf;
  628. dbg : dbg_stabs;
  629. script : script_unix;
  630. endian : endian_big;
  631. alignment :
  632. (
  633. procalign : 4;
  634. loopalign : 4;
  635. jumpalign : 0;
  636. constalignmin : 0;
  637. constalignmax : 4;
  638. varalignmin : 0;
  639. varalignmax : 4;
  640. localalignmin : 4;
  641. localalignmax : 8;
  642. recordalignmin : 0;
  643. recordalignmax : 4;
  644. maxCrecordalign : 4
  645. );
  646. first_parm_offset : 8;
  647. stacksize : 8*1024*1024;
  648. abi : abi_default
  649. );
  650. {$else FPC_ARMEB}
  651. system_arm_linux_info : tsysteminfo =
  652. (
  653. system : system_arm_Linux;
  654. name : 'Linux for ARM';
  655. shortname : 'Linux';
  656. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  657. tf_use_function_relative_addresses,tf_requires_proper_alignment,
  658. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  659. cpu : cpu_arm;
  660. unit_env : 'LINUXUNITS';
  661. extradefines : 'UNIX;HASUNIX';
  662. exeext : '';
  663. defext : '.def';
  664. scriptext : '.sh';
  665. smartext : '.sl';
  666. unitext : '.ppu';
  667. unitlibext : '.ppl';
  668. asmext : '.s';
  669. objext : '.o';
  670. resext : '.res';
  671. resobjext : '.or';
  672. sharedlibext : '.so';
  673. staticlibext : '.a';
  674. staticlibprefix : 'libp';
  675. sharedlibprefix : 'lib';
  676. sharedClibext : '.so';
  677. staticClibext : '.a';
  678. staticClibprefix : 'lib';
  679. sharedClibprefix : 'lib';
  680. importlibprefix : 'libimp';
  681. importlibext : '.a';
  682. Cprefix : '';
  683. newline : #10;
  684. dirsep : '/';
  685. assem : as_gas;
  686. assemextern : as_gas;
  687. link : nil;
  688. linkextern : nil;
  689. ar : ar_gnu_ar;
  690. res : res_elf;
  691. dbg : dbg_stabs;
  692. script : script_unix;
  693. endian : endian_little;
  694. alignment :
  695. (
  696. procalign : 4;
  697. loopalign : 4;
  698. jumpalign : 0;
  699. constalignmin : 0;
  700. constalignmax : 4;
  701. varalignmin : 0;
  702. varalignmax : 4;
  703. localalignmin : 4;
  704. localalignmax : 4;
  705. recordalignmin : 0;
  706. recordalignmax : 4;
  707. maxCrecordalign : 4
  708. );
  709. first_parm_offset : 8;
  710. stacksize : 8*1024*1024;
  711. abi : abi_default
  712. );
  713. {$endif FPC_ARMEB}
  714. {$endif FPC_ARMEL}
  715. implementation
  716. initialization
  717. {$ifdef CPU86}
  718. {$ifdef linux}
  719. { some FreeBSD versions define linux as well }
  720. {$ifndef FreeBSD}
  721. set_source_info(system_i386_linux_info);
  722. {$endif FreeBSD}
  723. {$endif}
  724. {$endif CPU86}
  725. {$ifdef CPU68}
  726. {$ifdef linux}
  727. set_source_info(system_m68k_linux_info);
  728. {$endif linux}
  729. {$endif CPU68}
  730. {$ifdef CPUX86_64}
  731. {$ifdef linux}
  732. set_source_info(system_x86_64_linux_info);
  733. {$endif linux}
  734. {$endif CPUX86_64}
  735. {$ifdef CPUALPHA}
  736. {$ifdef linux}
  737. set_source_info(system_alpha_linux_info);
  738. {$endif linux}
  739. {$endif CPUALPHA}
  740. {$ifdef CPUSPARC}
  741. {$ifdef linux}
  742. set_source_info(system_sparc_linux_info);
  743. {$endif linux}
  744. {$endif CPUSPARC}
  745. {$ifdef CPUPOWERPC32}
  746. {$ifdef linux}
  747. set_source_info(system_powerpc_linux_info);
  748. {$endif linux}
  749. {$endif CPUPOWERPC32}
  750. {$ifdef CPUPOWERPC64}
  751. {$ifdef linux}
  752. set_source_info(system_powerpc64_linux_info);
  753. {$endif linux}
  754. {$endif CPUPOWERPC64}
  755. {$ifdef CPUARM}
  756. {$ifdef linux}
  757. set_source_info(system_arm_linux_info);
  758. {$endif linux}
  759. {$endif CPUARM}
  760. end.