* shared lib i_ and t_ changes. Some small comments cleanup to t_

git-svn-id: trunk@2297 -
This commit is contained in:
marco 2006-01-15 15:22:29 +00:00
parent 51d75e9d4e
commit 4fe8654fe4
2 changed files with 28 additions and 14 deletions

View File

@ -35,7 +35,11 @@ unit i_bsd;
system : system_i386_FreeBSD; system : system_i386_FreeBSD;
name : 'FreeBSD/ELF for i386'; name : 'FreeBSD/ELF for i386';
shortname : 'FreeBSD'; shortname : 'FreeBSD';
flags : [tf_pic_uses_got,tf_files_case_sensitive,tf_use_function_relative_addresses]; flags : [tf_pic_uses_got,tf_files_case_sensitive,tf_use_function_relative_addresses,
{$ifdef segment_threadvars}
tf_section_threadvars,
{$endif segment_threadvars}
tf_needs_symbol_type,tf_needs_symbol_size {,tf_smartlink_sections}];
cpu : cpu_i386; cpu : cpu_i386;
unit_env : 'BSDUNITS'; unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX'; extradefines : 'UNIX;BSD;HASUNIX';

View File

@ -206,10 +206,13 @@ begin
end; end;
procedure texportlibbsd.generatelib; procedure texportlibbsd.generatelib; // straight t_linux copy for now.
var var
hp2 : texported_item; hp2 : texported_item;
sym : tasmsymbol;
r : treference;
begin begin
new_section(asmlist[al_procedures],sec_code,'',0);
hp2:=texported_item(current_module._exports.first); hp2:=texported_item(current_module._exports.first);
while assigned(hp2) do while assigned(hp2) do
begin begin
@ -220,19 +223,26 @@ begin
is declared with cdecl } is declared with cdecl }
if tprocsym(hp2.sym).first_procdef.mangledname<>hp2.name^ then if tprocsym(hp2.sym).first_procdef.mangledname<>hp2.name^ then
begin begin
{$ifdef i386}
{ place jump in al_procedures } { place jump in al_procedures }
asmlist[al_procedures].concat(Tai_align.Create_op(4,$90)); asmlist[al_procedures].concat(tai_align.create(target_info.alignment.procalign));
asmlist[al_procedures].concat(Tai_symbol.Createname_global(hp2.name^,AT_FUNCTION,0)); asmlist[al_procedures].concat(Tai_symbol.Createname_global(hp2.name^,AT_FUNCTION,0));
asmlist[al_procedures].concat(Taicpu.Op_sym(A_JMP,S_NO,objectlibrary.newasmsymbol(tprocsym(hp2.sym).first_procdef.mangledname,AB_EXTERNAL,AT_FUNCTION))); if (cs_create_pic in aktmoduleswitches) and
{ other targets need to be checked how it works }
(target_info.system in [system_i386_freebsd]) then
begin
{$ifdef x86}
sym:=objectlibrary.newasmsymbol(tprocsym(hp2.sym).first_procdef.mangledname,AB_EXTERNAL,AT_FUNCTION);
reference_reset_symbol(r,sym,0);
if cs_create_pic in aktmoduleswitches then
r.refaddr:=addr_pic
else
r.refaddr:=addr_full;
asmlist[al_procedures].concat(taicpu.op_ref(A_JMP,S_NO,r));
{$endif x86}
end
else
cg.a_jmp_name(asmlist[al_procedures],tprocsym(hp2.sym).first_procdef.mangledname);
asmlist[al_procedures].concat(Tai_symbol_end.Createname(hp2.name^)); asmlist[al_procedures].concat(Tai_symbol_end.Createname(hp2.name^));
{$endif i386}
{$ifdef powerpc}
asmlist[al_procedures].concat(Tai_align.create(16));
asmlist[al_procedures].concat(Tai_symbol.Createname_global(hp2.name^,AT_FUNCTION,0));
asmlist[al_procedures].concat(Taicpu.Op_sym(A_B,objectlibrary.newasmsymbol(tprocsym(hp2.sym).first_procdef.mangledname,AB_EXTERNAL,AT_FUNCTION)));
asmlist[al_procedures].concat(Tai_symbol_end.Createname(hp2.name^));
{$endif powerpc}
end; end;
end end
else else
@ -243,7 +253,7 @@ end;
{***************************************************************************** {*****************************************************************************
TLINKERLINUX TLINKERBSD
*****************************************************************************} *****************************************************************************}
Constructor TLinkerBSD.Create; Constructor TLinkerBSD.Create;
@ -457,7 +467,7 @@ begin
else else
begin begin
linklibc:=true; linklibc:=true;
linkdynamic:=false; { libc will include the ld-linux for us } linkdynamic:=false; { libc will include the ld-* for us }
end; end;
end; end;
{ be sure that libc is the last lib } { be sure that libc is the last lib }