* fixed win32 that was broken by previous fix

This commit is contained in:
peter 2004-08-25 15:55:32 +00:00
parent 04cce65ea2
commit 6663adfd50
2 changed files with 25 additions and 14 deletions

View File

@ -1039,8 +1039,6 @@ Implementation
not SmartAsm then
begin
objectdata.allocsymbol(currpass,Tai_datablock(hp).sym,Tai_datablock(hp).size);
{ common/external uses the size for address }
Tai_datablock(hp).sym.address:=Tai_datablock(hp).size;
{ force to be common/external, must be after setaddress as that would
set it to AB_GLOBAL }
Tai_datablock(hp).sym.currbind:=AB_COMMON;
@ -1631,7 +1629,10 @@ Implementation
end.
{
$Log$
Revision 1.72 2004-08-24 19:31:44 hajny
Revision 1.73 2004-08-25 15:55:32 peter
* fixed win32 that was broken by previous fix
Revision 1.72 2004/08/24 19:31:44 hajny
* binary writer fix for GO32v2 from Peter
Revision 1.71 2004/07/01 18:28:54 jonas

View File

@ -559,7 +559,7 @@ const go32v2stub : array[0..2047] of byte=(
function TCoffObjectData.sectionname(atype:tasmsectiontype;const aname:string):string;
const
secnames : array[tasmsectiontype] of string[16] = ('',
'.text','.data','.data','.bss',
'.text','.data','.rodata','.bss',
'common',
'.note',
'.stab','.stabstr',
@ -603,12 +603,21 @@ const go32v2stub : array[0..2047] of byte=(
begin
{ current address }
curraddr:=currsec.mempos+currsec.datasize;
{ real address of the symbol }
symaddr:=p.address;
{ external/common symbols don't have a fixed memory position yet }
if (p.section<>nil) and
(p.currbind<>AB_COMMON) then
inc(symaddr,p.section.mempos);
if (p.currbind=AB_COMMON) then
begin
{ For go32v2 we need to use the size as address }
if not win32 then
symaddr:=p.size
else
symaddr:=0;
end
else
begin
symaddr:=p.address;
if assigned(p.section) then
inc(symaddr,p.section.mempos);
end;
{ no symbol relocation need inside a section }
if (p.section=currsec) and
(p.currbind<>AB_COMMON) then
@ -639,10 +648,8 @@ const go32v2stub : array[0..2047] of byte=(
currsec.addsectionreloc(curraddr,p.section,relative)
else
currsec.addsymreloc(curraddr,p,relative);
if not win32 then {seems wrong to me (PM) }
inc(data,symaddr)
else
if (relative<>RELOC_RELATIVE) and (p.section<>nil) then
if (not win32) or
((relative<>RELOC_RELATIVE) and (p.section<>nil)) then
inc(data,symaddr);
if relative=RELOC_RELATIVE then
begin
@ -1786,7 +1793,10 @@ initialization
end.
{
$Log$
Revision 1.30 2004-08-24 19:31:44 hajny
Revision 1.31 2004-08-25 15:55:32 peter
* fixed win32 that was broken by previous fix
Revision 1.30 2004/08/24 19:31:44 hajny
* binary writer fix for GO32v2 from Peter
Revision 1.29 2004/06/20 08:55:30 florian