i_linux.pas 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548
  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_dwarf2;
  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 : 16;
  85. varalignmin : 0;
  86. varalignmax : 16;
  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_stabs;
  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_dwarf2;
  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 : 16;
  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_dwarf2;
  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 : 16;
  644. varalignmin : 0;
  645. varalignmax : 16;
  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 : 16;
  717. varalignmin : 0;
  718. varalignmax : 16;
  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 : 16;
  787. varalignmin : 0;
  788. varalignmax : 16;
  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 : 16;
  855. varalignmin : 0;
  856. varalignmax : 16;
  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 : 16;
  933. varalignmin : 0;
  934. varalignmax : 16;
  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_stabs;
  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_dwarf4;
  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_supports_hidden_symbols];
  1232. cpu : cpu_riscv32;
  1233. unit_env : 'LINUXUNITS';
  1234. extradefines : 'UNIX;HASUNIX';
  1235. exeext : '';
  1236. defext : '.def';
  1237. scriptext : '.sh';
  1238. smartext : '.sl';
  1239. unitext : '.ppu';
  1240. unitlibext : '.ppl';
  1241. asmext : '.s';
  1242. objext : '.o';
  1243. resext : '.res';
  1244. resobjext : '.or';
  1245. sharedlibext : '.so';
  1246. staticlibext : '.a';
  1247. staticlibprefix : 'libp';
  1248. sharedlibprefix : 'lib';
  1249. sharedClibext : '.so';
  1250. staticClibext : '.a';
  1251. staticClibprefix : 'lib';
  1252. sharedClibprefix : 'lib';
  1253. importlibprefix : 'libimp';
  1254. importlibext : '.a';
  1255. // p_ext_support : false;
  1256. Cprefix : '';
  1257. newline : #10;
  1258. dirsep : '/';
  1259. assem : as_gas;
  1260. assemextern : as_gas;
  1261. link : ld_none;
  1262. linkextern : ld_linux;
  1263. ar : ar_gnu_ar;
  1264. res : res_elf;
  1265. dbg : dbg_dwarf3;
  1266. script : script_unix;
  1267. endian : endian_little;
  1268. alignment :
  1269. (
  1270. procalign : 4;
  1271. loopalign : 4;
  1272. jumpalign : 0;
  1273. jumpalignskipmax : 0;
  1274. coalescealign : 0;
  1275. coalescealignskipmax: 0;
  1276. constalignmin : 0;
  1277. constalignmax : 8;
  1278. varalignmin : 0;
  1279. varalignmax : 8;
  1280. localalignmin : 4;
  1281. localalignmax : 8;
  1282. recordalignmin : 0;
  1283. recordalignmax : 8;
  1284. maxCrecordalign : 8
  1285. );
  1286. first_parm_offset : 0;
  1287. stacksize : 32*1024*1024;
  1288. stackalign : 8;
  1289. abi : abi_riscv_hf;
  1290. 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';
  1291. );
  1292. system_riscv64_linux_info : tsysteminfo =
  1293. (
  1294. system : system_riscv64_linux;
  1295. name : 'Linux for RISC-V 64';
  1296. shortname : 'Linux';
  1297. flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,tf_needs_dwarf_cfi,
  1298. tf_needs_symbol_type,tf_files_case_sensitive,
  1299. tf_requires_proper_alignment,tf_has_winlike_resources,
  1300. tf_supports_hidden_symbols
  1301. ];
  1302. cpu : cpu_riscv64;
  1303. unit_env : 'LINUXUNITS';
  1304. extradefines : 'UNIX;HASUNIX';
  1305. exeext : '';
  1306. defext : '.def';
  1307. scriptext : '.sh';
  1308. smartext : '.sl';
  1309. unitext : '.ppu';
  1310. unitlibext : '.ppl';
  1311. asmext : '.s';
  1312. objext : '.o';
  1313. resext : '.res';
  1314. resobjext : '.or';
  1315. sharedlibext : '.so';
  1316. staticlibext : '.a';
  1317. staticlibprefix : 'libp';
  1318. sharedlibprefix : 'lib';
  1319. sharedClibext : '.so';
  1320. staticClibext : '.a';
  1321. staticClibprefix : 'lib';
  1322. sharedClibprefix : 'lib';
  1323. importlibprefix : 'libimp';
  1324. importlibext : '.a';
  1325. // p_ext_support : false;
  1326. Cprefix : '';
  1327. newline : #10;
  1328. dirsep : '/';
  1329. assem : as_gas;
  1330. assemextern : as_gas;
  1331. link : ld_none;
  1332. linkextern : ld_linux;
  1333. ar : ar_gnu_ar;
  1334. res : res_elf;
  1335. dbg : dbg_dwarf3;
  1336. script : script_unix;
  1337. endian : endian_little;
  1338. alignment :
  1339. (
  1340. procalign : 8;
  1341. loopalign : 4;
  1342. jumpalign : 0;
  1343. jumpalignskipmax : 0;
  1344. coalescealign : 0;
  1345. coalescealignskipmax: 0;
  1346. constalignmin : 4;
  1347. constalignmax : 16;
  1348. varalignmin : 4;
  1349. varalignmax : 16;
  1350. localalignmin : 8;
  1351. localalignmax : 16;
  1352. recordalignmin : 0;
  1353. recordalignmax : 16;
  1354. maxCrecordalign : 16
  1355. );
  1356. first_parm_offset : 16;
  1357. stacksize : 10*1024*1024;
  1358. stackalign : 16;
  1359. abi : abi_riscv_hf;
  1360. 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';
  1361. );
  1362. system_xtensa_linux_info : tsysteminfo =
  1363. (
  1364. system : system_xtensa_linux;
  1365. name : 'Linux for Xtensa';
  1366. shortname : 'Linux';
  1367. flags : [tf_needs_symbol_size,tf_smartlink_sections,
  1368. tf_needs_symbol_type,tf_files_case_sensitive,
  1369. tf_requires_proper_alignment,tf_has_winlike_resources,
  1370. tf_supports_hidden_symbols];
  1371. cpu : cpu_xtensa;
  1372. unit_env : 'LINUXUNITS';
  1373. extradefines : 'UNIX;HASUNIX';
  1374. exeext : '';
  1375. defext : '.def';
  1376. scriptext : '.sh';
  1377. smartext : '.sl';
  1378. unitext : '.ppu';
  1379. unitlibext : '.ppl';
  1380. asmext : '.s';
  1381. objext : '.o';
  1382. resext : '.res';
  1383. resobjext : '.or';
  1384. sharedlibext : '.so';
  1385. staticlibext : '.a';
  1386. staticlibprefix : 'libp';
  1387. sharedlibprefix : 'lib';
  1388. sharedClibext : '.so';
  1389. staticClibext : '.a';
  1390. staticClibprefix : 'lib';
  1391. sharedClibprefix : 'lib';
  1392. importlibprefix : 'libimp';
  1393. importlibext : '.a';
  1394. // p_ext_support : false;
  1395. Cprefix : '';
  1396. newline : #10;
  1397. dirsep : '/';
  1398. assem : as_gas;
  1399. assemextern : as_gas;
  1400. link : ld_none;
  1401. linkextern : ld_linux;
  1402. ar : ar_gnu_ar;
  1403. res : res_elf;
  1404. dbg : dbg_dwarf2;
  1405. script : script_unix;
  1406. endian : endian_little;
  1407. alignment :
  1408. (
  1409. procalign : 4;
  1410. loopalign : 4;
  1411. jumpalign : 0;
  1412. jumpalignskipmax : 0;
  1413. coalescealign : 0;
  1414. coalescealignskipmax: 0;
  1415. constalignmin : 0;
  1416. constalignmax : 8;
  1417. varalignmin : 0;
  1418. varalignmax : 8;
  1419. localalignmin : 4;
  1420. localalignmax : 16;
  1421. recordalignmin : 0;
  1422. recordalignmax : 8;
  1423. maxCrecordalign : 8
  1424. );
  1425. first_parm_offset : 0;
  1426. stacksize : 32*1024*1024;
  1427. stackalign : 16;
  1428. abi : abi_xtensa_windowed;
  1429. 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';
  1430. );
  1431. implementation
  1432. initialization
  1433. {$ifdef CPUI386}
  1434. {$ifdef linux}
  1435. { some FreeBSD versions define linux as well }
  1436. {$ifndef FreeBSD}
  1437. set_source_info(system_i386_linux_info);
  1438. {$endif FreeBSD}
  1439. {$endif}
  1440. {$endif CPUI386}
  1441. {$ifdef CPU68}
  1442. {$ifdef linux}
  1443. set_source_info(system_m68k_linux_info);
  1444. {$endif linux}
  1445. {$endif CPU68}
  1446. {$ifdef CPUX86_64}
  1447. {$ifdef linux}
  1448. set_source_info(system_x86_64_linux_info);
  1449. {$endif linux}
  1450. {$endif CPUX86_64}
  1451. {$ifdef CPUSPARC}
  1452. {$ifdef linux}
  1453. set_source_info(system_sparc_linux_info);
  1454. {$endif linux}
  1455. {$endif CPUSPARC}
  1456. {$ifdef CPUSPARC64}
  1457. {$ifdef linux}
  1458. set_source_info(system_sparc64_linux_info);
  1459. {$endif linux}
  1460. {$endif CPUSPARC64}
  1461. {$ifdef CPUPOWERPC32}
  1462. {$ifdef linux}
  1463. set_source_info(system_powerpc_linux_info);
  1464. {$endif linux}
  1465. {$endif CPUPOWERPC32}
  1466. {$ifdef CPUPOWERPC64}
  1467. {$ifdef linux}
  1468. set_source_info(system_powerpc64_linux_info);
  1469. { on a little endian PPC64 platform -> source is elfv2 }
  1470. {$ifdef FPC_LITTLE_ENDIAN}
  1471. source_info.endian:=endian_little;
  1472. source_info.abi:=abi_powerpc_elfv2;
  1473. {$endif}
  1474. {$endif linux}
  1475. {$endif CPUPOWERPC64}
  1476. {$ifdef CPUARM}
  1477. {$ifdef linux}
  1478. set_source_info(system_arm_linux_info);
  1479. {$endif linux}
  1480. {$endif CPUARM}
  1481. {$ifdef cpuaarch64}
  1482. {$ifdef linux}
  1483. set_source_info(system_aarch64_linux_info);
  1484. {$endif linux}
  1485. {$endif cpuaarch64}
  1486. {$ifdef CPUMIPSEB}
  1487. {$ifdef linux}
  1488. set_source_info(system_mipseb_linux_info);
  1489. {$endif linux}
  1490. {$endif CPUMIPSEB}
  1491. {$ifdef CPUMIPSEL}
  1492. {$ifdef linux}
  1493. set_source_info(system_mipsel_linux_info);
  1494. {$endif linux}
  1495. {$endif CPUMIPSEL}
  1496. {$ifdef CPURISCV32}
  1497. {$ifdef linux}
  1498. set_source_info(system_riscv32_linux_info);
  1499. {$endif linux}
  1500. {$endif CPURISCV32}
  1501. {$ifdef CPURISCV64}
  1502. {$ifdef linux}
  1503. set_source_info(system_riscv64_linux_info);
  1504. {$endif linux}
  1505. {$endif CPURISCV64}
  1506. {$ifdef CPUXTENSA}
  1507. {$ifdef linux}
  1508. set_source_info(system_xtensa_linux_info);
  1509. {$endif linux}
  1510. {$endif CPUXTENSA}
  1511. {$ifdef CPUMIPS64EB}
  1512. {$ifdef linux}
  1513. set_source_info(system_mips64_linux_info);
  1514. {$endif linux}
  1515. {$endif CPUMIPS64EB}
  1516. {$ifdef CPUMIPS64EL}
  1517. {$ifdef linux}
  1518. set_source_info(system_mips64el_linux_info);
  1519. {$endif linux}
  1520. {$endif CPUMIPS64EL}
  1521. end.