i_linux.pas 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294
  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 segment_threadvars}
  31. tf_section_threadvars,
  32. {$endif segment_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. 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. jumpalignmax : 0;
  77. coalescealign : 0;
  78. coalescealignmax: 0;
  79. constalignmin : 0;
  80. constalignmax : 8;
  81. varalignmin : 0;
  82. varalignmax : 16;
  83. localalignmin : 4;
  84. localalignmax : 8;
  85. recordalignmin : 0;
  86. recordalignmax : 16;
  87. maxCrecordalign : 4
  88. );
  89. first_parm_offset : 8;
  90. stacksize : 8*1024*1024;
  91. stackalign : 4;
  92. abi : abi_default;
  93. { note: default LLVM stack alignment is 16 bytes for this target }
  94. 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';
  95. );
  96. system_x86_6432_linux_info : tsysteminfo =
  97. (
  98. system : system_x86_6432_LINUX;
  99. name : 'Linux for x64_6432';
  100. shortname : 'Linux6432';
  101. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  102. tf_pic_uses_got,tf_smartlink_sections,
  103. tf_has_winlike_resources];
  104. cpu : cpu_x86_64;
  105. unit_env : 'LINUXUNITS';
  106. extradefines : 'UNIX;HASUNIX';
  107. exeext : '';
  108. defext : '.def';
  109. scriptext : '.sh';
  110. smartext : '.sl';
  111. unitext : '.ppu';
  112. unitlibext : '.ppl';
  113. asmext : '.s';
  114. objext : '.o';
  115. resext : '.res';
  116. resobjext : '.or';
  117. sharedlibext : '.so';
  118. staticlibext : '.a';
  119. staticlibprefix : 'libp';
  120. sharedlibprefix : 'lib';
  121. sharedClibext : '.so';
  122. staticClibext : '.a';
  123. staticClibprefix : 'lib';
  124. sharedClibprefix : 'lib';
  125. importlibprefix : 'libimp';
  126. importlibext : '.a';
  127. Cprefix : '';
  128. newline : #10;
  129. dirsep : '/';
  130. assem : as_i386_elf32;
  131. assemextern : as_gas;
  132. link : ld_none;
  133. linkextern : ld_linux;
  134. ar : ar_gnu_ar;
  135. res : res_elf;
  136. dbg : dbg_stabs;
  137. script : script_unix;
  138. endian : endian_little;
  139. alignment :
  140. (
  141. procalign : 16;
  142. loopalign : 4;
  143. jumpalign : 0;
  144. jumpalignmax : 0;
  145. coalescealign : 0;
  146. coalescealignmax: 0;
  147. constalignmin : 0;
  148. constalignmax : 16;
  149. varalignmin : 0;
  150. varalignmax : 16;
  151. localalignmin : 4;
  152. localalignmax : 8;
  153. recordalignmin : 0;
  154. recordalignmax : 16;
  155. maxCrecordalign : 4
  156. );
  157. first_parm_offset : 8;
  158. stacksize : 8*1024*1024;
  159. stackalign : 16;
  160. abi : abi_default;
  161. llvmdatalayout : 'todo';
  162. );
  163. system_m68k_linux_info : tsysteminfo =
  164. (
  165. system : system_m68k_linux;
  166. name : 'Linux for m68k';
  167. shortname : 'Linux';
  168. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  169. tf_smartlink_sections,tf_safecall_exceptions,tf_safecall_clearstack,
  170. tf_requires_proper_alignment, { Coldfire seems to need this at least (KB) }
  171. tf_has_winlike_resources];
  172. cpu : cpu_m68k;
  173. unit_env : 'LINUXUNITS';
  174. extradefines : 'UNIX;HASUNIX';
  175. exeext : '';
  176. defext : '';
  177. scriptext : '.sh';
  178. smartext : '.sl';
  179. unitext : '.ppu';
  180. unitlibext : '.ppl';
  181. asmext : '.s';
  182. objext : '.o';
  183. resext : '.res';
  184. resobjext : '.or';
  185. sharedlibext : '.so';
  186. staticlibext : '.a';
  187. staticlibprefix : 'libp';
  188. sharedlibprefix : 'lib';
  189. sharedClibext : '.so';
  190. staticClibext : '.a';
  191. staticClibprefix : 'lib';
  192. sharedClibprefix : 'lib';
  193. importlibprefix : 'libimp';
  194. importlibext : '.a';
  195. Cprefix : '';
  196. newline : #10;
  197. dirsep : '/';
  198. assem : as_gas;
  199. assemextern : as_gas;
  200. link : ld_none;
  201. linkextern : ld_linux;
  202. ar : ar_gnu_ar;
  203. res : res_elf;
  204. dbg : dbg_stabs;
  205. script : script_unix;
  206. endian : endian_big;
  207. alignment :
  208. (
  209. procalign : 4;
  210. loopalign : 4;
  211. jumpalign : 0;
  212. jumpalignmax : 0;
  213. coalescealign : 0;
  214. coalescealignmax: 0;
  215. constalignmin : 0;
  216. constalignmax : 4;
  217. varalignmin : 0;
  218. varalignmax : 4;
  219. localalignmin : 4;
  220. localalignmax : 4;
  221. recordalignmin : 0;
  222. recordalignmax : 4;
  223. maxCrecordalign : 2;
  224. );
  225. first_parm_offset : 8;
  226. stacksize : 32*1024*1024;
  227. stackalign : 4;
  228. abi : abi_default;
  229. llvmdatalayout : 'todo';
  230. );
  231. system_powerpc_linux_info : tsysteminfo =
  232. (
  233. system : system_powerpc_LINUX;
  234. name : 'Linux for PowerPC';
  235. shortname : 'Linux';
  236. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  237. tf_needs_symbol_type,tf_files_case_sensitive,
  238. tf_has_winlike_resources];
  239. cpu : cpu_powerpc;
  240. unit_env : '';
  241. extradefines : 'UNIX;HASUNIX';
  242. exeext : '';
  243. defext : '.def';
  244. scriptext : '.sh';
  245. smartext : '.sl';
  246. unitext : '.ppu';
  247. unitlibext : '.ppl';
  248. asmext : '.s';
  249. objext : '.o';
  250. resext : '.res';
  251. resobjext : '.or';
  252. sharedlibext : '.so';
  253. staticlibext : '.a';
  254. staticlibprefix : 'libp';
  255. sharedlibprefix : 'lib';
  256. sharedClibext : '.so';
  257. staticClibext : '.a';
  258. staticClibprefix : 'lib';
  259. sharedClibprefix : 'lib';
  260. importlibprefix : 'libimp';
  261. importlibext : '.a';
  262. Cprefix : '';
  263. newline : #10;
  264. dirsep : '/';
  265. assem : as_gas;
  266. assemextern : as_gas;
  267. link : ld_none;
  268. linkextern : ld_linux;
  269. ar : ar_gnu_ar;
  270. res : res_elf;
  271. dbg : dbg_stabs;
  272. script : script_unix;
  273. endian : endian_big;
  274. alignment :
  275. (
  276. procalign : 4;
  277. loopalign : 4;
  278. jumpalign : 0;
  279. jumpalignmax : 0;
  280. coalescealign : 0;
  281. coalescealignmax: 0;
  282. constalignmin : 0;
  283. constalignmax : 4;
  284. varalignmin : 0;
  285. varalignmax : 4;
  286. localalignmin : 4;
  287. localalignmax : 4;
  288. recordalignmin : 0;
  289. recordalignmax : 4;
  290. maxCrecordalign : 8
  291. );
  292. first_parm_offset : 8;
  293. stacksize : 32*1024*1024;
  294. stackalign : 16;
  295. abi : abi_powerpc_sysv;
  296. 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';
  297. );
  298. system_powerpc64_linux_info : tsysteminfo =
  299. (
  300. system : system_powerpc64_LINUX;
  301. name : 'Linux for PowerPC64';
  302. shortname : 'Linux';
  303. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  304. tf_requires_proper_alignment,tf_smartlink_sections,tf_has_winlike_resources];
  305. cpu : cpu_powerpc64;
  306. unit_env : '';
  307. extradefines : 'UNIX;HASUNIX';
  308. exeext : '';
  309. defext : '.def';
  310. scriptext : '.sh';
  311. smartext : '.sl';
  312. unitext : '.ppu';
  313. unitlibext : '.ppl';
  314. asmext : '.s';
  315. objext : '.o';
  316. resext : '.res';
  317. resobjext : '.or';
  318. sharedlibext : '.so';
  319. staticlibext : '.a';
  320. staticlibprefix : 'libp';
  321. sharedlibprefix : 'lib';
  322. sharedClibext : '.so';
  323. staticClibext : '.a';
  324. staticClibprefix : 'lib';
  325. sharedClibprefix : 'lib';
  326. importlibprefix : 'libimp';
  327. importlibext : '.a';
  328. Cprefix : '';
  329. newline : #10;
  330. dirsep : '/';
  331. assem : as_gas;
  332. assemextern : as_gas;
  333. link : ld_none;
  334. linkextern : ld_linux;
  335. ar : ar_gnu_ar;
  336. res : res_elf;
  337. dbg : dbg_dwarf2;
  338. script : script_unix;
  339. endian : endian_big;
  340. alignment :
  341. (
  342. procalign : 8;
  343. loopalign : 4;
  344. jumpalign : 0;
  345. jumpalignmax : 0;
  346. coalescealign : 0;
  347. coalescealignmax: 0;
  348. constalignmin : 4;
  349. constalignmax : 16;
  350. varalignmin : 4;
  351. varalignmax : 16;
  352. localalignmin : 0;
  353. localalignmax : 16;
  354. recordalignmin : 0;
  355. recordalignmax : 16;
  356. maxCrecordalign : 16
  357. );
  358. first_parm_offset : 8;
  359. stacksize : 10*1024*1024;
  360. stackalign : 16;
  361. abi : abi_powerpc_sysv;
  362. 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';
  363. );
  364. system_x86_64_linux_info : tsysteminfo =
  365. (
  366. system : system_x86_64_LINUX;
  367. name : 'Linux for x86-64';
  368. shortname : 'Linux';
  369. flags : [tf_smartlink_sections,tf_needs_symbol_size,tf_needs_dwarf_cfi,
  370. tf_library_needs_pic,tf_needs_symbol_type,tf_files_case_sensitive,
  371. tf_has_winlike_resources,tf_safecall_exceptions,tf_safecall_clearstack];
  372. cpu : cpu_x86_64;
  373. unit_env : 'LINUXUNITS';
  374. extradefines : 'UNIX;HASUNIX';
  375. exeext : '';
  376. defext : '.def';
  377. scriptext : '.sh';
  378. smartext : '.sl';
  379. unitext : '.ppu';
  380. unitlibext : '.ppl';
  381. asmext : '.s';
  382. objext : '.o';
  383. resext : '.res';
  384. resobjext : '.or';
  385. sharedlibext : '.so';
  386. staticlibext : '.a';
  387. staticlibprefix : 'libp';
  388. sharedlibprefix : 'lib';
  389. sharedClibext : '.so';
  390. staticClibext : '.a';
  391. staticClibprefix : 'lib';
  392. sharedClibprefix : 'lib';
  393. importlibprefix : 'libimp';
  394. importlibext : '.a';
  395. Cprefix : '';
  396. newline : #10;
  397. dirsep : '/';
  398. assem : as_x86_64_elf64;
  399. assemextern : as_gas;
  400. link : ld_none;
  401. linkextern : ld_linux;
  402. ar : ar_gnu_ar;
  403. res : res_elf;
  404. dbg : dbg_dwarf2;
  405. script : script_unix;
  406. endian : endian_little;
  407. alignment :
  408. (
  409. procalign : 16;
  410. loopalign : 8;
  411. jumpalign : 0;
  412. jumpalignmax : 0;
  413. coalescealign : 0;
  414. coalescealignmax: 0;
  415. constalignmin : 0;
  416. constalignmax : 8;
  417. varalignmin : 0;
  418. varalignmax : 16;
  419. localalignmin : 4;
  420. localalignmax : 16;
  421. recordalignmin : 0;
  422. recordalignmax : 16;
  423. maxCrecordalign : 16
  424. );
  425. first_parm_offset : 16;
  426. stacksize : 8*1024*1024;
  427. stackalign : 16;
  428. abi : abi_default;
  429. 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';
  430. );
  431. system_sparc_linux_info : tsysteminfo =
  432. (
  433. system : system_SPARC_Linux;
  434. name : 'Linux for SPARC';
  435. shortname : 'Linux';
  436. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  437. tf_needs_symbol_type,tf_files_case_sensitive,
  438. tf_pic_uses_got,
  439. tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
  440. tf_has_winlike_resources];
  441. cpu : cpu_SPARC;
  442. unit_env : 'LINUXUNITS';
  443. extradefines : 'UNIX;HASUNIX';
  444. exeext : '';
  445. defext : '.def';
  446. scriptext : '.sh';
  447. smartext : '.sl';
  448. unitext : '.ppu';
  449. unitlibext : '.ppl';
  450. asmext : '.s';
  451. objext : '.o';
  452. resext : '.res';
  453. resobjext : '.or';
  454. sharedlibext : '.so';
  455. staticlibext : '.a';
  456. staticlibprefix : 'libp';
  457. sharedlibprefix : 'lib';
  458. sharedClibext : '.so';
  459. staticClibext : '.a';
  460. staticClibprefix : 'lib';
  461. sharedClibprefix : 'lib';
  462. importlibprefix : 'libimp';
  463. importlibext : '.a';
  464. Cprefix : '';
  465. newline : #10;
  466. dirsep : '/';
  467. assem : as_gas;
  468. assemextern : as_gas;
  469. link : ld_none;
  470. linkextern : ld_linux;
  471. ar : ar_gnu_ar;
  472. res : res_elf;
  473. dbg : dbg_stabs;
  474. script : script_unix;
  475. endian : endian_big;
  476. alignment :
  477. (
  478. procalign : 4;
  479. loopalign : 4;
  480. jumpalign : 0;
  481. jumpalignmax : 0;
  482. coalescealign : 0;
  483. coalescealignmax: 0;
  484. constalignmin : 4;
  485. constalignmax : 8;
  486. varalignmin : 4;
  487. varalignmax : 8;
  488. localalignmin : 4;
  489. localalignmax : 8;
  490. recordalignmin : 0;
  491. recordalignmax : 8;
  492. maxCrecordalign : 8
  493. );
  494. first_parm_offset : 92;
  495. stacksize : 8*1024*1024;
  496. stackalign : 8;
  497. abi : abi_default;
  498. 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';
  499. );
  500. system_sparc64_linux_info : tsysteminfo =
  501. (
  502. system : system_SPARC64_Linux;
  503. name : 'Linux for SPARC64';
  504. shortname : 'Linux';
  505. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
  506. tf_needs_symbol_type,tf_files_case_sensitive,
  507. tf_pic_uses_got,
  508. tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
  509. tf_has_winlike_resources];
  510. cpu : cpu_SPARC64;
  511. unit_env : 'LINUXUNITS';
  512. extradefines : 'UNIX;HASUNIX';
  513. exeext : '';
  514. defext : '.def';
  515. scriptext : '.sh';
  516. smartext : '.sl';
  517. unitext : '.ppu';
  518. unitlibext : '.ppl';
  519. asmext : '.s';
  520. objext : '.o';
  521. resext : '.res';
  522. resobjext : '.or';
  523. sharedlibext : '.so';
  524. staticlibext : '.a';
  525. staticlibprefix : 'libp';
  526. sharedlibprefix : 'lib';
  527. sharedClibext : '.so';
  528. staticClibext : '.a';
  529. staticClibprefix : 'lib';
  530. sharedClibprefix : 'lib';
  531. importlibprefix : 'libimp';
  532. importlibext : '.a';
  533. Cprefix : '';
  534. newline : #10;
  535. dirsep : '/';
  536. assem : as_gas;
  537. assemextern : as_gas;
  538. link : ld_none;
  539. linkextern : ld_linux;
  540. ar : ar_gnu_ar;
  541. res : res_elf;
  542. dbg : dbg_dwarf2;
  543. script : script_unix;
  544. endian : endian_big;
  545. alignment :
  546. (
  547. procalign : 16;
  548. loopalign : 8;
  549. jumpalign : 0;
  550. jumpalignmax : 0;
  551. coalescealign : 0;
  552. coalescealignmax: 0;
  553. constalignmin : 4;
  554. constalignmax : 16;
  555. varalignmin : 4;
  556. varalignmax : 16;
  557. localalignmin : 4;
  558. localalignmax : 16;
  559. recordalignmin : 0;
  560. recordalignmax : 16;
  561. maxCrecordalign : 16
  562. );
  563. first_parm_offset : 176;
  564. stacksize : 16*1024*1024;
  565. stackalign : 16;
  566. abi : abi_default;
  567. 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';
  568. );
  569. {$ifdef FPC_ARMHF}
  570. system_arm_linux_info : tsysteminfo =
  571. (
  572. system : system_arm_Linux;
  573. name : 'Linux for ARMHF';
  574. shortname : 'Linux';
  575. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  576. tf_requires_proper_alignment,tf_section_threadvars,
  577. tf_smartlink_sections,tf_pic_uses_got,
  578. tf_has_winlike_resources];
  579. cpu : cpu_arm;
  580. unit_env : 'LINUXUNITS';
  581. extradefines : 'UNIX;HASUNIX;CPUARMHF';
  582. exeext : '';
  583. defext : '.def';
  584. scriptext : '.sh';
  585. smartext : '.sl';
  586. unitext : '.ppu';
  587. unitlibext : '.ppl';
  588. asmext : '.s';
  589. objext : '.o';
  590. resext : '.res';
  591. resobjext : '.or';
  592. sharedlibext : '.so';
  593. staticlibext : '.a';
  594. staticlibprefix : 'libp';
  595. sharedlibprefix : 'lib';
  596. sharedClibext : '.so';
  597. staticClibext : '.a';
  598. staticClibprefix : 'lib';
  599. sharedClibprefix : 'lib';
  600. importlibprefix : 'libimp';
  601. importlibext : '.a';
  602. Cprefix : '';
  603. newline : #10;
  604. dirsep : '/';
  605. assem : as_arm_elf32;
  606. assemextern : as_gas;
  607. link : ld_none;
  608. linkextern : ld_linux;
  609. ar : ar_gnu_ar;
  610. res : res_elf;
  611. dbg : dbg_stabs;
  612. script : script_unix;
  613. endian : endian_little;
  614. alignment :
  615. (
  616. procalign : 4;
  617. loopalign : 4;
  618. jumpalign : 0;
  619. jumpalignmax : 0;
  620. coalescealign : 0;
  621. coalescealignmax: 0;
  622. constalignmin : 0;
  623. constalignmax : 8;
  624. varalignmin : 0;
  625. varalignmax : 8;
  626. localalignmin : 4;
  627. localalignmax : 8;
  628. recordalignmin : 0;
  629. recordalignmax : 8;
  630. maxCrecordalign : 8
  631. );
  632. first_parm_offset : 8;
  633. stacksize : 8*1024*1024;
  634. stackalign : 8;
  635. abi : abi_eabihf;
  636. 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';
  637. );
  638. {$else FPC_ARMHF}
  639. {$ifdef FPC_ARMEL}
  640. system_arm_linux_info : tsysteminfo =
  641. (
  642. system : system_arm_Linux;
  643. name : 'Linux for ARMEL';
  644. shortname : 'Linux';
  645. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  646. tf_requires_proper_alignment,
  647. {$ifdef tls_threadvars}
  648. tf_section_threadvars,
  649. {$endif tls_threadvars}
  650. tf_smartlink_sections,tf_pic_uses_got,
  651. tf_has_winlike_resources];
  652. cpu : cpu_arm;
  653. unit_env : 'LINUXUNITS';
  654. extradefines : 'UNIX;HASUNIX;CPUARMEL';
  655. exeext : '';
  656. defext : '.def';
  657. scriptext : '.sh';
  658. smartext : '.sl';
  659. unitext : '.ppu';
  660. unitlibext : '.ppl';
  661. asmext : '.s';
  662. objext : '.o';
  663. resext : '.res';
  664. resobjext : '.or';
  665. sharedlibext : '.so';
  666. staticlibext : '.a';
  667. staticlibprefix : 'libp';
  668. sharedlibprefix : 'lib';
  669. sharedClibext : '.so';
  670. staticClibext : '.a';
  671. staticClibprefix : 'lib';
  672. sharedClibprefix : 'lib';
  673. importlibprefix : 'libimp';
  674. importlibext : '.a';
  675. Cprefix : '';
  676. newline : #10;
  677. dirsep : '/';
  678. assem : as_arm_elf32;
  679. assemextern : as_gas;
  680. link : ld_none;
  681. linkextern : ld_linux;
  682. ar : ar_gnu_ar;
  683. res : res_elf;
  684. dbg : dbg_stabs;
  685. script : script_unix;
  686. endian : endian_little;
  687. alignment :
  688. (
  689. procalign : 4;
  690. loopalign : 4;
  691. jumpalign : 0;
  692. jumpalignmax : 0;
  693. coalescealign : 0;
  694. coalescealignmax: 0;
  695. constalignmin : 0;
  696. constalignmax : 8;
  697. varalignmin : 0;
  698. varalignmax : 8;
  699. localalignmin : 4;
  700. localalignmax : 8;
  701. recordalignmin : 0;
  702. recordalignmax : 8;
  703. maxCrecordalign : 8
  704. );
  705. first_parm_offset : 8;
  706. stacksize : 8*1024*1024;
  707. stackalign : 8;
  708. abi : abi_eabi;
  709. 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';
  710. );
  711. {$else FPC_ARMEL}
  712. {$ifdef FPC_ARMEB}
  713. system_arm_linux_info : tsysteminfo =
  714. (
  715. system : system_arm_Linux;
  716. name : 'Linux for ARMEB';
  717. shortname : 'Linux';
  718. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  719. tf_requires_proper_alignment,
  720. tf_smartlink_sections,tf_pic_uses_got,
  721. tf_has_winlike_resources];
  722. cpu : cpu_arm;
  723. unit_env : 'LINUXUNITS';
  724. extradefines : 'UNIX;HASUNIX;CPUARMEB';
  725. exeext : '';
  726. defext : '.def';
  727. scriptext : '.sh';
  728. smartext : '.sl';
  729. unitext : '.ppu';
  730. unitlibext : '.ppl';
  731. asmext : '.s';
  732. objext : '.o';
  733. resext : '.res';
  734. resobjext : '.or';
  735. sharedlibext : '.so';
  736. staticlibext : '.a';
  737. staticlibprefix : 'libp';
  738. sharedlibprefix : 'lib';
  739. sharedClibext : '.so';
  740. staticClibext : '.a';
  741. staticClibprefix : 'lib';
  742. sharedClibprefix : 'lib';
  743. importlibprefix : 'libimp';
  744. importlibext : '.a';
  745. Cprefix : '';
  746. newline : #10;
  747. dirsep : '/';
  748. assem : as_gas;
  749. assemextern : as_gas;
  750. link : ld_none;
  751. linkextern : ld_linux;
  752. ar : ar_gnu_ar;
  753. res : res_elf;
  754. dbg : dbg_stabs;
  755. script : script_unix;
  756. endian : endian_big;
  757. alignment :
  758. (
  759. procalign : 4;
  760. loopalign : 4;
  761. jumpalign : 0;
  762. jumpalignmax : 0;
  763. coalescealign : 0;
  764. coalescealignmax: 0;
  765. constalignmin : 0;
  766. constalignmax : 4;
  767. varalignmin : 0;
  768. varalignmax : 4;
  769. localalignmin : 4;
  770. localalignmax : 8;
  771. recordalignmin : 0;
  772. recordalignmax : 4;
  773. maxCrecordalign : 4
  774. );
  775. first_parm_offset : 8;
  776. stacksize : 8*1024*1024;
  777. stackalign : 4;
  778. abi : abi_default;
  779. llvmdatalayout: 'todo';
  780. );
  781. {$else FPC_ARMEB}
  782. system_arm_linux_info : tsysteminfo =
  783. (
  784. system : system_arm_Linux;
  785. name : 'Linux for ARM';
  786. shortname : 'Linux';
  787. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  788. tf_requires_proper_alignment,
  789. tf_smartlink_sections,tf_has_winlike_resources];
  790. cpu : cpu_arm;
  791. unit_env : 'LINUXUNITS';
  792. extradefines : 'UNIX;HASUNIX';
  793. exeext : '';
  794. defext : '.def';
  795. scriptext : '.sh';
  796. smartext : '.sl';
  797. unitext : '.ppu';
  798. unitlibext : '.ppl';
  799. asmext : '.s';
  800. objext : '.o';
  801. resext : '.res';
  802. resobjext : '.or';
  803. sharedlibext : '.so';
  804. staticlibext : '.a';
  805. staticlibprefix : 'libp';
  806. sharedlibprefix : 'lib';
  807. sharedClibext : '.so';
  808. staticClibext : '.a';
  809. staticClibprefix : 'lib';
  810. sharedClibprefix : 'lib';
  811. importlibprefix : 'libimp';
  812. importlibext : '.a';
  813. Cprefix : '';
  814. newline : #10;
  815. dirsep : '/';
  816. assem : as_gas;
  817. assemextern : as_gas;
  818. link : ld_none;
  819. linkextern : ld_linux;
  820. ar : ar_gnu_ar;
  821. res : res_elf;
  822. dbg : dbg_stabs;
  823. script : script_unix;
  824. endian : endian_little;
  825. alignment :
  826. (
  827. procalign : 4;
  828. loopalign : 4;
  829. jumpalign : 0;
  830. jumpalignmax : 0;
  831. coalescealign : 0;
  832. coalescealignmax: 0;
  833. constalignmin : 0;
  834. constalignmax : 4;
  835. varalignmin : 0;
  836. varalignmax : 4;
  837. localalignmin : 4;
  838. localalignmax : 4;
  839. recordalignmin : 0;
  840. recordalignmax : 4;
  841. maxCrecordalign : 4
  842. );
  843. first_parm_offset : 8;
  844. stacksize : 8*1024*1024;
  845. stackalign : 4;
  846. abi : abi_default;
  847. 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';
  848. );
  849. {$endif FPC_ARMEB}
  850. {$endif FPC_ARMEL}
  851. {$endif FPC_ARMHF}
  852. system_aarch64_linux_info : tsysteminfo =
  853. (
  854. system : system_aarch64_linux;
  855. name : 'Linux for AArch64';
  856. shortname : 'Linux';
  857. flags : [tf_needs_symbol_size,
  858. tf_needs_symbol_type,
  859. tf_files_case_sensitive,
  860. tf_requires_proper_alignment,
  861. tf_smartlink_sections,tf_pic_uses_got,
  862. tf_has_winlike_resources];
  863. cpu : cpu_aarch64;
  864. unit_env : 'LINUXUNITS';
  865. extradefines : 'UNIX;HASUNIX';
  866. exeext : '';
  867. defext : '.def';
  868. scriptext : '.sh';
  869. smartext : '.sl';
  870. unitext : '.ppu';
  871. unitlibext : '.ppl';
  872. asmext : '.s';
  873. objext : '.o';
  874. resext : '.res';
  875. resobjext : '.or';
  876. sharedlibext : '.so';
  877. staticlibext : '.a';
  878. staticlibprefix : 'libp';
  879. sharedlibprefix : 'lib';
  880. sharedClibext : '.so';
  881. staticClibext : '.a';
  882. staticClibprefix : 'lib';
  883. sharedClibprefix : 'lib';
  884. importlibprefix : 'libimp';
  885. importlibext : '.a';
  886. Cprefix : '';
  887. newline : #10;
  888. dirsep : '/';
  889. assem : as_gas;
  890. assemextern : as_gas;
  891. link : ld_none;
  892. linkextern : ld_linux;
  893. ar : ar_gnu_ar;
  894. res : res_elf;
  895. dbg : dbg_dwarf2;
  896. script : script_unix;
  897. endian : endian_little;
  898. alignment :
  899. (
  900. procalign : 8;
  901. loopalign : 4;
  902. jumpalign : 0;
  903. jumpalignmax : 0;
  904. coalescealign : 0;
  905. coalescealignmax: 0;
  906. constalignmin : 0;
  907. constalignmax : 8;
  908. varalignmin : 0;
  909. varalignmax : 16;
  910. localalignmin : 4;
  911. localalignmax : 16;
  912. recordalignmin : 0;
  913. recordalignmax : 16;
  914. maxCrecordalign : 16
  915. );
  916. first_parm_offset : 16;
  917. stacksize : 8*1024*1024;
  918. stackalign : 16;
  919. abi : abi_default;
  920. 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'
  921. );
  922. system_mipseb_linux_info : tsysteminfo =
  923. (
  924. system : system_mipseb_LINUX;
  925. name : 'Linux for MIPSEB';
  926. shortname : 'Linux';
  927. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  928. tf_requires_proper_alignment,tf_library_needs_pic,
  929. tf_pic_uses_got,tf_safecall_exceptions,
  930. tf_smartlink_sections,tf_has_winlike_resources];
  931. cpu : cpu_mipseb;
  932. unit_env : 'LINUXUNITS';
  933. extradefines : 'UNIX;HASUNIX';
  934. exeext : '';
  935. defext : '.def';
  936. scriptext : '.sh';
  937. smartext : '.sl';
  938. unitext : '.ppu';
  939. unitlibext : '.ppl';
  940. asmext : '.s';
  941. objext : '.o';
  942. resext : '.res';
  943. resobjext : '.or';
  944. sharedlibext : '.so';
  945. staticlibext : '.a';
  946. staticlibprefix : 'libp';
  947. sharedlibprefix : 'lib';
  948. sharedClibext : '.so';
  949. staticClibext : '.a';
  950. staticClibprefix : 'lib';
  951. sharedClibprefix : 'lib';
  952. importlibprefix : 'libimp';
  953. importlibext : '.a';
  954. // p_ext_support : false;
  955. Cprefix : '';
  956. newline : #10;
  957. dirsep : '/';
  958. assem : as_gas;
  959. assemextern : as_gas;
  960. link : ld_none;
  961. linkextern : ld_linux;
  962. ar : ar_gnu_ar;
  963. res : res_elf;
  964. dbg : dbg_stabs;
  965. script : script_unix;
  966. endian : endian_big;
  967. alignment :
  968. (
  969. procalign : 4;
  970. loopalign : 4;
  971. jumpalign : 0;
  972. jumpalignmax : 0;
  973. coalescealign : 0;
  974. coalescealignmax: 0;
  975. constalignmin : 0;
  976. constalignmax : 8;
  977. varalignmin : 0;
  978. varalignmax : 8;
  979. localalignmin : 4;
  980. localalignmax : 8;
  981. recordalignmin : 0;
  982. recordalignmax : 8;
  983. maxCrecordalign : 8
  984. );
  985. first_parm_offset : 0;
  986. stacksize : 32*1024*1024;
  987. stackalign : 8;
  988. abi : abi_default;
  989. 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';
  990. );
  991. system_mipsel_linux_info : tsysteminfo =
  992. (
  993. system : system_mipsel_LINUX;
  994. name : 'Linux for MIPSEL';
  995. shortname : 'Linux';
  996. flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
  997. tf_requires_proper_alignment,tf_library_needs_pic,
  998. tf_pic_uses_got,tf_safecall_exceptions,
  999. tf_smartlink_sections,tf_has_winlike_resources];
  1000. cpu : cpu_mipsel;
  1001. unit_env : 'LINUXUNITS';
  1002. extradefines : 'UNIX;HASUNIX';
  1003. exeext : '';
  1004. defext : '.def';
  1005. scriptext : '.sh';
  1006. smartext : '.sl';
  1007. unitext : '.ppu';
  1008. unitlibext : '.ppl';
  1009. asmext : '.s';
  1010. objext : '.o';
  1011. resext : '.res';
  1012. resobjext : '.or';
  1013. sharedlibext : '.so';
  1014. staticlibext : '.a';
  1015. staticlibprefix : 'libp';
  1016. sharedlibprefix : 'lib';
  1017. sharedClibext : '.so';
  1018. staticClibext : '.a';
  1019. staticClibprefix : 'lib';
  1020. sharedClibprefix : 'lib';
  1021. importlibprefix : 'libimp';
  1022. importlibext : '.a';
  1023. // p_ext_support : false;
  1024. Cprefix : '';
  1025. newline : #10;
  1026. dirsep : '/';
  1027. assem : as_gas;
  1028. assemextern : as_gas;
  1029. link : ld_none;
  1030. linkextern : ld_linux;
  1031. ar : ar_gnu_ar;
  1032. res : res_elf;
  1033. dbg : dbg_stabs;
  1034. script : script_unix;
  1035. endian : endian_little;
  1036. alignment :
  1037. (
  1038. procalign : 4;
  1039. loopalign : 4;
  1040. jumpalign : 0;
  1041. jumpalignmax : 0;
  1042. coalescealign : 0;
  1043. coalescealignmax: 0;
  1044. constalignmin : 0;
  1045. constalignmax : 8;
  1046. varalignmin : 0;
  1047. varalignmax : 8;
  1048. localalignmin : 4;
  1049. localalignmax : 8;
  1050. recordalignmin : 0;
  1051. recordalignmax : 8;
  1052. maxCrecordalign : 8
  1053. );
  1054. first_parm_offset : 0;
  1055. stacksize : 32*1024*1024;
  1056. stackalign : 8;
  1057. abi : abi_default;
  1058. 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';
  1059. );
  1060. system_riscv32_linux_info : tsysteminfo =
  1061. (
  1062. system : system_riscv32_linux;
  1063. name : 'Linux for RISC-V 32';
  1064. shortname : 'Linux';
  1065. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  1066. tf_needs_symbol_type,tf_files_case_sensitive,
  1067. tf_requires_proper_alignment,tf_has_winlike_resources];
  1068. cpu : cpu_riscv32;
  1069. unit_env : 'LINUXUNITS';
  1070. extradefines : 'UNIX;HASUNIX';
  1071. exeext : '';
  1072. defext : '.def';
  1073. scriptext : '.sh';
  1074. smartext : '.sl';
  1075. unitext : '.ppu';
  1076. unitlibext : '.ppl';
  1077. asmext : '.s';
  1078. objext : '.o';
  1079. resext : '.res';
  1080. resobjext : '.or';
  1081. sharedlibext : '.so';
  1082. staticlibext : '.a';
  1083. staticlibprefix : 'libp';
  1084. sharedlibprefix : 'lib';
  1085. sharedClibext : '.so';
  1086. staticClibext : '.a';
  1087. staticClibprefix : 'lib';
  1088. sharedClibprefix : 'lib';
  1089. importlibprefix : 'libimp';
  1090. importlibext : '.a';
  1091. // p_ext_support : false;
  1092. Cprefix : '';
  1093. newline : #10;
  1094. dirsep : '/';
  1095. assem : as_gas;
  1096. assemextern : as_gas;
  1097. link : ld_none;
  1098. linkextern : ld_linux;
  1099. ar : ar_gnu_ar;
  1100. res : res_elf;
  1101. dbg : dbg_stabs;
  1102. script : script_unix;
  1103. endian : endian_little;
  1104. alignment :
  1105. (
  1106. procalign : 4;
  1107. loopalign : 4;
  1108. jumpalign : 0;
  1109. jumpalignmax : 0;
  1110. coalescealign : 0;
  1111. coalescealignmax: 0;
  1112. constalignmin : 0;
  1113. constalignmax : 8;
  1114. varalignmin : 0;
  1115. varalignmax : 8;
  1116. localalignmin : 4;
  1117. localalignmax : 8;
  1118. recordalignmin : 0;
  1119. recordalignmax : 8;
  1120. maxCrecordalign : 8
  1121. );
  1122. first_parm_offset : 0;
  1123. stacksize : 32*1024*1024;
  1124. stackalign : 8;
  1125. abi : abi_riscv_hf;
  1126. 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';
  1127. );
  1128. system_riscv64_linux_info : tsysteminfo =
  1129. (
  1130. system : system_riscv64_linux;
  1131. name : 'Linux for RISC-V 64';
  1132. shortname : 'Linux';
  1133. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  1134. tf_needs_symbol_type,tf_files_case_sensitive,
  1135. tf_requires_proper_alignment,tf_has_winlike_resources];
  1136. cpu : cpu_riscv64;
  1137. unit_env : 'LINUXUNITS';
  1138. extradefines : 'UNIX;HASUNIX';
  1139. exeext : '';
  1140. defext : '.def';
  1141. scriptext : '.sh';
  1142. smartext : '.sl';
  1143. unitext : '.ppu';
  1144. unitlibext : '.ppl';
  1145. asmext : '.s';
  1146. objext : '.o';
  1147. resext : '.res';
  1148. resobjext : '.or';
  1149. sharedlibext : '.so';
  1150. staticlibext : '.a';
  1151. staticlibprefix : 'libp';
  1152. sharedlibprefix : 'lib';
  1153. sharedClibext : '.so';
  1154. staticClibext : '.a';
  1155. staticClibprefix : 'lib';
  1156. sharedClibprefix : 'lib';
  1157. importlibprefix : 'libimp';
  1158. importlibext : '.a';
  1159. // p_ext_support : false;
  1160. Cprefix : '';
  1161. newline : #10;
  1162. dirsep : '/';
  1163. assem : as_gas;
  1164. assemextern : as_gas;
  1165. link : ld_none;
  1166. linkextern : ld_linux;
  1167. ar : ar_gnu_ar;
  1168. res : res_elf;
  1169. dbg : dbg_dwarf2;
  1170. script : script_unix;
  1171. endian : endian_little;
  1172. alignment :
  1173. (
  1174. procalign : 8;
  1175. loopalign : 4;
  1176. jumpalign : 0;
  1177. jumpalignmax : 0;
  1178. coalescealign : 0;
  1179. coalescealignmax: 0;
  1180. constalignmin : 4;
  1181. constalignmax : 16;
  1182. varalignmin : 4;
  1183. varalignmax : 16;
  1184. localalignmin : 8;
  1185. localalignmax : 16;
  1186. recordalignmin : 0;
  1187. recordalignmax : 16;
  1188. maxCrecordalign : 16
  1189. );
  1190. first_parm_offset : 16;
  1191. stacksize : 10*1024*1024;
  1192. stackalign : 16;
  1193. abi : abi_riscv_hf;
  1194. 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';
  1195. );
  1196. implementation
  1197. initialization
  1198. {$ifdef CPUI386}
  1199. {$ifdef linux}
  1200. { some FreeBSD versions define linux as well }
  1201. {$ifndef FreeBSD}
  1202. set_source_info(system_i386_linux_info);
  1203. {$endif FreeBSD}
  1204. {$endif}
  1205. {$endif CPUI386}
  1206. {$ifdef CPU68}
  1207. {$ifdef linux}
  1208. set_source_info(system_m68k_linux_info);
  1209. {$endif linux}
  1210. {$endif CPU68}
  1211. {$ifdef CPUX86_64}
  1212. {$ifdef linux}
  1213. set_source_info(system_x86_64_linux_info);
  1214. {$endif linux}
  1215. {$endif CPUX86_64}
  1216. {$ifdef CPUSPARC}
  1217. {$ifdef linux}
  1218. set_source_info(system_sparc_linux_info);
  1219. {$endif linux}
  1220. {$endif CPUSPARC}
  1221. {$ifdef CPUSPARC64}
  1222. {$ifdef linux}
  1223. set_source_info(system_sparc64_linux_info);
  1224. {$endif linux}
  1225. {$endif CPUSPARC64}
  1226. {$ifdef CPUPOWERPC32}
  1227. {$ifdef linux}
  1228. set_source_info(system_powerpc_linux_info);
  1229. {$endif linux}
  1230. {$endif CPUPOWERPC32}
  1231. {$ifdef CPUPOWERPC64}
  1232. {$ifdef linux}
  1233. set_source_info(system_powerpc64_linux_info);
  1234. { on a little endian PPC64 platform -> source is elfv2 }
  1235. {$ifdef FPC_LITTLE_ENDIAN}
  1236. source_info.endian:=endian_little;
  1237. source_info.abi:=abi_powerpc_elfv2;
  1238. {$endif}
  1239. {$endif linux}
  1240. {$endif CPUPOWERPC64}
  1241. {$ifdef CPUARM}
  1242. {$ifdef linux}
  1243. set_source_info(system_arm_linux_info);
  1244. {$endif linux}
  1245. {$endif CPUARM}
  1246. {$ifdef cpuaarch64}
  1247. {$ifdef linux}
  1248. set_source_info(system_aarch64_linux_info);
  1249. {$endif linux}
  1250. {$endif cpuaarch64}
  1251. {$ifdef CPUMIPSEB}
  1252. {$ifdef linux}
  1253. set_source_info(system_mipseb_linux_info);
  1254. {$endif linux}
  1255. {$endif CPUMIPSEB}
  1256. {$ifdef CPUMIPSEL}
  1257. {$ifdef linux}
  1258. set_source_info(system_mipsel_linux_info);
  1259. {$endif linux}
  1260. {$endif CPUMIPSEL}
  1261. {$ifdef CPURISCV32}
  1262. {$ifdef linux}
  1263. set_source_info(system_riscv32_linux_info);
  1264. {$endif linux}
  1265. {$endif CPURISCV32}
  1266. {$ifdef CPURISCV64}
  1267. {$ifdef linux}
  1268. set_source_info(system_riscv64_linux_info);
  1269. {$endif linux}
  1270. {$endif CPURISCV64}
  1271. end.