1//===- EhFrameHdr.cpp -----------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include <mcld/LD/EhFrameHdr.h> 10 11using namespace mcld; 12 13//========================== 14// EhFrameHdr 15EhFrameHdr::EhFrameHdr(const EhFrame& pEhFrameData, 16 const LDSection& pEhFrameSect, 17 LDSection& pEhFrameHdrSect) 18 : m_EhFrameData(pEhFrameData), 19 m_EhFrameSect(pEhFrameSect), 20 m_EhFrameHdrSect(pEhFrameHdrSect) 21{ 22} 23 24EhFrameHdr::~EhFrameHdr() 25{ 26} 27 28/// @ref lsb core generic 4.1 29/// .eh_frame_hdr section format 30/// uint8_t : version 31/// uint8_t : eh_frame_ptr_enc 32/// uint8_t : fde_count_enc 33/// uint8_t : table_enc 34/// uint32_t : eh_frame_ptr 35/// uint32_t : fde_count 36/// __________________________ when fde_count > 0 37/// <uint32_t, uint32_t>+ : binary search table 38 39/// sizeOutput - base on the fde count to size output 40void EhFrameHdr::sizeOutput() 41{ 42 size_t size = 12; 43 if (m_EhFrameData.canRecognizeAllEhFrame()) { 44 size_t fde_count = m_EhFrameData.getFDECount(); 45 size += 8 * fde_count; 46 } 47 m_EhFrameHdrSect.setSize(size); 48} 49 50