//===- EhFrameHdr.cpp -----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/LD/EhFrameHdr.h> using namespace mcld; //========================== // EhFrameHdr EhFrameHdr::EhFrameHdr(const EhFrame& pEhFrameData, const LDSection& pEhFrameSect, LDSection& pEhFrameHdrSect) : m_EhFrameData(pEhFrameData), m_EhFrameSect(pEhFrameSect), m_EhFrameHdrSect(pEhFrameHdrSect) { } EhFrameHdr::~EhFrameHdr() { } /// @ref lsb core generic 4.1 /// .eh_frame_hdr section format /// uint8_t : version /// uint8_t : eh_frame_ptr_enc /// uint8_t : fde_count_enc /// uint8_t : table_enc /// uint32_t : eh_frame_ptr /// uint32_t : fde_count /// __________________________ when fde_count > 0 /// <uint32_t, uint32_t>+ : binary search table /// sizeOutput - base on the fde count to size output void EhFrameHdr::sizeOutput() { size_t size = 12; if (m_EhFrameData.canRecognizeAllEhFrame()) { size_t fde_count = m_EhFrameData.getFDECount(); size += 8 * fde_count; } m_EhFrameHdrSect.setSize(size); }