| /******************************************************************************* |
| * 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 |
| */ |
| ISymbol getSymbolAtAddress(IAddress linkAddress); |
| |
| /** |
| * Get the byte order of data in the executable |
| * @return {@link ByteOrder} |
| */ |
| ByteOrder getByteOrder(); |
| } |