OpenCores
URL https://opencores.org/ocsvn/fwrisc/fwrisc/trunk

Subversion Repositories fwrisc

[/] [fwrisc/] [trunk/] [ve/] [fwrisc/] [tests/] [ElfFileReader.cpp] - Rev 2

Compare with Previous | Blame | View Log

/*
 * ElfFileReader.cpp
 *
 * Copyright 2018 Matthew Ballance
 *
 * Licensed under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in
 * compliance with the License.  You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in
 * writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied.  See
 * the License for the specific language governing
 * permissions and limitations under the License.
 *
 *  Created on: Nov 17, 2018
 *      Author: ballance
 */
 
#include "ElfFileReader.h"
#include <stdio.h>
#include <elf.h>
 
ElfFileReader::ElfFileReader() {
	m_fp = 0;
}
 
ElfFileReader::~ElfFileReader() {
	// TODO Auto-generated destructor stub
}
 
bool ElfFileReader::read(const std::string &path) {
	Elf32_Phdr phdr;
	Elf32_Shdr shdr;
 
	m_fp = fopen(path.c_str(), "rb");
 
	if (!m_fp) {
		fprintf(stdout, "Error: failed to open file %s\n", path.c_str());
		return false;
	}
 
	fread(&m_hdr, sizeof(Elf32_Ehdr), 1, m_fp);
 
	for (uint32_t i=0; i<m_hdr.e_shnum; i++) {
		read(m_hdr.e_shoff+m_hdr.e_shentsize*i, &shdr, sizeof(Elf32_Shdr));
 
		visit_shdr(shdr);
	}
 
	fclose(m_fp);
	m_fp = 0;
 
	return true;
}
 
void ElfFileReader::read(uint32_t off, void *dst, uint32_t sz) {
	fseek(m_fp, off, 0);
	fread(dst, sz, 1, m_fp);
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.