[PATCH] Emit .eh_frame with relocations to functions, rather than sections

Oliver Stannard oliver.stannard at arm.com
Thu Oct 30 03:46:52 PDT 2014


When LLVM emits DWARF call frame information, it currently creates a local, section-relative symbol in the code section, which is pointed to by a relocation on the .eh_frame section. However, for C++ we emit some functions in section groups, and the SysV ABI has some rules to make it easier to remove these sections (http://www.sco.com/developers/gabi/latest/ch4.sheader.html#section_group_rules):

> A symbol table entry with STB_LOCAL binding that is defined relative to one of a group's sections, and that is contained in a symbol table section that is not part of the group, must be discarded if the group members are discarded. References to this symbol table entry from outside the group are not allowed.

This means that we need to use the function symbol for the relocation, not a temporary symbol.

There was a comment in the code claiming that the local symbol was used to avoid creating a relocation, but a relocation must be created anyway as the code and CFI are in different sections.

http://reviews.llvm.org/D6033

Files:
  include/llvm/MC/MCObjectStreamer.h
  include/llvm/MC/MCStreamer.h
  lib/CodeGen/AsmPrinter/ARMException.cpp
  lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
  lib/MC/MCAsmStreamer.cpp
  lib/MC/MCObjectStreamer.cpp
  lib/MC/MCParser/AsmParser.cpp
  lib/MC/MCStreamer.cpp
  test/DebugInfo/AArch64/eh_frame.s
  test/DebugInfo/AArch64/eh_frame_personality.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6033.15565.patch
Type: text/x-patch
Size: 9088 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141030/15cc5cc8/attachment.bin>


More information about the llvm-commits mailing list