Skip to content

Commit

Permalink
fix Issue 8377 - Unexpected OPTLINK Termination at EIP=004106BE
Browse files Browse the repository at this point in the history
  • Loading branch information
WalterBright committed Aug 5, 2012
1 parent c23d481 commit 5446feb
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 4 deletions.
4 changes: 3 additions & 1 deletion src/backend/cgobj.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ int Obj::data_readonly(char *p, int len)

Obj *Obj::init(Outbuffer *objbuf, const char *filename, const char *csegname)
{
//printf("Obj::init()\n");
Obj *mobj = new Obj();

memset(&obj,0,sizeof(obj));
Expand Down Expand Up @@ -2372,7 +2373,7 @@ int Obj::data_start(Symbol *sdata, targ_size_t datasize, int seg)
if (sdata->Salignment > 0)
{ if (SegData[seg]->SDalignment < sdata->Salignment)
SegData[seg]->SDalignment = sdata->Salignment;
alignbytes = (offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1);
alignbytes = ((offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1)) - offset;
}
else
alignbytes = align(datasize, offset) - offset;
Expand Down Expand Up @@ -2418,6 +2419,7 @@ void Obj::pubdef(int seg,Symbol *s,targ_size_t offset)
char *p;
unsigned ti;

assert(offset < 100000000);
int idx = SegData[seg]->segidx;
if (obj.pubdatai + 1 + (IDMAX + IDOHD) + 4 + 2 > sizeof(obj.pubdata) ||
idx != getindex(obj.pubdata + 1))
Expand Down
2 changes: 1 addition & 1 deletion src/backend/elfobj.c
Original file line number Diff line number Diff line change
Expand Up @@ -2019,7 +2019,7 @@ int Obj::data_start(Symbol *sdata, targ_size_t datasize, int seg)
if (sdata->Salignment > 0)
{ if (SegData[seg]->SDalignment < sdata->Salignment)
SegData[seg]->SDalignment = sdata->Salignment;
alignbytes = (offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1);
alignbytes = ((offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1)) - offset;
}
else
alignbytes = align(datasize, offset) - offset;
Expand Down
2 changes: 1 addition & 1 deletion src/backend/machobj.c
Original file line number Diff line number Diff line change
Expand Up @@ -2079,7 +2079,7 @@ int Obj::data_start(Symbol *sdata, targ_size_t datasize, int seg)
if (sdata->Salignment > 0)
{ if (SegData[seg]->SDalignment < sdata->Salignment)
SegData[seg]->SDalignment = sdata->Salignment;
alignbytes = (offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1);
alignbytes = ((offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1)) - offset;
}
else
alignbytes = align(datasize, offset) - offset;
Expand Down
2 changes: 1 addition & 1 deletion src/backend/mscoffobj.c
Original file line number Diff line number Diff line change
Expand Up @@ -1772,7 +1772,7 @@ segidx_t MsCoffObj::data_start(Symbol *sdata, targ_size_t datasize, segidx_t seg
if (sdata->Salignment > 0)
{ if (SegData[seg]->SDalignment < sdata->Salignment)
SegData[seg]->SDalignment = sdata->Salignment;
alignbytes = (offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1);
alignbytes = ((offset + sdata->Salignment - 1) & ~(sdata->Salignment - 1)) - offset;
}
else
alignbytes = align(datasize, offset) - offset;
Expand Down

0 comments on commit 5446feb

Please sign in to comment.