i_linux.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. {
  2. Copyright (c) 1998-2002 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. interface
  20. uses
  21. systems;
  22. const
  23. res_elf32_info : tresinfo =
  24. (
  25. id : res_elf;
  26. resbin : 'fpcres';
  27. rescmd : '-o $OBJ -i $RES'
  28. );
  29. res_elf64_info : tresinfo =
  30. (
  31. id : res_elf;
  32. resbin : 'fpcres';
  33. rescmd : '-o $OBJ -i $RES'
  34. );
  35. system_i386_linux_info : tsysteminfo =
  36. (
  37. system : system_i386_LINUX;
  38. name : 'Linux for i386';
  39. shortname : 'Linux';
  40. flags : [tf_needs_symbol_size,tf_pic_uses_got,tf_smartlink_sections];
  41. cpu : cpu_i386;
  42. unit_env : 'LINUXUNITS';
  43. extradefines : 'UNIX;HASUNIX';
  44. exeext : '';
  45. defext : '.def';
  46. scriptext : '.sh';
  47. smartext : '.sl';
  48. unitext : '.ppu';
  49. unitlibext : '.ppl';
  50. asmext : '.s';
  51. objext : '.o';
  52. resext : '.res';
  53. resobjext : '.or';
  54. sharedlibext : '.so';
  55. staticlibext : '.a';
  56. staticlibprefix : 'libp';
  57. sharedlibprefix : 'lib';
  58. sharedClibext : '.so';
  59. staticClibext : '.a';
  60. staticClibprefix : 'lib';
  61. sharedClibprefix : 'lib';
  62. p_ext_support : false;
  63. Cprefix : '';
  64. newline : #10;
  65. dirsep : '/';
  66. files_case_relevent : true;
  67. assem : as_i386_elf32;
  68. assemextern : as_gas;
  69. link : nil;
  70. linkextern : nil;
  71. ar : ar_gnu_ar;
  72. res : res_elf;
  73. dbg : dbg_stabs;
  74. script : script_unix;
  75. endian : endian_little;
  76. alignment :
  77. (
  78. procalign : 16;
  79. loopalign : 4;
  80. jumpalign : 0;
  81. constalignmin : 0;
  82. constalignmax : 8;
  83. varalignmin : 0;
  84. varalignmax : 8;
  85. localalignmin : 4;
  86. localalignmax : 4;
  87. recordalignmin : 0;
  88. recordalignmax : 4;
  89. maxCrecordalign : 4
  90. );
  91. first_parm_offset : 8;
  92. stacksize : 262144;
  93. DllScanSupported:false;
  94. use_function_relative_addresses : true;
  95. abi : abi_default
  96. );
  97. system_x86_6432_linux_info : tsysteminfo =
  98. (
  99. system : system_x86_6432_LINUX;
  100. name : 'Linux for x64_6432';
  101. shortname : 'Linux6432';
  102. flags : [tf_needs_symbol_size,tf_pic_uses_got{,tf_smartlink_sections}];
  103. cpu : cpu_x86_64;
  104. unit_env : 'LINUXUNITS';
  105. extradefines : 'UNIX;HASUNIX';
  106. exeext : '';
  107. defext : '.def';
  108. scriptext : '.sh';
  109. smartext : '.sl';
  110. unitext : '.ppu';
  111. unitlibext : '.ppl';
  112. asmext : '.s';
  113. objext : '.o';
  114. resext : '.res';
  115. resobjext : '.or';
  116. sharedlibext : '.so';
  117. staticlibext : '.a';
  118. staticlibprefix : 'libp';
  119. sharedlibprefix : 'lib';
  120. sharedClibext : '.so';
  121. staticClibext : '.a';
  122. staticClibprefix : 'lib';
  123. sharedClibprefix : 'lib';
  124. p_ext_support : false;
  125. Cprefix : '';
  126. newline : #10;
  127. dirsep : '/';
  128. files_case_relevent : true;
  129. assem : as_i386_elf32;
  130. assemextern : as_gas;
  131. link : nil;
  132. linkextern : nil;
  133. ar : ar_gnu_ar;
  134. res : res_none;
  135. dbg : dbg_stabs;
  136. script : script_unix;
  137. endian : endian_little;
  138. alignment :
  139. (
  140. procalign : 16;
  141. loopalign : 4;
  142. jumpalign : 0;
  143. constalignmin : 0;
  144. constalignmax : 8;
  145. varalignmin : 0;
  146. varalignmax : 8;
  147. localalignmin : 4;
  148. localalignmax : 4;
  149. recordalignmin : 0;
  150. recordalignmax : 4;
  151. maxCrecordalign : 4
  152. );
  153. first_parm_offset : 8;
  154. stacksize : 262144;
  155. DllScanSupported:false;
  156. use_function_relative_addresses : true;
  157. abi : abi_default
  158. );
  159. system_m68k_linux_info : tsysteminfo =
  160. (
  161. system : system_m68k_linux;
  162. name : 'Linux for m68k';
  163. shortname : 'Linux';
  164. flags : [tf_needs_symbol_size];
  165. cpu : cpu_m68k;
  166. unit_env : 'LINUXUNITS';
  167. extradefines : 'UNIX;HASUNIX';
  168. exeext : '';
  169. defext : '';
  170. scriptext : '.sh';
  171. smartext : '.sl';
  172. unitext : '.ppu';
  173. unitlibext : '.ppl';
  174. asmext : '.s';
  175. objext : '.o';
  176. resext : '.res';
  177. resobjext : '.or';
  178. sharedlibext : '.so';
  179. staticlibext : '.a';
  180. staticlibprefix : 'libp';
  181. sharedlibprefix : 'lib';
  182. sharedClibext : '.so';
  183. staticClibext : '.a';
  184. staticClibprefix : 'lib';
  185. sharedClibprefix : 'lib';
  186. p_ext_support : false;
  187. Cprefix : '';
  188. newline : #10;
  189. dirsep : '/';
  190. files_case_relevent : true;
  191. assem : as_gas;
  192. assemextern : as_gas;
  193. link : nil;
  194. linkextern : nil;
  195. ar : ar_gnu_ar;
  196. res : res_none;
  197. dbg : dbg_stabs;
  198. script : script_unix;
  199. endian : endian_big;
  200. alignment :
  201. (
  202. procalign : 4;
  203. loopalign : 4;
  204. jumpalign : 0;
  205. constalignmin : 0;
  206. constalignmax : 4;
  207. varalignmin : 0;
  208. varalignmax : 4;
  209. localalignmin : 4;
  210. localalignmax : 4;
  211. recordalignmin : 0;
  212. recordalignmax : 2;
  213. maxCrecordalign : 4
  214. );
  215. first_parm_offset : 8;
  216. stacksize : 32*1024*1024;
  217. DllScanSupported:false;
  218. use_function_relative_addresses : true;
  219. abi : abi_default
  220. );
  221. system_powerpc_linux_info : tsysteminfo =
  222. (
  223. system : system_powerpc_LINUX;
  224. name : 'Linux for PowerPC';
  225. shortname : 'Linux';
  226. flags : [tf_needs_symbol_size];
  227. cpu : cpu_powerpc;
  228. unit_env : '';
  229. extradefines : 'UNIX;HASUNIX';
  230. exeext : '';
  231. defext : '.def';
  232. scriptext : '.sh';
  233. smartext : '.sl';
  234. unitext : '.ppu';
  235. unitlibext : '.ppl';
  236. asmext : '.s';
  237. objext : '.o';
  238. resext : '.res';
  239. resobjext : '.or';
  240. sharedlibext : '.so';
  241. staticlibext : '.a';
  242. staticlibprefix : 'libp';
  243. sharedlibprefix : 'lib';
  244. sharedClibext : '.so';
  245. staticClibext : '.a';
  246. staticClibprefix : 'lib';
  247. sharedClibprefix : 'lib';
  248. p_ext_support : false;
  249. Cprefix : '';
  250. newline : #10;
  251. dirsep : '/';
  252. files_case_relevent : true;
  253. assem : as_gas;
  254. assemextern : as_gas;
  255. link : nil;
  256. linkextern : nil;
  257. ar : ar_gnu_ar;
  258. res : res_none;
  259. dbg : dbg_stabs;
  260. script : script_unix;
  261. endian : endian_big;
  262. alignment :
  263. (
  264. procalign : 4;
  265. loopalign : 4;
  266. jumpalign : 0;
  267. constalignmin : 0;
  268. constalignmax : 4;
  269. varalignmin : 0;
  270. varalignmax : 4;
  271. localalignmin : 4;
  272. localalignmax : 4;
  273. recordalignmin : 0;
  274. recordalignmax : 4;
  275. maxCrecordalign : 8
  276. );
  277. first_parm_offset : 8;
  278. stacksize : 32*1024*1024;
  279. DllScanSupported:false;
  280. use_function_relative_addresses : true;
  281. abi : abi_powerpc_sysv;
  282. );
  283. system_alpha_linux_info : tsysteminfo =
  284. (
  285. system : system_alpha_LINUX;
  286. name : 'Linux for Alpha';
  287. shortname : 'Linux';
  288. flags : [tf_needs_symbol_size];
  289. cpu : cpu_alpha;
  290. unit_env : 'LINUXUNITS';
  291. extradefines : 'UNIX;HASUNIX';
  292. exeext : '';
  293. defext : '.def';
  294. scriptext : '.sh';
  295. smartext : '.sl';
  296. unitext : '.ppu';
  297. unitlibext : '.ppl';
  298. asmext : '.s';
  299. objext : '.o';
  300. resext : '.res';
  301. resobjext : '.or';
  302. sharedlibext : '.so';
  303. staticlibext : '.a';
  304. staticlibprefix : 'libp';
  305. sharedlibprefix : 'lib';
  306. sharedClibext : '.so';
  307. staticClibext : '.a';
  308. staticClibprefix : 'lib';
  309. sharedClibprefix : 'lib';
  310. p_ext_support : false;
  311. Cprefix : '';
  312. newline : #10;
  313. dirsep : '/';
  314. files_case_relevent : true;
  315. assem : as_gas;
  316. assemextern : as_gas;
  317. link : nil;
  318. linkextern : nil;
  319. ar : ar_gnu_ar;
  320. res : res_none;
  321. dbg : dbg_stabs;
  322. script : script_unix;
  323. endian : endian_little;
  324. alignment :
  325. (
  326. procalign : 4;
  327. loopalign : 4;
  328. jumpalign : 0;
  329. constalignmin : 0;
  330. constalignmax : 4;
  331. varalignmin : 0;
  332. varalignmax : 4;
  333. localalignmin : 4;
  334. localalignmax : 4;
  335. recordalignmin : 0;
  336. recordalignmax : 2;
  337. maxCrecordalign : 4
  338. );
  339. first_parm_offset : 8;
  340. stacksize : 32*1024*1024;
  341. DllScanSupported:false;
  342. use_function_relative_addresses : true;
  343. abi : abi_default
  344. );
  345. system_x86_64_linux_info : tsysteminfo =
  346. (
  347. system : system_x86_64_LINUX;
  348. name : 'Linux for x86-64';
  349. shortname : 'Linux';
  350. flags : [tf_needs_symbol_size,tf_needs_dwarf_cfi,
  351. tf_library_needs_pic];
  352. cpu : cpu_x86_64;
  353. unit_env : 'LINUXUNITS';
  354. extradefines : 'UNIX;HASUNIX';
  355. exeext : '';
  356. defext : '.def';
  357. scriptext : '.sh';
  358. smartext : '.sl';
  359. unitext : '.ppu';
  360. unitlibext : '.ppl';
  361. asmext : '.s';
  362. objext : '.o';
  363. resext : '.res';
  364. resobjext : '.or';
  365. sharedlibext : '.so';
  366. staticlibext : '.a';
  367. staticlibprefix : 'libp';
  368. sharedlibprefix : 'lib';
  369. sharedClibext : '.so';
  370. staticClibext : '.a';
  371. staticClibprefix : 'lib';
  372. sharedClibprefix : 'lib';
  373. p_ext_support : false;
  374. Cprefix : '';
  375. newline : #10;
  376. dirsep : '/';
  377. files_case_relevent : true;
  378. assem : as_gas;
  379. assemextern : as_gas;
  380. link : nil;
  381. linkextern : nil;
  382. ar : ar_gnu_ar;
  383. res : res_none;
  384. dbg : dbg_stabs;
  385. script : script_unix;
  386. endian : endian_little;
  387. alignment :
  388. (
  389. procalign : 8;
  390. loopalign : 4;
  391. jumpalign : 0;
  392. constalignmin : 0;
  393. constalignmax : 8;
  394. varalignmin : 0;
  395. varalignmax : 8;
  396. localalignmin : 4;
  397. localalignmax : 8;
  398. recordalignmin : 0;
  399. recordalignmax : 8;
  400. maxCrecordalign : 8
  401. );
  402. first_parm_offset : 16;
  403. stacksize : 256*1024;
  404. DllScanSupported:false;
  405. use_function_relative_addresses : true;
  406. abi : abi_default
  407. );
  408. system_sparc_linux_info : tsysteminfo =
  409. (
  410. system : system_SPARC_Linux;
  411. name : 'Linux for SPARC';
  412. shortname : 'Linux';
  413. flags : [tf_needs_symbol_size,tf_library_needs_pic];
  414. cpu : cpu_SPARC;
  415. unit_env : 'LINUXUNITS';
  416. extradefines : 'UNIX;HASUNIX';
  417. exeext : '';
  418. defext : '.def';
  419. scriptext : '.sh';
  420. smartext : '.sl';
  421. unitext : '.ppu';
  422. unitlibext : '.ppl';
  423. asmext : '.s';
  424. objext : '.o';
  425. resext : '.res';
  426. resobjext : '.or';
  427. sharedlibext : '.so';
  428. staticlibext : '.a';
  429. staticlibprefix : 'libp';
  430. sharedlibprefix : 'lib';
  431. sharedClibext : '.so';
  432. staticClibext : '.a';
  433. staticClibprefix : 'lib';
  434. sharedClibprefix : 'lib';
  435. p_ext_support : false;
  436. Cprefix : '';
  437. newline : #10;
  438. dirsep : '/';
  439. files_case_relevent : true;
  440. assem : as_gas;
  441. assemextern : as_gas;
  442. link : nil;
  443. linkextern : nil;
  444. ar : ar_gnu_ar;
  445. res : res_none;
  446. dbg : dbg_stabs;
  447. script : script_unix;
  448. endian : endian_big;
  449. alignment :
  450. (
  451. procalign : 4;
  452. loopalign : 4;
  453. jumpalign : 0;
  454. constalignmin : 0;
  455. constalignmax : 8;
  456. varalignmin : 0;
  457. varalignmax : 8;
  458. localalignmin : 4;
  459. localalignmax : 8;
  460. recordalignmin : 0;
  461. recordalignmax : 8;
  462. maxCrecordalign : 8
  463. );
  464. first_parm_offset : 92;
  465. stacksize : 262144;
  466. DllScanSupported:false;
  467. use_function_relative_addresses : true;
  468. abi : abi_default
  469. );
  470. system_arm_linux_info : tsysteminfo =
  471. (
  472. system : system_arm_Linux;
  473. name : 'Linux for ARM';
  474. shortname : 'Linux';
  475. flags : [tf_needs_symbol_size];
  476. cpu : cpu_arm;
  477. unit_env : 'LINUXUNITS';
  478. extradefines : 'UNIX;HASUNIX';
  479. exeext : '';
  480. defext : '.def';
  481. scriptext : '.sh';
  482. smartext : '.sl';
  483. unitext : '.ppu';
  484. unitlibext : '.ppl';
  485. asmext : '.s';
  486. objext : '.o';
  487. resext : '.res';
  488. resobjext : '.or';
  489. sharedlibext : '.so';
  490. staticlibext : '.a';
  491. staticlibprefix : 'libp';
  492. sharedlibprefix : 'lib';
  493. sharedClibext : '.so';
  494. staticClibext : '.a';
  495. staticClibprefix : 'lib';
  496. sharedClibprefix : 'lib';
  497. p_ext_support : false;
  498. Cprefix : '';
  499. newline : #10;
  500. dirsep : '/';
  501. files_case_relevent : true;
  502. assem : as_gas;
  503. assemextern : as_gas;
  504. link : nil;
  505. linkextern : nil;
  506. ar : ar_gnu_ar;
  507. res : res_none;
  508. dbg : dbg_stabs;
  509. script : script_unix;
  510. endian : endian_little;
  511. alignment :
  512. (
  513. procalign : 4;
  514. loopalign : 4;
  515. jumpalign : 0;
  516. constalignmin : 0;
  517. constalignmax : 4;
  518. varalignmin : 0;
  519. varalignmax : 4;
  520. localalignmin : 4;
  521. localalignmax : 8;
  522. recordalignmin : 0;
  523. recordalignmax : 4;
  524. maxCrecordalign : 4
  525. );
  526. first_parm_offset : 8;
  527. stacksize : 262144;
  528. DllScanSupported:false;
  529. use_function_relative_addresses : true;
  530. abi : abi_default
  531. );
  532. implementation
  533. initialization
  534. {$ifdef CPU86}
  535. {$ifdef linux}
  536. { some FreeBSD versions define linux as well }
  537. {$ifndef FreeBSD}
  538. set_source_info(system_i386_linux_info);
  539. {$endif FreeBSD}
  540. {$endif}
  541. {$endif CPU86}
  542. {$ifdef CPU68}
  543. {$ifdef linux}
  544. set_source_info(system_m68k_linux_info);
  545. {$endif linux}
  546. {$endif CPU68}
  547. {$ifdef CPUX86_64}
  548. {$ifdef linux}
  549. set_source_info(system_x86_64_linux_info);
  550. {$endif linux}
  551. {$endif CPUX86_64}
  552. {$ifdef CPUALPHA}
  553. {$ifdef linux}
  554. set_source_info(system_alpha_linux_info);
  555. {$endif linux}
  556. {$endif CPUALPHA}
  557. {$ifdef CPUSPARC}
  558. {$ifdef linux}
  559. set_source_info(system_sparc_linux_info);
  560. {$endif linux}
  561. {$endif CPUSPARC}
  562. {$ifdef CPUPOWERPC}
  563. {$ifdef linux}
  564. set_source_info(system_powerpc_linux_info);
  565. {$endif linux}
  566. {$endif CPUPOWERPC}
  567. {$ifdef CPUARM}
  568. {$ifdef linux}
  569. set_source_info(system_arm_linux_info);
  570. {$endif linux}
  571. {$endif CPUARM}
  572. end.