mirror of
https://github.com/devkitPro/buildscripts.git
synced 2026-03-22 01:54:32 -05:00
remove outdated patches, add latest
This commit is contained in:
parent
95647f86eb
commit
854bae61c8
|
|
@ -1,402 +0,0 @@
|
|||
diff -Nbaur --exclude=*.info* binutils-2.16.1/bfd/doc/chew.c binutils-2.16.1-new/bfd/doc/chew.c
|
||||
--- binutils-2.16.1/bfd/doc/chew.c Thu Mar 3 11:41:02 2005
|
||||
+++ binutils-2.16.1-new/bfd/doc/chew.c Mon Jun 20 00:14:07 2005
|
||||
@@ -91,6 +91,12 @@
|
||||
#define DEF_SIZE 5000
|
||||
#define STACK 50
|
||||
|
||||
+#ifdef __MINGW32__
|
||||
+/* Prevent \r\n\ line endings */
|
||||
+#include <fcntl.h>
|
||||
+unsigned int _CRT_fmode = _O_BINARY;
|
||||
+#endif
|
||||
+
|
||||
int internal_wanted;
|
||||
int internal_mode;
|
||||
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/config.sub binutils-2.16.1-new/config.sub
|
||||
--- binutils-2.16.1/config.sub Wed Jan 19 00:34:56 2005
|
||||
+++ binutils-2.16.1-new/config.sub Mon Jun 20 00:14:07 2005
|
||||
@@ -219,6 +219,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/configure.in binutils-2.16.1-new/configure.in
|
||||
--- binutils-2.16.1/configure.in Sun Jun 12 20:33:06 2005
|
||||
+++ binutils-2.16.1-new/configure.in Mon Jun 20 00:53:42 2005
|
||||
@@ -242,7 +242,7 @@
|
||||
|
||||
# Some tools are only suitable for building in a "native" situation.
|
||||
# Remove these if host!=target.
|
||||
-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
|
||||
+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
|
||||
|
||||
# Similarly, some are only suitable for cross toolchains.
|
||||
# Remove these if host=target.
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/gas/config/tc-ppc.c binutils-2.16.1-new/gas/config/tc-ppc.c
|
||||
--- binutils-2.16.1/gas/config/tc-ppc.c Wed Mar 2 13:24:01 2005
|
||||
+++ binutils-2.16.1-new/gas/config/tc-ppc.c Mon Jun 20 00:14:07 2005
|
||||
@@ -310,6 +310,7 @@
|
||||
sdr1 has the value 25
|
||||
srr0 has the value 26
|
||||
srr1 has the value 27
|
||||
+ gqr0..7 has the value 912..919
|
||||
|
||||
The table is sorted. Suitable for searching by a binary search. */
|
||||
|
||||
@@ -407,6 +408,15 @@
|
||||
|
||||
{ "fpscr", 0 },
|
||||
|
||||
+ { "gqr0", 912},
|
||||
+ { "gqr1", 913},
|
||||
+ { "gqr2", 914},
|
||||
+ { "gqr3", 915},
|
||||
+ { "gqr4", 916},
|
||||
+ { "gqr5", 917},
|
||||
+ { "gqr6", 918},
|
||||
+ { "gqr7", 919},
|
||||
+
|
||||
{ "lr", 8 }, /* Link Register */
|
||||
|
||||
{ "pmr", 0 },
|
||||
@@ -906,6 +916,9 @@
|
||||
ppc_cpu = (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC
|
||||
| PPC_OPCODE_64 | PPC_OPCODE_POWER4);
|
||||
}
|
||||
+ else if (strcmp (arg, "gekko") == 0)
|
||||
+ ppc_cpu = PPC_OPCODE_CLASSIC | PPC_OPCODE_PPC | PPC_OPCODE_32 | PPC_OPCODE_GEKKO;
|
||||
+
|
||||
/* -mcom means assemble for the common intersection between Power
|
||||
and PowerPC. At present, we just allow the union, rather
|
||||
than the intersection. */
|
||||
@@ -1107,7 +1120,9 @@
|
||||
-me500, -me500x2 generate code for Motorola e500 core complex\n\
|
||||
-mspe generate code for Motorola SPE instructions\n\
|
||||
-mregnames Allow symbolic names for registers\n\
|
||||
--mno-regnames Do not allow symbolic names for registers\n"));
|
||||
+-mno-regnames Do not allow symbolic names for registers\n\
|
||||
+-mspe generate code for Motorola SPE instructions\n\
|
||||
+-mgekko generate code for PowerPC Gekko\n"));
|
||||
#ifdef OBJ_ELF
|
||||
fprintf (stream, _("\
|
||||
-mrelocatable support for GCC's -mrelocatble option\n\
|
||||
@@ -1150,6 +1165,8 @@
|
||||
else
|
||||
ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32;
|
||||
}
|
||||
+ else if (strcmp(default_cpu, "gekko") == 0)
|
||||
+ ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32 | PPC_OPCODE_GEKKO;
|
||||
else
|
||||
as_fatal (_("Unknown default cpu = %s, os = %s"),
|
||||
default_cpu, default_os);
|
||||
@@ -2570,6 +2587,26 @@
|
||||
{
|
||||
endc = ')';
|
||||
need_paren = 0;
|
||||
+ if (opindex_ptr[1])
|
||||
+ {
|
||||
+ /* do check here if we have further opcodes */
|
||||
+ if (*str != endc && (endc != ',' || *str != '\0'))
|
||||
+ {
|
||||
+ as_bad(_("syntax error; found `%c' but expected `%c'"),*str,endc);
|
||||
+ break;
|
||||
+ }
|
||||
+ /* we have to move over whitespace ourselves */
|
||||
+ if (*str != '\0')
|
||||
+ {
|
||||
+ ++str;
|
||||
+ while (ISSPACE(*str))
|
||||
+ {
|
||||
+ ++str;
|
||||
+ }
|
||||
+ }
|
||||
+ /* now we're looking for the comma */
|
||||
+ endc = ',';
|
||||
+ }
|
||||
}
|
||||
else if ((operand->flags & PPC_OPERAND_PARENS) != 0)
|
||||
{
|
||||
@@ -2588,6 +2625,8 @@
|
||||
break;
|
||||
}
|
||||
|
||||
+ /* The call to expression should have advanced str past any
|
||||
+ whitespace. */
|
||||
if (*str != '\0')
|
||||
++str;
|
||||
}
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/include/opcode/ppc.h binutils-2.16.1-new/include/opcode/ppc.h
|
||||
--- binutils-2.16.1/include/opcode/ppc.h Thu Sep 9 13:42:37 2004
|
||||
+++ binutils-2.16.1-new/include/opcode/ppc.h Mon Jun 20 00:14:07 2005
|
||||
@@ -134,6 +134,9 @@
|
||||
/* Opcode is supported by machine check APU. */
|
||||
#define PPC_OPCODE_RFMCI 0x800000
|
||||
|
||||
+/* Opcode is only supported by the PowerPC Gekko processor. */
|
||||
+#define PPC_OPCODE_GEKKO (040000000)
|
||||
+
|
||||
/* A macro to extract the major opcode from an instruction. */
|
||||
#define PPC_OP(i) (((i) >> 26) & 0x3f)
|
||||
|
||||
@@ -281,6 +284,10 @@
|
||||
/* This operand is for the DQ field in a DQ form instruction. */
|
||||
#define PPC_OPERAND_DQ (0100000)
|
||||
|
||||
+/* This operand names a quantization register. The disassembler
|
||||
+ prints these with a leading 'gqr'. */
|
||||
+#define PPC_OPERAND_GQR (040000)
|
||||
+
|
||||
/* The POWER and PowerPC assemblers use a few macros. We keep them
|
||||
with the operands table for simplicity. The macro table is an
|
||||
array of struct powerpc_macro. */
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/opcodes/ppc-dis.c binutils-2.16.1-new/opcodes/ppc-dis.c
|
||||
--- binutils-2.16.1/opcodes/ppc-dis.c Tue Mar 22 15:31:19 2005
|
||||
+++ binutils-2.16.1-new/opcodes/ppc-dis.c Mon Jun 20 00:14:07 2005
|
||||
@@ -64,6 +64,13 @@
|
||||
&& strstr (info->disassembler_options, "efs") != NULL)
|
||||
dialect |= PPC_OPCODE_EFS;
|
||||
else
|
||||
+ if (info->disassembler_options
|
||||
+ && (strstr (info->disassembler_options, "gekko") == 0))
|
||||
+ {
|
||||
+ dialect |= PPC_OPCODE_GEKKO;
|
||||
+ dialect &= ~PPC_OPCODE_ALTIVEC;
|
||||
+ }
|
||||
+ else
|
||||
dialect |= (PPC_OPCODE_403 | PPC_OPCODE_601 | PPC_OPCODE_CLASSIC
|
||||
| PPC_OPCODE_COMMON | PPC_OPCODE_ALTIVEC);
|
||||
|
||||
@@ -239,6 +246,8 @@
|
||||
(*info->print_address_func) (memaddr + value, info);
|
||||
else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
|
||||
(*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
|
||||
+ else if ((operand->flags & PPC_OPERAND_GQR) != 0)
|
||||
+ (*info->fprintf_func) (info->stream, "gqr%ld", value);
|
||||
else if ((operand->flags & PPC_OPERAND_CR) == 0
|
||||
|| (dialect & PPC_OPCODE_PPC) == 0)
|
||||
(*info->fprintf_func) (info->stream, "%ld", value);
|
||||
@@ -304,4 +313,5 @@
|
||||
fprintf (stream, " power4 Disassemble the Power4 instructions\n");
|
||||
fprintf (stream, " 32 Do not disassemble 64-bit instructions\n");
|
||||
fprintf (stream, " 64 Allow disassembly of 64-bit instructions\n");
|
||||
+ fprintf (stream, " gekko Disassemble the Gamecube Gekko instructions\n");
|
||||
}
|
||||
diff -Nbaur --exclude=*.info* binutils-2.16.1/opcodes/ppc-opc.c binutils-2.16.1-new/opcodes/ppc-opc.c
|
||||
--- binutils-2.16.1/opcodes/ppc-opc.c Tue Apr 19 18:09:56 2005
|
||||
+++ binutils-2.16.1-new/opcodes/ppc-opc.c Mon Jun 20 00:14:07 2005
|
||||
@@ -93,6 +93,13 @@
|
||||
static unsigned long insert_ev8 (unsigned long, long, int, const char **);
|
||||
static long extract_ev8 (unsigned long, int, int *);
|
||||
|
||||
+static unsigned long insert_psq_gd (unsigned long, long, int, const char **);
|
||||
+static long extract_psq_gd (unsigned long, int, int *);
|
||||
+static unsigned long insert_psq_gx (unsigned long, long, int, const char **);
|
||||
+static long extract_psq_gx (unsigned long, int, int *);
|
||||
+
|
||||
+
|
||||
+
|
||||
/* The operands table.
|
||||
|
||||
The fields are bits, shift, insert, extract, flags.
|
||||
@@ -558,6 +565,25 @@
|
||||
#define MTMSRD_L WS + 1
|
||||
{ 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
|
||||
|
||||
+ /* I Field in psq_ instructions */
|
||||
+#define PSQ_DD MTMSRD_L + 1
|
||||
+ { 12, 0, 0, 0, PPC_OPERAND_PARENS|PPC_OPERAND_SIGNED },
|
||||
+
|
||||
+ /* W Field in psq_ instructions */
|
||||
+#define PSQ_WD PSQ_DD + 1
|
||||
+ { 1, 15, 0, 0, 0 },
|
||||
+
|
||||
+ /* d Field in psq_ instructions */
|
||||
+#define PSQ_GD PSQ_WD + 1
|
||||
+ { 10, 12, insert_psq_gd, extract_psq_gd, PPC_OPERAND_GQR },
|
||||
+
|
||||
+ /* I Field in psq_ instructions A*/
|
||||
+#define PSQ_WX PSQ_GD + 1
|
||||
+ { 1, 10, 0, 0, 0 },
|
||||
+
|
||||
+ /* W Field in psq_ instructions */
|
||||
+#define PSQ_GX PSQ_WX + 1
|
||||
+ { 10, 7, insert_psq_gx, extract_psq_gx, PPC_OPERAND_GQR },
|
||||
};
|
||||
|
||||
/* The functions used to insert and extract complicated operands. */
|
||||
@@ -1432,6 +1458,48 @@
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static unsigned long
|
||||
+insert_psq_gd (unsigned long insn,
|
||||
+ long value,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ const char **errmsg)
|
||||
+{
|
||||
+ if (value >= 912 && value <= 919)
|
||||
+ value -= 912;
|
||||
+ if (value < 0 || value > 7)
|
||||
+ *errmsg = _("invalid quantization register");
|
||||
+ return insn | ((value & 7) << 12);
|
||||
+}
|
||||
+
|
||||
+static long
|
||||
+extract_psq_gd (unsigned long insn,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ int *invalid ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ return ((insn & 0x7000) >> 12);
|
||||
+}
|
||||
+
|
||||
+static unsigned long
|
||||
+insert_psq_gx (unsigned long insn,
|
||||
+ long value,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ const char **errmsg)
|
||||
+{
|
||||
+ if (value >= 912 && value <= 919)
|
||||
+ value -= 912;
|
||||
+ if (value < 0 || value > 7)
|
||||
+ *errmsg = _("invalid quantization register");
|
||||
+ return insn | ((value & 7) << 7);
|
||||
+}
|
||||
+
|
||||
+static long
|
||||
+extract_psq_gx (unsigned long insn,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ int *invalid ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ return ((insn & 0x380) >> 7);
|
||||
+}
|
||||
+
|
||||
/* Macros used to form opcodes. */
|
||||
|
||||
/* The main opcode. */
|
||||
@@ -1715,6 +1783,10 @@
|
||||
#define XUC(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
|
||||
#define XUC_MASK XUC(0x3f, 0x1f)
|
||||
|
||||
+/* A PSQ style load/store indexed */
|
||||
+#define PSQX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7f))
|
||||
+#define PSQX_MASK PSQX(0x3f,0x7f)
|
||||
+
|
||||
/* The BO encodings used in extended conditional branch mnemonics. */
|
||||
#define BODNZF (0x0)
|
||||
#define BODNZFP (0x1)
|
||||
@@ -1805,6 +1877,7 @@
|
||||
#define PPCCHLK PPC_OPCODE_CACHELCK
|
||||
#define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
|
||||
#define PPCRFMCI PPC_OPCODE_RFMCI
|
||||
+#define PPCGEKKO PPC_OPCODE_GEKKO
|
||||
|
||||
/* The opcode table.
|
||||
|
||||
@@ -4612,6 +4685,99 @@
|
||||
|
||||
{ "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
|
||||
{ "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
|
||||
+
|
||||
+/* GEKKO specific stuff */
|
||||
+{ "dcbz_l", X(4,1014), XRT_MASK, PPCGEKKO, { RA, RB }},
|
||||
+
|
||||
+{ "ps_abs", XRC(4,264,0), XRA_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_abs.", XRC(4,264,1), XRA_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_add", A(4,21,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_add.", A(4,21,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_cmpo0", X(4,32), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+{ "ps_cmpo1", X(4,96), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_cmpu0", X(4,0), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+{ "ps_cmpu1", X(4,64), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_div", A(4,18,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_div.", A(4,18,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_madd", A(4,29,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madd.", A(4,29,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_madds0", A(4,14,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madds0.", A(4,14,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_madds1", A(4,15,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madds1.", A(4,15,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_merge00", XRC(4,528,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge00.", XRC(4,528,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge01", XRC(4,560,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge01.", XRC(4,560,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge10", XRC(4,592,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge10.", XRC(4,592,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge11", XRC(4,624,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge11.", XRC(4,624,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_mr", XRC(4,72,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_mr.", XRC(4,72,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_msub", A(4,28,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_msub.", A(4,28,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_mul", A(4,25,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_mul.", A(4,25,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_muls0", A(4,12,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_muls0.", A(4,12,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_muls1", A(4,13,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_muls1.", A(4,13,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_nabs", XRC(4,136,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_nabs.", XRC(4,136,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_neg", XRC(4,40,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_neg.", XRC(4,40,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_nmadd", A(4,31,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_nmadd.", A(4,31,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_nmsub", A(4,30,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_nmsub.", A(4,30,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_res", A(4,13,0), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_res.", A(4,13,1), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_rsqrte", A(4,26,0), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_rsqrte.", A(4,26,1), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_sel", A(4,23,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sel.", A(4,23,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_sub", A(4,20,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_sub.", A(4,20,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_sum0", A(4,10,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sum0.", A(4,10,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_sum1", A(4,11,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sum1.", A(4,11,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "psq_l", OP(56), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_lu", OP(57), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_lux", PSQX(4,76),PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_lx", PSQX(4,12),PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_st", OP(60), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_stu", OP(61), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_stux", PSQX(4,78), PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_stx", PSQX(4,14), PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
|
||||
};
|
||||
|
||||
14
dkppc/patches/binutils-2.18.50.patch
Normal file
14
dkppc/patches/binutils-2.18.50.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff -Nbaur binutils-2.18.50/config.sub binutils-2.18.50-ppc/config.sub
|
||||
--- binutils-2.18.50/config.sub Wed Aug 29 16:23:21 2007
|
||||
+++ binutils-2.18.50-ppc/config.sub Sun Dec 9 22:30:07 2007
|
||||
@@ -230,6 +230,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,64 +0,0 @@
|
|||
diff -Naurb gcc-4.0.1/config.sub gcc-4.0.1-ppc/config.sub
|
||||
--- gcc-4.0.1/config.sub Mon Apr 25 11:36:56 2005
|
||||
+++ gcc-4.0.1-ppc/config.sub Tue Jul 26 22:32:27 2005
|
||||
@@ -219,6 +219,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Naurb gcc-4.0.1/gcc/c-incpath.c gcc-4.0.1-new/gcc/c-incpath.c
|
||||
--- gcc-4.0.1/gcc/c-incpath.c Sun Jan 23 15:05:27 2005
|
||||
+++ gcc-4.0.1-new/gcc/c-incpath.c Fri Jul 8 11:32:20 2005
|
||||
@@ -331,13 +331,18 @@
|
||||
cpp_dir *p;
|
||||
|
||||
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
||||
- /* Convert all backslashes to slashes. The native CRT stat()
|
||||
- function does not recognize a directory that ends in a backslash
|
||||
- (unless it is a drive root dir, such "c:\"). Forward slashes,
|
||||
- trailing or otherwise, cause no problems for stat(). */
|
||||
- char* c;
|
||||
- for (c = path; *c; c++)
|
||||
- if (*c == '\\') *c = '/';
|
||||
+ /* Remove unnecessary trailing slashes. On some versions of MS
|
||||
+ Windows, trailing _forward_ slashes cause no problems for stat().
|
||||
+ On newer versions, stat() does not recognise a directory that ends
|
||||
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
|
||||
+ where it is obligatory. */
|
||||
+ int pathlen = strlen (path);
|
||||
+ char* end = path + pathlen - 1;
|
||||
+ /* Preserve the lead '/' or lead "c:/". */
|
||||
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
|
||||
+
|
||||
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
|
||||
+ *end = 0;
|
||||
#endif
|
||||
|
||||
p = xmalloc (sizeof (cpp_dir));
|
||||
diff -Naurb gcc-4.0.1/gcc/version.c gcc-4.0.1-ppc/gcc/version.c
|
||||
--- gcc-4.0.1/gcc/version.c Thu Jul 7 19:41:54 2005
|
||||
+++ gcc-4.0.1-ppc/gcc/version.c Tue Jul 26 22:31:02 2005
|
||||
@@ -14,4 +14,4 @@
|
||||
forward us bugs reported to you, if you determine that they are
|
||||
not bugs in your modifications.) */
|
||||
|
||||
-const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
|
||||
+const char bug_report_url[] = "<URL:http://devkitpro.sourceforge.net/bugs.shtml>";
|
||||
diff -Naurb gcc-4.0.1/gcc/hwint.h gcc-4.0.1-new/gcc/hwint.h
|
||||
--- gcc-4.0.1/gcc/hwint.h Wed Nov 24 04:31:57 2004
|
||||
+++ gcc-4.0.1-new/gcc/hwint.h Thu Jul 21 14:37:06 2005
|
||||
@@ -80,7 +80,7 @@
|
||||
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx"
|
||||
# endif
|
||||
#else
|
||||
-# define HOST_WIDE_INT_PRINT "ll"
|
||||
+# define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT
|
||||
# define HOST_WIDE_INT_PRINT_C "LL"
|
||||
/* We can assume that 'long long' is at least 64 bits. */
|
||||
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX \
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
diff -Naurb gcc-4.0.1/config.sub gcc-4.0.1-ppc/config.sub
|
||||
--- gcc-4.0.1/config.sub Mon Apr 25 11:36:56 2005
|
||||
+++ gcc-4.0.1-ppc/config.sub Tue Jul 26 22:32:27 2005
|
||||
@@ -219,6 +219,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Naurb gcc-4.0.1/gcc/c-incpath.c gcc-4.0.1-new/gcc/c-incpath.c
|
||||
--- gcc-4.0.1/gcc/c-incpath.c Sun Jan 23 15:05:27 2005
|
||||
+++ gcc-4.0.1-new/gcc/c-incpath.c Fri Jul 8 11:32:20 2005
|
||||
@@ -331,13 +331,18 @@
|
||||
cpp_dir *p;
|
||||
|
||||
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
||||
- /* Convert all backslashes to slashes. The native CRT stat()
|
||||
- function does not recognize a directory that ends in a backslash
|
||||
- (unless it is a drive root dir, such "c:\"). Forward slashes,
|
||||
- trailing or otherwise, cause no problems for stat(). */
|
||||
- char* c;
|
||||
- for (c = path; *c; c++)
|
||||
- if (*c == '\\') *c = '/';
|
||||
+ /* Remove unnecessary trailing slashes. On some versions of MS
|
||||
+ Windows, trailing _forward_ slashes cause no problems for stat().
|
||||
+ On newer versions, stat() does not recognise a directory that ends
|
||||
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
|
||||
+ where it is obligatory. */
|
||||
+ int pathlen = strlen (path);
|
||||
+ char* end = path + pathlen - 1;
|
||||
+ /* Preserve the lead '/' or lead "c:/". */
|
||||
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
|
||||
+
|
||||
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
|
||||
+ *end = 0;
|
||||
#endif
|
||||
|
||||
p = xmalloc (sizeof (cpp_dir));
|
||||
diff -Naurb gcc-4.0.1/gcc/version.c gcc-4.0.1-ppc/gcc/version.c
|
||||
--- gcc-4.0.1/gcc/version.c Thu Jul 7 19:41:54 2005
|
||||
+++ gcc-4.0.1-ppc/gcc/version.c Tue Jul 26 22:31:02 2005
|
||||
@@ -14,4 +14,4 @@
|
||||
forward us bugs reported to you, if you determine that they are
|
||||
not bugs in your modifications.) */
|
||||
|
||||
-const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
|
||||
+const char bug_report_url[] = "<URL:http://devkitpro.sourceforge.net/bugs.shtml>";
|
||||
diff -Naurb gcc-4.0.1/gcc/hwint.h gcc-4.0.1-new/gcc/hwint.h
|
||||
--- gcc-4.0.1/gcc/hwint.h Wed Nov 24 04:31:57 2004
|
||||
+++ gcc-4.0.1-new/gcc/hwint.h Thu Jul 21 14:37:06 2005
|
||||
@@ -80,7 +80,7 @@
|
||||
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx"
|
||||
# endif
|
||||
#else
|
||||
-# define HOST_WIDE_INT_PRINT "ll"
|
||||
+# define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT
|
||||
# define HOST_WIDE_INT_PRINT_C "LL"
|
||||
/* We can assume that 'long long' is at least 64 bits. */
|
||||
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX \
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
diff -Nbaur gcc-4.1.0/config.sub gcc-4.1.0-ppc/config.sub
|
||||
--- gcc-4.1.0/config.sub Fri Dec 16 12:57:40 2005
|
||||
+++ gcc-4.1.0-ppc/config.sub Mon Apr 10 09:48:17 2006
|
||||
@@ -228,6 +228,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Nbaur gcc-4.1.0/gcc/c-incpath.c gcc-4.1.0-ppc/gcc/c-incpath.c
|
||||
--- gcc-4.1.0/gcc/c-incpath.c Sat Jun 25 03:02:01 2005
|
||||
+++ gcc-4.1.0-ppc/gcc/c-incpath.c Mon Apr 10 09:48:17 2006
|
||||
@@ -331,13 +331,18 @@
|
||||
cpp_dir *p;
|
||||
|
||||
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
||||
- /* Convert all backslashes to slashes. The native CRT stat()
|
||||
- function does not recognize a directory that ends in a backslash
|
||||
- (unless it is a drive root dir, such "c:\"). Forward slashes,
|
||||
- trailing or otherwise, cause no problems for stat(). */
|
||||
- char* c;
|
||||
- for (c = path; *c; c++)
|
||||
- if (*c == '\\') *c = '/';
|
||||
+ /* Remove unnecessary trailing slashes. On some versions of MS
|
||||
+ Windows, trailing _forward_ slashes cause no problems for stat().
|
||||
+ On newer versions, stat() does not recognise a directory that ends
|
||||
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
|
||||
+ where it is obligatory. */
|
||||
+ int pathlen = strlen (path);
|
||||
+ char* end = path + pathlen - 1;
|
||||
+ /* Preserve the lead '/' or lead "c:/". */
|
||||
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
|
||||
+
|
||||
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
|
||||
+ *end = 0;
|
||||
#endif
|
||||
|
||||
p = xmalloc (sizeof (cpp_dir));
|
||||
diff -Nbaur gcc-4.1.0/gcc/version.c gcc-4.1.0-ppc/gcc/version.c
|
||||
--- gcc-4.1.0/gcc/version.c Wed Mar 16 06:04:10 2005
|
||||
+++ gcc-4.1.0-ppc/gcc/version.c Mon Apr 10 09:49:51 2006
|
||||
@@ -8,7 +8,7 @@
|
||||
in parentheses. You may also wish to include a number indicating
|
||||
the revision of your modified compiler. */
|
||||
|
||||
-#define VERSUFFIX ""
|
||||
+#define VERSUFFIX " (devkitPPC release 13)"
|
||||
|
||||
/* This is the location of the online document giving instructions for
|
||||
reporting bugs. If you distribute a modified version of GCC,
|
||||
@@ -17,7 +17,7 @@
|
||||
forward us bugs reported to you, if you determine that they are
|
||||
not bugs in your modifications.) */
|
||||
|
||||
-const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
|
||||
+const char bug_report_url[] = "<URL:http://devkitpro.sourceforge.net/bugs.shtml>";
|
||||
|
||||
/* The complete version string, assembled from several pieces.
|
||||
BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */
|
||||
830
dkppc/patches/gcc-4.1.2.patch
Normal file
830
dkppc/patches/gcc-4.1.2.patch
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
diff -Nbaur gcc-4.1.2/config.sub gcc-4.1.2-ppc/config.sub
|
||||
--- gcc-4.1.2/config.sub Fri Dec 16 12:57:40 2005
|
||||
+++ gcc-4.1.2-ppc/config.sub Mon Apr 10 09:48:17 2006
|
||||
@@ -228,6 +228,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Nbaur gcc-4.1.2/gcc/c-incpath.c gcc-4.1.2-arm/gcc/c-incpath.c
|
||||
--- gcc-4.1.2/gcc/c-incpath.c Sat Jun 25 03:02:01 2005
|
||||
+++ gcc-4.1.2-arm/gcc/c-incpath.c Fri Feb 16 10:41:26 2007
|
||||
@@ -331,13 +331,18 @@
|
||||
cpp_dir *p;
|
||||
|
||||
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
||||
- /* Convert all backslashes to slashes. The native CRT stat()
|
||||
- function does not recognize a directory that ends in a backslash
|
||||
- (unless it is a drive root dir, such "c:\"). Forward slashes,
|
||||
- trailing or otherwise, cause no problems for stat(). */
|
||||
- char* c;
|
||||
- for (c = path; *c; c++)
|
||||
- if (*c == '\\') *c = '/';
|
||||
+ /* Remove unnecessary trailing slashes. On some versions of MS
|
||||
+ Windows, trailing _forward_ slashes cause no problems for stat().
|
||||
+ On newer versions, stat() does not recognise a directory that ends
|
||||
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
|
||||
+ where it is obligatory. */
|
||||
+ int pathlen = strlen (path);
|
||||
+ char* end = path + pathlen - 1;
|
||||
+ /* Preserve the lead '/' or lead "c:/". */
|
||||
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
|
||||
+
|
||||
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
|
||||
+ *end = 0;
|
||||
#endif
|
||||
|
||||
p = xmalloc (sizeof (cpp_dir));
|
||||
diff -Nbaur gcc-4.1.2/gcc/gcc.c gcc-4.1.2-arm/gcc/gcc.c
|
||||
--- gcc-4.1.2/gcc/gcc.c Tue Nov 7 14:26:21 2006
|
||||
+++ gcc-4.1.2-arm/gcc/gcc.c Fri Feb 16 10:41:26 2007
|
||||
@@ -3250,8 +3250,6 @@
|
||||
gcc_libexec_prefix = make_relative_prefix (argv[0],
|
||||
standard_bindir_prefix,
|
||||
standard_libexec_prefix);
|
||||
- if (gcc_exec_prefix)
|
||||
- putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
|
||||
}
|
||||
else
|
||||
gcc_libexec_prefix = make_relative_prefix (gcc_exec_prefix,
|
||||
@@ -6151,10 +6149,21 @@
|
||||
|
||||
/* We need to check standard_exec_prefix/just_machine_suffix/specs
|
||||
for any override of as, ld and libraries. */
|
||||
+ if ( gcc_exec_prefix )
|
||||
+ {
|
||||
+ specs_file = alloca (strlen (gcc_exec_prefix)
|
||||
+ + strlen (just_machine_suffix) + sizeof ("specs"));
|
||||
+
|
||||
+ strcpy (specs_file, gcc_exec_prefix);
|
||||
+ } else {
|
||||
+
|
||||
specs_file = alloca (strlen (standard_exec_prefix)
|
||||
+ strlen (just_machine_suffix) + sizeof ("specs"));
|
||||
|
||||
strcpy (specs_file, standard_exec_prefix);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
strcat (specs_file, just_machine_suffix);
|
||||
strcat (specs_file, "specs");
|
||||
if (access (specs_file, R_OK) == 0)
|
||||
diff -Nbaur gcc-4.1.2/gcc/prefix.c gcc-4.1.2-arm/gcc/prefix.c
|
||||
--- gcc-4.1.2/gcc/prefix.c Sat Jun 25 03:02:01 2005
|
||||
+++ gcc-4.1.2-arm/gcc/prefix.c Fri Feb 16 10:41:27 2007
|
||||
@@ -246,13 +246,16 @@
|
||||
The returned string is always malloc-ed, and the caller is
|
||||
responsible for freeing it. */
|
||||
|
||||
+
|
||||
+static const char *old_prefix = PREFIX;
|
||||
+
|
||||
char *
|
||||
update_path (const char *path, const char *key)
|
||||
{
|
||||
char *result, *p;
|
||||
- const int len = strlen (std_prefix);
|
||||
+ const int len = strlen (old_prefix);
|
||||
|
||||
- if (! strncmp (path, std_prefix, len)
|
||||
+ if (! strncmp (path, old_prefix, len)
|
||||
&& (IS_DIR_SEPARATOR(path[len])
|
||||
|| path[len] == '\0')
|
||||
&& key != 0)
|
||||
@@ -354,4 +357,6 @@
|
||||
set_std_prefix (const char *prefix, int len)
|
||||
{
|
||||
std_prefix = save_string (prefix, len);
|
||||
+
|
||||
+ putenv (concat ("GCC_EXEC_PREFIX=", std_prefix, NULL));
|
||||
}
|
||||
diff -Nbaur gcc-4.1.2/gcc/stor-layout.c gcc-4.1.2-arm/gcc/stor-layout.c
|
||||
--- gcc-4.1.2/gcc/stor-layout.c Wed Oct 4 08:01:27 2006
|
||||
+++ gcc-4.1.2-arm/gcc/stor-layout.c Fri Feb 16 10:45:00 2007
|
||||
@@ -526,7 +526,15 @@
|
||||
#ifdef STRUCTURE_SIZE_BOUNDARY
|
||||
/* Packed structures don't need to have minimum size. */
|
||||
if (! TYPE_PACKED (t))
|
||||
- rli->record_align = MAX (rli->record_align, (unsigned) STRUCTURE_SIZE_BOUNDARY);
|
||||
+ {
|
||||
+ unsigned tmp;
|
||||
+
|
||||
+ /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
|
||||
+ tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
|
||||
+ if (maximum_field_alignment != 0)
|
||||
+ tmp = MIN (tmp, maximum_field_alignment);
|
||||
+ rli->record_align = MAX (rli->record_align, tmp);
|
||||
+ }
|
||||
#endif
|
||||
|
||||
rli->offset = size_zero_node;
|
||||
diff -Nbaur gcc-4.1.2/gcc/toplev.c gcc-4.1.2-arm/gcc/toplev.c
|
||||
--- gcc-4.1.2/gcc/toplev.c Thu Aug 3 12:33:49 2006
|
||||
+++ gcc-4.1.2-arm/gcc/toplev.c Fri Feb 16 10:41:27 2007
|
||||
@@ -82,6 +82,7 @@
|
||||
#include "value-prof.h"
|
||||
#include "alloc-pool.h"
|
||||
#include "tree-mudflap.h"
|
||||
+#include "prefix.h"
|
||||
|
||||
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
|
||||
#include "dwarf2out.h"
|
||||
@@ -1434,6 +1435,10 @@
|
||||
progname = p;
|
||||
|
||||
xmalloc_set_program_name (progname);
|
||||
+
|
||||
+ p = getenv("GCC_EXEC_PREFIX");
|
||||
+ if (p && strlen(p)) set_std_prefix (p, strlen(p));
|
||||
+
|
||||
|
||||
hex_init ();
|
||||
|
||||
diff -Nbaur gcc-4.1.2/gcc/version.c gcc-4.1.2-arm/gcc/version.c
|
||||
--- gcc-4.1.2/gcc/version.c Wed Mar 16 06:04:10 2005
|
||||
+++ gcc-4.1.2-arm/gcc/version.c Fri Feb 16 10:41:27 2007
|
||||
@@ -8,7 +8,7 @@
|
||||
in parentheses. You may also wish to include a number indicating
|
||||
the revision of your modified compiler. */
|
||||
|
||||
-#define VERSUFFIX ""
|
||||
+#define VERSUFFIX " (devkitPPC release 14)"
|
||||
|
||||
/* This is the location of the online document giving instructions for
|
||||
reporting bugs. If you distribute a modified version of GCC,
|
||||
@@ -17,7 +17,7 @@
|
||||
forward us bugs reported to you, if you determine that they are
|
||||
not bugs in your modifications.) */
|
||||
|
||||
-const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
|
||||
+const char bug_report_url[] = "<URL:http://devkitpro.sourceforge.net/bugs.shtml>";
|
||||
|
||||
/* The complete version string, assembled from several pieces.
|
||||
BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */
|
||||
diff -Nbaur gcc-4.1.2/libiberty/pex-win32.c gcc-4.1.2-arm/libiberty/pex-win32.c
|
||||
--- gcc-4.1.2/libiberty/pex-win32.c Mon Aug 28 01:00:30 2006
|
||||
+++ gcc-4.1.2-arm/libiberty/pex-win32.c Fri Feb 16 10:41:27 2007
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <sys/stat.h>
|
||||
+#include <errno.h>
|
||||
|
||||
/* mingw32 headers may not define the following. */
|
||||
|
||||
@@ -72,115 +73,6 @@
|
||||
return;
|
||||
}
|
||||
|
||||
-/* This is a kludge to get around the Microsoft C spawn functions' propensity
|
||||
- to remove the outermost set of double quotes from all arguments. */
|
||||
-
|
||||
-static const char * const *
|
||||
-fix_argv (char * const *argvec)
|
||||
-{
|
||||
- char **argv;
|
||||
- int i;
|
||||
- char *command0;
|
||||
-
|
||||
- /* See whether we need to change anything. */
|
||||
- for (command0 = argvec[0]; *command0 != '\0'; command0++)
|
||||
- if (*command0 == '/')
|
||||
- break;
|
||||
- if (*command0 == '\0')
|
||||
- {
|
||||
- for (i = 1; argvec[i] != NULL; i++)
|
||||
- if (strpbrk (argvec[i], "\" \t") != NULL)
|
||||
- break;
|
||||
-
|
||||
- if (argvec[i] == NULL)
|
||||
- return (const char * const *) argvec;
|
||||
- }
|
||||
-
|
||||
- for (i = 0; argvec[i] != NULL; i++)
|
||||
- ;
|
||||
- argv = XNEWVEC (char *, i + 2);
|
||||
-
|
||||
- argv++; /* Leave space at the beginning of argv
|
||||
- for potential #! handling */
|
||||
-
|
||||
- for (i = 0; argvec[i] != NULL; i++)
|
||||
- argv[i] = xstrdup (argvec[i]);
|
||||
- argv[i] = NULL;
|
||||
-
|
||||
- backslashify (argv[0]);
|
||||
-
|
||||
- for (i = 1; argv[i] != 0; i++)
|
||||
- {
|
||||
- int len, j;
|
||||
- char *temp, *newtemp;
|
||||
-
|
||||
- temp = argv[i];
|
||||
- len = strlen (temp);
|
||||
- for (j = 0; j < len; j++)
|
||||
- {
|
||||
- if (temp[j] == '"')
|
||||
- {
|
||||
- newtemp = XNEWVEC (char, len + 2);
|
||||
- strncpy (newtemp, temp, j);
|
||||
- newtemp [j] = '\\';
|
||||
- strncpy (&newtemp [j+1], &temp [j], len-j);
|
||||
- newtemp [len+1] = 0;
|
||||
- temp = newtemp;
|
||||
- len++;
|
||||
- j++;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (argv[i] != temp)
|
||||
- {
|
||||
- free (argv[i]);
|
||||
- argv[i] = temp;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- for (i = 0; argv[i] != 0; i++)
|
||||
- {
|
||||
- if (strpbrk (argv[i], " \t"))
|
||||
- {
|
||||
- int len, trailing_backslash;
|
||||
- char *temp;
|
||||
-
|
||||
- len = strlen (argv[i]);
|
||||
- trailing_backslash = 0;
|
||||
-
|
||||
- /* There is an added complication when an arg with embedded white
|
||||
- space ends in a backslash (such as in the case of -iprefix arg
|
||||
- passed to cpp). The resulting quoted strings gets misinterpreted
|
||||
- by the command interpreter -- it thinks that the ending quote
|
||||
- is escaped by the trailing backslash and things get confused.
|
||||
- We handle this case by escaping the trailing backslash, provided
|
||||
- it was not escaped in the first place. */
|
||||
- if (len > 1
|
||||
- && argv[i][len-1] == '\\'
|
||||
- && argv[i][len-2] != '\\')
|
||||
- {
|
||||
- trailing_backslash = 1;
|
||||
- ++len; /* to escape the final backslash. */
|
||||
- }
|
||||
-
|
||||
- len += 2; /* and for the enclosing quotes. */
|
||||
-
|
||||
- temp = XNEWVEC (char, len + 1);
|
||||
- temp[0] = '"';
|
||||
- strcpy (temp + 1, argv[i]);
|
||||
- if (trailing_backslash)
|
||||
- temp[len - 2] = '\\';
|
||||
- temp[len - 1] = '"';
|
||||
- temp[len] = '\0';
|
||||
-
|
||||
- free (argv[i]);
|
||||
- argv[i] = temp;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return (const char * const *) argv;
|
||||
-}
|
||||
-
|
||||
static int pex_win32_open_read (struct pex_obj *, const char *, int);
|
||||
static int pex_win32_open_write (struct pex_obj *, const char *, int);
|
||||
static long pex_win32_exec_child (struct pex_obj *, int, const char *,
|
||||
@@ -422,8 +314,225 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+/* Return a Windows command-line from ARGV. It is the caller's
|
||||
+ responsibility to free the string returned. */
|
||||
+
|
||||
+static char *
|
||||
+argv_to_cmdline (char *const *argv)
|
||||
+{
|
||||
+ char *cmdline;
|
||||
+ char *p;
|
||||
+ size_t cmdline_len;
|
||||
+ int i, j, k;
|
||||
+
|
||||
+ cmdline_len = 0;
|
||||
+ for (i = 0; argv[i]; i++)
|
||||
+ {
|
||||
+ /* We quote every last argument. This simplifies the problem;
|
||||
+ we need only escape embedded double-quotes and immediately
|
||||
+ preceeding backslash characters. A sequence of backslach characters
|
||||
+ that is not follwed by a double quote character will not be
|
||||
+ escaped. */
|
||||
+ for (j = 0; argv[i][j]; j++)
|
||||
+ {
|
||||
+ if (argv[i][j] == '"')
|
||||
+ {
|
||||
+ /* Escape preceeding backslashes. */
|
||||
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
|
||||
+ cmdline_len++;
|
||||
+ /* Escape the qote character. */
|
||||
+ cmdline_len++;
|
||||
+ }
|
||||
+ }
|
||||
+ /* Trailing backslashes also need to be escaped because they will be
|
||||
+ followed by the terminating quote. */
|
||||
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
|
||||
+ cmdline_len++;
|
||||
+ cmdline_len += j;
|
||||
+ cmdline_len += 3; /* for leading and trailing quotes and space */
|
||||
+ }
|
||||
+ cmdline = xmalloc (cmdline_len);
|
||||
+ p = cmdline;
|
||||
+ for (i = 0; argv[i]; i++)
|
||||
+ {
|
||||
+ *p++ = '"';
|
||||
+ for (j = 0; argv[i][j]; j++)
|
||||
+ {
|
||||
+ if (argv[i][j] == '"')
|
||||
+ {
|
||||
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
|
||||
+ *p++ = '\\';
|
||||
+ *p++ = '\\';
|
||||
+ }
|
||||
+ *p++ = argv[i][j];
|
||||
+ }
|
||||
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
|
||||
+ *p++ = '\\';
|
||||
+ *p++ = '"';
|
||||
+ *p++ = ' ';
|
||||
+ }
|
||||
+ p[-1] = '\0';
|
||||
+ return cmdline;
|
||||
+}
|
||||
+
|
||||
+static const char *const
|
||||
+std_suffixes[] = {
|
||||
+ ".com",
|
||||
+ ".exe",
|
||||
+ ".bat",
|
||||
+ ".cmd",
|
||||
+ 0
|
||||
+};
|
||||
+static const char *const
|
||||
+no_suffixes[] = {
|
||||
+ "",
|
||||
+ 0
|
||||
+};
|
||||
+
|
||||
+/* Returns the full path to PROGRAM. If SEARCH is true, look for
|
||||
+ PROGRAM in each directory in PATH. */
|
||||
+
|
||||
+static char *
|
||||
+find_executable (const char *program, BOOL search)
|
||||
+{
|
||||
+ char *full_executable;
|
||||
+ char *e;
|
||||
+ size_t fe_len;
|
||||
+ const char *path = 0;
|
||||
+ const char *const *ext;
|
||||
+ const char *p, *q;
|
||||
+ size_t proglen = strlen (program);
|
||||
+ int has_extension = !!strchr (program, '.');
|
||||
+ int has_slash = (strchr (program, '/') || strchr (program, '\\'));
|
||||
+ HANDLE h;
|
||||
+
|
||||
+ if (has_slash)
|
||||
+ search = FALSE;
|
||||
+
|
||||
+ if (search)
|
||||
+ path = getenv ("PATH");
|
||||
+ if (!path)
|
||||
+ path = "";
|
||||
+
|
||||
+ fe_len = 0;
|
||||
+ for (p = path; *p; p = q)
|
||||
+ {
|
||||
+ q = p;
|
||||
+ while (*q != ';' && *q != '\0')
|
||||
+ q++;
|
||||
+ if ((size_t)(q - p) > fe_len)
|
||||
+ fe_len = q - p;
|
||||
+ if (*q == ';')
|
||||
+ q++;
|
||||
+ }
|
||||
+ fe_len = fe_len + 1 + proglen + (has_extension ? 1 : 5);
|
||||
+ full_executable = xmalloc (fe_len);
|
||||
+
|
||||
+ p = path;
|
||||
+ do
|
||||
+ {
|
||||
+ q = p;
|
||||
+ while (*q != ';' && *q != '\0')
|
||||
+ q++;
|
||||
+
|
||||
+ e = full_executable;
|
||||
+ memcpy (e, p, q - p);
|
||||
+ e += (q - p);
|
||||
+ if (q - p)
|
||||
+ *e++ = '\\';
|
||||
+ strcpy (e, program);
|
||||
+
|
||||
+ if (*q == ';')
|
||||
+ q++;
|
||||
+
|
||||
+ for (e = full_executable; *e; e++)
|
||||
+ if (*e == '/')
|
||||
+ *e = '\\';
|
||||
+
|
||||
+ /* At this point, e points to the terminating NUL character for
|
||||
+ full_executable. */
|
||||
+ for (ext = has_extension ? no_suffixes : std_suffixes; *ext; ext++)
|
||||
+ {
|
||||
+ /* Remove any current extension. */
|
||||
+ *e = '\0';
|
||||
+ /* Add the new one. */
|
||||
+ strcat (full_executable, *ext);
|
||||
+
|
||||
+ /* Attempt to open this file. */
|
||||
+ h = CreateFile (full_executable, GENERIC_READ,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
+ 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
+ if (h != INVALID_HANDLE_VALUE)
|
||||
+ goto found;
|
||||
+ }
|
||||
+ p = q;
|
||||
+ }
|
||||
+ while (*p);
|
||||
+ free (full_executable);
|
||||
+ return 0;
|
||||
+
|
||||
+ found:
|
||||
+ CloseHandle (h);
|
||||
+ return full_executable;
|
||||
+}
|
||||
+
|
||||
+/* Low-level process creation function. */
|
||||
+
|
||||
+static long
|
||||
+win32_spawn (const char *executable,
|
||||
+ BOOL search,
|
||||
+ char *const *argv,
|
||||
+ DWORD dwCreationFlags,
|
||||
+ LPSTARTUPINFO si,
|
||||
+ LPPROCESS_INFORMATION pi)
|
||||
+{
|
||||
+ char *full_executable;
|
||||
+ char *cmdline;
|
||||
+
|
||||
+ full_executable = NULL;
|
||||
+ cmdline = NULL;
|
||||
+
|
||||
+ full_executable = find_executable (executable, search);
|
||||
+ if (!full_executable)
|
||||
+ goto error;
|
||||
+ cmdline = argv_to_cmdline (argv);
|
||||
+ if (!cmdline)
|
||||
+ goto error;
|
||||
+
|
||||
+ /* Create the child process. */
|
||||
+ if (!CreateProcess (full_executable, cmdline,
|
||||
+ /*lpProcessAttributes=*/NULL,
|
||||
+ /*lpThreadAttributes=*/NULL,
|
||||
+ /*bInheritHandles=*/TRUE,
|
||||
+ dwCreationFlags,
|
||||
+ /*lpEnvironment=*/NULL,
|
||||
+ /*lpCurrentDirectory=*/NULL,
|
||||
+ si,
|
||||
+ pi))
|
||||
+ {
|
||||
+ free (full_executable);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ /* Clean up. */
|
||||
+ CloseHandle (pi->hThread);
|
||||
+ free (full_executable);
|
||||
+
|
||||
+ return (long) pi->hProcess;
|
||||
+
|
||||
+ error:
|
||||
+ if (cmdline)
|
||||
+ free (cmdline);
|
||||
+ if (full_executable)
|
||||
+ free (full_executable);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
static long
|
||||
-spawn_script (const char *executable, const char * const * argv)
|
||||
+spawn_script (const char *executable, char *const *argv,
|
||||
+ DWORD dwCreationFlags,
|
||||
+ LPSTARTUPINFO si,
|
||||
+ LPPROCESS_INFORMATION pi)
|
||||
{
|
||||
int pid = -1;
|
||||
int save_errno = errno;
|
||||
@@ -455,17 +564,21 @@
|
||||
executable = strrchr (executable1, '\\') + 1;
|
||||
if (!executable)
|
||||
executable = executable1;
|
||||
- pid = _spawnvp (_P_NOWAIT, executable, argv);
|
||||
+ pid = win32_spawn (executable, TRUE, argv,
|
||||
+ dwCreationFlags, si, pi);
|
||||
#else
|
||||
if (strchr (executable1, '\\') == NULL)
|
||||
- pid = _spawnvp (_P_NOWAIT, executable1, argv);
|
||||
+ pid = win32_spawn (executable1, TRUE, argv,
|
||||
+ dwCreationFlags, si, pi);
|
||||
else if (executable1[0] != '\\')
|
||||
- pid = _spawnv (_P_NOWAIT, executable1, argv);
|
||||
+ pid = win32_spawn (executable1, FALSE, argv,
|
||||
+ dwCreationFlags, si, pi);
|
||||
else
|
||||
{
|
||||
const char *newex = mingw_rootify (executable1);
|
||||
*avhere = newex;
|
||||
- pid = _spawnv (_P_NOWAIT, newex, argv);
|
||||
+ pid = win32_spawn (newex, FALSE, argv,
|
||||
+ dwCreationFlags, si, pi);
|
||||
if (executable1 != newex)
|
||||
free ((char *) newex);
|
||||
if (pid < 0)
|
||||
@@ -474,7 +587,8 @@
|
||||
if (newex != executable1)
|
||||
{
|
||||
*avhere = newex;
|
||||
- pid = _spawnv (_P_NOWAIT, newex, argv);
|
||||
+ pid = win32_spawn (newex, FALSE, argv,
|
||||
+ dwCreationFlags, si, pi);
|
||||
free ((char *) newex);
|
||||
}
|
||||
}
|
||||
@@ -498,149 +612,95 @@
|
||||
const char **errmsg,
|
||||
int *err)
|
||||
{
|
||||
- int org_in, org_out, org_errdes;
|
||||
long pid;
|
||||
- const char * const * newargv;
|
||||
-
|
||||
- org_in = -1;
|
||||
- org_out = -1;
|
||||
- org_errdes = -1;
|
||||
-
|
||||
- if (in != STDIN_FILE_NO)
|
||||
- {
|
||||
- org_in = _dup (STDIN_FILE_NO);
|
||||
- if (org_in < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_dup2 (in, STDIN_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_close (in) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
+ HANDLE stdin_handle;
|
||||
+ HANDLE stdout_handle;
|
||||
+ HANDLE stderr_handle;
|
||||
+ DWORD dwCreationFlags;
|
||||
+ OSVERSIONINFO version_info;
|
||||
+ STARTUPINFO si;
|
||||
+ PROCESS_INFORMATION pi;
|
||||
+
|
||||
+ stdin_handle = INVALID_HANDLE_VALUE;
|
||||
+ stdout_handle = INVALID_HANDLE_VALUE;
|
||||
+ stderr_handle = INVALID_HANDLE_VALUE;
|
||||
+
|
||||
+ stdin_handle = (HANDLE) _get_osfhandle (in);
|
||||
+ stdout_handle = (HANDLE) _get_osfhandle (out);
|
||||
+ if (!(flags & PEX_STDERR_TO_STDOUT))
|
||||
+ stderr_handle = (HANDLE) _get_osfhandle (errdes);
|
||||
+ else
|
||||
+ stderr_handle = stdout_handle;
|
||||
|
||||
- if (out != STDOUT_FILE_NO)
|
||||
- {
|
||||
- org_out = _dup (STDOUT_FILE_NO);
|
||||
- if (org_out < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_dup2 (out, STDOUT_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_close (out) < 0)
|
||||
+ /* Determine the version of Windows we are running on. */
|
||||
+ version_info.dwOSVersionInfoSize = sizeof (version_info);
|
||||
+ GetVersionEx (&version_info);
|
||||
+ if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
|
||||
+ /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not
|
||||
+ supported, so we cannot avoid creating a console window. */
|
||||
+ dwCreationFlags = 0;
|
||||
+ else
|
||||
{
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
+ HANDLE conout_handle;
|
||||
|
||||
- if (errdes != STDERR_FILE_NO
|
||||
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
|
||||
- {
|
||||
- org_errdes = _dup (STDERR_FILE_NO);
|
||||
- if (org_errdes < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes,
|
||||
- STDERR_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (errdes != STDERR_FILE_NO)
|
||||
- {
|
||||
- if (_close (errdes) < 0)
|
||||
+ /* Determine whether or not we have an associated console. */
|
||||
+ conout_handle = CreateFile("CONOUT$",
|
||||
+ GENERIC_WRITE,
|
||||
+ FILE_SHARE_WRITE,
|
||||
+ /*lpSecurityAttributes=*/NULL,
|
||||
+ OPEN_EXISTING,
|
||||
+ FILE_ATTRIBUTE_NORMAL,
|
||||
+ /*hTemplateFile=*/NULL);
|
||||
+ if (conout_handle == INVALID_HANDLE_VALUE)
|
||||
+ /* There is no console associated with this process. Since
|
||||
+ the child is a console process, the OS would normally
|
||||
+ create a new console Window for the child. Since we'll be
|
||||
+ redirecting the child's standard streams, we do not need
|
||||
+ the console window. */
|
||||
+ dwCreationFlags = CREATE_NO_WINDOW;
|
||||
+ else
|
||||
{
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
+ /* There is a console associated with the process, so the OS
|
||||
+ will not create a new console. And, if we use
|
||||
+ CREATE_NO_WINDOW in this situation, the child will have
|
||||
+ no associated console. Therefore, if the child's
|
||||
+ standard streams are connected to the console, the output
|
||||
+ will be discarded. */
|
||||
+ CloseHandle(conout_handle);
|
||||
+ dwCreationFlags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
- newargv = fix_argv (argv);
|
||||
- pid = (((flags & PEX_SEARCH) != 0 ? _spawnvp : _spawnv)
|
||||
- (_P_NOWAIT, executable, newargv));
|
||||
-
|
||||
+ /* Since the child will be a console process, it will, by default,
|
||||
+ connect standard input/output to its console. However, we want
|
||||
+ the child to use the handles specifically designated above. In
|
||||
+ addition, if there is no console (such as when we are running in
|
||||
+ a Cygwin X window), then we must redirect the child's
|
||||
+ input/output, as there is no console for the child to use. */
|
||||
+ memset (&si, 0, sizeof (si));
|
||||
+ si.cb = sizeof (si);
|
||||
+ si.dwFlags = STARTF_USESTDHANDLES;
|
||||
+ si.hStdInput = stdin_handle;
|
||||
+ si.hStdOutput = stdout_handle;
|
||||
+ si.hStdError = stderr_handle;
|
||||
+
|
||||
+ /* Create the child process. */
|
||||
+ pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0,
|
||||
+ argv, dwCreationFlags, &si, &pi);
|
||||
if (pid == -1)
|
||||
- pid = spawn_script (executable, newargv);
|
||||
-
|
||||
+ pid = spawn_script (executable, argv, dwCreationFlags, &si, &pi);
|
||||
if (pid == -1)
|
||||
{
|
||||
- *err = errno;
|
||||
- *errmsg = ((flags & PEX_SEARCH) != 0) ? "_spawnvp" : "_spawnv";
|
||||
- }
|
||||
-
|
||||
- if (in != STDIN_FILE_NO)
|
||||
- {
|
||||
- if (_dup2 (org_in, STDIN_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_close (org_in) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (out != STDOUT_FILE_NO)
|
||||
- {
|
||||
- if (_dup2 (org_out, STDOUT_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_close (org_out) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
+ *err = ENOENT;
|
||||
+ *errmsg = "CreateProcess";
|
||||
}
|
||||
|
||||
- if (errdes != STDERR_FILE_NO
|
||||
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
|
||||
- {
|
||||
- if (_dup2 (org_errdes, STDERR_FILE_NO) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_dup2";
|
||||
- return -1;
|
||||
- }
|
||||
- if (_close (org_errdes) < 0)
|
||||
- {
|
||||
- *err = errno;
|
||||
- *errmsg = "_close";
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
+ /* Close the standard output and standard error handles in the
|
||||
+ parent. */
|
||||
+ if (out != STDOUT_FILENO)
|
||||
+ obj->funcs->close (obj, out);
|
||||
+ if (errdes != STDERR_FILENO)
|
||||
+ obj->funcs->close (obj, errdes);
|
||||
|
||||
return pid;
|
||||
}
|
||||
@@ -658,30 +718,34 @@
|
||||
int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED,
|
||||
const char **errmsg, int *err)
|
||||
{
|
||||
- int termstat;
|
||||
+ DWORD termstat;
|
||||
+ HANDLE h;
|
||||
|
||||
if (time != NULL)
|
||||
memset (time, 0, sizeof *time);
|
||||
|
||||
+ h = (HANDLE) pid;
|
||||
+
|
||||
/* FIXME: If done is non-zero, we should probably try to kill the
|
||||
process. */
|
||||
-
|
||||
- if (_cwait (&termstat, pid, WAIT_CHILD) < 0)
|
||||
+ if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0)
|
||||
{
|
||||
- *err = errno;
|
||||
- *errmsg = "_cwait";
|
||||
+ CloseHandle (h);
|
||||
+ *err = ECHILD;
|
||||
+ *errmsg = "WaitForSingleObject";
|
||||
return -1;
|
||||
}
|
||||
|
||||
- /* cwait returns the child process exit code in termstat. A value
|
||||
- of 3 indicates that the child caught a signal, but not which one.
|
||||
- Since only SIGABRT, SIGFPE and SIGINT do anything, we report
|
||||
- SIGABRT. */
|
||||
+ GetExitCodeProcess (h, &termstat);
|
||||
+ CloseHandle (h);
|
||||
|
||||
+ /* A value of 3 indicates that the child caught a signal, but not
|
||||
+ which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we
|
||||
+ report SIGABRT. */
|
||||
if (termstat == 3)
|
||||
*status = SIGABRT;
|
||||
else
|
||||
- *status = ((termstat & 0xff) << 8);
|
||||
+ *status = (termstat & 0xff) << 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,842 +0,0 @@
|
|||
diff -Nbaur gdb-6.6/config.sub gdb-6.6-ppc/config.sub
|
||||
--- gdb-6.6/config.sub Tue Sep 26 06:22:50 2006
|
||||
+++ gdb-6.6-ppc/config.sub Sat Jun 16 04:14:21 2007
|
||||
@@ -230,6 +230,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
diff -Nbaur gdb-6.6/configure gdb-6.6-ppc/configure
|
||||
--- gdb-6.6/configure Tue Nov 14 23:26:39 2006
|
||||
+++ gdb-6.6-ppc/configure Sat Jun 16 04:14:12 2007
|
||||
@@ -3271,7 +3271,7 @@
|
||||
|
||||
# Host dirs don't like to share a cache file either, horribly enough.
|
||||
# This seems to be due to autoconf 2.5x stupidity.
|
||||
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
|
||||
+host_configargs="${cache_file_option} --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
|
||||
|
||||
target_configargs=${baseargs}
|
||||
|
||||
diff -Nbaur gdb-6.6/configure.in gdb-6.6-ppc/configure.in
|
||||
--- gdb-6.6/configure.in Mon Dec 18 07:22:58 2006
|
||||
+++ gdb-6.6-ppc/configure.in Sat Jun 16 04:14:12 2007
|
||||
@@ -2024,7 +2024,7 @@
|
||||
|
||||
# Host dirs don't like to share a cache file either, horribly enough.
|
||||
# This seems to be due to autoconf 2.5x stupidity.
|
||||
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
|
||||
+host_configargs="${cache_file_option} --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
|
||||
|
||||
target_configargs=${baseargs}
|
||||
|
||||
diff -Nbaur gdb-6.6/gdb/Makefile.in gdb-6.6-ppc/gdb/Makefile.in
|
||||
--- gdb-6.6/gdb/Makefile.in Fri Nov 24 19:54:14 2006
|
||||
+++ gdb-6.6-ppc/gdb/Makefile.in Sat Jun 16 04:14:12 2007
|
||||
@@ -2983,7 +2983,7 @@
|
||||
insight$(EXEEXT): gdbtk-main.o libgdb.a $(ADD_DEPS) \
|
||||
$(CDEPS) $(TDEPLIBS)
|
||||
rm -f insight$(EXEEXT)
|
||||
- $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
|
||||
+ $(CC_LD) -mwindows $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
|
||||
-o insight$(EXEEXT) gdbtk-main.o libgdb.a \
|
||||
$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
|
||||
|
||||
diff -Nbaur gdb-6.6/gdb/config/i386/mingw.mh gdb-6.6-ppc/gdb/config/i386/mingw.mh
|
||||
--- gdb-6.6/gdb/config/i386/mingw.mh Thu Jan 1 00:00:00 1970
|
||||
+++ gdb-6.6-ppc/gdb/config/i386/mingw.mh Sat Jun 16 04:14:12 2007
|
||||
@@ -0,0 +1,5 @@
|
||||
+MH_CFLAGS=-D_POSIX_
|
||||
+XM_FILE=xm-mingw32.h
|
||||
+NATDEPFILES= i386-nat.o win32-nat.o corelow.o
|
||||
+NAT_FILE=nm-mingw32.h
|
||||
+XM_CLIBS=
|
||||
diff -Nbaur gdb-6.6/gdb/config/i386/mingw.mt gdb-6.6-ppc/gdb/config/i386/mingw.mt
|
||||
--- gdb-6.6/gdb/config/i386/mingw.mt Thu Jan 1 00:00:00 1970
|
||||
+++ gdb-6.6-ppc/gdb/config/i386/mingw.mt Sat Jun 16 04:14:12 2007
|
||||
@@ -0,0 +1,4 @@
|
||||
+# Target: Intel x86 running Win32 (MinGW)
|
||||
+TDEPFILES= i386-tdep.o i386-win32-tdep.o i387-tdep.o
|
||||
+DEPRECATED_TM_FILE= tm-mingw32.h
|
||||
+GDBSERVER_DEPFILES=
|
||||
diff -Nbaur gdb-6.6/gdb/config/i386/nm-mingw32.h gdb-6.6-ppc/gdb/config/i386/nm-mingw32.h
|
||||
--- gdb-6.6/gdb/config/i386/nm-mingw32.h Thu Jan 1 00:00:00 1970
|
||||
+++ gdb-6.6-ppc/gdb/config/i386/nm-mingw32.h Sat Jun 16 04:14:12 2007
|
||||
@@ -0,0 +1,38 @@
|
||||
+/* Native definitions for Intel x86 running MinGW.
|
||||
+ Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#define NO_PTRACE_H
|
||||
+
|
||||
+#define I386_USE_GENERIC_WATCHPOINTS
|
||||
+
|
||||
+#include "i386/nm-i386.h"
|
||||
+
|
||||
+/* Support for hardware-assisted breakpoints and watchpoints. */
|
||||
+
|
||||
+#define I386_DR_LOW_SET_CONTROL(VAL) cygwin_set_dr7 (VAL)
|
||||
+extern void cygwin_set_dr7 (unsigned);
|
||||
+
|
||||
+#define I386_DR_LOW_SET_ADDR(N,ADDR) cygwin_set_dr (N,ADDR)
|
||||
+extern void cygwin_set_dr (int, CORE_ADDR);
|
||||
+
|
||||
+#define I386_DR_LOW_RESET_ADDR(N)
|
||||
+
|
||||
+#define I386_DR_LOW_GET_STATUS() cygwin_get_dr6 ()
|
||||
+extern unsigned cygwin_get_dr6 (void);
|
||||
diff -Nbaur gdb-6.6/gdb/config/i386/tm-mingw32.h gdb-6.6-ppc/gdb/config/i386/tm-mingw32.h
|
||||
--- gdb-6.6/gdb/config/i386/tm-mingw32.h Thu Jan 1 00:00:00 1970
|
||||
+++ gdb-6.6-ppc/gdb/config/i386/tm-mingw32.h Sat Jun 16 04:14:12 2007
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* Macro definitions for i386 running under Win32.
|
||||
+ Copyright 1999 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#include "i386/tm-cygwin.h"
|
||||
+
|
||||
diff -Nbaur gdb-6.6/gdb/config/i386/xm-mingw32.h gdb-6.6-ppc/gdb/config/i386/xm-mingw32.h
|
||||
--- gdb-6.6/gdb/config/i386/xm-mingw32.h Thu Jan 1 00:00:00 1970
|
||||
+++ gdb-6.6-ppc/gdb/config/i386/xm-mingw32.h Sat Jun 16 04:14:12 2007
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* Definitions for hosting on WIN32, building with MinGW, for GDB.
|
||||
+ Copyright 1999 Free Software Foundation, Inc.
|
||||
+
|
||||
+This file is part of GDB.
|
||||
+
|
||||
+This program is free software; you can redistribute it and/or modify
|
||||
+it under the terms of the GNU General Public License as published by
|
||||
+the Free Software Foundation; either version 2 of the License, or
|
||||
+(at your option) any later version.
|
||||
+
|
||||
+This program is distributed in the hope that it will be useful,
|
||||
+but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+GNU General Public License for more details.
|
||||
+
|
||||
+You should have received a copy of the GNU General Public License
|
||||
+along with this program; if not, write to the Free Software
|
||||
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#include "fopen-bin.h"
|
||||
+#define getkey getch
|
||||
+#define DIRNAME_SEPARATOR ';'
|
||||
+
|
||||
+/* Define this if source files use \r\n rather than just \n. */
|
||||
+#define CRLF_SOURCE_FILES
|
||||
diff -Nbaur gdb-6.6/gdb/defs.h gdb-6.6-ppc/gdb/defs.h
|
||||
--- gdb-6.6/gdb/defs.h Thu Sep 21 14:50:51 2006
|
||||
+++ gdb-6.6-ppc/gdb/defs.h Sat Jun 16 04:14:12 2007
|
||||
@@ -1167,7 +1167,7 @@
|
||||
/* FIXME, this doesn't work very well if host and executable
|
||||
filesystems conventions are different. */
|
||||
|
||||
-#ifdef __MSDOS__
|
||||
+#if defined(__MSDOS__) || (!defined (__CYGWIN__) && defined (_WIN32))
|
||||
# define CANT_FORK
|
||||
# define GLOBAL_CURDIR
|
||||
# define DIRNAME_SEPARATOR ';'
|
||||
diff -Nbaur gdb-6.6/gdb/tui/tui-io.c gdb-6.6-ppc/gdb/tui/tui-io.c
|
||||
--- gdb-6.6/gdb/tui/tui-io.c Fri Dec 23 19:10:02 2005
|
||||
+++ gdb-6.6-ppc/gdb/tui/tui-io.c Sat Jun 16 04:14:12 2007
|
||||
@@ -113,8 +113,11 @@
|
||||
|
||||
/* For gdb 5.3, prefer to continue the pipe hack as a backup wheel. */
|
||||
#define TUI_USE_PIPE_FOR_READLINE
|
||||
-/*#undef TUI_USE_PIPE_FOR_READLINE*/
|
||||
|
||||
+/* but remove for mingw host */
|
||||
+#ifdef __MINGW32__
|
||||
+#undef TUI_USE_PIPE_FOR_READLINE
|
||||
+#endif
|
||||
/* TUI output files. */
|
||||
static struct ui_file *tui_stdout;
|
||||
static struct ui_file *tui_stderr;
|
||||
diff -Nbaur gdb-6.6/gdb/win32-nat.c gdb-6.6-ppc/gdb/win32-nat.c
|
||||
--- gdb-6.6/gdb/win32-nat.c Mon May 22 00:04:39 2006
|
||||
+++ gdb-6.6-ppc/gdb/win32-nat.c Sat Jun 16 04:14:12 2007
|
||||
@@ -43,7 +43,11 @@
|
||||
#include <stdlib.h>
|
||||
#include <windows.h>
|
||||
#include <imagehlp.h>
|
||||
+
|
||||
+#if defined (__CYGWIN__)
|
||||
#include <sys/cygwin.h>
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
#include <signal.h>
|
||||
|
||||
#include "buildsym.h"
|
||||
@@ -81,7 +85,65 @@
|
||||
CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
|
||||
};
|
||||
#endif
|
||||
-#include <sys/procfs.h>
|
||||
+#ifndef __MINGW32__
|
||||
+ #include <sys/procfs.h>
|
||||
+#else
|
||||
+ #define NOTE_INFO_PROCESS 1
|
||||
+ #define NOTE_INFO_THREAD 2
|
||||
+ #define NOTE_INFO_MODULE 3
|
||||
+
|
||||
+ struct win32_core_process_info
|
||||
+ {
|
||||
+ DWORD pid;
|
||||
+ int signal;
|
||||
+ int command_line_size;
|
||||
+ char command_line[1];
|
||||
+ }
|
||||
+ #ifdef __GNUC__
|
||||
+ __attribute__ ((packed))
|
||||
+ #endif
|
||||
+ ;
|
||||
+
|
||||
+ struct win32_core_thread_info
|
||||
+ {
|
||||
+ DWORD tid;
|
||||
+ BOOL is_active_thread;
|
||||
+ CONTEXT thread_context;
|
||||
+ }
|
||||
+ #ifdef __GNUC__
|
||||
+ __attribute__ ((packed))
|
||||
+ #endif
|
||||
+ ;
|
||||
+
|
||||
+ struct win32_core_module_info
|
||||
+ {
|
||||
+ void* base_address;
|
||||
+ int module_name_size;
|
||||
+ char module_name[1];
|
||||
+ }
|
||||
+ #ifdef __GNUC__
|
||||
+ __attribute__ ((packed))
|
||||
+ #endif
|
||||
+ ;
|
||||
+
|
||||
+ struct win32_pstatus
|
||||
+ {
|
||||
+ unsigned long data_type;
|
||||
+ union
|
||||
+ {
|
||||
+ struct win32_core_process_info process_info;
|
||||
+ struct win32_core_thread_info thread_info;
|
||||
+ struct win32_core_module_info module_info;
|
||||
+ } data ;
|
||||
+ }
|
||||
+ #ifdef __GNUC__
|
||||
+ __attribute__ ((packed))
|
||||
+ #endif
|
||||
+ ;
|
||||
+
|
||||
+ typedef struct win32_pstatus win32_pstatus_t ;
|
||||
+
|
||||
+#endif
|
||||
#include <psapi.h>
|
||||
|
||||
#define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \
|
||||
@@ -446,30 +508,23 @@
|
||||
static BOOL WINAPI (*psapi_GetModuleInformation) (HANDLE, HMODULE, LPMODULEINFO, DWORD) = NULL;
|
||||
static DWORD WINAPI (*psapi_GetModuleFileNameExA) (HANDLE, HMODULE, LPSTR, DWORD) = NULL;
|
||||
|
||||
-static int
|
||||
-psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
|
||||
-{
|
||||
- DWORD len;
|
||||
- MODULEINFO mi;
|
||||
- int i;
|
||||
- HMODULE dh_buf[1];
|
||||
- HMODULE *DllHandle = dh_buf;
|
||||
- DWORD cbNeeded;
|
||||
- BOOL ok;
|
||||
|
||||
+BOOL
|
||||
+load_psapi ()
|
||||
+{
|
||||
if (!psapi_loaded ||
|
||||
psapi_EnumProcessModules == NULL ||
|
||||
psapi_GetModuleInformation == NULL ||
|
||||
psapi_GetModuleFileNameExA == NULL)
|
||||
{
|
||||
if (psapi_loaded)
|
||||
- goto failed;
|
||||
+ return FALSE;
|
||||
psapi_loaded = 1;
|
||||
psapi_module_handle = LoadLibrary ("psapi.dll");
|
||||
if (!psapi_module_handle)
|
||||
{
|
||||
/* printf_unfiltered ("error loading psapi.dll: %u", GetLastError ()); */
|
||||
- goto failed;
|
||||
+ return FALSE;
|
||||
}
|
||||
psapi_EnumProcessModules = GetProcAddress (psapi_module_handle, "EnumProcessModules");
|
||||
psapi_GetModuleInformation = GetProcAddress (psapi_module_handle, "GetModuleInformation");
|
||||
@@ -478,8 +533,24 @@
|
||||
if (psapi_EnumProcessModules == NULL ||
|
||||
psapi_GetModuleInformation == NULL ||
|
||||
psapi_GetModuleFileNameExA == NULL)
|
||||
- goto failed;
|
||||
+ return FALSE;
|
||||
}
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
|
||||
+{
|
||||
+ DWORD len;
|
||||
+ MODULEINFO mi;
|
||||
+ int i;
|
||||
+ HMODULE dh_buf[1];
|
||||
+ HMODULE *DllHandle = dh_buf;
|
||||
+ DWORD cbNeeded;
|
||||
+ BOOL ok;
|
||||
+
|
||||
+ if (!load_psapi ())
|
||||
+ goto failed;
|
||||
|
||||
cbNeeded = 0;
|
||||
ok = (*psapi_EnumProcessModules) (current_process_handle,
|
||||
@@ -507,14 +578,14 @@
|
||||
DllHandle[i],
|
||||
&mi,
|
||||
sizeof (mi)))
|
||||
- error (_("Can't get module info"));
|
||||
+ error ("Can't get module info");
|
||||
|
||||
len = (*psapi_GetModuleFileNameExA) (current_process_handle,
|
||||
DllHandle[i],
|
||||
dll_name_ret,
|
||||
MAX_PATH);
|
||||
if (len == 0)
|
||||
- error (_("Error getting dll name: %u."), (unsigned) GetLastError ());
|
||||
+ error ("Error getting dll name: %u\n", (unsigned) GetLastError ());
|
||||
|
||||
if ((DWORD) (mi.lpBaseOfDll) == BaseAddress)
|
||||
return 1;
|
||||
@@ -525,6 +596,30 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int
|
||||
+psapi_get_module_filename (HANDLE hProcess,
|
||||
+ HMODULE hModule,
|
||||
+ LPTSTR lpFilename,
|
||||
+ DWORD nSize)
|
||||
+{
|
||||
+ DWORD len;
|
||||
+
|
||||
+ if (!load_psapi ())
|
||||
+ goto failed;
|
||||
+
|
||||
+ len = (*psapi_GetModuleFileNameExA) (hProcess,
|
||||
+ hModule,
|
||||
+ lpFilename,
|
||||
+ nSize);
|
||||
+ if (len == 0)
|
||||
+ error ("Error getting file name: %u\n", (unsigned) GetLastError ());
|
||||
+
|
||||
+failed:
|
||||
+ lpFilename[0] = '\0';
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* Encapsulate the information required in a call to
|
||||
symbol_file_add_args */
|
||||
struct safe_symbol_file_add_args
|
||||
@@ -753,7 +848,13 @@
|
||||
so = XZALLOC (struct so_list);
|
||||
so->lm_info = (struct lm_info *) xmalloc (sizeof (struct lm_info));
|
||||
so->lm_info->load_addr = load_addr;
|
||||
+
|
||||
+#ifdef __CYGWIN__
|
||||
cygwin_conv_to_posix_path (buf, so->so_name);
|
||||
+#else
|
||||
+ strcpy( so->so_name, buf);
|
||||
+#endif
|
||||
+
|
||||
strcpy (so->so_original_name, so->so_name);
|
||||
|
||||
solib_end->next = so;
|
||||
@@ -1734,6 +1835,7 @@
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
+#ifdef __CYGWIN__
|
||||
/* Try fall back to Cygwin pid */
|
||||
pid = cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
|
||||
|
||||
@@ -1741,6 +1843,7 @@
|
||||
ok = DebugActiveProcess (pid);
|
||||
|
||||
if (!ok)
|
||||
+#endif /* __CYGWIN__ */
|
||||
error (_("Can't attach to process."));
|
||||
}
|
||||
|
||||
@@ -1800,13 +1903,14 @@
|
||||
static char *
|
||||
win32_pid_to_exec_file (int pid)
|
||||
{
|
||||
+ static char path[MAX_PATH + 1];
|
||||
+ char *path_ptr = NULL;
|
||||
+#ifdef __CYGWIN__
|
||||
/* Try to find the process path using the Cygwin internal process list
|
||||
pid isn't a valid pid, unfortunately. Use current_event.dwProcessId
|
||||
instead. */
|
||||
/* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */
|
||||
|
||||
- static char path[MAX_PATH + 1];
|
||||
- char *path_ptr = NULL;
|
||||
int cpid;
|
||||
struct external_pinfo *pinfo;
|
||||
|
||||
@@ -1824,6 +1928,13 @@
|
||||
}
|
||||
}
|
||||
cygwin_internal (CW_UNLOCK_PINFO);
|
||||
+#else
|
||||
+ if (!psapi_get_module_filename (current_process_handle, NULL, path, MAX_PATH))
|
||||
+ printf_unfiltered ("error reading the process's file name: %lu",
|
||||
+ GetLastError ());
|
||||
+ else
|
||||
+ path_ptr = path;
|
||||
+#endif
|
||||
return path_ptr;
|
||||
}
|
||||
|
||||
@@ -1873,8 +1984,16 @@
|
||||
char *toexec;
|
||||
char shell[MAX_PATH + 1]; /* Path to shell */
|
||||
const char *sh;
|
||||
+#if defined (__MINGW32__)
|
||||
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+ HANDLE hStdInput = 0;
|
||||
+ HANDLE hStdOutput = 0;
|
||||
+ HANDLE hStdError = 0;
|
||||
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+#else /* !__MINGW32__ */
|
||||
int tty;
|
||||
int ostdin, ostdout, ostderr;
|
||||
+#endif /* !__MINGW32__ */
|
||||
const char *inferior_io_terminal = get_inferior_io_terminal ();
|
||||
|
||||
if (!exec_file)
|
||||
@@ -1886,7 +2005,12 @@
|
||||
if (!useshell)
|
||||
{
|
||||
flags = DEBUG_ONLY_THIS_PROCESS;
|
||||
+#ifdef __CYGWIN__
|
||||
cygwin_conv_to_win32_path (exec_file, real_path);
|
||||
+#else
|
||||
+ strcpy (real_path, exec_file);
|
||||
+#endif
|
||||
+
|
||||
toexec = real_path;
|
||||
}
|
||||
else
|
||||
@@ -1895,7 +2019,11 @@
|
||||
sh = getenv ("SHELL");
|
||||
if (!sh)
|
||||
sh = "/bin/sh";
|
||||
+#ifdef __CYGWIN__
|
||||
cygwin_conv_to_win32_path (sh, shell);
|
||||
+#else
|
||||
+ strcpy (shell, sh);
|
||||
+#endif
|
||||
newallargs = alloca (sizeof (" -c 'exec '") + strlen (exec_file)
|
||||
+ strlen (allargs) + 2);
|
||||
sprintf (newallargs, " -c 'exec %s %s'", exec_file, allargs);
|
||||
@@ -1946,10 +2074,12 @@
|
||||
len = strlen (conv_path_names[j]);
|
||||
if (strncmp (conv_path_names[j], in_env[i], len) == 0)
|
||||
{
|
||||
- if (cygwin_posix_path_list_p (in_env[i] + len))
|
||||
+#ifdef __CYGWIN__
|
||||
+ if (cygwin_posix_path_list_p (env[i] + len))
|
||||
envlen += len
|
||||
- + cygwin_posix_to_win32_path_list_buf_size (in_env[i] + len);
|
||||
+ + cygwin_posix_to_win32_path_list_buf_size (env[i] + len);
|
||||
else
|
||||
+#endif
|
||||
envlen += strlen (in_env[i]) + 1;
|
||||
break;
|
||||
}
|
||||
@@ -1976,12 +2106,14 @@
|
||||
len = strlen (conv_path_names[j]);
|
||||
if (strncmp (conv_path_names[j], env[i], len) == 0)
|
||||
{
|
||||
+#ifdef __CYGWIN__
|
||||
if (cygwin_posix_path_list_p (env[i] + len))
|
||||
{
|
||||
memcpy (temp, env[i], len);
|
||||
cygwin_posix_to_win32_path_list (env[i] + len, temp + len);
|
||||
}
|
||||
else
|
||||
+#endif
|
||||
strcpy (temp, env[i]);
|
||||
break;
|
||||
}
|
||||
@@ -1996,6 +2128,20 @@
|
||||
*temp = 0;
|
||||
}
|
||||
|
||||
+#if defined (__MINGW32__)
|
||||
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+ if ( new_console)
|
||||
+ {
|
||||
+ hStdInput = GetStdHandle( STD_INPUT_HANDLE);
|
||||
+ hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE);
|
||||
+ hStdError = GetStdHandle( STD_ERROR_HANDLE);
|
||||
+
|
||||
+ SetStdHandle( STD_INPUT_HANDLE, INVALID_HANDLE_VALUE);
|
||||
+ SetStdHandle( STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
|
||||
+ SetStdHandle( STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
|
||||
+ }
|
||||
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+#else /* !__MINGW32__ */
|
||||
if (!inferior_io_terminal)
|
||||
tty = ostdin = ostdout = ostderr = -1;
|
||||
else
|
||||
@@ -2016,6 +2162,7 @@
|
||||
dup2 (tty, 2);
|
||||
}
|
||||
}
|
||||
+#endif /* !__MINGW32__ */
|
||||
|
||||
win32_init_thread_list ();
|
||||
ret = CreateProcess (0,
|
||||
@@ -2028,6 +2175,16 @@
|
||||
NULL, /* current directory */
|
||||
&si,
|
||||
&pi);
|
||||
+#if defined (__MINGW32__)
|
||||
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+ if ( new_console)
|
||||
+ {
|
||||
+ SetStdHandle( STD_INPUT_HANDLE, hStdInput);
|
||||
+ SetStdHandle( STD_OUTPUT_HANDLE, hStdOutput);
|
||||
+ SetStdHandle( STD_ERROR_HANDLE, hStdError);
|
||||
+ }
|
||||
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
|
||||
+#else /* !__MINGW32__ */
|
||||
if (tty >= 0)
|
||||
{
|
||||
close (tty);
|
||||
@@ -2038,6 +2195,7 @@
|
||||
close (ostdout);
|
||||
close (ostderr);
|
||||
}
|
||||
+#endif /* !__MINGW32__ */
|
||||
|
||||
if (!ret)
|
||||
error (_("Error creating process %s, (error %d)."),
|
||||
diff -Nbaur gdb-6.6/include/opcode/ppc.h gdb-6.6-ppc/include/opcode/ppc.h
|
||||
--- gdb-6.6/include/opcode/ppc.h Tue Oct 24 02:27:28 2006
|
||||
+++ gdb-6.6-ppc/include/opcode/ppc.h Sat Jun 16 04:15:10 2007
|
||||
@@ -146,6 +146,9 @@
|
||||
/* Opcode is only supported by PowerPC Cell family. */
|
||||
#define PPC_OPCODE_CELL 0x8000000
|
||||
|
||||
+/* Opcode is only supported by the PowerPC Gekko processor. */
|
||||
+#define PPC_OPCODE_GEKKO (040000000)
|
||||
+
|
||||
/* A macro to extract the major opcode from an instruction. */
|
||||
#define PPC_OP(i) (((i) >> 26) & 0x3f)
|
||||
|
||||
@@ -293,6 +296,10 @@
|
||||
/* This operand is for the DQ field in a DQ form instruction. */
|
||||
#define PPC_OPERAND_DQ (0100000)
|
||||
|
||||
+/* This operand names a quantization register. The disassembler
|
||||
+ prints these with a leading 'gqr'. */
|
||||
+#define PPC_OPERAND_GQR (040000)
|
||||
+
|
||||
/* The POWER and PowerPC assemblers use a few macros. We keep them
|
||||
with the operands table for simplicity. The macro table is an
|
||||
array of struct powerpc_macro. */
|
||||
diff -Nbaur gdb-6.6/opcodes/ppc-dis.c gdb-6.6-ppc/opcodes/ppc-dis.c
|
||||
--- gdb-6.6/opcodes/ppc-dis.c Tue Oct 24 02:27:28 2006
|
||||
+++ gdb-6.6-ppc/opcodes/ppc-dis.c Sat Jun 16 04:15:10 2007
|
||||
@@ -62,6 +62,13 @@
|
||||
&& strstr (info->disassembler_options, "e300") != NULL)
|
||||
dialect |= PPC_OPCODE_E300 | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON;
|
||||
else
|
||||
+ if (info->disassembler_options
|
||||
+ && (strstr (info->disassembler_options, "gekko") == 0))
|
||||
+ {
|
||||
+ dialect |= PPC_OPCODE_GEKKO;
|
||||
+ dialect &= ~PPC_OPCODE_ALTIVEC;
|
||||
+ }
|
||||
+ else
|
||||
dialect |= (PPC_OPCODE_403 | PPC_OPCODE_601 | PPC_OPCODE_CLASSIC
|
||||
| PPC_OPCODE_COMMON | PPC_OPCODE_ALTIVEC);
|
||||
|
||||
@@ -249,6 +256,8 @@
|
||||
(*info->print_address_func) (memaddr + value, info);
|
||||
else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
|
||||
(*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
|
||||
+ else if ((operand->flags & PPC_OPERAND_GQR) != 0)
|
||||
+ (*info->fprintf_func) (info->stream, "gqr%ld", value);
|
||||
else if ((operand->flags & PPC_OPERAND_CR) == 0
|
||||
|| (dialect & PPC_OPCODE_PPC) == 0)
|
||||
(*info->fprintf_func) (info->stream, "%ld", value);
|
||||
@@ -317,4 +326,5 @@
|
||||
fprintf (stream, " power6 Disassemble the Power6 instructions\n");
|
||||
fprintf (stream, " 32 Do not disassemble 64-bit instructions\n");
|
||||
fprintf (stream, " 64 Allow disassembly of 64-bit instructions\n");
|
||||
+ fprintf (stream, " gekko Disassemble the Gamecube Gekko instructions\n");
|
||||
}
|
||||
diff -Nbaur gdb-6.6/opcodes/ppc-opc.c gdb-6.6-ppc/opcodes/ppc-opc.c
|
||||
--- gdb-6.6/opcodes/ppc-opc.c Mon Nov 6 00:46:07 2006
|
||||
+++ gdb-6.6-ppc/opcodes/ppc-opc.c Sat Jun 16 04:40:02 2007
|
||||
@@ -95,6 +95,13 @@
|
||||
static unsigned long insert_ev8 (unsigned long, long, int, const char **);
|
||||
static long extract_ev8 (unsigned long, int, int *);
|
||||
|
||||
+static unsigned long insert_psq_gd (unsigned long, long, int, const char **);
|
||||
+static long extract_psq_gd (unsigned long, int, int *);
|
||||
+static unsigned long insert_psq_gx (unsigned long, long, int, const char **);
|
||||
+static long extract_psq_gx (unsigned long, int, int *);
|
||||
+
|
||||
+
|
||||
+
|
||||
/* The operands table.
|
||||
|
||||
The fields are bits, shift, insert, extract, flags.
|
||||
@@ -598,6 +605,27 @@
|
||||
/* The EH field in larx instruction. */
|
||||
#define EH XRT_L + 1
|
||||
{ 1, 0, NULL, NULL, PPC_OPERAND_OPTIONAL },
|
||||
+
|
||||
+ /* I Field in psq_ instructions */
|
||||
+#define PSQ_DD MTMSRD_L + 1
|
||||
+ { 12, 0, 0, 0, PPC_OPERAND_PARENS|PPC_OPERAND_SIGNED },
|
||||
+
|
||||
+ /* W Field in psq_ instructions */
|
||||
+#define PSQ_WD PSQ_DD + 1
|
||||
+ { 1, 15, 0, 0, 0 },
|
||||
+
|
||||
+ /* d Field in psq_ instructions */
|
||||
+#define PSQ_GD PSQ_WD + 1
|
||||
+ { 10, 12, insert_psq_gd, extract_psq_gd, PPC_OPERAND_GQR },
|
||||
+
|
||||
+ /* I Field in psq_ instructions A*/
|
||||
+#define PSQ_WX PSQ_GD + 1
|
||||
+ { 1, 10, 0, 0, 0 },
|
||||
+
|
||||
+ /* W Field in psq_ instructions */
|
||||
+#define PSQ_GX PSQ_WX + 1
|
||||
+ { 10, 7, insert_psq_gx, extract_psq_gx, PPC_OPERAND_GQR },
|
||||
+
|
||||
};
|
||||
|
||||
/* The functions used to insert and extract complicated operands. */
|
||||
@@ -1513,6 +1541,50 @@
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static unsigned long
|
||||
+insert_psq_gd (unsigned long insn,
|
||||
+ long value,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ const char **errmsg)
|
||||
+{
|
||||
+ if (value >= 912 && value <= 919)
|
||||
+ value -= 912;
|
||||
+ if (value < 0 || value > 7)
|
||||
+ *errmsg = _("invalid quantization register");
|
||||
+ return insn | ((value & 7) << 12);
|
||||
+}
|
||||
+
|
||||
+static long
|
||||
+extract_psq_gd (unsigned long insn,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ int *invalid ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ return ((insn & 0x7000) >> 12);
|
||||
+}
|
||||
+
|
||||
+static unsigned long
|
||||
+insert_psq_gx (unsigned long insn,
|
||||
+ long value,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ const char **errmsg)
|
||||
+{
|
||||
+ if (value >= 912 && value <= 919)
|
||||
+ value -= 912;
|
||||
+ if (value < 0 || value > 7)
|
||||
+ *errmsg = _("invalid quantization register");
|
||||
+ return insn | ((value & 7) << 7);
|
||||
+}
|
||||
+
|
||||
+static long
|
||||
+extract_psq_gx (unsigned long insn,
|
||||
+ int dialect ATTRIBUTE_UNUSED,
|
||||
+ int *invalid ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ return ((insn & 0x380) >> 7);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
/* Macros used to form opcodes. */
|
||||
|
||||
/* The main opcode. */
|
||||
@@ -1814,6 +1886,11 @@
|
||||
#define XUC(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
|
||||
#define XUC_MASK XUC(0x3f, 0x1f)
|
||||
|
||||
+/* A PSQ style load/store indexed */
|
||||
+#define PSQX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7f))
|
||||
+#define PSQX_MASK PSQX(0x3f,0x7f)
|
||||
+
|
||||
+
|
||||
/* The BO encodings used in extended conditional branch mnemonics. */
|
||||
#define BODNZF (0x0)
|
||||
#define BODNZFP (0x1)
|
||||
@@ -1908,6 +1985,7 @@
|
||||
#define PPCCHLK PPC_OPCODE_CACHELCK
|
||||
#define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
|
||||
#define PPCRFMCI PPC_OPCODE_RFMCI
|
||||
+#define PPCGEKKO PPC_OPCODE_GEKKO
|
||||
|
||||
/* The opcode table.
|
||||
|
||||
@@ -4928,6 +5006,99 @@
|
||||
{ "diexq", XRC(63,866,0), X_MASK, POWER6, { FRT, FRA, FRB } },
|
||||
{ "diexq.", XRC(63,866,1), X_MASK, POWER6, { FRT, FRA, FRB } },
|
||||
|
||||
+/* GEKKO specific stuff */
|
||||
+{ "dcbz_l", X(4,1014), XRT_MASK, PPCGEKKO, { RA, RB }},
|
||||
+
|
||||
+{ "ps_abs", XRC(4,264,0), XRA_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_abs.", XRC(4,264,1), XRA_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_add", A(4,21,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_add.", A(4,21,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_cmpo0", X(4,32), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+{ "ps_cmpo1", X(4,96), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_cmpu0", X(4,0), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+{ "ps_cmpu1", X(4,64), X_MASK|(3<<21), PPCGEKKO, { BF, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_div", A(4,18,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_div.", A(4,18,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_madd", A(4,29,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madd.", A(4,29,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_madds0", A(4,14,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madds0.", A(4,14,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_madds1", A(4,15,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_madds1.", A(4,15,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_merge00", XRC(4,528,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge00.", XRC(4,528,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge01", XRC(4,560,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge01.", XRC(4,560,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge10", XRC(4,592,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge10.", XRC(4,592,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_merge11", XRC(4,624,0), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+{ "ps_merge11.", XRC(4,624,1), X_MASK, PPCGEKKO, { FRT,FRA,FRB }},
|
||||
+
|
||||
+{ "ps_mr", XRC(4,72,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_mr.", XRC(4,72,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_msub", A(4,28,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_msub.", A(4,28,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_mul", A(4,25,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_mul.", A(4,25,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_muls0", A(4,12,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_muls0.", A(4,12,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_muls1", A(4,13,0), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+{ "ps_muls1.", A(4,13,1), AFRB_MASK, PPCGEKKO, { FRT,FRA,FRC }},
|
||||
+
|
||||
+{ "ps_nabs", XRC(4,136,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_nabs.", XRC(4,136,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_neg", XRC(4,40,0), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+{ "ps_neg.", XRC(4,40,1), XRA_MASK, PPCGEKKO, { FRT, FRB }},
|
||||
+
|
||||
+{ "ps_nmadd", A(4,31,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_nmadd.", A(4,31,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_nmsub", A(4,30,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_nmsub.", A(4,30,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_res", A(4,13,0), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_res.", A(4,13,1), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_rsqrte", A(4,26,0), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+{ "ps_rsqrte.", A(4,26,1), AFRAFRC_MASK, PPCGEKKO, { FRT,FRB }},
|
||||
+
|
||||
+{ "ps_sel", A(4,23,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sel.", A(4,23,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_sub", A(4,20,0), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+{ "ps_sub.", A(4,20,1), AFRC_MASK, PPCGEKKO, { FRT, FRA, FRB }},
|
||||
+
|
||||
+{ "ps_sum0", A(4,10,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sum0.", A(4,10,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "ps_sum1", A(4,11,0), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+{ "ps_sum1.", A(4,11,1), A_MASK, PPCGEKKO, { FRT,FRA,FRC,FRB }},
|
||||
+
|
||||
+{ "psq_l", OP(56), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_lu", OP(57), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_lux", PSQX(4,76),PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_lx", PSQX(4,12),PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_st", OP(60), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_stu", OP(61), OP_MASK, PPCGEKKO, { FRT,PSQ_DD,RA,PSQ_WD,PSQ_GD }},
|
||||
+{ "psq_stux", PSQX(4,78), PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+{ "psq_stx", PSQX(4,14), PSQX_MASK, PPCGEKKO, { FRT,RA,RB,PSQ_WX,PSQ_GX }},
|
||||
+
|
||||
};
|
||||
|
||||
const int powerpc_num_opcodes =
|
||||
14
dkppc/patches/gdb-6.7.1.patch
Normal file
14
dkppc/patches/gdb-6.7.1.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff -Nbaur gdb-6.7.1/config.sub gdb-6.7.1-ppc/config.sub
|
||||
--- gdb-6.7.1/config.sub Wed Aug 29 16:23:21 2007
|
||||
+++ gdb-6.7.1-ppc/config.sub Mon Dec 10 22:21:17 2007
|
||||
@@ -230,6 +230,10 @@
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
+ -gekko)
|
||||
+ basic_machine=powerpc-eabi
|
||||
+ os=-elf
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user