blob: 2dd06aa5799bb141cd48865d99164dcf1a08ac74 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nokia - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.edc.symbols;
import java.nio.ByteOrder;
import java.util.Collection;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.debug.edc.internal.symbols.ISection;
import org.eclipse.core.runtime.IPath;
/**
* Interface for handling different kinds of executables. This manages
* the mid-level access to different executable formats (ELF, PE-COFF, etc.).
*/
public interface IExecutableSymbolicsReader {
/**
* Dispose the reader and any files or memory it is holding
*/
void dispose();
/**
* Get the file represented by this reader
*/
IPath getSymbolFile();
/**
* Get the executable sections from the symbol file (names and buffers)
* @return unmodifiable list of sections
*/
Collection<IExecutableSection> getExecutableSections();
/**
* Get a section with the given name
* @param sectionName
* @return {@link IExecutableSection} or <code>null</code>
*/
IExecutableSection findExecutableSection(String sectionName);
/**
* Get the (low level) sections from the symbol file
*
* @return unmodifiable list of sections
*/
Collection<ISection> getSections();
/**
* Get the base image address generated by the linker
*
* @return the base address, or null if unknown
*/
IAddress getBaseLinkAddress();
/**
* Get the modification date of the symbol file when it was parsed. This is
* used for caching purposes.
*
* @return the modification date (e.g. file.lastModified())
*/
long getModificationDate();
/**
* Find symbol(s) with the given name. If no exact
* matches are found, also search for a symbol whose
* undecorated variant matches the name (e.g. in Win32, "_main" -> "main",
* "__imp_foo@8" -> "foo").
* @param name name of the symbol
* @return collection of matching symbols, may be empty
*/
Collection<ISymbol> findSymbols(String name);
/**
* Find symbol(s) with the given unmangled name.
* The name will be interpreted as if spaces are irrelevant.
* The name will be matched as if a fully qualified name (e.g.
* leading "::" may be missing).
* If a symbol is a function and the name does not include
* arguments, any function with the same qualified name matches
* (e.g. "foo(int)" for name="foo").
* @param name name of unmangled string (e.g. "Foo::Bar", "main", "::std::myfunc(int)")
* @return collection of matching symbols, may be empty
*/
Collection<ISymbol> findUnmangledSymbols(String name);
/**
* Get the symbols from the symbol table
*
* @return unmodifiable list of symbols
*/
Collection<ISymbol> getSymbols();
/**
* Get the symbol that contains the given link address
*
* @param linkAddress
* the link address
* @return the symbol containing this address, or null if none found
* @see #getSymbolsAtAddress(IAddress) in many cases there may be more than
* one such symbol and this will only return the first one
*/
ISymbol getSymbolAtAddress(IAddress linkAddress);
/**
* Get the symbols that contains the given link address
*
* @param linkAddress
* the link address
* @return the symbols containing this address, or the empty collection if none found
* @since 3.0
*/
Collection<ISymbol> getSymbolsAtAddress(IAddress linkAddress);
/**
* Get the byte order of data in the executable
* @return {@link ByteOrder}
*/
ByteOrder getByteOrder();
}