toolsandutils/e32tools/checklib/object/elf/elf_section_header.cpp
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /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<const Elf32_Shdr*>(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
+