Unified targets for ELF assembler modules. Tested on Linux, Solaris and

FreeBSD. Goal is to extend support even to SCO5, UnixWare/OpenUnix...
This commit is contained in:
Andy Polyakov
2003-01-03 17:37:53 +00:00
parent 46a0d4fbcb
commit 3cc9a89dda
15 changed files with 76 additions and 129 deletions

View File

@@ -426,6 +426,11 @@ sub main'swtmp
sub main'comment
{
if ($main'elf) # GNU and SVR4 as'es use different comment delimiters,
{ # so we just skip comments...
push(@out,"\n");
return;
}
foreach (@_)
{
if (/^\s*$/)
@@ -546,7 +551,9 @@ sub popvars
sub main'picmeup
{
local($dst,$sym)=@_;
local($tmp)=<<___;
if ($main'cpp)
{
local($tmp)=<<___;
#if (defined(ELF) || defined(SOL)) && defined(PIC)
.align 8
call 1f
@@ -557,7 +564,22 @@ sub main'picmeup
leal $sym,$regs{$dst}
#endif
___
push(@out,$tmp);
push(@out,$tmp);
}
elsif ($main'pic && $main'elf)
{
push(@out,"\t.align\t8\n");
&main'call(&main'label("PIC_me_up"));
&main'set_label("PIC_me_up");
&main'blindpop($dst);
&main'add($dst,"\$_GLOBAL_OFFSET_TABLE_+[.-" .
&main'label("PIC_me_up") . "]");
&main'mov($dst,&main'DWP("$under$sym\@GOT",$dst));
}
else
{
&main'lea($dst,&main'DWP("$under$sym"));
}
}
sub main'blindpop { &out1("popl",@_); }