i_linux.pas 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014
  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. tf_safecall_exceptions, tf_safecall_clearstack];
  36. cpu : cpu_i386;
  37. unit_env : 'LINUXUNITS';
  38. extradefines : 'UNIX;HASUNIX';
  39. exeext : '';
  40. defext : '.def';
  41. scriptext : '.sh';
  42. smartext : '.sl';
  43. unitext : '.ppu';
  44. unitlibext : '.ppl';
  45. asmext : '.s';
  46. objext : '.o';
  47. resext : '.res';
  48. resobjext : '.or';
  49. sharedlibext : '.so';
  50. staticlibext : '.a';
  51. staticlibprefix : 'libp';
  52. sharedlibprefix : 'lib';
  53. sharedClibext : '.so';
  54. staticClibext : '.a';
  55. staticClibprefix : 'lib';
  56. sharedClibprefix : 'lib';
  57. importlibprefix : 'libimp';
  58. importlibext : '.a';
  59. Cprefix : '';
  60. newline : #10;
  61. dirsep : '/';
  62. assem : as_i386_elf32;
  63. assemextern : as_gas;
  64. link : ld_none;
  65. linkextern : ld_linux;
  66. ar : ar_gnu_ar;
  67. res : res_elf;
  68. dbg : dbg_stabs;
  69. script : script_unix;
  70. endian : endian_little;
  71. alignment :
  72. (
  73. procalign : 16;
  74. loopalign : 4;
  75. jumpalign : 0;
  76. constalignmin : 0;
  77. constalignmax : 8;
  78. varalignmin : 0;
  79. varalignmax : 16;
  80. localalignmin : 4;
  81. localalignmax : 8;
  82. recordalignmin : 0;
  83. recordalignmax : 16;
  84. maxCrecordalign : 4
  85. );
  86. first_parm_offset : 8;
  87. stacksize : 8*1024*1024;
  88. stackalign : 4;
  89. abi : abi_default;
  90. { note: default LLVM stack alignment is 16 bytes for this target }
  91. llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32';
  92. );
  93. system_x86_6432_linux_info : tsysteminfo =
  94. (
  95. system : system_x86_6432_LINUX;
  96. name : 'Linux for x64_6432';
  97. shortname : 'Linux6432';
  98. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  99. tf_pic_uses_got,tf_smartlink_sections,
  100. tf_smartlink_library,tf_has_winlike_resources];
  101. cpu : cpu_x86_64;
  102. unit_env : 'LINUXUNITS';
  103. extradefines : 'UNIX;HASUNIX';
  104. exeext : '';
  105. defext : '.def';
  106. scriptext : '.sh';
  107. smartext : '.sl';
  108. unitext : '.ppu';
  109. unitlibext : '.ppl';
  110. asmext : '.s';
  111. objext : '.o';
  112. resext : '.res';
  113. resobjext : '.or';
  114. sharedlibext : '.so';
  115. staticlibext : '.a';
  116. staticlibprefix : 'libp';
  117. sharedlibprefix : 'lib';
  118. sharedClibext : '.so';
  119. staticClibext : '.a';
  120. staticClibprefix : 'lib';
  121. sharedClibprefix : 'lib';
  122. importlibprefix : 'libimp';
  123. importlibext : '.a';
  124. Cprefix : '';
  125. newline : #10;
  126. dirsep : '/';
  127. assem : as_i386_elf32;
  128. assemextern : as_gas;
  129. link : ld_none;
  130. linkextern : ld_linux;
  131. ar : ar_gnu_ar;
  132. res : res_elf;
  133. dbg : dbg_stabs;
  134. script : script_unix;
  135. endian : endian_little;
  136. alignment :
  137. (
  138. procalign : 16;
  139. loopalign : 4;
  140. jumpalign : 0;
  141. constalignmin : 0;
  142. constalignmax : 16;
  143. varalignmin : 0;
  144. varalignmax : 16;
  145. localalignmin : 4;
  146. localalignmax : 8;
  147. recordalignmin : 0;
  148. recordalignmax : 16;
  149. maxCrecordalign : 4
  150. );
  151. first_parm_offset : 8;
  152. stacksize : 8*1024*1024;
  153. stackalign : 16;
  154. abi : abi_default;
  155. llvmdatalayout : 'todo';
  156. );
  157. system_m68k_linux_info : tsysteminfo =
  158. (
  159. system : system_m68k_linux;
  160. name : 'Linux for m68k';
  161. shortname : 'Linux';
  162. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  163. tf_requires_proper_alignment, { Coldfire seems to need this at least (KB) }
  164. tf_smartlink_library,tf_has_winlike_resources];
  165. cpu : cpu_m68k;
  166. unit_env : 'LINUXUNITS';
  167. extradefines : 'UNIX;HASUNIX';
  168. exeext : '';
  169. defext : '';
  170. scriptext : '.sh';
  171. smartext : '.sl';
  172. unitext : '.ppu';
  173. unitlibext : '.ppl';
  174. asmext : '.s';
  175. objext : '.o';
  176. resext : '.res';
  177. resobjext : '.or';
  178. sharedlibext : '.so';
  179. staticlibext : '.a';
  180. staticlibprefix : 'libp';
  181. sharedlibprefix : 'lib';
  182. sharedClibext : '.so';
  183. staticClibext : '.a';
  184. staticClibprefix : 'lib';
  185. sharedClibprefix : 'lib';
  186. importlibprefix : 'libimp';
  187. importlibext : '.a';
  188. Cprefix : '';
  189. newline : #10;
  190. dirsep : '/';
  191. assem : as_gas;
  192. assemextern : as_gas;
  193. link : ld_none;
  194. linkextern : ld_linux;
  195. ar : ar_gnu_ar;
  196. res : res_elf;
  197. dbg : dbg_stabs;
  198. script : script_unix;
  199. endian : endian_big;
  200. alignment :
  201. (
  202. procalign : 4;
  203. loopalign : 4;
  204. jumpalign : 0;
  205. constalignmin : 0;
  206. constalignmax : 4;
  207. varalignmin : 0;
  208. varalignmax : 4;
  209. localalignmin : 4;
  210. localalignmax : 4;
  211. recordalignmin : 0;
  212. recordalignmax : 2;
  213. maxCrecordalign : 4
  214. );
  215. first_parm_offset : 8;
  216. stacksize : 32*1024*1024;
  217. stackalign : 4;
  218. abi : abi_default;
  219. llvmdatalayout : 'todo';
  220. );
  221. system_powerpc_linux_info : tsysteminfo =
  222. (
  223. system : system_powerpc_LINUX;
  224. name : 'Linux for PowerPC';
  225. shortname : 'Linux';
  226. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  227. tf_needs_symbol_type,tf_files_case_sensitive,
  228. tf_smartlink_library,tf_has_winlike_resources];
  229. cpu : cpu_powerpc;
  230. unit_env : '';
  231. extradefines : 'UNIX;HASUNIX';
  232. exeext : '';
  233. defext : '.def';
  234. scriptext : '.sh';
  235. smartext : '.sl';
  236. unitext : '.ppu';
  237. unitlibext : '.ppl';
  238. asmext : '.s';
  239. objext : '.o';
  240. resext : '.res';
  241. resobjext : '.or';
  242. sharedlibext : '.so';
  243. staticlibext : '.a';
  244. staticlibprefix : 'libp';
  245. sharedlibprefix : 'lib';
  246. sharedClibext : '.so';
  247. staticClibext : '.a';
  248. staticClibprefix : 'lib';
  249. sharedClibprefix : 'lib';
  250. importlibprefix : 'libimp';
  251. importlibext : '.a';
  252. Cprefix : '';
  253. newline : #10;
  254. dirsep : '/';
  255. assem : as_gas;
  256. assemextern : as_gas;
  257. link : ld_none;
  258. linkextern : ld_linux;
  259. ar : ar_gnu_ar;
  260. res : res_elf;
  261. dbg : dbg_stabs;
  262. script : script_unix;
  263. endian : endian_big;
  264. alignment :
  265. (
  266. procalign : 4;
  267. loopalign : 4;
  268. jumpalign : 0;
  269. constalignmin : 0;
  270. constalignmax : 4;
  271. varalignmin : 0;
  272. varalignmax : 4;
  273. localalignmin : 4;
  274. localalignmax : 4;
  275. recordalignmin : 0;
  276. recordalignmax : 4;
  277. maxCrecordalign : 8
  278. );
  279. first_parm_offset : 8;
  280. stacksize : 32*1024*1024;
  281. stackalign : 16;
  282. abi : abi_powerpc_sysv;
  283. llvmdatalayout : 'E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32';
  284. );
  285. system_powerpc64_linux_info : tsysteminfo =
  286. (
  287. system : system_powerpc64_LINUX;
  288. name : 'Linux for PowerPC64';
  289. shortname : 'Linux';
  290. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  291. tf_requires_proper_alignment,tf_smartlink_sections,tf_has_winlike_resources];
  292. cpu : cpu_powerpc64;
  293. unit_env : '';
  294. extradefines : 'UNIX;HASUNIX';
  295. exeext : '';
  296. defext : '.def';
  297. scriptext : '.sh';
  298. smartext : '.sl';
  299. unitext : '.ppu';
  300. unitlibext : '.ppl';
  301. asmext : '.s';
  302. objext : '.o';
  303. resext : '.res';
  304. resobjext : '.or';
  305. sharedlibext : '.so';
  306. staticlibext : '.a';
  307. staticlibprefix : 'libp';
  308. sharedlibprefix : 'lib';
  309. sharedClibext : '.so';
  310. staticClibext : '.a';
  311. staticClibprefix : 'lib';
  312. sharedClibprefix : 'lib';
  313. importlibprefix : 'libimp';
  314. importlibext : '.a';
  315. Cprefix : '';
  316. newline : #10;
  317. dirsep : '/';
  318. assem : as_gas;
  319. assemextern : as_gas;
  320. link : ld_none;
  321. linkextern : ld_linux;
  322. ar : ar_gnu_ar;
  323. res : res_elf;
  324. dbg : dbg_dwarf2;
  325. script : script_unix;
  326. endian : endian_big;
  327. alignment :
  328. (
  329. procalign : 8;
  330. loopalign : 4;
  331. jumpalign : 0;
  332. constalignmin : 4;
  333. constalignmax : 16;
  334. varalignmin : 4;
  335. varalignmax : 16;
  336. localalignmin : 0;
  337. localalignmax : 16;
  338. recordalignmin : 0;
  339. recordalignmax : 16;
  340. maxCrecordalign : 16
  341. );
  342. first_parm_offset : 8;
  343. stacksize : 10*1024*1024;
  344. stackalign : 16;
  345. abi : abi_powerpc_sysv;
  346. llvmdatalayout : 'E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:64:64-v128:128:128-n32:64';
  347. );
  348. system_alpha_linux_info : tsysteminfo =
  349. (
  350. system : system_alpha_LINUX;
  351. name : 'Linux for Alpha';
  352. shortname : 'Linux';
  353. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  354. tf_smartlink_library,tf_has_winlike_resources];
  355. cpu : cpu_alpha;
  356. unit_env : 'LINUXUNITS';
  357. extradefines : 'UNIX;HASUNIX';
  358. exeext : '';
  359. defext : '.def';
  360. scriptext : '.sh';
  361. smartext : '.sl';
  362. unitext : '.ppu';
  363. unitlibext : '.ppl';
  364. asmext : '.s';
  365. objext : '.o';
  366. resext : '.res';
  367. resobjext : '.or';
  368. sharedlibext : '.so';
  369. staticlibext : '.a';
  370. staticlibprefix : 'libp';
  371. sharedlibprefix : 'lib';
  372. sharedClibext : '.so';
  373. staticClibext : '.a';
  374. staticClibprefix : 'lib';
  375. sharedClibprefix : 'lib';
  376. importlibprefix : 'libimp';
  377. importlibext : '.a';
  378. Cprefix : '';
  379. newline : #10;
  380. dirsep : '/';
  381. assem : as_gas;
  382. assemextern : as_gas;
  383. link : ld_none;
  384. linkextern : ld_linux;
  385. ar : ar_gnu_ar;
  386. res : res_elf;
  387. dbg : dbg_stabs;
  388. script : script_unix;
  389. endian : endian_little;
  390. alignment :
  391. (
  392. procalign : 4;
  393. loopalign : 4;
  394. jumpalign : 0;
  395. constalignmin : 0;
  396. constalignmax : 4;
  397. varalignmin : 0;
  398. varalignmax : 4;
  399. localalignmin : 4;
  400. localalignmax : 4;
  401. recordalignmin : 0;
  402. recordalignmax : 2;
  403. maxCrecordalign : 4
  404. );
  405. first_parm_offset : 8;
  406. stacksize : 32*1024*1024;
  407. stackalign : 8; { ??? }
  408. abi : abi_default;
  409. llvmdatalayout : 'todo';
  410. );
  411. system_x86_64_linux_info : tsysteminfo =
  412. (
  413. system : system_x86_64_LINUX;
  414. name : 'Linux for x86-64';
  415. shortname : 'Linux';
  416. flags : [tf_smartlink_sections,tf_needs_symbol_size,tf_needs_dwarf_cfi,tf_smartlink_library,
  417. tf_library_needs_pic,tf_needs_symbol_type,tf_files_case_sensitive,
  418. tf_has_winlike_resources,tf_safecall_exceptions,tf_safecall_clearstack];
  419. cpu : cpu_x86_64;
  420. unit_env : 'LINUXUNITS';
  421. extradefines : 'UNIX;HASUNIX';
  422. exeext : '';
  423. defext : '.def';
  424. scriptext : '.sh';
  425. smartext : '.sl';
  426. unitext : '.ppu';
  427. unitlibext : '.ppl';
  428. asmext : '.s';
  429. objext : '.o';
  430. resext : '.res';
  431. resobjext : '.or';
  432. sharedlibext : '.so';
  433. staticlibext : '.a';
  434. staticlibprefix : 'libp';
  435. sharedlibprefix : 'lib';
  436. sharedClibext : '.so';
  437. staticClibext : '.a';
  438. staticClibprefix : 'lib';
  439. sharedClibprefix : 'lib';
  440. importlibprefix : 'libimp';
  441. importlibext : '.a';
  442. Cprefix : '';
  443. newline : #10;
  444. dirsep : '/';
  445. assem : as_x86_64_elf64;
  446. assemextern : as_gas;
  447. link : ld_none;
  448. linkextern : ld_linux;
  449. ar : ar_gnu_ar;
  450. res : res_elf;
  451. dbg : dbg_dwarf2;
  452. script : script_unix;
  453. endian : endian_little;
  454. alignment :
  455. (
  456. procalign : 16;
  457. loopalign : 8;
  458. jumpalign : 0;
  459. constalignmin : 0;
  460. constalignmax : 8;
  461. varalignmin : 0;
  462. varalignmax : 16;
  463. localalignmin : 4;
  464. localalignmax : 16;
  465. recordalignmin : 0;
  466. recordalignmax : 16;
  467. maxCrecordalign : 16
  468. );
  469. first_parm_offset : 16;
  470. stacksize : 8*1024*1024;
  471. stackalign : 16;
  472. abi : abi_default;
  473. llvmdatalayout : 'e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128';
  474. );
  475. system_sparc_linux_info : tsysteminfo =
  476. (
  477. system : system_SPARC_Linux;
  478. name : 'Linux for SPARC';
  479. shortname : 'Linux';
  480. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  481. tf_needs_symbol_type,tf_files_case_sensitive,
  482. tf_smartlink_library,tf_pic_uses_got,
  483. tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
  484. tf_has_winlike_resources];
  485. cpu : cpu_SPARC;
  486. unit_env : 'LINUXUNITS';
  487. extradefines : 'UNIX;HASUNIX';
  488. exeext : '';
  489. defext : '.def';
  490. scriptext : '.sh';
  491. smartext : '.sl';
  492. unitext : '.ppu';
  493. unitlibext : '.ppl';
  494. asmext : '.s';
  495. objext : '.o';
  496. resext : '.res';
  497. resobjext : '.or';
  498. sharedlibext : '.so';
  499. staticlibext : '.a';
  500. staticlibprefix : 'libp';
  501. sharedlibprefix : 'lib';
  502. sharedClibext : '.so';
  503. staticClibext : '.a';
  504. staticClibprefix : 'lib';
  505. sharedClibprefix : 'lib';
  506. importlibprefix : 'libimp';
  507. importlibext : '.a';
  508. Cprefix : '';
  509. newline : #10;
  510. dirsep : '/';
  511. assem : as_gas;
  512. assemextern : as_gas;
  513. link : ld_none;
  514. linkextern : ld_linux;
  515. ar : ar_gnu_ar;
  516. res : res_elf;
  517. dbg : dbg_stabs;
  518. script : script_unix;
  519. endian : endian_big;
  520. alignment :
  521. (
  522. procalign : 4;
  523. loopalign : 4;
  524. jumpalign : 0;
  525. constalignmin : 4;
  526. constalignmax : 8;
  527. varalignmin : 4;
  528. varalignmax : 8;
  529. localalignmin : 4;
  530. localalignmax : 8;
  531. recordalignmin : 0;
  532. recordalignmax : 8;
  533. maxCrecordalign : 8
  534. );
  535. first_parm_offset : 92;
  536. stacksize : 8*1024*1024;
  537. stackalign : 8;
  538. abi : abi_default;
  539. llvmdatalayout : 'E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
  540. );
  541. {$ifdef FPC_ARMHF}
  542. system_arm_linux_info : tsysteminfo =
  543. (
  544. system : system_arm_Linux;
  545. name : 'Linux for ARMHF';
  546. shortname : 'Linux';
  547. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  548. tf_requires_proper_alignment,
  549. tf_smartlink_sections,tf_smartlink_library,tf_pic_uses_got,
  550. tf_has_winlike_resources];
  551. cpu : cpu_arm;
  552. unit_env : 'LINUXUNITS';
  553. extradefines : 'UNIX;HASUNIX;CPUARMHF';
  554. exeext : '';
  555. defext : '.def';
  556. scriptext : '.sh';
  557. smartext : '.sl';
  558. unitext : '.ppu';
  559. unitlibext : '.ppl';
  560. asmext : '.s';
  561. objext : '.o';
  562. resext : '.res';
  563. resobjext : '.or';
  564. sharedlibext : '.so';
  565. staticlibext : '.a';
  566. staticlibprefix : 'libp';
  567. sharedlibprefix : 'lib';
  568. sharedClibext : '.so';
  569. staticClibext : '.a';
  570. staticClibprefix : 'lib';
  571. sharedClibprefix : 'lib';
  572. importlibprefix : 'libimp';
  573. importlibext : '.a';
  574. Cprefix : '';
  575. newline : #10;
  576. dirsep : '/';
  577. assem : as_gas;
  578. assemextern : as_gas;
  579. link : ld_none;
  580. linkextern : ld_linux;
  581. ar : ar_gnu_ar;
  582. res : res_elf;
  583. dbg : dbg_stabs;
  584. script : script_unix;
  585. endian : endian_little;
  586. alignment :
  587. (
  588. procalign : 4;
  589. loopalign : 4;
  590. jumpalign : 0;
  591. constalignmin : 0;
  592. constalignmax : 8;
  593. varalignmin : 0;
  594. varalignmax : 8;
  595. localalignmin : 4;
  596. localalignmax : 8;
  597. recordalignmin : 0;
  598. recordalignmax : 8;
  599. maxCrecordalign : 8
  600. );
  601. first_parm_offset : 8;
  602. stacksize : 8*1024*1024;
  603. stackalign : 8;
  604. abi : abi_eabihf;
  605. llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64';
  606. );
  607. {$else FPC_ARMHF}
  608. {$ifdef FPC_ARMEL}
  609. system_arm_linux_info : tsysteminfo =
  610. (
  611. system : system_arm_Linux;
  612. name : 'Linux for ARMEL';
  613. shortname : 'Linux';
  614. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  615. tf_requires_proper_alignment,
  616. tf_smartlink_sections,tf_smartlink_library,tf_pic_uses_got,
  617. tf_has_winlike_resources];
  618. cpu : cpu_arm;
  619. unit_env : 'LINUXUNITS';
  620. extradefines : 'UNIX;HASUNIX;CPUARMEL';
  621. exeext : '';
  622. defext : '.def';
  623. scriptext : '.sh';
  624. smartext : '.sl';
  625. unitext : '.ppu';
  626. unitlibext : '.ppl';
  627. asmext : '.s';
  628. objext : '.o';
  629. resext : '.res';
  630. resobjext : '.or';
  631. sharedlibext : '.so';
  632. staticlibext : '.a';
  633. staticlibprefix : 'libp';
  634. sharedlibprefix : 'lib';
  635. sharedClibext : '.so';
  636. staticClibext : '.a';
  637. staticClibprefix : 'lib';
  638. sharedClibprefix : 'lib';
  639. importlibprefix : 'libimp';
  640. importlibext : '.a';
  641. Cprefix : '';
  642. newline : #10;
  643. dirsep : '/';
  644. assem : as_gas;
  645. assemextern : as_gas;
  646. link : ld_none;
  647. linkextern : ld_linux;
  648. ar : ar_gnu_ar;
  649. res : res_elf;
  650. dbg : dbg_stabs;
  651. script : script_unix;
  652. endian : endian_little;
  653. alignment :
  654. (
  655. procalign : 4;
  656. loopalign : 4;
  657. jumpalign : 0;
  658. constalignmin : 0;
  659. constalignmax : 8;
  660. varalignmin : 0;
  661. varalignmax : 8;
  662. localalignmin : 4;
  663. localalignmax : 8;
  664. recordalignmin : 0;
  665. recordalignmax : 8;
  666. maxCrecordalign : 8
  667. );
  668. first_parm_offset : 8;
  669. stacksize : 8*1024*1024;
  670. stackalign : 8;
  671. abi : abi_eabi;
  672. llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64';
  673. );
  674. {$else FPC_ARMEL}
  675. {$ifdef FPC_ARMEB}
  676. system_arm_linux_info : tsysteminfo =
  677. (
  678. system : system_arm_Linux;
  679. name : 'Linux for ARMEB';
  680. shortname : 'Linux';
  681. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  682. tf_requires_proper_alignment,
  683. tf_smartlink_sections,tf_smartlink_library,tf_pic_uses_got,
  684. tf_has_winlike_resources];
  685. cpu : cpu_arm;
  686. unit_env : 'LINUXUNITS';
  687. extradefines : 'UNIX;HASUNIX;CPUARMEB';
  688. exeext : '';
  689. defext : '.def';
  690. scriptext : '.sh';
  691. smartext : '.sl';
  692. unitext : '.ppu';
  693. unitlibext : '.ppl';
  694. asmext : '.s';
  695. objext : '.o';
  696. resext : '.res';
  697. resobjext : '.or';
  698. sharedlibext : '.so';
  699. staticlibext : '.a';
  700. staticlibprefix : 'libp';
  701. sharedlibprefix : 'lib';
  702. sharedClibext : '.so';
  703. staticClibext : '.a';
  704. staticClibprefix : 'lib';
  705. sharedClibprefix : 'lib';
  706. importlibprefix : 'libimp';
  707. importlibext : '.a';
  708. Cprefix : '';
  709. newline : #10;
  710. dirsep : '/';
  711. assem : as_gas;
  712. assemextern : as_gas;
  713. link : ld_none;
  714. linkextern : ld_linux;
  715. ar : ar_gnu_ar;
  716. res : res_elf;
  717. dbg : dbg_stabs;
  718. script : script_unix;
  719. endian : endian_big;
  720. alignment :
  721. (
  722. procalign : 4;
  723. loopalign : 4;
  724. jumpalign : 0;
  725. constalignmin : 0;
  726. constalignmax : 4;
  727. varalignmin : 0;
  728. varalignmax : 4;
  729. localalignmin : 4;
  730. localalignmax : 8;
  731. recordalignmin : 0;
  732. recordalignmax : 4;
  733. maxCrecordalign : 4
  734. );
  735. first_parm_offset : 8;
  736. stacksize : 8*1024*1024;
  737. stackalign : 4;
  738. abi : abi_default;
  739. llvmdatalayout: 'todo';
  740. );
  741. {$else FPC_ARMEB}
  742. system_arm_linux_info : tsysteminfo =
  743. (
  744. system : system_arm_Linux;
  745. name : 'Linux for ARM';
  746. shortname : 'Linux';
  747. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  748. tf_requires_proper_alignment,
  749. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  750. cpu : cpu_arm;
  751. unit_env : 'LINUXUNITS';
  752. extradefines : 'UNIX;HASUNIX';
  753. exeext : '';
  754. defext : '.def';
  755. scriptext : '.sh';
  756. smartext : '.sl';
  757. unitext : '.ppu';
  758. unitlibext : '.ppl';
  759. asmext : '.s';
  760. objext : '.o';
  761. resext : '.res';
  762. resobjext : '.or';
  763. sharedlibext : '.so';
  764. staticlibext : '.a';
  765. staticlibprefix : 'libp';
  766. sharedlibprefix : 'lib';
  767. sharedClibext : '.so';
  768. staticClibext : '.a';
  769. staticClibprefix : 'lib';
  770. sharedClibprefix : 'lib';
  771. importlibprefix : 'libimp';
  772. importlibext : '.a';
  773. Cprefix : '';
  774. newline : #10;
  775. dirsep : '/';
  776. assem : as_gas;
  777. assemextern : as_gas;
  778. link : ld_none;
  779. linkextern : ld_linux;
  780. ar : ar_gnu_ar;
  781. res : res_elf;
  782. dbg : dbg_stabs;
  783. script : script_unix;
  784. endian : endian_little;
  785. alignment :
  786. (
  787. procalign : 4;
  788. loopalign : 4;
  789. jumpalign : 0;
  790. constalignmin : 0;
  791. constalignmax : 4;
  792. varalignmin : 0;
  793. varalignmax : 4;
  794. localalignmin : 4;
  795. localalignmax : 4;
  796. recordalignmin : 0;
  797. recordalignmax : 4;
  798. maxCrecordalign : 4
  799. );
  800. first_parm_offset : 8;
  801. stacksize : 8*1024*1024;
  802. stackalign : 4;
  803. abi : abi_default;
  804. llvmdatalayout: 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32';
  805. );
  806. {$endif FPC_ARMEB}
  807. {$endif FPC_ARMEL}
  808. {$endif FPC_ARMHF}
  809. system_mipseb_linux_info : tsysteminfo =
  810. (
  811. system : system_mipseb_LINUX;
  812. name : 'Linux for MIPSEB';
  813. shortname : 'Linux';
  814. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  815. tf_requires_proper_alignment,
  816. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  817. cpu : cpu_mipseb;
  818. unit_env : 'LINUXUNITS';
  819. extradefines : 'UNIX;HASUNIX';
  820. exeext : '';
  821. defext : '.def';
  822. scriptext : '.sh';
  823. smartext : '.sl';
  824. unitext : '.ppu';
  825. unitlibext : '.ppl';
  826. asmext : '.s';
  827. objext : '.o';
  828. resext : '.res';
  829. resobjext : '.or';
  830. sharedlibext : '.so';
  831. staticlibext : '.a';
  832. staticlibprefix : 'libp';
  833. sharedlibprefix : 'lib';
  834. sharedClibext : '.so';
  835. staticClibext : '.a';
  836. staticClibprefix : 'lib';
  837. sharedClibprefix : 'lib';
  838. importlibprefix : 'libimp';
  839. importlibext : '.a';
  840. // p_ext_support : false;
  841. Cprefix : '';
  842. newline : #10;
  843. dirsep : '/';
  844. assem : as_gas;
  845. assemextern : as_gas;
  846. link : ld_none;
  847. linkextern : ld_linux;
  848. ar : ar_gnu_ar;
  849. res : res_elf;
  850. dbg : dbg_stabs;
  851. script : script_unix;
  852. endian : endian_big;
  853. alignment :
  854. (
  855. procalign : 4;
  856. loopalign : 4;
  857. jumpalign : 0;
  858. constalignmin : 0;
  859. constalignmax : 8;
  860. varalignmin : 0;
  861. varalignmax : 8;
  862. localalignmin : 4;
  863. localalignmax : 8;
  864. recordalignmin : 0;
  865. recordalignmax : 8;
  866. maxCrecordalign : 8
  867. );
  868. first_parm_offset : 0;
  869. stacksize : 32*1024*1024;
  870. stackalign : 8;
  871. abi : abi_default;
  872. llvmdatalayout : 'E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
  873. );
  874. system_mipsel_linux_info : tsysteminfo =
  875. (
  876. system : system_mipsel_LINUX;
  877. name : 'Linux for MIPSEL';
  878. shortname : 'Linux';
  879. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  880. tf_requires_proper_alignment,
  881. tf_smartlink_sections,tf_smartlink_library,tf_has_winlike_resources];
  882. cpu : cpu_mipsel;
  883. unit_env : 'LINUXUNITS';
  884. extradefines : 'UNIX;HASUNIX';
  885. exeext : '';
  886. defext : '.def';
  887. scriptext : '.sh';
  888. smartext : '.sl';
  889. unitext : '.ppu';
  890. unitlibext : '.ppl';
  891. asmext : '.s';
  892. objext : '.o';
  893. resext : '.res';
  894. resobjext : '.or';
  895. sharedlibext : '.so';
  896. staticlibext : '.a';
  897. staticlibprefix : 'libp';
  898. sharedlibprefix : 'lib';
  899. sharedClibext : '.so';
  900. staticClibext : '.a';
  901. staticClibprefix : 'lib';
  902. sharedClibprefix : 'lib';
  903. importlibprefix : 'libimp';
  904. importlibext : '.a';
  905. // p_ext_support : false;
  906. Cprefix : '';
  907. newline : #10;
  908. dirsep : '/';
  909. assem : as_gas;
  910. assemextern : as_gas;
  911. link : ld_none;
  912. linkextern : ld_linux;
  913. ar : ar_gnu_ar;
  914. res : res_elf;
  915. dbg : dbg_stabs;
  916. script : script_unix;
  917. endian : endian_little;
  918. alignment :
  919. (
  920. procalign : 4;
  921. loopalign : 4;
  922. jumpalign : 0;
  923. constalignmin : 0;
  924. constalignmax : 8;
  925. varalignmin : 0;
  926. varalignmax : 8;
  927. localalignmin : 4;
  928. localalignmax : 8;
  929. recordalignmin : 0;
  930. recordalignmax : 8;
  931. maxCrecordalign : 8
  932. );
  933. first_parm_offset : 0;
  934. stacksize : 32*1024*1024;
  935. stackalign : 8;
  936. abi : abi_default;
  937. llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
  938. );
  939. implementation
  940. initialization
  941. {$ifdef CPUI386}
  942. {$ifdef linux}
  943. { some FreeBSD versions define linux as well }
  944. {$ifndef FreeBSD}
  945. set_source_info(system_i386_linux_info);
  946. {$endif FreeBSD}
  947. {$endif}
  948. {$endif CPUI386}
  949. {$ifdef CPU68}
  950. {$ifdef linux}
  951. set_source_info(system_m68k_linux_info);
  952. {$endif linux}
  953. {$endif CPU68}
  954. {$ifdef CPUX86_64}
  955. {$ifdef linux}
  956. set_source_info(system_x86_64_linux_info);
  957. {$endif linux}
  958. {$endif CPUX86_64}
  959. {$ifdef CPUALPHA}
  960. {$ifdef linux}
  961. set_source_info(system_alpha_linux_info);
  962. {$endif linux}
  963. {$endif CPUALPHA}
  964. {$ifdef CPUSPARC}
  965. {$ifdef linux}
  966. set_source_info(system_sparc_linux_info);
  967. {$endif linux}
  968. {$endif CPUSPARC}
  969. {$ifdef CPUPOWERPC32}
  970. {$ifdef linux}
  971. set_source_info(system_powerpc_linux_info);
  972. {$endif linux}
  973. {$endif CPUPOWERPC32}
  974. {$ifdef CPUPOWERPC64}
  975. {$ifdef linux}
  976. set_source_info(system_powerpc64_linux_info);
  977. {$endif linux}
  978. {$endif CPUPOWERPC64}
  979. {$ifdef CPUARM}
  980. {$ifdef linux}
  981. set_source_info(system_arm_linux_info);
  982. {$endif linux}
  983. {$endif CPUARM}
  984. {$ifdef CPUMIPSEB}
  985. {$ifdef linux}
  986. set_source_info(system_mipseb_linux_info);
  987. {$endif linux}
  988. {$endif CPUMIPSEB}
  989. {$ifdef CPUMIPSEL}
  990. {$ifdef linux}
  991. set_source_info(system_mipsel_linux_info);
  992. {$endif linux}
  993. {$endif CPUMIPSEL}
  994. end.