GP-3838: Add qemu+gdb launcher.

This commit is contained in:
Dan 2024-03-01 12:36:13 -05:00
parent 63e64d5b28
commit 289c5c90fa
16 changed files with 179 additions and 5 deletions

View file

@ -0,0 +1,78 @@
#!/usr/bin/bash
## ###
# IP: GHIDRA
#
# 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.
##
#@title qemu + gdb
#@desc <html><body width="300px">
#@desc <h3>Launch with <tt>qemu</tt> and connect with <tt>gdb</tt></h3>
#@desc <p>This will launch the target on the local machine using <tt>qemu</tt>. Then in a second
#@desc terminal, it will connect <tt>gdb</tt> to QEMU's GDBstub.
#@desc GDB must already be installed on your system, it must support your target architecture
#@desc (you may install <tt>gdb-multiarch</tt>), and it must embed the Python 3 interpreter. You
#@desc will also need <tt>protobuf</tt> installed for Python 3.
#@desc </body></html>
#@menu-group qemu
#@icon icon.debugger
#@help TraceRmiLauncherServicePlugin#gdb
#@enum StartCmd:str run start starti
#@arg :str "Image" "The target binary executable image"
#@args "Arguments" "Command-line arguments to pass to the target"
#@env GHIDRA_LANG_EXTTOOL_qemu:str="" "Path to qemu" "The path to qemu for the target architecture."
#@env QEMU_GDB:int=12345 "QEMU Port" "Port for gdb connection to qemu"
#@env OPT_EXTRA_QEMU_ARGS:str="" "Extra qemu arguments" "Extra arguments to pass to qemu. Use with care."
#@env OPT_GDB_PATH:str="gdb-multiarch" "Path to gdb" "The path to gdb. Omit the full path to resolve using the system PATH."
#@env OPT_EXTRA_TTY:bool=false "QEMU TTY" "Provide a separate terminal emulator for the target."
#@tty TTY_TARGET if env:OPT_EXTRA_TTY
if [ -d ${GHIDRA_HOME}/ghidra/.git ]
then
export PYTHONPATH=$GHIDRA_HOME/ghidra/Ghidra/Debug/Debugger-agent-gdb/build/pypkg/src:$PYTHONPATH
export PYTHONPATH=$GHIDRA_HOME/ghidra/Ghidra/Debug/Debugger-rmi-trace/build/pypkg/src:$PYTHONPATH
elif [ -d ${GHIDRA_HOME}/.git ]
then
export PYTHONPATH=$GHIDRA_HOME/Ghidra/Debug/Debugger-agent-gdb/build/pypkg/src:$PYTHONPATH
export PYTHONPATH=$GHIDRA_HOME/Ghidra/Debug/Debugger-rmi-trace/build/pypkg/src:$PYTHONPATH
else
export PYTHONPATH=$GHIDRA_HOME/Ghidra/Debug/Debugger-agent-gdb/pypkg/src:$PYTHONPATH
export PYTHONPATH=$GHIDRA_HOME/Ghidra/Debug/Debugger-rmi-trace/pypkg/src:$PYTHONPATH
fi
target_image="$1"
if [ -z "$TTY_TARGET" ]
then
"$GHIDRA_LANG_EXTTOOL_qemu" $@ &
else
"$GHIDRA_LANG_EXTTOOL_qemu" $@ <$TTY_TARGET >$TTY_TARGET 2>&1 &
fi
# Give QEMU a moment to open the socket
sleep 0.1
"$OPT_GDB_PATH" \
-q \
-ex "set pagination off" \
-ex "set confirm off" \
-ex "show version" \
-ex "python import ghidragdb" \
-ex "file \"$target_image\"" \
-ex "set args $target_args" \
-ex "set inferior-tty $TTY_TARGET" \
-ex "ghidra trace connect \"$GHIDRA_TRACE_RMI_ADDR\"" \
-ex "ghidra trace start" \
-ex "ghidra trace sync-enable" \
-ex "target remote localhost:$QEMU_GDB" \
-ex "set confirm on" \
-ex "set pagination on"

View file

@ -513,7 +513,8 @@ def install_hooks():
gdb.events.exited.connect(on_exited) # Inferior exited
gdb.events.clear_objfiles.connect(on_clear_objfiles)
gdb.events.free_objfile.connect(on_free_objfile)
if hasattr(gdb.events, 'free_objfile'):
gdb.events.free_objfile.connect(on_free_objfile)
gdb.events.new_objfile.connect(on_new_objfile)
gdb.events.breakpoint_created.connect(on_breakpoint_created)
@ -547,7 +548,8 @@ def remove_hooks():
gdb.events.exited.disconnect(on_exited) # Inferior exited
gdb.events.clear_objfiles.disconnect(on_clear_objfiles)
gdb.events.free_objfile.disconnect(on_free_objfile)
if hasattr(gdb.events, 'free_objfile'):
gdb.events.free_objfile.disconnect(on_free_objfile)
gdb.events.new_objfile.disconnect(on_new_objfile)
gdb.events.breakpoint_created.disconnect(on_breakpoint_created)

View file

@ -102,6 +102,7 @@ public abstract class AbstractScriptTraceRmiLaunchOffer extends AbstractTraceRmi
List<String> commandLine = new ArrayList<>();
Map<String, String> env = new HashMap<>(System.getenv());
prepareSubprocess(commandLine, env, args, address);
env.put("GHIDRA_LANGUAGE_ID", program.getLanguageID().toString());
for (Map.Entry<String, TtyCondition> ent : attrs.extraTtys().entrySet()) {
if (!ent.getValue().isActive(args)) {

View file

@ -64,6 +64,8 @@ public abstract class AbstractTraceRmiLaunchOffer implements TraceRmiLaunchOffer
public static final String PREFIX_DBGLAUNCH = "DBGLAUNCH_";
public static final String PARAM_DISPLAY_IMAGE = "Image";
public static final String PREFIX_PARAM_EXTTOOL = "env:GHIDRA_LANG_EXTTOOL_";
public static final int DEFAULT_TIMEOUT_MILLIS = 10000;
protected record PtyTerminalSession(Terminal terminal, Pty pty, PtySession session,
@ -273,6 +275,15 @@ public abstract class AbstractTraceRmiLaunchOffer implements TraceRmiLaunchOffer
}
paramImage = (ParameterDescription<String>) param;
}
else if (param.name.startsWith(PREFIX_PARAM_EXTTOOL)) {
String tool = param.name.substring(PREFIX_PARAM_EXTTOOL.length());
List<String> names =
program.getLanguage().getLanguageDescription().getExternalNames(tool);
if (names != null && !names.isEmpty()) {
var paramStr = (ParameterDescription<String>) param;
paramStr.set(map, names.get(0));
}
}
}
if (paramImage != null) {
File imageFile = TraceRmiLauncherServicePlugin.getProgramPath(program);

View file

@ -31,6 +31,16 @@ import ghidra.trace.model.modules.TraceModule;
public class DefaultModuleMapProposal
extends AbstractMapProposal<TraceModule, Program, ModuleMapEntry>
implements ModuleMapProposal {
protected static final int BLOCK_BITS = 12;
protected static final int BLOCK_SIZE = 1 << BLOCK_BITS;
protected static final long BLOCK_MASK = -1L << BLOCK_BITS;
protected static AddressRange quantize(AddressRange range) {
AddressSpace space = range.getAddressSpace();
Address min = space.getAddress(range.getMinAddress().getOffset() & BLOCK_MASK);
Address max = space.getAddress(range.getMaxAddress().getOffset() | ~BLOCK_MASK);
return new AddressRangeImpl(min, max);
}
/**
* A module-program entry in a proposed module map
@ -129,8 +139,8 @@ public class DefaultModuleMapProposal
public void setProgram(Program program) {
setToObject(program, program);
try {
this.moduleRange =
new AddressRangeImpl(getModule().getBase(), computeImageSize(program));
this.moduleRange = quantize(
new AddressRangeImpl(getModule().getBase(), computeImageSize(program)));
}
catch (AddressOverflowException e) {
// This is terribly unlikely
@ -203,7 +213,7 @@ public class DefaultModuleMapProposal
private void processModule() {
moduleBase = module.getBase();
try {
moduleRange = new AddressRangeImpl(moduleBase, imageSize);
moduleRange = quantize(new AddressRangeImpl(moduleBase, imageSize));
}
catch (AddressOverflowException e) {
return; // Just score it as having no matches?

View file

@ -17,6 +17,7 @@
<external_name tool="IDA-PRO" name="68040"/>
<external_name tool="IDA-PRO" name="68K"/>
<external_name tool="DWARF.register.mapping.file" name="68000.dwarf"/>
<external_name tool="qemu" name="qemu-m68k"/>
</language>
<language processor="68000"
endian="big"
@ -32,6 +33,7 @@
<external_name tool="gnu" name="m68k:68030"/>
<external_name tool="IDA-PRO" name="68030"/>
<external_name tool="DWARF.register.mapping.file" name="68000.dwarf"/>
<external_name tool="qemu" name="qemu-m68k"/>
</language>
<language processor="68000"
endian="big"
@ -49,6 +51,7 @@
<external_name tool="IDA-PRO" name="68020"/>
<external_name tool="IDA-PRO" name="68020EX"/>
<external_name tool="DWARF.register.mapping.file" name="68000.dwarf"/>
<external_name tool="qemu" name="qemu-m68k"/>
</language>
<language processor="68000"
endian="big"
@ -64,5 +67,6 @@
<compiler name="register" spec="68000_register.cspec" id="register"/>
<external_name tool="IDA-PRO" name="colfire"/>
<external_name tool="DWARF.register.mapping.file" name="68000.dwarf"/>
<external_name tool="qemu" name="qemu-m68k"/>
</language>
</language_definitions>

View file

@ -14,6 +14,7 @@
<compiler name="Visual Studio" spec="AARCH64_win.cspec" id="windows"/>
<external_name tool="gnu" name="aarch64"/>
<external_name tool="DWARF.register.mapping.file" name="AARCH64.dwarf"/>
<external_name tool="qemu" name="qemu-aarch64"/>
</language>
<language processor="AARCH64"
endian="big"
@ -29,6 +30,7 @@
<compiler name="default" spec="AARCH64.cspec" id="default"/>
<external_name tool="gnu" name="aarch64"/>
<external_name tool="DWARF.register.mapping.file" name="AARCH64.dwarf"/>
<external_name tool="qemu" name="qemu-aarch64_be"/>
</language>
<language processor="AARCH64"
endian="little"
@ -44,6 +46,7 @@
<compiler name="default" spec="AARCH64_ilp32.cspec" id="default"/>
<external_name tool="gnu" name="aarch64:ilp32"/>
<external_name tool="DWARF.register.mapping.file" name="AARCH64.dwarf"/>
<external_name tool="qemu" name="qemu-aarch64"/>
</language>
<language processor="AARCH64"
endian="big"
@ -60,5 +63,6 @@
<compiler name="default" spec="AARCH64_ilp32.cspec" id="default"/>
<external_name tool="gnu" name="aarch64:ilp32"/>
<external_name tool="DWARF.register.mapping.file" name="AARCH64.dwarf"/>
<external_name tool="qemu" name="qemu-aarch64_be"/>
</language>
</language_definitions>

View file

@ -23,6 +23,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -42,6 +43,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -81,6 +83,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -98,6 +101,7 @@
<external_name tool="gnu" name="arm_any"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -117,6 +121,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -151,6 +156,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -171,6 +177,7 @@
<external_name tool="gnu" name="armv6s-m"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -190,6 +197,7 @@
<external_name tool="gnu" name="armv6s-m"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -210,6 +218,7 @@
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<!-- change DWARF register mapping to ARMneon.dwarf if VFPv2 is enabled -->
<!-- <external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/> -->
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -230,6 +239,7 @@
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<!-- change DWARF register mapping to ARMneon.dwarf if VFPv2 is enabled -->
<!-- <external_name tool="DWARF.register.mapping.file" name="ARMneon.dwarf"/> -->
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -248,6 +258,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -266,6 +277,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -282,6 +294,7 @@
<external_name tool="gnu" name="armv5"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -298,6 +311,7 @@
<external_name tool="gnu" name="armv5"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -315,6 +329,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -332,6 +347,7 @@
<external_name tool="gdis.disassembler.options.file" name="ARM.gdis"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
<language processor="ARM"
@ -352,6 +368,7 @@
<external_name tool="gnu" name="armv3m"/>
<external_name tool="IDA-PRO" name="arm"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-arm"/>
</language>
<language processor="ARM"
@ -372,6 +389,7 @@
<external_name tool="gnu" name="armv3m"/>
<external_name tool="IDA-PRO" name="armb"/>
<external_name tool="DWARF.register.mapping.file" name="ARM.dwarf"/>
<external_name tool="qemu" name="qemu-armeb"/>
</language>
</language_definitions>

View file

@ -41,6 +41,7 @@
<description>Loongson 3 64-bit with 32-bit FP</description>
<compiler name="default" spec="lp64f.cspec" id="default"/>
<external_name tool="gnu" name="Loongarch64"/>
<external_name tool="qemu" name="qemu-mips64el"/>
</language>
<language processor="Loongarch"
@ -55,6 +56,7 @@
<description>Loongson 3 64-bit with 64-bit FP</description>
<compiler name="default" spec="lp64d.cspec" id="default"/>
<external_name tool="gnu" name="Loongarch64"/>
<external_name tool="qemu" name="qemu-mips64el"/>
</language>
</language_definitions>

View file

@ -17,6 +17,7 @@
<external_name tool="gnu" name="mips:4000"/>
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips"/>
</language>
<language processor="MIPS"
endian="little"
@ -35,6 +36,7 @@
<external_name tool="gnu" name="mips:4000"/>
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsel"/>
</language>
<language processor="MIPS"
endian="big"
@ -49,6 +51,7 @@
<compiler name="default" spec="mips32_fp64.cspec" id="default"/>
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips"/>
</language>
<language processor="MIPS"
endian="little"
@ -63,6 +66,7 @@
<compiler name="default" spec="mips32_fp64.cspec" id="default"/>
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsel"/>
</language>
<language processor="MIPS"
endian="big"
@ -79,6 +83,7 @@
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="IDA-PRO" name="r5900r"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64"/>
</language>
<language processor="MIPS"
endian="little"
@ -96,6 +101,7 @@
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="IDA-PRO" name="r5900l"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64el"/>
</language>
<language processor="MIPS"
endian="big"
@ -142,6 +148,7 @@
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="IDA-PRO" name="r5900r"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64"/>
</language>
<language processor="MIPS"
endian="little"
@ -158,6 +165,7 @@
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="IDA-PRO" name="r5900l"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64el"/>
</language>
<language processor="MIPS"
endian="big"
@ -178,6 +186,7 @@
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="IDA-PRO" name="r5900r"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsn32"/>
</language>
<language processor="MIPS"
endian="little"
@ -199,6 +208,7 @@
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="IDA-PRO" name="r5900l"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsn32el"/>
</language>
<language processor="MIPS"
endian="little"
@ -257,6 +267,7 @@
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="IDA-PRO" name="r5900r"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsn32"/>
</language>
<language processor="MIPS"
endian="little"
@ -277,6 +288,7 @@
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="IDA-PRO" name="r5900l"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsn32el"/>
</language>
<language processor="MIPS"
endian="big"

View file

@ -16,6 +16,7 @@
<external_name tool="gnu" name="powerpc:common"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="little"
@ -48,6 +49,7 @@
<external_name tool="gnu" name="powerpc:common64"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64"/>
</language>
<language processor="PowerPC"
endian="big"
@ -64,6 +66,7 @@
<external_name tool="gnu" name="powerpc:common64"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64abi32"/>
</language>
<language processor="PowerPC"
endian="little"
@ -96,6 +99,7 @@
<external_name tool="gnu" name="powerpc:common64"/>
<external_name tool="IDA-PRO" name="ppcl"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64le"/>
</language>
<language processor="PowerPC"
endian="big"
@ -111,6 +115,7 @@
<external_name tool="gnu" name="powerpc:403"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="little"
@ -142,6 +147,7 @@
<external_name tool="gnu" name="powerpc:MPC8XX"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="big"
@ -157,6 +163,7 @@
<external_name tool="gnu" name="powerpc:MPC8XX"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="little"
@ -189,6 +196,7 @@
<external_name tool="gnu" name="powerpc:e500"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="little"
@ -220,6 +228,7 @@
<external_name tool="gnu" name="powerpc:e500mc"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc"/>
</language>
<language processor="PowerPC"
endian="little"
@ -251,6 +260,7 @@
<external_name tool="gnu" name="powerpc:e500mc64"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64abi32"/>
</language>
<language processor="PowerPC"
endian="little"
@ -284,6 +294,7 @@
<external_name tool="gnu" name="powerpc:e500mc64"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64abi32"/>
</language>
<language processor="PowerPC"
endian="little"
@ -316,6 +327,7 @@
<external_name tool="gnu" name="powerpc:e500mc"/>
<external_name tool="IDA-PRO" name="ppc"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64"/>
</language>
<language processor="PowerPC"
endian="little"
@ -331,6 +343,7 @@
<external_name tool="gnu" name="powerpc:e500mc"/>
<external_name tool="IDA-PRO" name="ppcl"/>
<external_name tool="DWARF.register.mapping.file" name="ppc.dwarf"/>
<external_name tool="qemu" name="qemu-ppc64le"/>
</language>
<language processor="PowerPC"
endian="big"

View file

@ -14,6 +14,7 @@
<compiler name="gcc" spec="riscv64.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv64.dwarf"/>
<external_name tool="gnu" name="riscv:rv64"/>
<external_name tool="qemu" name="qemu-riscv64"/>
</language>
<language processor="RISCV"
endian="little"
@ -27,6 +28,7 @@
<compiler name="gcc" spec="riscv64.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv64.dwarf"/>
<external_name tool="gnu" name="riscv:rv64"/>
<external_name tool="qemu" name="qemu-riscv64"/>
</language>
<language processor="RISCV"
endian="little"
@ -40,6 +42,7 @@
<compiler name="gcc" spec="riscv64-fp.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv64.dwarf"/>
<external_name tool="gnu" name="riscv:rv64"/>
<external_name tool="qemu" name="qemu-riscv64"/>
</language>
<language processor="RISCV"
endian="little"
@ -53,6 +56,7 @@
<compiler name="gcc" spec="riscv64-fp.cspec" id="gcc"/>
<external_name tool="gnu" name="riscv:rv64"/>
<external_name tool="DWARF.register.mapping.file" name="riscv64.dwarf"/>
<external_name tool="qemu" name="qemu-riscv64"/>
</language>
<language processor="RISCV"
endian="little"
@ -66,6 +70,7 @@
<compiler name="gcc" spec="riscv64-fp.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv64.dwarf"/>
<external_name tool="gnu" name="riscv:rv64"/>
<external_name tool="qemu" name="qemu-riscv64"/>
</language>
<language processor="RISCV"
endian="little"
@ -79,6 +84,7 @@
<compiler name="gcc" spec="riscv32.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
<language processor="RISCV"
endian="little"
@ -92,6 +98,7 @@
<compiler name="gcc" spec="riscv32.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
<language processor="RISCV"
endian="little"
@ -105,6 +112,7 @@
<compiler name="gcc" spec="riscv32.cspec" id="gcc"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
<language processor="RISCV"
endian="little"
@ -118,6 +126,7 @@
<compiler name="gcc" spec="riscv32-fp.cspec" id="gcc"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
<language processor="RISCV"
endian="little"
@ -131,6 +140,7 @@
<compiler name="gcc" spec="riscv32-fp.cspec" id="gcc"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
<language processor="RISCV"
endian="little"
@ -144,6 +154,7 @@
<compiler name="gcc" spec="riscv32-fp.cspec" id="gcc"/>
<external_name tool="gnu" name="riscv:rv32"/>
<external_name tool="DWARF.register.mapping.file" name="riscv32.dwarf"/>
<external_name tool="qemu" name="qemu-riscv32"/>
</language>
</language_definitions>

View file

@ -14,6 +14,7 @@
<compiler name="default" spec="SparcV9_32.cspec" id="default"/>
<external_name tool="gnu" name="sparc:v9b"/>
<external_name tool="IDA-PRO" name="sparcb" />
<external_name tool="qemu" name="qemu-sparc"/>
</language>
<language processor="Sparc"
endian="big"
@ -28,5 +29,6 @@
<compiler name="default" spec="SparcV9_64.cspec" id="default"/>
<external_name tool="gnu" name="sparc:v9b"/>
<external_name tool="IDA-PRO" name="sparcb" />
<external_name tool="qemu" name="qemu-sparc64"/>
</language>
</language_definitions>

View file

@ -14,6 +14,7 @@
<compiler name="default" spec="SuperH4_be.cspec" id="default"/>
<external_name tool="IDA-PRO" name="sh4b"/>
<external_name tool="gnu" name="sh4"/>
<external_name tool="qemu" name="qemu-sh4eb"/>
</language>
<language processor="SuperH4"
endian="little"
@ -29,5 +30,6 @@
<compiler name="Visual Studio" spec="SuperH4_le.cspec" id="windows"/>
<external_name tool="IDA-PRO" name="sh4"/>
<external_name tool="gnu" name="sh4"/>
<external_name tool="qemu" name="qemu-sh4"/>
</language>
</language_definitions>

View file

@ -14,6 +14,7 @@
<compiler name="default" spec="xtensa.cspec" id="default"/>
<external_name tool="gnu" name="xtensa"/>
<external_name tool="DWARF.register.mapping.file" name="xtensa.dwarf"/>
<external_name tool="qemu" name="qemu-xtensa"/>
</language>
<language processor="Xtensa"
endian="big"
@ -28,5 +29,6 @@
<compiler name="default" spec="xtensa.cspec" id="default"/>
<external_name tool="gnu" name="xtensa"/>
<external_name tool="DWARF.register.mapping.file" name="xtensa.dwarf"/>
<external_name tool="qemu" name="qemu-xtensaeb"/>
</language>
</language_definitions>

View file

@ -30,6 +30,7 @@
<external_name tool="IDA-PRO" name="metapc"/>
<external_name tool="DWARF.register.mapping.file" name="x86.dwarf"/>
<external_name tool="Golang.register.info.file" name="x86-32-golang.register.info"/>
<external_name tool="qemu" name="qemu-i386"/>
</language>
<language processor="x86"
endian="little"
@ -99,6 +100,7 @@
<external_name tool="IDA-PRO" name="metapc"/>
<external_name tool="DWARF.register.mapping.file" name="x86-64.dwarf"/>
<external_name tool="Golang.register.info.file" name="x86-64-golang.register.info"/>
<external_name tool="qemu" name="qemu-x86_64"/>
</language>
<language processor="x86"
endian="little"