t_bsd.pas 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. {
  2. $Id$
  3. Copyright (c) 1998-2002 by Peter Vreman (original Linux)
  4. (c) 2000 by Marco van de Voort (FreeBSD mods)
  5. This unit implements support import,export,link routines
  6. for the (i386)FreeBSD target
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. ****************************************************************************
  19. }
  20. unit t_bsd;
  21. {$i fpcdefs.inc}
  22. interface
  23. implementation
  24. uses
  25. cutils,cclasses,
  26. verbose,systems,globtype,globals,
  27. symconst,script,
  28. fmodule,aasmbase,aasmtai,aasmcpu,cpubase,symsym,symdef,
  29. import,export,link,i_bsd;
  30. type
  31. timportlibbsd=class(timportlib)
  32. procedure preparelib(const s:string);override;
  33. procedure importprocedure(aprocdef:tprocdef;const module:string;index:longint;const name:string);override;
  34. procedure importvariable(vs:tvarsym;const name,module:string);override;
  35. procedure generatelib;override;
  36. end;
  37. texportlibbsd=class(texportlib)
  38. procedure preparelib(const s : string);override;
  39. procedure exportprocedure(hp : texported_item);override;
  40. procedure exportvar(hp : texported_item);override;
  41. procedure generatelib;override;
  42. end;
  43. tlinkerbsd=class(texternallinker)
  44. private
  45. Glibc2,
  46. Glibc21,
  47. LdSupportsNoResponseFile : boolean;
  48. LibrarySuffix : Char;
  49. Function WriteResponseFile(isdll:boolean) : Boolean;
  50. public
  51. constructor Create;override;
  52. procedure SetDefaultInfo;override;
  53. function MakeExecutable:boolean;override;
  54. function MakeSharedLibrary:boolean;override;
  55. end;
  56. {*****************************************************************************
  57. TIMPORTLIBLINUX
  58. *****************************************************************************}
  59. procedure timportlibbsd.preparelib(const s : string);
  60. begin
  61. end;
  62. procedure timportlibbsd.importprocedure(aprocdef:tprocdef;const module:string;index:longint;const name:string);
  63. begin
  64. { insert sharedlibrary }
  65. current_module.linkothersharedlibs.add(SplitName(module),link_allways);
  66. { do nothing with the procedure, only set the mangledname }
  67. if name<>'' then
  68. begin
  69. aprocdef.setmangledname(name);
  70. end
  71. else
  72. message(parser_e_empty_import_name);
  73. end;
  74. procedure timportlibbsd.importvariable(vs:tvarsym;const name,module:string);
  75. begin
  76. { insert sharedlibrary }
  77. current_module.linkothersharedlibs.add(SplitName(module),link_allways);
  78. { reset the mangledname and turn off the dll_var option }
  79. vs.set_mangledname(name);
  80. exclude(vs.varoptions,vo_is_dll_var);
  81. end;
  82. procedure timportlibbsd.generatelib;
  83. begin
  84. end;
  85. {*****************************************************************************
  86. TEXPORTLIBLINUX
  87. *****************************************************************************}
  88. procedure texportlibbsd.preparelib(const s:string);
  89. begin
  90. end;
  91. procedure texportlibbsd.exportprocedure(hp : texported_item);
  92. var
  93. hp2 : texported_item;
  94. begin
  95. { first test the index value }
  96. if (hp.options and eo_index)<>0 then
  97. begin
  98. Message1(parser_e_no_export_with_index_for_target,'freebsd');
  99. exit;
  100. end;
  101. { now place in correct order }
  102. hp2:=texported_item(current_module._exports.first);
  103. while assigned(hp2) and
  104. (hp.name^>hp2.name^) do
  105. hp2:=texported_item(hp2.next);
  106. { insert hp there !! }
  107. if assigned(hp2) and (hp2.name^=hp.name^) then
  108. begin
  109. { this is not allowed !! }
  110. Message1(parser_e_export_name_double,hp.name^);
  111. exit;
  112. end;
  113. if hp2=texported_item(current_module._exports.first) then
  114. current_module._exports.concat(hp)
  115. else if assigned(hp2) then
  116. begin
  117. hp.next:=hp2;
  118. hp.previous:=hp2.previous;
  119. if assigned(hp2.previous) then
  120. hp2.previous.next:=hp;
  121. hp2.previous:=hp;
  122. end
  123. else
  124. current_module._exports.concat(hp);
  125. end;
  126. procedure texportlibbsd.exportvar(hp : texported_item);
  127. begin
  128. hp.is_var:=true;
  129. exportprocedure(hp);
  130. end;
  131. procedure texportlibbsd.generatelib;
  132. var
  133. hp2 : texported_item;
  134. begin
  135. hp2:=texported_item(current_module._exports.first);
  136. while assigned(hp2) do
  137. begin
  138. if (not hp2.is_var) and
  139. (hp2.sym.typ=procsym) then
  140. begin
  141. { the manglednames can already be the same when the procedure
  142. is declared with cdecl }
  143. if tprocsym(hp2.sym).first_procdef.mangledname<>hp2.name^ then
  144. begin
  145. {$ifdef i386}
  146. { place jump in codesegment }
  147. codesegment.concat(Tai_align.Create_op(4,$90));
  148. codeSegment.concat(Tai_symbol.Createname_global(hp2.name^,0));
  149. codeSegment.concat(Taicpu.Op_sym(A_JMP,S_NO,objectlibrary.newasmsymbol(tprocsym(hp2.sym).first_procdef.mangledname)));
  150. codeSegment.concat(Tai_symbol_end.Createname(hp2.name^));
  151. {$endif i386}
  152. end;
  153. end
  154. else
  155. Message1(parser_e_no_export_of_variables_for_target,'freebsd');
  156. hp2:=texported_item(hp2.next);
  157. end;
  158. end;
  159. {*****************************************************************************
  160. TLINKERLINUX
  161. *****************************************************************************}
  162. Constructor TLinkerBSD.Create;
  163. begin
  164. Inherited Create;
  165. IF NOT Dontlinkstdlibpath Then
  166. LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib',true);
  167. end;
  168. procedure TLinkerBSD.SetDefaultInfo;
  169. {
  170. This will also detect which libc version will be used
  171. }
  172. begin
  173. LibrarySuffix:=' ';
  174. {$ifdef NETBSD}
  175. {$ifdef M68K}
  176. LdSupportsNoResponseFile:=true;
  177. {$else : not M68K}
  178. LdSupportsNoResponseFile:=false;
  179. {$endif M68K}
  180. {$else : not NETBSD}
  181. LdSupportsNoResponseFile:=false;
  182. {$endif NETBSD}
  183. with Info do
  184. begin
  185. if LdSupportsNoResponseFile then
  186. begin
  187. ExeCmd[1]:='ld $OPT $DYNLINK $STATIC $STRIP -L. -o $EXE `cat $RES`';
  188. { We need external linking to interpret the `cat $RES` PM }
  189. include(aktglobalswitches,cs_link_extern);
  190. end
  191. else
  192. ExeCmd[1]:='ld $OPT $DYNLINK $STATIC $STRIP -L. -o $EXE $RES';
  193. DllCmd[1]:='ld $OPT -shared -L. -o $EXE $RES';
  194. DllCmd[2]:='strip --strip-unneeded $EXE';
  195. { first try glibc2 }
  196. {$ifdef GLIBC2} {Keep linux code in place. FBSD might go to a different
  197. glibc too once}
  198. DynamicLinker:='/lib/ld-linux.so.2';
  199. if FileExists(DynamicLinker) then
  200. begin
  201. Glibc2:=true;
  202. { Check for 2.0 files, else use the glibc 2.1 stub }
  203. if FileExists('/lib/ld-2.0.*') then
  204. Glibc21:=false
  205. else
  206. Glibc21:=true;
  207. end
  208. else
  209. DynamicLinker:='/lib/ld-linux.so.1';
  210. {$else}
  211. DynamicLinker:='';
  212. {$endif}
  213. end;
  214. end;
  215. Function TLinkerBSD.WriteResponseFile(isdll:boolean) : Boolean;
  216. Var
  217. linkres : TLinkRes;
  218. i : longint;
  219. cprtobj,
  220. gprtobj,
  221. prtobj : string[80];
  222. HPath : TStringListItem;
  223. s,s1,s2 : string;
  224. linkdynamic,
  225. linklibc : boolean;
  226. Fl1,Fl2 : Boolean;
  227. begin
  228. WriteResponseFile:=False;
  229. { set special options for some targets }
  230. linkdynamic:=not(SharedLibFiles.empty);
  231. linklibc:=(SharedLibFiles.Find('c')<>nil);
  232. prtobj:='prt0';
  233. cprtobj:='cprt0';
  234. gprtobj:='gprt0';
  235. if glibc21 then
  236. begin
  237. cprtobj:='cprt21';
  238. gprtobj:='gprt21';
  239. end;
  240. if cs_profile in aktmoduleswitches then
  241. begin
  242. prtobj:=gprtobj;
  243. {
  244. if not glibc2 then
  245. AddSharedLibrary('gmon');
  246. }
  247. AddSharedLibrary('c');
  248. LibrarySuffix:='p';
  249. linklibc:=true;
  250. end
  251. else
  252. begin
  253. if linklibc then
  254. prtobj:=cprtobj;
  255. end;
  256. { Open link.res file }
  257. LinkRes:=TLinkRes.Create(outputexedir+Info.ResName);
  258. { Write path to search libraries }
  259. HPath:=TStringListItem(current_module.locallibrarysearchpath.First);
  260. while assigned(HPath) do
  261. begin
  262. if LdSupportsNoResponseFile then
  263. LinkRes.Add('-L'+HPath.Str)
  264. else
  265. LinkRes.Add('SEARCH_DIR('+HPath.Str+')');
  266. HPath:=TStringListItem(HPath.Next);
  267. end;
  268. HPath:=TStringListItem(LibrarySearchPath.First);
  269. while assigned(HPath) do
  270. begin
  271. if LdSupportsNoResponseFile then
  272. LinkRes.Add('-L'+HPath.Str)
  273. else
  274. LinkRes.Add('SEARCH_DIR('+HPath.Str+')');
  275. HPath:=TStringListItem(HPath.Next);
  276. end;
  277. if not LdSupportsNoResponseFile then
  278. LinkRes.Add('INPUT(');
  279. { add objectfiles, start with prt0 always }
  280. if prtobj<>'' then
  281. LinkRes.AddFileName(FindObjectFile(prtobj,'',false));
  282. { try to add crti and crtbegin if linking to C }
  283. if linklibc then
  284. begin
  285. if librarysearchpath.FindFile('crtbegin.o',s) then
  286. LinkRes.AddFileName(s);
  287. if librarysearchpath.FindFile('crti.o',s) then
  288. LinkRes.AddFileName(s);
  289. end;
  290. { main objectfiles }
  291. while not ObjectFiles.Empty do
  292. begin
  293. s:=ObjectFiles.GetFirst;
  294. if s<>'' then
  295. LinkRes.AddFileName(s);
  296. end;
  297. if not LdSupportsNoResponseFile then
  298. LinkRes.Add(')');
  299. { Write staticlibraries }
  300. if not StaticLibFiles.Empty then
  301. begin
  302. if not LdSupportsNoResponseFile then
  303. LinkRes.Add('GROUP(');
  304. While not StaticLibFiles.Empty do
  305. begin
  306. S:=StaticLibFiles.GetFirst;
  307. LinkRes.AddFileName(s)
  308. end;
  309. if not LdSupportsNoResponseFile then
  310. LinkRes.Add(')');
  311. end;
  312. { Write sharedlibraries like -l<lib>, also add the needed dynamic linker
  313. here to be sure that it gets linked this is needed for glibc2 systems (PFV) }
  314. if not SharedLibFiles.Empty then
  315. begin
  316. if not LdSupportsNoResponseFile then
  317. LinkRes.Add('INPUT(');
  318. While not SharedLibFiles.Empty do
  319. begin
  320. S:=SharedLibFiles.GetFirst;
  321. if s<>'c' then
  322. begin
  323. i:=Pos(target_info.sharedlibext,S);
  324. if i>0 then
  325. Delete(S,i,255);
  326. LinkRes.Add('-l'+s);
  327. end
  328. else
  329. begin
  330. linklibc:=true;
  331. linkdynamic:=false; { libc will include the ld-linux for us }
  332. end;
  333. end;
  334. { be sure that libc is the last lib }
  335. if linklibc then
  336. Begin
  337. If LibrarySuffix=' ' Then
  338. LinkRes.Add('-lc')
  339. else
  340. LinkRes.Add('-lc_'+LibrarySuffix)
  341. end;
  342. { when we have -static for the linker the we also need libgcc }
  343. if (cs_link_staticflag in aktglobalswitches) then
  344. LinkRes.Add('-lgcc');
  345. if linkdynamic and (Info.DynamicLinker<>'') then
  346. LinkRes.AddFileName(Info.DynamicLinker);
  347. if not LdSupportsNoResponseFile then
  348. LinkRes.Add(')');
  349. end;
  350. { objects which must be at the end }
  351. if linklibc then
  352. begin
  353. Fl1:=librarysearchpath.FindFile('crtend.o',s1);
  354. Fl2:=librarysearchpath.FindFile('crtn.o',s2);
  355. if Fl1 or Fl2 then
  356. begin
  357. LinkRes.Add('INPUT(');
  358. If Fl1 Then
  359. LinkRes.AddFileName(s1);
  360. If Fl2 Then
  361. LinkRes.AddFileName(s2);
  362. LinkRes.Add(')');
  363. end;
  364. end;
  365. { Write and Close response }
  366. linkres.writetodisk;
  367. linkres.Free;
  368. WriteResponseFile:=True;
  369. end;
  370. function TLinkerBSD.MakeExecutable:boolean;
  371. var
  372. binstr,
  373. cmdstr : string;
  374. success : boolean;
  375. DynLinkStr : string[60];
  376. StaticStr,
  377. StripStr : string[40];
  378. begin
  379. if not(cs_link_extern in aktglobalswitches) then
  380. Message1(exec_i_linking,current_module.exefilename^);
  381. { Create some replacements }
  382. StaticStr:='';
  383. StripStr:='';
  384. DynLinkStr:='';
  385. if (cs_link_staticflag in aktglobalswitches) then
  386. begin
  387. if (target_info.system=system_m68k_netbsd) and
  388. ((cs_link_on_target in aktglobalswitches) or
  389. (target_info.system=source_info.system)) then
  390. StaticStr:='-Bstatic'
  391. else
  392. StaticStr:='-static';
  393. end;
  394. if (cs_link_strip in aktglobalswitches) then
  395. StripStr:='-s';
  396. If (cs_profile in aktmoduleswitches) or
  397. ((Info.DynamicLinker<>'') and (not SharedLibFiles.Empty)) then
  398. DynLinkStr:='-dynamic-linker='+Info.DynamicLinker;
  399. if CShared Then
  400. DynLinKStr:=DynLinkStr+' --shared';
  401. { Write used files and libraries }
  402. WriteResponseFile(false);
  403. { Call linker }
  404. SplitBinCmd(Info.ExeCmd[1],binstr,cmdstr);
  405. Replace(cmdstr,'$EXE',current_module.exefilename^);
  406. Replace(cmdstr,'$OPT',Info.ExtraOptions);
  407. Replace(cmdstr,'$RES',outputexedir+Info.ResName);
  408. Replace(cmdstr,'$STATIC',StaticStr);
  409. Replace(cmdstr,'$STRIP',StripStr);
  410. Replace(cmdstr,'$DYNLINK',DynLinkStr);
  411. success:=DoExec(FindUtil(utilsprefix+BinStr),CmdStr,true,false);
  412. { Remove ReponseFile }
  413. if (success) and not(cs_link_extern in aktglobalswitches) then
  414. RemoveFile(outputexedir+Info.ResName);
  415. MakeExecutable:=success; { otherwise a recursive call to link method }
  416. end;
  417. Function TLinkerBSD.MakeSharedLibrary:boolean;
  418. var
  419. binstr,
  420. cmdstr : string;
  421. success : boolean;
  422. begin
  423. MakeSharedLibrary:=false;
  424. if not(cs_link_extern in aktglobalswitches) then
  425. Message1(exec_i_linking,current_module.sharedlibfilename^);
  426. { Write used files and libraries }
  427. WriteResponseFile(true);
  428. { Call linker }
  429. SplitBinCmd(Info.DllCmd[1],binstr,cmdstr);
  430. Replace(cmdstr,'$EXE',current_module.sharedlibfilename^);
  431. Replace(cmdstr,'$OPT',Info.ExtraOptions);
  432. Replace(cmdstr,'$RES',outputexedir+Info.ResName);
  433. success:=DoExec(FindUtil(utilsprefix+binstr),cmdstr,true,false);
  434. { Strip the library ? }
  435. if success and (cs_link_strip in aktglobalswitches) then
  436. begin
  437. SplitBinCmd(Info.DllCmd[2],binstr,cmdstr);
  438. Replace(cmdstr,'$EXE',current_module.sharedlibfilename^);
  439. success:=DoExec(FindUtil(utilsprefix+binstr),cmdstr,true,false);
  440. end;
  441. { Remove ReponseFile }
  442. if (success) and not(cs_link_extern in aktglobalswitches) then
  443. RemoveFile(outputexedir+Info.ResName);
  444. MakeSharedLibrary:=success; { otherwise a recursive call to link method }
  445. end;
  446. {*****************************************************************************
  447. Initialize
  448. *****************************************************************************}
  449. initialization
  450. {$ifdef i386}
  451. RegisterExternalLinker(system_i386_FreeBSD_info,TLinkerBSD);
  452. RegisterExternalLinker(system_i386_NetBSD_info,TLinkerBSD);
  453. RegisterImport(system_i386_freebsd,timportlibbsd);
  454. RegisterExport(system_i386_freebsd,texportlibbsd);
  455. RegisterTarget(system_i386_freebsd_info);
  456. RegisterImport(system_i386_netbsd,timportlibbsd);
  457. RegisterExport(system_i386_netbsd,texportlibbsd);
  458. RegisterTarget(system_i386_netbsd_info);
  459. {$endif i386}
  460. {$ifdef m68k}
  461. // RegisterExternalLinker(system_m68k_FreeBSD_info,TLinkerBSD);
  462. RegisterExternalLinker(system_m68k_NetBSD_info,TLinkerBSD);
  463. RegisterImport(system_m68k_netbsd,timportlibbsd);
  464. RegisterExport(system_m68k_netbsd,texportlibbsd);
  465. RegisterTarget(system_m68k_netbsd_info);
  466. {$endif m68k}
  467. {$ifdef powerpc}
  468. // RegisterExternalLinker(system_m68k_FreeBSD_info,TLinkerBSD);
  469. RegisterExternalLinker(system_powerpc_darwin_info,TLinkerBSD);
  470. RegisterImport(system_powerpc_darwin,timportlibbsd);
  471. RegisterExport(system_powerpc_darwin,texportlibbsd);
  472. RegisterTarget(system_powerpc_darwin_info);
  473. RegisterExternalLinker(system_powerpc_netbsd_info,TLinkerBSD);
  474. RegisterImport(system_powerpc_netbsd,timportlibbsd);
  475. RegisterExport(system_powerpc_netbsd,texportlibbsd);
  476. RegisterTarget(system_powerpc_netbsd_info);
  477. {$endif powerpc}
  478. end.
  479. {
  480. $Log$
  481. Revision 1.5 2003-10-30 18:35:30 marco
  482. * librarysuffix + profiling
  483. Revision 1.4 2003/10/11 19:32:04 marco
  484. * -Xd
  485. Revision 1.3 2003/10/03 14:16:48 marco
  486. * -XP<prefix> support
  487. Revision 1.2 2003/05/25 23:15:04 marco
  488. * NetBSD target support. OpenBSD reserved in the enum, for future use.
  489. Revision 1.1 2003/05/20 23:54:00 florian
  490. + basic darwin support added
  491. Revision 1.5 2003/04/27 07:29:52 peter
  492. * aktprocdef cleanup, aktprocdef is now always nil when parsing
  493. a new procdef declaration
  494. * aktprocsym removed
  495. * lexlevel removed, use symtable.symtablelevel instead
  496. * implicit init/final code uses the normal genentry/genexit
  497. * funcret state checking updated for new funcret handling
  498. Revision 1.4 2003/04/26 09:16:08 peter
  499. * .o files belonging to the unit are first searched in the same dir
  500. as the .ppu
  501. Revision 1.3 2003/01/18 16:16:13 marco
  502. * Small fix for netbsd
  503. Revision 1.2 2002/09/09 17:34:17 peter
  504. * tdicationary.replace added to replace and item in a dictionary. This
  505. is only allowed for the same name
  506. * varsyms are inserted in symtable before the types are parsed. This
  507. fixes the long standing "var longint : longint" bug
  508. - consume_idlist and idstringlist removed. The loops are inserted
  509. at the callers place and uses the symtable for duplicate id checking
  510. Revision 1.1 2002/09/06 15:03:51 carl
  511. * moved files to systems directory
  512. Revision 1.29 2002/09/03 16:26:28 daniel
  513. * Make Tprocdef.defs protected
  514. Revision 1.28 2002/08/12 15:08:44 carl
  515. + stab register indexes for powerpc (moved from gdb to cpubase)
  516. + tprocessor enumeration moved to cpuinfo
  517. + linker in target_info is now a class
  518. * many many updates for m68k (will soon start to compile)
  519. - removed some ifdef or correct them for correct cpu
  520. Revision 1.27 2002/08/11 14:32:32 peter
  521. * renamed current_library to objectlibrary
  522. Revision 1.26 2002/08/11 13:24:19 peter
  523. * saving of asmsymbols in ppu supported
  524. * asmsymbollist global is removed and moved into a new class
  525. tasmlibrarydata that will hold the info of a .a file which
  526. corresponds with a single module. Added librarydata to tmodule
  527. to keep the library info stored for the module. In the future the
  528. objectfiles will also be stored to the tasmlibrarydata class
  529. * all getlabel/newasmsymbol and friends are moved to the new class
  530. Revision 1.25 2002/07/26 21:15:45 florian
  531. * rewrote the system handling
  532. Revision 1.24 2002/07/24 13:51:34 marco
  533. * Fixed small error
  534. Revision 1.23 2002/07/24 13:10:22 marco
  535. * urgent fix.
  536. Revision 1.22 2002/07/01 18:46:34 peter
  537. * internal linker
  538. * reorganized aasm layer
  539. Revision 1.21 2002/05/18 13:34:26 peter
  540. * readded missing revisions
  541. Revision 1.20 2002/05/16 19:46:53 carl
  542. + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
  543. + try to fix temp allocation (still in ifdef)
  544. + generic constructor calls
  545. + start of tassembler / tmodulebase class cleanup
  546. Revision 1.18 2002/04/22 18:19:22 carl
  547. - remove use_bound_instruction field
  548. Revision 1.17 2002/04/20 21:43:18 carl
  549. * fix stack size for some targets
  550. + add offset to parameters from frame pointer info.
  551. - remove some unused stuff
  552. Revision 1.16 2002/04/19 15:46:04 peter
  553. * mangledname rewrite, tprocdef.mangledname is now created dynamicly
  554. in most cases and not written to the ppu
  555. * add mangeledname_prefix() routine to generate the prefix of
  556. manglednames depending on the current procedure, object and module
  557. * removed static procprefix since the mangledname is now build only
  558. on demand from tprocdef.mangledname
  559. Revision 1.15 2002/04/15 19:16:57 carl
  560. - remove size_of_pointer field
  561. Revision 1.14 2002/01/29 21:27:34 peter
  562. * default alignment changed to 4 bytes for locals and static const,var
  563. }