2
0

i_linux.pas 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627
  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;
  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 tls_threadvars}
  31. tf_section_threadvars,
  32. {$endif tls_threadvars}
  33. tf_needs_symbol_type,tf_files_case_sensitive,
  34. tf_needs_dwarf_cfi,tf_has_winlike_resources,
  35. tf_safecall_exceptions, tf_safecall_clearstack
  36. {$ifdef psabieh}
  37. ,tf_use_psabieh
  38. {$endif psabieh}
  39. ,tf_supports_hidden_symbols];
  40. cpu : cpu_i386;
  41. unit_env : 'LINUXUNITS';
  42. extradefines : 'UNIX;HASUNIX';
  43. exeext : '';
  44. defext : '.def';
  45. scriptext : '.sh';
  46. smartext : '.sl';
  47. unitext : '.ppu';
  48. unitlibext : '.ppl';
  49. asmext : '.s';
  50. objext : '.o';
  51. resext : '.res';
  52. resobjext : '.or';
  53. sharedlibext : '.so';
  54. staticlibext : '.a';
  55. staticlibprefix : 'libp';
  56. sharedlibprefix : 'lib';
  57. sharedClibext : '.so';
  58. staticClibext : '.a';
  59. staticClibprefix : 'lib';
  60. sharedClibprefix : 'lib';
  61. importlibprefix : 'libimp';
  62. importlibext : '.a';
  63. Cprefix : '';
  64. newline : #10;
  65. dirsep : '/';
  66. assem : as_i386_elf32;
  67. assemextern : as_gas;
  68. link : ld_none;
  69. linkextern : ld_linux;
  70. ar : ar_gnu_ar;
  71. res : res_elf;
  72. dbg : dbg_dwarf3;
  73. script : script_unix;
  74. endian : endian_little;
  75. alignment :
  76. (
  77. procalign : 16;
  78. loopalign : 8;
  79. jumpalign : 16;
  80. jumpalignskipmax : 10;
  81. coalescealign : 0;
  82. coalescealignskipmax: 0;
  83. constalignmin : 0;
  84. constalignmax : 64;
  85. varalignmin : 0;
  86. varalignmax : 64;
  87. localalignmin : 4;
  88. localalignmax : 8;
  89. recordalignmin : 0;
  90. recordalignmax : 16;
  91. maxCrecordalign : 4
  92. );
  93. first_parm_offset : 8;
  94. stacksize : 8*1024*1024;
  95. stackalign : 16;
  96. abi : abi_i386_dynalignedstack;
  97. { note: default LLVM stack alignment is 16 bytes for this target }
  98. 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';
  99. );
  100. system_x86_6432_linux_info : tsysteminfo =
  101. (
  102. system : system_x86_6432_LINUX;
  103. name : 'Linux for x64_6432';
  104. shortname : 'Linux6432';
  105. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  106. tf_pic_uses_got,tf_smartlink_sections,
  107. tf_has_winlike_resources,tf_supports_hidden_symbols];
  108. cpu : cpu_x86_64;
  109. unit_env : 'LINUXUNITS';
  110. extradefines : 'UNIX;HASUNIX';
  111. exeext : '';
  112. defext : '.def';
  113. scriptext : '.sh';
  114. smartext : '.sl';
  115. unitext : '.ppu';
  116. unitlibext : '.ppl';
  117. asmext : '.s';
  118. objext : '.o';
  119. resext : '.res';
  120. resobjext : '.or';
  121. sharedlibext : '.so';
  122. staticlibext : '.a';
  123. staticlibprefix : 'libp';
  124. sharedlibprefix : 'lib';
  125. sharedClibext : '.so';
  126. staticClibext : '.a';
  127. staticClibprefix : 'lib';
  128. sharedClibprefix : 'lib';
  129. importlibprefix : 'libimp';
  130. importlibext : '.a';
  131. Cprefix : '';
  132. newline : #10;
  133. dirsep : '/';
  134. assem : as_i386_elf32;
  135. assemextern : as_gas;
  136. link : ld_none;
  137. linkextern : ld_linux;
  138. ar : ar_gnu_ar;
  139. res : res_elf;
  140. dbg : dbg_stabs;
  141. script : script_unix;
  142. endian : endian_little;
  143. alignment :
  144. (
  145. procalign : 16;
  146. loopalign : 4;
  147. jumpalign : 0;
  148. jumpalignskipmax : 0;
  149. coalescealign : 0;
  150. coalescealignskipmax: 0;
  151. constalignmin : 0;
  152. constalignmax : 16;
  153. varalignmin : 0;
  154. varalignmax : 16;
  155. localalignmin : 4;
  156. localalignmax : 8;
  157. recordalignmin : 0;
  158. recordalignmax : 16;
  159. maxCrecordalign : 4
  160. );
  161. first_parm_offset : 8;
  162. stacksize : 8*1024*1024;
  163. stackalign : 16;
  164. abi : abi_default;
  165. llvmdatalayout : 'todo';
  166. );
  167. system_m68k_linux_info : tsysteminfo =
  168. (
  169. system : system_m68k_linux;
  170. name : 'Linux for m68k';
  171. shortname : 'Linux';
  172. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  173. tf_smartlink_sections,tf_safecall_exceptions,tf_safecall_clearstack,
  174. tf_requires_proper_alignment, { Coldfire seems to need this at least (KB) }
  175. tf_has_winlike_resources,tf_supports_hidden_symbols];
  176. cpu : cpu_m68k;
  177. unit_env : 'LINUXUNITS';
  178. extradefines : 'UNIX;HASUNIX';
  179. exeext : '';
  180. defext : '.def';
  181. scriptext : '.sh';
  182. smartext : '.sl';
  183. unitext : '.ppu';
  184. unitlibext : '.ppl';
  185. asmext : '.s';
  186. objext : '.o';
  187. resext : '.res';
  188. resobjext : '.or';
  189. sharedlibext : '.so';
  190. staticlibext : '.a';
  191. staticlibprefix : 'libp';
  192. sharedlibprefix : 'lib';
  193. sharedClibext : '.so';
  194. staticClibext : '.a';
  195. staticClibprefix : 'lib';
  196. sharedClibprefix : 'lib';
  197. importlibprefix : 'libimp';
  198. importlibext : '.a';
  199. Cprefix : '';
  200. newline : #10;
  201. dirsep : '/';
  202. assem : as_gas;
  203. assemextern : as_gas;
  204. link : ld_none;
  205. linkextern : ld_linux;
  206. ar : ar_gnu_ar;
  207. res : res_elf;
  208. dbg : dbg_dwarf3;
  209. script : script_unix;
  210. endian : endian_big;
  211. alignment :
  212. (
  213. procalign : 4;
  214. loopalign : 4;
  215. jumpalign : 0;
  216. jumpalignskipmax : 0;
  217. coalescealign : 0;
  218. coalescealignskipmax: 0;
  219. constalignmin : 0;
  220. constalignmax : 16;
  221. varalignmin : 0;
  222. varalignmax : 16;
  223. localalignmin : 4;
  224. localalignmax : 8;
  225. recordalignmin : 0;
  226. recordalignmax : 16;
  227. maxCrecordalign : 2;
  228. );
  229. first_parm_offset : 8;
  230. stacksize : 8*1024*1024;
  231. stackalign : 4;
  232. abi : abi_default;
  233. llvmdatalayout : 'todo';
  234. );
  235. system_powerpc_linux_info : tsysteminfo =
  236. (
  237. system : system_powerpc_LINUX;
  238. name : 'Linux for PowerPC';
  239. shortname : 'Linux';
  240. flags : [tf_needs_symbol_size,tf_smartlink_sections,tf_safecall_exceptions,
  241. tf_needs_symbol_type,tf_files_case_sensitive,
  242. tf_has_winlike_resources,tf_supports_hidden_symbols];
  243. cpu : cpu_powerpc;
  244. unit_env : '';
  245. extradefines : 'UNIX;HASUNIX';
  246. exeext : '';
  247. defext : '.def';
  248. scriptext : '.sh';
  249. smartext : '.sl';
  250. unitext : '.ppu';
  251. unitlibext : '.ppl';
  252. asmext : '.s';
  253. objext : '.o';
  254. resext : '.res';
  255. resobjext : '.or';
  256. sharedlibext : '.so';
  257. staticlibext : '.a';
  258. staticlibprefix : 'libp';
  259. sharedlibprefix : 'lib';
  260. sharedClibext : '.so';
  261. staticClibext : '.a';
  262. staticClibprefix : 'lib';
  263. sharedClibprefix : 'lib';
  264. importlibprefix : 'libimp';
  265. importlibext : '.a';
  266. Cprefix : '';
  267. newline : #10;
  268. dirsep : '/';
  269. assem : as_gas;
  270. assemextern : as_gas;
  271. link : ld_none;
  272. linkextern : ld_linux;
  273. ar : ar_gnu_ar;
  274. res : res_elf;
  275. dbg : dbg_stabs;
  276. script : script_unix;
  277. endian : endian_big;
  278. alignment :
  279. (
  280. procalign : 4;
  281. loopalign : 4;
  282. jumpalign : 0;
  283. jumpalignskipmax : 0;
  284. coalescealign : 0;
  285. coalescealignskipmax: 0;
  286. constalignmin : 0;
  287. constalignmax : 4;
  288. varalignmin : 0;
  289. varalignmax : 4;
  290. localalignmin : 4;
  291. localalignmax : 4;
  292. recordalignmin : 0;
  293. recordalignmax : 4;
  294. maxCrecordalign : 8
  295. );
  296. first_parm_offset : 8;
  297. stacksize : 32*1024*1024;
  298. stackalign : 16;
  299. abi : abi_powerpc_sysv;
  300. 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';
  301. );
  302. system_powerpc64_linux_info : tsysteminfo =
  303. (
  304. system : system_powerpc64_LINUX;
  305. name : 'Linux for PowerPC64';
  306. shortname : 'Linux';
  307. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  308. tf_requires_proper_alignment,tf_safecall_exceptions,tf_smartlink_sections,tf_has_winlike_resources,
  309. tf_supports_hidden_symbols];
  310. cpu : cpu_powerpc64;
  311. unit_env : '';
  312. extradefines : 'UNIX;HASUNIX';
  313. exeext : '';
  314. defext : '.def';
  315. scriptext : '.sh';
  316. smartext : '.sl';
  317. unitext : '.ppu';
  318. unitlibext : '.ppl';
  319. asmext : '.s';
  320. objext : '.o';
  321. resext : '.res';
  322. resobjext : '.or';
  323. sharedlibext : '.so';
  324. staticlibext : '.a';
  325. staticlibprefix : 'libp';
  326. sharedlibprefix : 'lib';
  327. sharedClibext : '.so';
  328. staticClibext : '.a';
  329. staticClibprefix : 'lib';
  330. sharedClibprefix : 'lib';
  331. importlibprefix : 'libimp';
  332. importlibext : '.a';
  333. Cprefix : '';
  334. newline : #10;
  335. dirsep : '/';
  336. assem : as_gas;
  337. assemextern : as_gas;
  338. link : ld_none;
  339. linkextern : ld_linux;
  340. ar : ar_gnu_ar;
  341. res : res_elf;
  342. dbg : dbg_dwarf2;
  343. script : script_unix;
  344. endian : endian_big;
  345. alignment :
  346. (
  347. procalign : 8;
  348. loopalign : 4;
  349. jumpalign : 0;
  350. jumpalignskipmax : 0;
  351. coalescealign : 0;
  352. coalescealignskipmax: 0;
  353. constalignmin : 4;
  354. constalignmax : 16;
  355. varalignmin : 4;
  356. varalignmax : 16;
  357. localalignmin : 0;
  358. localalignmax : 16;
  359. recordalignmin : 0;
  360. recordalignmax : 16;
  361. maxCrecordalign : 16
  362. );
  363. first_parm_offset : 8;
  364. stacksize : 10*1024*1024;
  365. stackalign : 16;
  366. abi : abi_powerpc_sysv;
  367. 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';
  368. );
  369. system_x86_64_linux_info : tsysteminfo =
  370. (
  371. system : system_x86_64_LINUX;
  372. name : 'Linux for x86-64';
  373. shortname : 'Linux';
  374. flags : [tf_smartlink_sections,tf_needs_symbol_size,tf_needs_dwarf_cfi,
  375. {$ifdef tls_threadvars}
  376. tf_section_threadvars,
  377. {$endif tls_threadvars}
  378. tf_library_needs_pic,tf_needs_symbol_type,tf_files_case_sensitive,
  379. tf_has_winlike_resources,tf_safecall_exceptions,tf_safecall_clearstack
  380. {$ifdef llvm},tf_use_psabieh{$endif}
  381. {$ifdef psabieh}
  382. ,tf_use_psabieh
  383. {$endif psabieh}
  384. ,tf_supports_hidden_symbols
  385. ];
  386. cpu : cpu_x86_64;
  387. unit_env : 'LINUXUNITS';
  388. extradefines : 'UNIX;HASUNIX';
  389. exeext : '';
  390. defext : '.def';
  391. scriptext : '.sh';
  392. smartext : '.sl';
  393. unitext : '.ppu';
  394. unitlibext : '.ppl';
  395. asmext : '.s';
  396. objext : '.o';
  397. resext : '.res';
  398. resobjext : '.or';
  399. sharedlibext : '.so';
  400. staticlibext : '.a';
  401. staticlibprefix : 'libp';
  402. sharedlibprefix : 'lib';
  403. sharedClibext : '.so';
  404. staticClibext : '.a';
  405. staticClibprefix : 'lib';
  406. sharedClibprefix : 'lib';
  407. importlibprefix : 'libimp';
  408. importlibext : '.a';
  409. Cprefix : '';
  410. newline : #10;
  411. dirsep : '/';
  412. assem : as_x86_64_elf64;
  413. assemextern : as_gas;
  414. link : ld_none;
  415. linkextern : ld_linux;
  416. ar : ar_gnu_ar;
  417. res : res_elf;
  418. dbg : dbg_dwarf3;
  419. script : script_unix;
  420. endian : endian_little;
  421. alignment :
  422. (
  423. procalign : 16;
  424. loopalign : 8;
  425. jumpalign : 16;
  426. jumpalignskipmax : 10;
  427. coalescealign : 0;
  428. coalescealignskipmax: 0;
  429. constalignmin : 0;
  430. constalignmax : 64;
  431. varalignmin : 0;
  432. varalignmax : 64;
  433. localalignmin : 4;
  434. localalignmax : 16;
  435. recordalignmin : 0;
  436. recordalignmax : 16;
  437. maxCrecordalign : 16
  438. );
  439. first_parm_offset : 16;
  440. stacksize : 8*1024*1024;
  441. stackalign : 16;
  442. abi : abi_default;
  443. 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';
  444. );
  445. system_sparc_linux_info : tsysteminfo =
  446. (
  447. system : system_SPARC_Linux;
  448. name : 'Linux for SPARC';
  449. shortname : 'Linux';
  450. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  451. tf_needs_symbol_type,tf_files_case_sensitive,
  452. tf_pic_uses_got,
  453. tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
  454. tf_has_winlike_resources,tf_supports_hidden_symbols];
  455. cpu : cpu_SPARC;
  456. unit_env : 'LINUXUNITS';
  457. extradefines : 'UNIX;HASUNIX';
  458. exeext : '';
  459. defext : '.def';
  460. scriptext : '.sh';
  461. smartext : '.sl';
  462. unitext : '.ppu';
  463. unitlibext : '.ppl';
  464. asmext : '.s';
  465. objext : '.o';
  466. resext : '.res';
  467. resobjext : '.or';
  468. sharedlibext : '.so';
  469. staticlibext : '.a';
  470. staticlibprefix : 'libp';
  471. sharedlibprefix : 'lib';
  472. sharedClibext : '.so';
  473. staticClibext : '.a';
  474. staticClibprefix : 'lib';
  475. sharedClibprefix : 'lib';
  476. importlibprefix : 'libimp';
  477. importlibext : '.a';
  478. Cprefix : '';
  479. newline : #10;
  480. dirsep : '/';
  481. assem : as_gas;
  482. assemextern : as_gas;
  483. link : ld_none;
  484. linkextern : ld_linux;
  485. ar : ar_gnu_ar;
  486. res : res_elf;
  487. dbg : dbg_stabs;
  488. script : script_unix;
  489. endian : endian_big;
  490. alignment :
  491. (
  492. procalign : 4;
  493. loopalign : 4;
  494. jumpalign : 0;
  495. jumpalignskipmax : 0;
  496. coalescealign : 0;
  497. coalescealignskipmax: 0;
  498. constalignmin : 4;
  499. constalignmax : 16;
  500. varalignmin : 4;
  501. varalignmax : 16;
  502. localalignmin : 4;
  503. localalignmax : 8;
  504. recordalignmin : 0;
  505. recordalignmax : 16;
  506. maxCrecordalign : 8
  507. );
  508. first_parm_offset : 92;
  509. stacksize : 8*1024*1024;
  510. stackalign : 8;
  511. abi : abi_default;
  512. 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';
  513. );
  514. system_sparc64_linux_info : tsysteminfo =
  515. (
  516. system : system_SPARC64_Linux;
  517. name : 'Linux for SPARC64';
  518. shortname : 'Linux';
  519. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  520. tf_needs_symbol_type,tf_files_case_sensitive,
  521. tf_pic_uses_got,
  522. tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
  523. tf_has_winlike_resources,tf_supports_hidden_symbols];
  524. cpu : cpu_SPARC64;
  525. unit_env : 'LINUXUNITS';
  526. extradefines : 'UNIX;HASUNIX';
  527. exeext : '';
  528. defext : '.def';
  529. scriptext : '.sh';
  530. smartext : '.sl';
  531. unitext : '.ppu';
  532. unitlibext : '.ppl';
  533. asmext : '.s';
  534. objext : '.o';
  535. resext : '.res';
  536. resobjext : '.or';
  537. sharedlibext : '.so';
  538. staticlibext : '.a';
  539. staticlibprefix : 'libp';
  540. sharedlibprefix : 'lib';
  541. sharedClibext : '.so';
  542. staticClibext : '.a';
  543. staticClibprefix : 'lib';
  544. sharedClibprefix : 'lib';
  545. importlibprefix : 'libimp';
  546. importlibext : '.a';
  547. Cprefix : '';
  548. newline : #10;
  549. dirsep : '/';
  550. assem : as_gas;
  551. assemextern : as_gas;
  552. link : ld_none;
  553. linkextern : ld_linux;
  554. ar : ar_gnu_ar;
  555. res : res_elf;
  556. dbg : dbg_dwarf3;
  557. script : script_unix;
  558. endian : endian_big;
  559. alignment :
  560. (
  561. procalign : 16;
  562. loopalign : 8;
  563. jumpalign : 0;
  564. jumpalignskipmax : 0;
  565. coalescealign : 0;
  566. coalescealignskipmax: 0;
  567. constalignmin : 4;
  568. constalignmax : 16;
  569. varalignmin : 4;
  570. varalignmax : 16;
  571. localalignmin : 4;
  572. localalignmax : 16;
  573. recordalignmin : 0;
  574. recordalignmax : 16;
  575. maxCrecordalign : 16
  576. );
  577. first_parm_offset : 176;
  578. stacksize : 16*1024*1024;
  579. stackalign : 16;
  580. abi : abi_default;
  581. 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';
  582. );
  583. {$ifdef FPC_ARMHF}
  584. system_arm_linux_info : tsysteminfo =
  585. (
  586. system : system_arm_Linux;
  587. name : 'Linux for ARMHF';
  588. shortname : 'Linux';
  589. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  590. tf_requires_proper_alignment,tf_safecall_exceptions,
  591. {$ifdef tls_threadvars}
  592. tf_section_threadvars,
  593. {$endif tls_threadvars}
  594. {$ifdef llvm}
  595. tf_use_psabieh,
  596. {$endif llvm}
  597. tf_smartlink_sections,tf_pic_uses_got,
  598. tf_has_winlike_resources,tf_supports_hidden_symbols];
  599. cpu : cpu_arm;
  600. unit_env : 'LINUXUNITS';
  601. extradefines : 'UNIX;HASUNIX;CPUARMHF';
  602. exeext : '';
  603. defext : '.def';
  604. scriptext : '.sh';
  605. smartext : '.sl';
  606. unitext : '.ppu';
  607. unitlibext : '.ppl';
  608. asmext : '.s';
  609. objext : '.o';
  610. resext : '.res';
  611. resobjext : '.or';
  612. sharedlibext : '.so';
  613. staticlibext : '.a';
  614. staticlibprefix : 'libp';
  615. sharedlibprefix : 'lib';
  616. sharedClibext : '.so';
  617. staticClibext : '.a';
  618. staticClibprefix : 'lib';
  619. sharedClibprefix : 'lib';
  620. importlibprefix : 'libimp';
  621. importlibext : '.a';
  622. Cprefix : '';
  623. newline : #10;
  624. dirsep : '/';
  625. assem : as_arm_elf32;
  626. assemextern : as_gas;
  627. link : ld_none;
  628. linkextern : ld_linux;
  629. ar : ar_gnu_ar;
  630. res : res_elf;
  631. dbg : dbg_dwarf2;
  632. script : script_unix;
  633. endian : endian_little;
  634. alignment :
  635. (
  636. procalign : 4;
  637. loopalign : 4;
  638. jumpalign : 0;
  639. jumpalignskipmax : 0;
  640. coalescealign : 0;
  641. coalescealignskipmax: 0;
  642. constalignmin : 0;
  643. constalignmax : 32;
  644. varalignmin : 0;
  645. varalignmax : 32;
  646. localalignmin : 4;
  647. localalignmax : 8;
  648. recordalignmin : 0;
  649. recordalignmax : 16;
  650. maxCrecordalign : 16
  651. );
  652. first_parm_offset : 8;
  653. stacksize : 8*1024*1024;
  654. stackalign : 8;
  655. abi : abi_eabihf;
  656. 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';
  657. );
  658. {$else FPC_ARMHF}
  659. {$ifdef FPC_ARMEL}
  660. system_arm_linux_info : tsysteminfo =
  661. (
  662. system : system_arm_Linux;
  663. name : 'Linux for ARMEL';
  664. shortname : 'Linux';
  665. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  666. tf_needs_dwarf_cfi,tf_requires_proper_alignment,tf_safecall_exceptions,
  667. {$ifdef tls_threadvars}
  668. tf_section_threadvars,
  669. {$endif tls_threadvars}
  670. tf_smartlink_sections,tf_pic_uses_got,
  671. tf_has_winlike_resources,tf_supports_hidden_symbols];
  672. cpu : cpu_arm;
  673. unit_env : 'LINUXUNITS';
  674. extradefines : 'UNIX;HASUNIX;CPUARMEL';
  675. exeext : '';
  676. defext : '.def';
  677. scriptext : '.sh';
  678. smartext : '.sl';
  679. unitext : '.ppu';
  680. unitlibext : '.ppl';
  681. asmext : '.s';
  682. objext : '.o';
  683. resext : '.res';
  684. resobjext : '.or';
  685. sharedlibext : '.so';
  686. staticlibext : '.a';
  687. staticlibprefix : 'libp';
  688. sharedlibprefix : 'lib';
  689. sharedClibext : '.so';
  690. staticClibext : '.a';
  691. staticClibprefix : 'lib';
  692. sharedClibprefix : 'lib';
  693. importlibprefix : 'libimp';
  694. importlibext : '.a';
  695. Cprefix : '';
  696. newline : #10;
  697. dirsep : '/';
  698. assem : as_arm_elf32;
  699. assemextern : as_gas;
  700. link : ld_none;
  701. linkextern : ld_linux;
  702. ar : ar_gnu_ar;
  703. res : res_elf;
  704. dbg : dbg_dwarf2;
  705. script : script_unix;
  706. endian : endian_little;
  707. alignment :
  708. (
  709. procalign : 4;
  710. loopalign : 4;
  711. jumpalign : 0;
  712. jumpalignskipmax : 0;
  713. coalescealign : 0;
  714. coalescealignskipmax: 0;
  715. constalignmin : 0;
  716. constalignmax : 32;
  717. varalignmin : 0;
  718. varalignmax : 32;
  719. localalignmin : 4;
  720. localalignmax : 8;
  721. recordalignmin : 0;
  722. recordalignmax : 16;
  723. maxCrecordalign : 16
  724. );
  725. first_parm_offset : 8;
  726. stacksize : 8*1024*1024;
  727. stackalign : 8;
  728. abi : abi_eabi;
  729. 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';
  730. );
  731. {$else FPC_ARMEL}
  732. {$ifdef FPC_ARMEB}
  733. system_arm_linux_info : tsysteminfo =
  734. (
  735. system : system_arm_Linux;
  736. name : 'Linux for ARMEB';
  737. shortname : 'Linux';
  738. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  739. tf_requires_proper_alignment,tf_safecall_exceptions,
  740. tf_smartlink_sections,tf_pic_uses_got,
  741. tf_has_winlike_resources,tf_supports_hidden_symbols];
  742. cpu : cpu_arm;
  743. unit_env : 'LINUXUNITS';
  744. extradefines : 'UNIX;HASUNIX;CPUARMEB';
  745. exeext : '';
  746. defext : '.def';
  747. scriptext : '.sh';
  748. smartext : '.sl';
  749. unitext : '.ppu';
  750. unitlibext : '.ppl';
  751. asmext : '.s';
  752. objext : '.o';
  753. resext : '.res';
  754. resobjext : '.or';
  755. sharedlibext : '.so';
  756. staticlibext : '.a';
  757. staticlibprefix : 'libp';
  758. sharedlibprefix : 'lib';
  759. sharedClibext : '.so';
  760. staticClibext : '.a';
  761. staticClibprefix : 'lib';
  762. sharedClibprefix : 'lib';
  763. importlibprefix : 'libimp';
  764. importlibext : '.a';
  765. Cprefix : '';
  766. newline : #10;
  767. dirsep : '/';
  768. assem : as_gas;
  769. assemextern : as_gas;
  770. link : ld_none;
  771. linkextern : ld_linux;
  772. ar : ar_gnu_ar;
  773. res : res_elf;
  774. dbg : dbg_stabs;
  775. script : script_unix;
  776. endian : endian_big;
  777. alignment :
  778. (
  779. procalign : 4;
  780. loopalign : 4;
  781. jumpalign : 0;
  782. jumpalignskipmax : 0;
  783. coalescealign : 0;
  784. coalescealignskipmax: 0;
  785. constalignmin : 0;
  786. constalignmax : 32;
  787. varalignmin : 0;
  788. varalignmax : 32;
  789. localalignmin : 4;
  790. localalignmax : 8;
  791. recordalignmin : 0;
  792. recordalignmax : 16;
  793. maxCrecordalign : 4
  794. );
  795. first_parm_offset : 8;
  796. stacksize : 8*1024*1024;
  797. stackalign : 4;
  798. abi : abi_default;
  799. llvmdatalayout: 'todo';
  800. );
  801. {$else FPC_ARMEB}
  802. system_arm_linux_info : tsysteminfo =
  803. (
  804. system : system_arm_Linux;
  805. name : 'Linux for ARM';
  806. shortname : 'Linux';
  807. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  808. tf_requires_proper_alignment,tf_safecall_exceptions,
  809. tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
  810. cpu : cpu_arm;
  811. unit_env : 'LINUXUNITS';
  812. extradefines : 'UNIX;HASUNIX';
  813. exeext : '';
  814. defext : '.def';
  815. scriptext : '.sh';
  816. smartext : '.sl';
  817. unitext : '.ppu';
  818. unitlibext : '.ppl';
  819. asmext : '.s';
  820. objext : '.o';
  821. resext : '.res';
  822. resobjext : '.or';
  823. sharedlibext : '.so';
  824. staticlibext : '.a';
  825. staticlibprefix : 'libp';
  826. sharedlibprefix : 'lib';
  827. sharedClibext : '.so';
  828. staticClibext : '.a';
  829. staticClibprefix : 'lib';
  830. sharedClibprefix : 'lib';
  831. importlibprefix : 'libimp';
  832. importlibext : '.a';
  833. Cprefix : '';
  834. newline : #10;
  835. dirsep : '/';
  836. assem : as_gas;
  837. assemextern : as_gas;
  838. link : ld_none;
  839. linkextern : ld_linux;
  840. ar : ar_gnu_ar;
  841. res : res_elf;
  842. dbg : dbg_stabs;
  843. script : script_unix;
  844. endian : endian_little;
  845. alignment :
  846. (
  847. procalign : 4;
  848. loopalign : 4;
  849. jumpalign : 0;
  850. jumpalignskipmax : 0;
  851. coalescealign : 0;
  852. coalescealignskipmax: 0;
  853. constalignmin : 0;
  854. constalignmax : 32;
  855. varalignmin : 0;
  856. varalignmax : 32;
  857. localalignmin : 4;
  858. localalignmax : 4;
  859. recordalignmin : 0;
  860. recordalignmax : 16;
  861. maxCrecordalign : 4
  862. );
  863. first_parm_offset : 8;
  864. stacksize : 8*1024*1024;
  865. stackalign : 4;
  866. abi : abi_default;
  867. 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';
  868. );
  869. {$endif FPC_ARMEB}
  870. {$endif FPC_ARMEL}
  871. {$endif FPC_ARMHF}
  872. system_aarch64_linux_info : tsysteminfo =
  873. (
  874. system : system_aarch64_linux;
  875. name : 'Linux for AArch64';
  876. shortname : 'Linux';
  877. flags : [tf_needs_symbol_size,
  878. tf_needs_symbol_type,
  879. tf_files_case_sensitive,
  880. tf_requires_proper_alignment,tf_safecall_exceptions,
  881. tf_smartlink_sections,tf_pic_uses_got,
  882. tf_has_winlike_resources
  883. {$ifdef llvm}
  884. ,tf_use_psabieh
  885. {$endif llvm}
  886. ,tf_supports_hidden_symbols
  887. ];
  888. cpu : cpu_aarch64;
  889. unit_env : 'LINUXUNITS';
  890. extradefines : 'UNIX;HASUNIX';
  891. exeext : '';
  892. defext : '.def';
  893. scriptext : '.sh';
  894. smartext : '.sl';
  895. unitext : '.ppu';
  896. unitlibext : '.ppl';
  897. asmext : '.s';
  898. objext : '.o';
  899. resext : '.res';
  900. resobjext : '.or';
  901. sharedlibext : '.so';
  902. staticlibext : '.a';
  903. staticlibprefix : 'libp';
  904. sharedlibprefix : 'lib';
  905. sharedClibext : '.so';
  906. staticClibext : '.a';
  907. staticClibprefix : 'lib';
  908. sharedClibprefix : 'lib';
  909. importlibprefix : 'libimp';
  910. importlibext : '.a';
  911. Cprefix : '';
  912. newline : #10;
  913. dirsep : '/';
  914. assem : as_gas;
  915. assemextern : as_gas;
  916. link : ld_none;
  917. linkextern : ld_linux;
  918. ar : ar_gnu_ar;
  919. res : res_elf;
  920. dbg : dbg_dwarf2;
  921. script : script_unix;
  922. endian : endian_little;
  923. alignment :
  924. (
  925. procalign : 8;
  926. loopalign : 4;
  927. jumpalign : 0;
  928. jumpalignskipmax : 0;
  929. coalescealign : 0;
  930. coalescealignskipmax: 0;
  931. constalignmin : 0;
  932. constalignmax : 64;
  933. varalignmin : 0;
  934. varalignmax : 64;
  935. localalignmin : 4;
  936. localalignmax : 16;
  937. recordalignmin : 0;
  938. recordalignmax : 16;
  939. maxCrecordalign : 16
  940. );
  941. first_parm_offset : 16;
  942. stacksize : 8*1024*1024;
  943. stackalign : 16;
  944. abi : abi_default;
  945. 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-n32:64-S128'
  946. );
  947. system_mipseb_linux_info : tsysteminfo =
  948. (
  949. system : system_mipseb_linux;
  950. name : 'Linux for MIPSEB';
  951. shortname : 'Linux';
  952. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  953. tf_requires_proper_alignment,tf_library_needs_pic,
  954. tf_pic_uses_got,tf_safecall_exceptions,
  955. tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
  956. cpu : cpu_mipseb;
  957. unit_env : 'LINUXUNITS';
  958. extradefines : 'UNIX;HASUNIX';
  959. exeext : '';
  960. defext : '.def';
  961. scriptext : '.sh';
  962. smartext : '.sl';
  963. unitext : '.ppu';
  964. unitlibext : '.ppl';
  965. asmext : '.s';
  966. objext : '.o';
  967. resext : '.res';
  968. resobjext : '.or';
  969. sharedlibext : '.so';
  970. staticlibext : '.a';
  971. staticlibprefix : 'libp';
  972. sharedlibprefix : 'lib';
  973. sharedClibext : '.so';
  974. staticClibext : '.a';
  975. staticClibprefix : 'lib';
  976. sharedClibprefix : 'lib';
  977. importlibprefix : 'libimp';
  978. importlibext : '.a';
  979. // p_ext_support : false;
  980. Cprefix : '';
  981. newline : #10;
  982. dirsep : '/';
  983. assem : as_gas;
  984. assemextern : as_gas;
  985. link : ld_none;
  986. linkextern : ld_linux;
  987. ar : ar_gnu_ar;
  988. res : res_elf;
  989. dbg : dbg_stabs;
  990. script : script_unix;
  991. endian : endian_big;
  992. alignment :
  993. (
  994. procalign : 4;
  995. loopalign : 4;
  996. jumpalign : 0;
  997. jumpalignskipmax : 0;
  998. coalescealign : 0;
  999. coalescealignskipmax: 0;
  1000. constalignmin : 0;
  1001. constalignmax : 8;
  1002. varalignmin : 0;
  1003. varalignmax : 8;
  1004. localalignmin : 4;
  1005. localalignmax : 8;
  1006. recordalignmin : 0;
  1007. recordalignmax : 8;
  1008. maxCrecordalign : 8
  1009. );
  1010. first_parm_offset : 0;
  1011. stacksize : 32*1024*1024;
  1012. stackalign : 8;
  1013. abi : abi_default;
  1014. 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';
  1015. );
  1016. system_mipsel_linux_info : tsysteminfo =
  1017. (
  1018. system : system_mipsel_linux;
  1019. name : 'Linux for MIPSEL';
  1020. shortname : 'Linux';
  1021. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  1022. tf_requires_proper_alignment,tf_library_needs_pic,
  1023. tf_pic_uses_got,tf_safecall_exceptions,
  1024. tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
  1025. cpu : cpu_mipsel;
  1026. unit_env : 'LINUXUNITS';
  1027. extradefines : 'UNIX;HASUNIX';
  1028. exeext : '';
  1029. defext : '.def';
  1030. scriptext : '.sh';
  1031. smartext : '.sl';
  1032. unitext : '.ppu';
  1033. unitlibext : '.ppl';
  1034. asmext : '.s';
  1035. objext : '.o';
  1036. resext : '.res';
  1037. resobjext : '.or';
  1038. sharedlibext : '.so';
  1039. staticlibext : '.a';
  1040. staticlibprefix : 'libp';
  1041. sharedlibprefix : 'lib';
  1042. sharedClibext : '.so';
  1043. staticClibext : '.a';
  1044. staticClibprefix : 'lib';
  1045. sharedClibprefix : 'lib';
  1046. importlibprefix : 'libimp';
  1047. importlibext : '.a';
  1048. // p_ext_support : false;
  1049. Cprefix : '';
  1050. newline : #10;
  1051. dirsep : '/';
  1052. assem : as_gas;
  1053. assemextern : as_gas;
  1054. link : ld_none;
  1055. linkextern : ld_linux;
  1056. ar : ar_gnu_ar;
  1057. res : res_elf;
  1058. dbg : dbg_dwarf3;
  1059. script : script_unix;
  1060. endian : endian_little;
  1061. alignment :
  1062. (
  1063. procalign : 4;
  1064. loopalign : 4;
  1065. jumpalign : 0;
  1066. jumpalignskipmax : 0;
  1067. coalescealign : 0;
  1068. coalescealignskipmax: 0;
  1069. constalignmin : 0;
  1070. constalignmax : 8;
  1071. varalignmin : 0;
  1072. varalignmax : 8;
  1073. localalignmin : 4;
  1074. localalignmax : 8;
  1075. recordalignmin : 0;
  1076. recordalignmax : 8;
  1077. maxCrecordalign : 8
  1078. );
  1079. first_parm_offset : 0;
  1080. stacksize : 32*1024*1024;
  1081. stackalign : 8;
  1082. abi : abi_default;
  1083. 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';
  1084. );
  1085. system_mips64_linux_info : tsysteminfo =
  1086. (
  1087. system : system_mips64_linux;
  1088. name : 'Linux for MIPS64';
  1089. shortname : 'Linux';
  1090. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  1091. tf_requires_proper_alignment,tf_library_needs_pic,
  1092. tf_pic_uses_got,tf_safecall_exceptions,
  1093. tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
  1094. cpu : cpu_mips64;
  1095. unit_env : 'LINUXUNITS';
  1096. extradefines : 'UNIX;HASUNIX';
  1097. exeext : '';
  1098. defext : '.def';
  1099. scriptext : '.sh';
  1100. smartext : '.sl';
  1101. unitext : '.ppu';
  1102. unitlibext : '.ppl';
  1103. asmext : '.s';
  1104. objext : '.o';
  1105. resext : '.res';
  1106. resobjext : '.or';
  1107. sharedlibext : '.so';
  1108. staticlibext : '.a';
  1109. staticlibprefix : 'libp';
  1110. sharedlibprefix : 'lib';
  1111. sharedClibext : '.so';
  1112. staticClibext : '.a';
  1113. staticClibprefix : 'lib';
  1114. sharedClibprefix : 'lib';
  1115. importlibprefix : 'libimp';
  1116. importlibext : '.a';
  1117. // p_ext_support : false;
  1118. Cprefix : '';
  1119. newline : #10;
  1120. dirsep : '/';
  1121. assem : as_gas;
  1122. assemextern : as_gas;
  1123. link : ld_none;
  1124. linkextern : ld_linux;
  1125. ar : ar_gnu_ar;
  1126. res : res_elf;
  1127. dbg : dbg_stabs;
  1128. script : script_unix;
  1129. endian : endian_big;
  1130. alignment :
  1131. (
  1132. procalign : 4;
  1133. loopalign : 4;
  1134. jumpalign : 0;
  1135. jumpalignskipmax : 0;
  1136. coalescealign : 0;
  1137. coalescealignskipmax: 0;
  1138. constalignmin : 0;
  1139. constalignmax : 8;
  1140. varalignmin : 0;
  1141. varalignmax : 8;
  1142. localalignmin : 4;
  1143. localalignmax : 8;
  1144. recordalignmin : 0;
  1145. recordalignmax : 8;
  1146. maxCrecordalign : 8
  1147. );
  1148. first_parm_offset : 0;
  1149. stacksize : 32*1024*1024;
  1150. stackalign : 8;
  1151. abi : abi_default;
  1152. 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';
  1153. );
  1154. system_mips64el_linux_info : tsysteminfo =
  1155. (
  1156. system : system_mips64el_linux;
  1157. name : 'Linux for MIPS64EL';
  1158. shortname : 'Linux';
  1159. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  1160. tf_requires_proper_alignment,tf_library_needs_pic,
  1161. tf_pic_uses_got,tf_safecall_exceptions,
  1162. tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
  1163. cpu : cpu_mips64el;
  1164. unit_env : 'LINUXUNITS';
  1165. extradefines : 'UNIX;HASUNIX';
  1166. exeext : '';
  1167. defext : '.def';
  1168. scriptext : '.sh';
  1169. smartext : '.sl';
  1170. unitext : '.ppu';
  1171. unitlibext : '.ppl';
  1172. asmext : '.s';
  1173. objext : '.o';
  1174. resext : '.res';
  1175. resobjext : '.or';
  1176. sharedlibext : '.so';
  1177. staticlibext : '.a';
  1178. staticlibprefix : 'libp';
  1179. sharedlibprefix : 'lib';
  1180. sharedClibext : '.so';
  1181. staticClibext : '.a';
  1182. staticClibprefix : 'lib';
  1183. sharedClibprefix : 'lib';
  1184. importlibprefix : 'libimp';
  1185. importlibext : '.a';
  1186. // p_ext_support : false;
  1187. Cprefix : '';
  1188. newline : #10;
  1189. dirsep : '/';
  1190. assem : as_gas;
  1191. assemextern : as_gas;
  1192. link : ld_none;
  1193. linkextern : ld_linux;
  1194. ar : ar_gnu_ar;
  1195. res : res_elf;
  1196. dbg : dbg_dwarf3;
  1197. script : script_unix;
  1198. endian : endian_little;
  1199. alignment :
  1200. (
  1201. procalign : 4;
  1202. loopalign : 4;
  1203. jumpalign : 0;
  1204. jumpalignskipmax : 0;
  1205. coalescealign : 0;
  1206. coalescealignskipmax: 0;
  1207. constalignmin : 0;
  1208. constalignmax : 8;
  1209. varalignmin : 0;
  1210. varalignmax : 8;
  1211. localalignmin : 4;
  1212. localalignmax : 8;
  1213. recordalignmin : 0;
  1214. recordalignmax : 8;
  1215. maxCrecordalign : 8
  1216. );
  1217. first_parm_offset : 0;
  1218. stacksize : 32*1024*1024;
  1219. stackalign : 8;
  1220. abi : abi_default;
  1221. 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';
  1222. );
  1223. system_riscv32_linux_info : tsysteminfo =
  1224. (
  1225. system : system_riscv32_linux;
  1226. name : 'Linux for RISC-V 32';
  1227. shortname : 'Linux';
  1228. flags : [tf_needs_symbol_size,tf_smartlink_sections,tf_needs_dwarf_cfi,
  1229. tf_needs_symbol_type,tf_files_case_sensitive,
  1230. tf_requires_proper_alignment,tf_has_winlike_resources,
  1231. tf_safecall_exceptions,
  1232. tf_supports_hidden_symbols];
  1233. cpu : cpu_riscv32;
  1234. unit_env : 'LINUXUNITS';
  1235. extradefines : 'UNIX;HASUNIX';
  1236. exeext : '';
  1237. defext : '.def';
  1238. scriptext : '.sh';
  1239. smartext : '.sl';
  1240. unitext : '.ppu';
  1241. unitlibext : '.ppl';
  1242. asmext : '.s';
  1243. objext : '.o';
  1244. resext : '.res';
  1245. resobjext : '.or';
  1246. sharedlibext : '.so';
  1247. staticlibext : '.a';
  1248. staticlibprefix : 'libp';
  1249. sharedlibprefix : 'lib';
  1250. sharedClibext : '.so';
  1251. staticClibext : '.a';
  1252. staticClibprefix : 'lib';
  1253. sharedClibprefix : 'lib';
  1254. importlibprefix : 'libimp';
  1255. importlibext : '.a';
  1256. // p_ext_support : false;
  1257. Cprefix : '';
  1258. newline : #10;
  1259. dirsep : '/';
  1260. assem : as_gas;
  1261. assemextern : as_gas;
  1262. link : ld_none;
  1263. linkextern : ld_linux;
  1264. ar : ar_gnu_ar;
  1265. res : res_elf;
  1266. dbg : dbg_dwarf3;
  1267. script : script_unix;
  1268. endian : endian_little;
  1269. alignment :
  1270. (
  1271. procalign : 4;
  1272. loopalign : 4;
  1273. jumpalign : 0;
  1274. jumpalignskipmax : 0;
  1275. coalescealign : 0;
  1276. coalescealignskipmax: 0;
  1277. constalignmin : 0;
  1278. constalignmax : 8;
  1279. varalignmin : 0;
  1280. varalignmax : 8;
  1281. localalignmin : 4;
  1282. localalignmax : 8;
  1283. recordalignmin : 0;
  1284. recordalignmax : 8;
  1285. maxCrecordalign : 8
  1286. );
  1287. first_parm_offset : 0;
  1288. stacksize : 32*1024*1024;
  1289. stackalign : 8;
  1290. abi : abi_riscv_ilp32;
  1291. 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';
  1292. );
  1293. system_riscv64_linux_info : tsysteminfo =
  1294. (
  1295. system : system_riscv64_linux;
  1296. name : 'Linux for RISC-V 64';
  1297. shortname : 'Linux';
  1298. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,tf_needs_dwarf_cfi,
  1299. tf_needs_symbol_type,tf_files_case_sensitive,
  1300. tf_requires_proper_alignment,tf_has_winlike_resources,
  1301. tf_safecall_exceptions,
  1302. tf_supports_hidden_symbols
  1303. ];
  1304. cpu : cpu_riscv64;
  1305. unit_env : 'LINUXUNITS';
  1306. extradefines : 'UNIX;HASUNIX';
  1307. exeext : '';
  1308. defext : '.def';
  1309. scriptext : '.sh';
  1310. smartext : '.sl';
  1311. unitext : '.ppu';
  1312. unitlibext : '.ppl';
  1313. asmext : '.s';
  1314. objext : '.o';
  1315. resext : '.res';
  1316. resobjext : '.or';
  1317. sharedlibext : '.so';
  1318. staticlibext : '.a';
  1319. staticlibprefix : 'libp';
  1320. sharedlibprefix : 'lib';
  1321. sharedClibext : '.so';
  1322. staticClibext : '.a';
  1323. staticClibprefix : 'lib';
  1324. sharedClibprefix : 'lib';
  1325. importlibprefix : 'libimp';
  1326. importlibext : '.a';
  1327. // p_ext_support : false;
  1328. Cprefix : '';
  1329. newline : #10;
  1330. dirsep : '/';
  1331. assem : as_gas;
  1332. assemextern : as_gas;
  1333. link : ld_none;
  1334. linkextern : ld_linux;
  1335. ar : ar_gnu_ar;
  1336. res : res_elf;
  1337. dbg : dbg_dwarf3;
  1338. script : script_unix;
  1339. endian : endian_little;
  1340. alignment :
  1341. (
  1342. procalign : 8;
  1343. loopalign : 4;
  1344. jumpalign : 0;
  1345. jumpalignskipmax : 0;
  1346. coalescealign : 0;
  1347. coalescealignskipmax: 0;
  1348. constalignmin : 4;
  1349. constalignmax : 16;
  1350. varalignmin : 4;
  1351. varalignmax : 16;
  1352. localalignmin : 8;
  1353. localalignmax : 16;
  1354. recordalignmin : 0;
  1355. recordalignmax : 16;
  1356. maxCrecordalign : 16
  1357. );
  1358. first_parm_offset : 16;
  1359. stacksize : 10*1024*1024;
  1360. stackalign : 16;
  1361. abi : abi_riscv_hf;
  1362. 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';
  1363. );
  1364. system_xtensa_linux_info : tsysteminfo =
  1365. (
  1366. system : system_xtensa_linux;
  1367. name : 'Linux for Xtensa';
  1368. shortname : 'Linux';
  1369. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  1370. tf_needs_symbol_type,tf_files_case_sensitive,
  1371. tf_requires_proper_alignment,tf_has_winlike_resources,
  1372. tf_supports_hidden_symbols];
  1373. cpu : cpu_xtensa;
  1374. unit_env : 'LINUXUNITS';
  1375. extradefines : 'UNIX;HASUNIX';
  1376. exeext : '';
  1377. defext : '.def';
  1378. scriptext : '.sh';
  1379. smartext : '.sl';
  1380. unitext : '.ppu';
  1381. unitlibext : '.ppl';
  1382. asmext : '.s';
  1383. objext : '.o';
  1384. resext : '.res';
  1385. resobjext : '.or';
  1386. sharedlibext : '.so';
  1387. staticlibext : '.a';
  1388. staticlibprefix : 'libp';
  1389. sharedlibprefix : 'lib';
  1390. sharedClibext : '.so';
  1391. staticClibext : '.a';
  1392. staticClibprefix : 'lib';
  1393. sharedClibprefix : 'lib';
  1394. importlibprefix : 'libimp';
  1395. importlibext : '.a';
  1396. // p_ext_support : false;
  1397. Cprefix : '';
  1398. newline : #10;
  1399. dirsep : '/';
  1400. assem : as_gas;
  1401. assemextern : as_gas;
  1402. link : ld_none;
  1403. linkextern : ld_linux;
  1404. ar : ar_gnu_ar;
  1405. res : res_elf;
  1406. dbg : dbg_dwarf2;
  1407. script : script_unix;
  1408. endian : endian_little;
  1409. alignment :
  1410. (
  1411. procalign : 4;
  1412. loopalign : 4;
  1413. jumpalign : 0;
  1414. jumpalignskipmax : 0;
  1415. coalescealign : 0;
  1416. coalescealignskipmax: 0;
  1417. constalignmin : 0;
  1418. constalignmax : 8;
  1419. varalignmin : 0;
  1420. varalignmax : 8;
  1421. localalignmin : 4;
  1422. localalignmax : 16;
  1423. recordalignmin : 0;
  1424. recordalignmax : 8;
  1425. maxCrecordalign : 8
  1426. );
  1427. first_parm_offset : 0;
  1428. stacksize : 32*1024*1024;
  1429. stackalign : 16;
  1430. abi : abi_xtensa_windowed;
  1431. 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';
  1432. );
  1433. system_loongarch64_linux_info : tsysteminfo =
  1434. (
  1435. system : system_loongarch64_linux;
  1436. name : 'Linux for LoongArch64';
  1437. shortname : 'Linux';
  1438. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,tf_needs_dwarf_cfi,
  1439. tf_needs_symbol_type,tf_files_case_sensitive,
  1440. tf_requires_proper_alignment,tf_has_winlike_resources,
  1441. tf_supports_hidden_symbols,
  1442. tf_safecall_exceptions
  1443. ];
  1444. cpu : cpu_loongarch64;
  1445. unit_env : 'LINUXUNITS';
  1446. extradefines : 'UNIX;HASUNIX';
  1447. exeext : '';
  1448. defext : '.def';
  1449. scriptext : '.sh';
  1450. smartext : '.sl';
  1451. unitext : '.ppu';
  1452. unitlibext : '.ppl';
  1453. asmext : '.s';
  1454. objext : '.o';
  1455. resext : '.res';
  1456. resobjext : '.or';
  1457. sharedlibext : '.so';
  1458. staticlibext : '.a';
  1459. staticlibprefix : 'libp';
  1460. sharedlibprefix : 'lib';
  1461. sharedClibext : '.so';
  1462. staticClibext : '.a';
  1463. staticClibprefix : 'lib';
  1464. sharedClibprefix : 'lib';
  1465. importlibprefix : 'libimp';
  1466. importlibext : '.a';
  1467. // p_ext_support : false;
  1468. Cprefix : '';
  1469. newline : #10;
  1470. dirsep : '/';
  1471. assem : as_gas;
  1472. assemextern : as_gas;
  1473. link : ld_none;
  1474. linkextern : ld_linux;
  1475. ar : ar_gnu_ar;
  1476. res : res_elf;
  1477. dbg : dbg_dwarf3;
  1478. script : script_unix;
  1479. endian : endian_little;
  1480. alignment :
  1481. (
  1482. procalign : 8;
  1483. loopalign : 4;
  1484. jumpalign : 0;
  1485. jumpalignskipmax : 0;
  1486. coalescealign : 0;
  1487. coalescealignskipmax: 0;
  1488. constalignmin : 4;
  1489. constalignmax : 16;
  1490. varalignmin : 4;
  1491. varalignmax : 16;
  1492. localalignmin : 8;
  1493. localalignmax : 16;
  1494. recordalignmin : 0;
  1495. recordalignmax : 16;
  1496. maxCrecordalign : 16
  1497. );
  1498. first_parm_offset : 16;
  1499. stacksize : 8*1024*1024;
  1500. stackalign : 16;
  1501. abi : abi_default;
  1502. 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';
  1503. );
  1504. implementation
  1505. initialization
  1506. {$ifdef CPUI386}
  1507. {$ifdef linux}
  1508. { some FreeBSD versions define linux as well }
  1509. {$ifndef FreeBSD}
  1510. set_source_info(system_i386_linux_info);
  1511. {$endif FreeBSD}
  1512. {$endif}
  1513. {$endif CPUI386}
  1514. {$ifdef CPU68}
  1515. {$ifdef linux}
  1516. set_source_info(system_m68k_linux_info);
  1517. {$endif linux}
  1518. {$endif CPU68}
  1519. {$ifdef CPUX86_64}
  1520. {$ifdef linux}
  1521. set_source_info(system_x86_64_linux_info);
  1522. {$endif linux}
  1523. {$endif CPUX86_64}
  1524. {$ifdef CPUSPARC}
  1525. {$ifdef linux}
  1526. set_source_info(system_sparc_linux_info);
  1527. {$endif linux}
  1528. {$endif CPUSPARC}
  1529. {$ifdef CPUSPARC64}
  1530. {$ifdef linux}
  1531. set_source_info(system_sparc64_linux_info);
  1532. {$endif linux}
  1533. {$endif CPUSPARC64}
  1534. {$ifdef CPUPOWERPC32}
  1535. {$ifdef linux}
  1536. set_source_info(system_powerpc_linux_info);
  1537. {$endif linux}
  1538. {$endif CPUPOWERPC32}
  1539. {$ifdef CPUPOWERPC64}
  1540. {$ifdef linux}
  1541. set_source_info(system_powerpc64_linux_info);
  1542. { on a little endian PPC64 platform -> source is elfv2 }
  1543. {$ifdef FPC_LITTLE_ENDIAN}
  1544. source_info.endian:=endian_little;
  1545. source_info.abi:=abi_powerpc_elfv2;
  1546. {$endif}
  1547. {$endif linux}
  1548. {$endif CPUPOWERPC64}
  1549. {$ifdef CPUARM}
  1550. {$ifdef linux}
  1551. set_source_info(system_arm_linux_info);
  1552. {$endif linux}
  1553. {$endif CPUARM}
  1554. {$ifdef cpuaarch64}
  1555. {$ifdef linux}
  1556. set_source_info(system_aarch64_linux_info);
  1557. {$endif linux}
  1558. {$endif cpuaarch64}
  1559. {$ifdef CPUMIPSEB}
  1560. {$ifdef linux}
  1561. set_source_info(system_mipseb_linux_info);
  1562. {$endif linux}
  1563. {$endif CPUMIPSEB}
  1564. {$ifdef CPUMIPSEL}
  1565. {$ifdef linux}
  1566. set_source_info(system_mipsel_linux_info);
  1567. {$endif linux}
  1568. {$endif CPUMIPSEL}
  1569. {$ifdef CPURISCV32}
  1570. {$ifdef linux}
  1571. set_source_info(system_riscv32_linux_info);
  1572. {$endif linux}
  1573. {$endif CPURISCV32}
  1574. {$ifdef CPURISCV64}
  1575. {$ifdef linux}
  1576. set_source_info(system_riscv64_linux_info);
  1577. {$endif linux}
  1578. {$endif CPURISCV64}
  1579. {$ifdef CPUXTENSA}
  1580. {$ifdef linux}
  1581. set_source_info(system_xtensa_linux_info);
  1582. {$endif linux}
  1583. {$endif CPUXTENSA}
  1584. {$ifdef CPUMIPS64EB}
  1585. {$ifdef linux}
  1586. set_source_info(system_mips64_linux_info);
  1587. {$endif linux}
  1588. {$endif CPUMIPS64EB}
  1589. {$ifdef CPUMIPS64EL}
  1590. {$ifdef linux}
  1591. set_source_info(system_mips64el_linux_info);
  1592. {$endif linux}
  1593. {$endif CPUMIPS64EL}
  1594. {$ifdef CPULOONGARCH64}
  1595. {$ifdef linux}
  1596. set_source_info(system_loongarch64_linux_info);
  1597. {$endif linux}
  1598. {$endif CPULOONGARCH64}
  1599. end.