diff -r 000000000000 -r 83f4b4db085c toolsandutils/e32tools/checklib/object/elf/elf_section_header.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolsandutils/e32tools/checklib/object/elf/elf_section_header.cpp Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,138 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "elf_section_header.h" + + +namespace elf +{ + Section_header::Section_header(const char* p1, const char* p2) + : m_data( reinterpret_cast(p1) ) + { + // This could be useful for future error checking. + (void) p2; + + //--if (m_data->sh_type != SHT_NOBITS) + //--{ + //-- if (m_data->sh_offset + m_data->sh_size > a_mem.get_size() ) + //-- { + //-- throw std::runtime_error("file is too small"); + //-- } + //--} + + //--if (m_data->sh_addralign > 1) + //--{ + //-- if (m_data->sh_addr % m_data->sh_addralign != 0) + //-- { + //-- throw std::runtime_error("incorrect alignment"); + //-- } + //--} + } + + uint32_t Section_header::get_name() + { + return m_data->sh_name; + } + + bool Section_header::is_type_null() const + { + return (m_data->sh_type == SHT_NULL); + } + + bool Section_header::is_type_progbits() const + { + return (m_data->sh_type == SHT_PROGBITS); + } + + bool Section_header::is_type_symtab() const + { + return (m_data->sh_type == SHT_SYMTAB); + } + + bool Section_header::is_type_dynsym() const + { + return (m_data->sh_type == SHT_DYNSYM); + } + + bool Section_header::is_type_strtab() const + { + return (m_data->sh_type == SHT_STRTAB); + } + + bool Section_header::is_type_rela() const + { + return (m_data->sh_type == SHT_RELA); + } + + bool Section_header::is_type_nobits() const + { + return (m_data->sh_type == SHT_NOBITS); + } + + bool Section_header::is_type_rel() const + { + return (m_data->sh_type == SHT_REL); + } + + bool Section_header::is_flags_write() const + { + return (m_data->sh_flags & SHF_WRITE) != 0; + } + bool Section_header::is_flags_alloc() const + { + return (m_data->sh_flags & SHF_ALLOC) != 0; + } + bool Section_header::is_flags_execinstr() const + { + return (m_data->sh_flags & SHF_EXECINSTR) != 0; + } + + uint32_t Section_header::get_addr() + { + return m_data->sh_addr; + } + + uint32_t Section_header::get_offset() const + { + return m_data->sh_offset; + } + + uint32_t Section_header::get_size() const + { + return m_data->sh_size; + } + + uint32_t Section_header::get_link() + { + return m_data->sh_link; + } + + uint32_t Section_header::get_info() + { + return m_data->sh_info; + } + + uint32_t Section_header::get_addralign() + { + return m_data->sh_addralign; + } + + uint32_t Section_header::get_entsize() const + { + return m_data->sh_entsize; + } + +} // namespace elf +