Skip to content

Commit

Permalink
Merge pull request #4168 from MartinNowak/fix13779
Browse files Browse the repository at this point in the history
 fix Issue 13779 - gdb can't find frame base when using ld.gold
  • Loading branch information
WalterBright committed Nov 27, 2014
2 parents 9bb7b32 + 4c759b9 commit e7a03fd
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions src/backend/dwarf.c
Expand Up @@ -110,16 +110,14 @@ void dwarf_addrel64(int seg, targ_size_t offset, int targseg, targ_size_t val)

void dwarf_appreladdr(int seg, Outbuffer *buf, int targseg, targ_size_t val)
{
if (I64)
{
dwarf_addrel64(seg, buf->size(), targseg, val);
buf->write64(0);
}
else
{
dwarf_addrel(seg, buf->size(), targseg, 0);
buf->write32(val);
}
dwarf_addrel64(seg, buf->size(), targseg, I64 ? val : 0);
buf->write64(I64 ? 0 : val);
}

void dwarf_apprel32(int seg, Outbuffer *buf, int targseg, targ_size_t val)
{
dwarf_addrel(seg, buf->size(), targseg, I64 ? val : 0);
buf->write32(I64 ? 0 : val);
}

void append_addr(Outbuffer *buf, targ_size_t addr)
Expand Down Expand Up @@ -1213,10 +1211,13 @@ void dwarf_func_term(Symbol *sfunc)
dwarf_appreladdr(infoseg, infobuf, seg, funcoffset);
dwarf_appreladdr(infoseg, infobuf, seg, funcoffset + sfunc->Ssize);

// DW_AT_frame_base
#if ELFOBJ
dwarf_addrel(infoseg,infobuf->size(),debug_loc_seg, 0);
dwarf_apprel32(infoseg, infobuf, debug_loc_seg, debug_loc_buf->size());
#else
// 64-bit DWARF relocations don't work for OSX64 codegen
infobuf->write32(debug_loc_buf->size());
#endif
infobuf->write32(debug_loc_buf->size()); // DW_AT_frame_base

if (haveparameters)
{
Expand Down

0 comments on commit e7a03fd

Please sign in to comment.