diff -urN gcc-4.3.3.orig/gcc/config/mips/iris5.h gcc-4.3.3/gcc/config/mips/iris5.h --- gcc-4.3.3.orig/gcc/config/mips/iris5.h 2007-08-02 12:49:31.000000000 +0200 +++ gcc-4.3.3/gcc/config/mips/iris5.h 2009-02-25 11:37:23.526539000 +0100 @@ -21,7 +21,9 @@ #ifdef IRIX_USING_GNU_LD #define IRIX_SUBTARGET_LINK_SPEC "-melf32bsmip" #else -#define IRIX_SUBTARGET_LINK_SPEC "-_SYSTYPE_SVR4" +#define IRIX_SUBTARGET_LINK_SPEC \ + "%{w} -_SYSTYPE_SVR4 \ + %{shared:-hidden_symbol __dso_handle,__gcc_init,__gcc_fini}" #endif #undef STARTFILE_SPEC @@ -42,3 +44,42 @@ #undef MACHINE_TYPE #define MACHINE_TYPE "SGI running IRIX 5.x" + +/* Enable parsing of #pragma pack(push,) and #pragma pack(pop). */ +#define HANDLE_PRAGMA_PACK_PUSH_POP 1 + +/* Both GAS and the SGI assembler cannot grok .stabd directives. */ +#undef NO_DBX_BNSYM_ENSYM +#define NO_DBX_BNSYM_ENSYM 1 + +#ifdef IRIX_USING_GNU_AS +/* GAS needs '-mdebug' to emit stabs in ECOFF */ +#undef SUBTARGET_ASM_DEBUGGING_SPEC +#define SUBTARGET_ASM_DEBUGGING_SPEC "\ +%{g} %{g0} %{g1} %{g2} %{g3} \ +%{ggdb:-g} %{ggdb0:-g0} %{ggdb1:-g1} %{ggdb2:-g2} %{ggdb3:-g3} \ +%{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \ +%{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \ +%{gstabs*:-mdebug} %{!gstabs*:-no-mdebug}" +#endif + +#ifdef IRIX_USING_GNU_LD +#define SUBTARGET_DONT_WARN_UNUSED_SPEC "" +#define SUBTARGET_WARN_UNUSED_SPEC "" +#else +#define SUBTARGET_DONT_WARN_UNUSED_SPEC "-dont_warn_unused" +#define SUBTARGET_WARN_UNUSED_SPEC "-warn_unused" +#endif + +/* Avoid getting three warnings for libgcc.a everytime we link. */ +#undef LIBGCC_SPEC +#define LIBGCC_SPEC \ + SUBTARGET_DONT_WARN_UNUSED_SPEC \ + " -lgcc " \ + SUBTARGET_WARN_UNUSED_SPEC + +/* The init_priority attribute is not supported with IRIX ld. */ +#ifndef IRIX_USING_GNU_LD +#undef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY 0 +#endif diff -urN gcc-4.3.3.orig/gcc/config/mips/iris6.h gcc-4.3.3/gcc/config/mips/iris6.h --- gcc-4.3.3.orig/gcc/config/mips/iris6.h 2008-07-30 12:18:08.000000000 +0200 +++ gcc-4.3.3/gcc/config/mips/iris6.h 2009-02-25 11:37:23.528006200 +0100 @@ -45,6 +45,9 @@ #undef MACHINE_TYPE #define MACHINE_TYPE "SGI running IRIX 6.x" +/* Enable parsing of #pragma pack(push,) and #pragma pack(pop). */ +#define HANDLE_PRAGMA_PACK_PUSH_POP 1 + #ifdef IRIX_USING_GNU_LD #define IRIX_SUBTARGET_LINK_SPEC \ "%{mabi=32: -melf32bsmip}%{mabi=n32: -melf32bmipn32}%{mabi=64: -melf64bmip}" @@ -140,3 +143,8 @@ #undef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "%{pthread:-D_REENTRANT}" +/* The init_priority attribute is not supported with the MIPSpro linker. */ +#ifndef IRIX_USING_GNU_LD +#undef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY 0 +#endif diff -urN gcc-4.3.3.orig/gcc/config.gcc gcc-4.3.3/gcc/config.gcc --- gcc-4.3.3.orig/gcc/config.gcc 2008-11-20 18:09:53.000000000 +0100 +++ gcc-4.3.3/gcc/config.gcc 2009-02-25 11:37:23.524614200 +0100 @@ -1662,6 +1662,10 @@ then tm_file="${tm_file} dbx.h mips/dbxmdebug.h" fi + if test "x$gas" = xyes + then + tm_defines="${tm_defines} IRIX_USING_GNU_AS" + fi if test "x$gnu_ld" = xyes then tm_defines="${tm_defines} IRIX_USING_GNU_LD" diff -urN gcc-4.3.3.orig/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c gcc-4.3.3/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c --- gcc-4.3.3.orig/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c 2007-08-01 18:25:11.000000000 +0200 +++ gcc-4.3.3/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c 2009-02-25 11:37:23.516615800 +0100 @@ -614,9 +614,9 @@ if (e[0].etype == ETYPE_STRUCT_ARRAY || e[0].etype == ETYPE_UNION_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); /* If this is an array type, do not put aligned attributes on elements. Aligning elements to a value greater than their size will result in a compiler error. */ @@ -669,9 +669,9 @@ if (e[0].etype == ETYPE_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); } else { @@ -730,7 +730,7 @@ ++*letter; return 1; } - snprintf (buf, 20, "%d", e[0].len); + sprintf (buf, "%d", e[0].len); if (e[0].attrib) switch (generate_random () % 3) { @@ -877,8 +877,7 @@ return 1 + e[0].len; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf) - 1, - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); q = strchr (p, '\0'); /* FALLTHROUGH */ case ETYPE_STRUCT: @@ -906,16 +905,14 @@ return 1; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); output_FNB ('F', e); if ((generate_random () & 7) == 0) { j = generate_random () % e[0].arr_len; if (i != j) { - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, j); + sprintf (p, "%c[%d]", *letter, j); output_FNB ('F', e); } } diff -urN gcc-4.3.3.orig/gcc/testsuite/g++.dg/warn/miss-format-1.C gcc-4.3.3/gcc/testsuite/g++.dg/warn/miss-format-1.C --- gcc-4.3.3.orig/gcc/testsuite/g++.dg/warn/miss-format-1.C 2005-10-09 14:59:17.000000000 +0200 +++ gcc-4.3.3/gcc/testsuite/g++.dg/warn/miss-format-1.C 2009-02-25 11:38:50.943324600 +0100 @@ -2,7 +2,7 @@ /* Origin: Joseph Myers */ /* { dg-do compile } */ /* { dg-options "-Wmissing-format-attribute" } */ -/* { dg-error "not declared" "" { target *-*-solaris2.5.1 *-*-solaris2.[5-8] } 24 } */ +/* { dg-error "not declared" "" { target *-*-irix* *-*-solaris2.5.1 *-*-solaris2.[5-8] } 24 } */ #include #include @@ -21,7 +21,7 @@ { va_list ap; va_start (ap, fmt); - vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-solaris2.5.1 *-*-solaris2.[5-8] } } */ + vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-irix* *-*-solaris2.5.1 *-*-solaris2.[5-8] } } */ va_end (ap); } diff -urN gcc-4.3.3.orig/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c gcc-4.3.3/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c --- gcc-4.3.3.orig/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c 2007-11-08 20:47:36.000000000 +0100 +++ gcc-4.3.3/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c 2009-02-25 11:37:23.509435000 +0100 @@ -854,9 +854,9 @@ if (e[0].etype == ETYPE_STRUCT_ARRAY || e[0].etype == ETYPE_UNION_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); /* If this is an array type, do not put aligned attributes on elements. Aligning elements to a value greater than their size will result in a compiler error. */ @@ -909,9 +909,9 @@ if (e[0].etype == ETYPE_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); } else { @@ -977,11 +977,11 @@ case 'I': case 'L': case 'Q': - snprintf (buf, 20, "B%cN(%d)", e[0].type->bitfld, e[0].len); + sprintf (buf, "B%cN(%d)", e[0].type->bitfld, e[0].len); break; case 'B': case ' ': - snprintf (buf, 20, "%d", e[0].len); + sprintf (buf, "%d", e[0].len); break; default: abort (); @@ -1209,8 +1209,7 @@ return 1 + e[0].len; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf) - 1, - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); q = strchr (p, '\0'); /* FALLTHROUGH */ case ETYPE_STRUCT: @@ -1238,16 +1237,14 @@ return 1; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); output_FNB ('F', e); if ((generate_random () & 7) == 0) { j = generate_random () % e[0].arr_len; if (i != j) { - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, j); + sprintf (p, "%c[%d]", *letter, j); output_FNB ('F', e); } } diff -urN gcc-4.3.3.orig/gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c gcc-4.3.3/gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c --- gcc-4.3.3.orig/gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c 2007-08-01 18:25:11.000000000 +0200 +++ gcc-4.3.3/gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c 2009-02-25 11:37:23.519627000 +0100 @@ -337,9 +337,9 @@ if (e[0].etype == ETYPE_STRUCT_ARRAY || e[0].etype == ETYPE_UNION_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); } else { @@ -385,9 +385,9 @@ if (e[0].etype == ETYPE_ARRAY) { if (e[0].arr_len == 255) - snprintf (buf, 20, "%c[]", *letter); + sprintf (buf, "%c[]", *letter); else - snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + sprintf (buf, "%c[%d]", *letter, e[0].arr_len); } else { @@ -439,11 +439,11 @@ case 'I': case 'L': case 'Q': - snprintf (buf, 20, "B%cN(%d)", e[0].type->bitfld, e[0].len); + sprintf (buf, "B%cN(%d)", e[0].type->bitfld, e[0].len); break; case 'B': case ' ': - snprintf (buf, 20, "%d", e[0].len); + sprintf (buf, "%d", e[0].len); break; default: abort (); @@ -635,8 +635,7 @@ return 1 + e[0].len; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf) - 1, - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); q = strchr (p, '\0'); /* FALLTHROUGH */ case ETYPE_STRUCT: @@ -664,16 +663,14 @@ return 1; } i = generate_random () % e[0].arr_len; - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, i); + sprintf (p, "%c[%d]", *letter, i); output_FNB ('F', e); if ((generate_random () & 7) == 0) { j = generate_random () % e[0].arr_len; if (i != j) { - snprintf (p, sizeof (namebuf) - (p - namebuf), - "%c[%d]", *letter, j); + sprintf (p, "%c[%d]", *letter, j); output_FNB ('F', e); } }