This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

AIX 5.1 on IA-64 patches


Implements support for AIX 5.1 on IA-64, against the gcc-3 branch.
Support is already included in sourceware/binutils.

NOTE: perhaps aix.h should be named aix51.h, which is how the powerpc
flavour names it, but I don't know if the version will change again
before this patch is applied :)
NOTE: some of aix.h is duplicated from linux.h; the commonalities should
likely be extracted and put into ia64.h.

 * gcc/config.gcc: Add configuration options for AIX 5.1 on IA-64.
 * gcc/config/ia64/unwind-ia64.c: Add unwind functions for AIX.
 * gcc/config/ia64/aix.h: AIX 5.1 on IA-64 configurations.
 * gcc/config/ia64/crti.asm: Generic static ctor/dtor support prefix
code.
 * gcc/config/ia64/crtn.asm: Generic static ctor/dtor support suffix
code.
 * gcc/config/ia64/t-aix: Makefile fragment for AIX 5.1 on IA-64.
 * gcc/config/ia64/va_list.h: Replacement header file.

Index: gcc/config.gcc
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config.gcc,v
retrieving revision 1.27.2.6
diff -d -c -p -b -w -r1.27.2.6 config.gcc
*** config.gcc 2001/04/26 16:04:12 1.27.2.6
--- config.gcc 2001/05/25 13:55:50
*************** ia64*-*-elf*)
*** 1596,1601 ****
--- 1596,1607 ----
   fi
   float_format=i386
   ;;
+ ia64*-*-aix*)
+  tm_file=ia64/aix.h
+  tmake_file="ia64/t-ia64 ia64/t-aix"
+  target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
+  float_format=i386
+  ;;
  ia64*-*-linux*)
   tm_file=ia64/linux.h
   tmake_file="t-linux ia64/t-ia64 ia64/t-glibc"
Index: gcc/config/ia64/unwind-ia64.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ia64/unwind-ia64.c,v
retrieving revision 1.1.2.1
diff -d -c -p -b -w -r1.1.2.1 unwind-ia64.c
*** unwind-ia64.c 2001/05/13 07:10:10 1.1.2.1
--- unwind-ia64.c 2001/05/25 13:56:48
*************** uw_identify_context (struct _Unwind_Cont
*** 2013,2015 ****
--- 2013,2102 ----

  #include "unwind.inc"
  #endif
+
+ #ifdef _AIX
+ /* Implements unwind table entry lookup for AIX (cf. fde-glibc.c). */
+ #include <dlfcn.h>
+ #include <link.h>
+ #include <sys/mman.h>
+
+ static struct unw_table_entry *
+ find_fde_for_dso (Elf64_Addr pc, rt_link_map *map,
+                   unsigned long* pseg_base, unsigned long* pgp)
+ {
+   rt_segment *seg;
+   Elf64_Addr seg_base;
+   struct unw_table_entry *f_base;
+   size_t lo, hi;
+
+   /* See if PC falls into one of the loaded segments.  */
+   for (seg = map->l_segments; seg; seg = (rt_segment *)seg->s_next)
+     {
+       if (pc >= seg->s_map_addr && pc < seg->s_map_addr +
seg->s_mapsz)
+         break;
+     }
+   if (!seg)
+     return NULL;
+
+   /* Search for the entry within the unwind table.  */
+   f_base = (struct unw_table_entry *) (map->l_unwind_table);
+   seg_base = (Elf64_Addr) seg->s_map_addr;
+   lo = 0;
+   hi = map->l_unwind_sz / sizeof (struct unw_table_entry);
+
+   while (lo < hi)
+     {
+       size_t mid = (lo + hi) / 2;
+       struct unw_table_entry *f = f_base + mid;
+
+       if (pc < f->start_offset + seg_base)
+         hi = mid;
+       else if (pc >= f->end_offset + seg_base)
+         lo = mid + 1;
+       else {
+         *pseg_base = seg_base;
+         *pgp = 0;
+         return f;
+       }
+     }
+   return NULL;
+ }
+
+ /* Return a pointer to the unwind table entry for the function
containing
+      PC.
+    FIXME needs to set GP properly
+  */
+ struct unw_table_entry *
+ _Unwind_FindTableEntry (void *pc, unsigned long *pseg_base, unsigned
long
+                           *pgp
+ )
+ {
+   extern rt_r_debug _r_debug;
+   struct unw_table_entry *ret;
+   rt_link_map *map = _r_debug.r_map; /* address of link map */
+
+   /* Check the main application first, hoping that most of the user's
+      code is there instead of in some library.  */
+   ret = find_fde_for_dso ((Elf64_Addr)pc, map, pseg_base, pgp);
+   if (ret)
+     return ret;
+
+   // FIXME need a DSO lock mechanism for AIX here, to ensure shared
+   // libraries
+   // aren't changed while we're examining them.
+
+   for (map = _r_debug.r_map; map; map = map->l_next)
+     {
+       /* Skip the main application's entry.  */
+       if (!map->l_name)
+       continue;
+       ret = find_fde_for_dso ((Elf64_Addr)pc, map, pseg_base, pgp);
+       if (ret)
+       break;
+     }
+
+   // FIXME need a DSO unlock mechanism for AIX here
+
+   return ret;
+ }
+ #endif /* _AIX */
Index: gcc/fixinc/fixincl.x
(omitted regenerated file diffs)
Index: gcc/fixinc/inclhack.def
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fixinc/inclhack.def,v
retrieving revision 1.101.2.5
diff -d -c -p -b -w -r1.101.2.5 inclhack.def
*** inclhack.def 2001/05/17 01:35:48 1.101.2.5
--- inclhack.def 2001/05/25 13:57:40
*************** fix = {
*** 2778,2783 ****
--- 2778,2795 ----


  /*
+  * Fix va_list definition in sys/types.h for AIX 5.0.
+  */
+ fix = {
+     hackname = sys_types_va_list;
+     files    = sys/types.h;
+     select   = "^[ \t]*typedef[ \t].*[ \t]va_list;";
+     sed      = "s%^[ \t]*typedef[ \t].*[ \t]va_list;%"
+                "typedef __builtin_va_list va_list; /* va_list */%g";
+
+ };
+
+ /*
   *  if the #if says _cplusplus, not the double underscore __cplusplus
   *  that it should be
   */

New file: gcc/config/ia64/aix.h
/* Definitions of target machine GNU compiler.  IA-64/AIX version.
   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
   Contributed by Timothy Wall (twall@cygnus.com)

This file is part of GNU CC.

GNU CC 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, or (at your option)
any later version.

GNU CC 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 GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/* AIX5 (aka Monterey): a mix of AIX and UnixWare.
   This file is loosely based on ia64/linux.h. */

#include "ia64/ia64.h"

/* START stuff extracted from gcc/config/linux.h */
/*#define NO_IMPLICIT_EXTERN_C*/

#undef ASM_APP_ON
#define ASM_APP_ON "#APP\n"

#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"

#define SET_ASM_OP "\t.set\t"

/* Use stabs instead of DWARF debug format.  */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
#include "svr4.h"

#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
#define MD_STARTFILE_PREFIX "/usr/lib/ia64l64/"

/* Output at beginning of assembler file.  */
/* The .file command should always begin the output.  */
#undef ASM_FILE_START
#define ASM_FILE_START(FILE)      \
  do {         \
 output_file_directive (FILE, main_input_filename);  \
 fprintf (FILE, "\t.version\t\"01.01\"\n");   \
  } while (0)

/* Provide a STARTFILE_SPEC appropriate for AIX.  Here we add
   the crti C++ startup files file which provide part of the support
   for getting C++ file-scope static object constructed before entering
   `main'. */

#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared: \
   %{pg:gcrt1_64.o%s} %{!pg:%{p:mcrt1_64.o%s} \
                        %{!p:%{profile:gcrt1_64.o%s} \
                          %{!profile:crt1_64.o%s}}}} \
 crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"

/* Provide a ENDFILE_SPEC appropriate for AIX.  Here we tack on
   the crtn file which provides termination of the support for getting
C++
   file-scope static object constructed before entering `main'. */

#undef  ENDFILE_SPEC
#define ENDFILE_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s}
crtn.o%s"

/*#define CC1_SPEC "%{profile:-p}"*/
#undef DEFAULT_VTABLE_THUNKS
#define DEFAULT_VTABLE_THUNKS 1
/*#define LIB_SPEC*/

/* Define this so we can compile MS code for use with WINE.  */
#define HANDLE_PRAGMA_PACK_PUSH_POP
/* END stuff extracted from gcc/config/linux.h */

/* START stuff patterned after gcc/config/ia64/linux.h */
#include "sysv4.h"

/* A C string constant that tells the GNU CC driver program options to
pass to
   CPP.  It can also specify how to translate options you give to GNU CC
into
   options for GNU CC to pass to the CPP.  */

/* If -ansi, we need to define _ANSI_C_SOURCE to get the right headers.
*/
#undef CPP_SPEC
#define CPP_SPEC "\
%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \
%{ansi:-D_ANSI_C_SOURCE} \
%{posix:-D_POSIX_SOURCE} \
%{cpp_cpu} \
-D__LONG_MAX__=9223372036854775807L"

#undef CPP_PREDEFINES
#define CPP_PREDEFINES "\
-D__ia64 -D__ia64__ -D_AIX -D_AIX64 -D_LONGLONG -Dunix \
-D__LP64__ -D__ELF__ -Asystem=unix -Asystem=aix -Acpu=ia64
-Amachine=ia64 \
-D__64BIT__ -D_LONG_LONG -D_IA64 -D__int128=__size128_t"

/* The GNU C++ standard library requires that these macros be defined.
*/
#undef CPLUSPLUS_CPP_SPEC
#define CPLUSPLUS_CPP_SPEC                      \
  "-D_XOPEN_SOURCE=500                          \
   -D_XOPEN_SOURCE_EXTENDED=1                   \
   -D_LARGE_FILE_API                            \
   -D_ALL_SOURCE                                \
   -D__LONG_MAX__=9223372036854775807L          \
   %{cpp_cpu}"

/* ia64-specific options for gas */
#undef ASM_SPEC
#define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic}"

/* Define this for shared library support. */

#undef LINK_SPEC
#define LINK_SPEC "\
%{shared:-shared} \
%{!shared: \
  %{!static: \
    %{rdynamic:-export-dynamic} \
    %{!dynamic-linker:-dynamic-linker /usr/lib/ia64l64/libc.so.1}} \
    %{static:-static}}"

#define DONT_USE_BUILTIN_SETJMP
#define JMP_BUF_SIZE  85

/* Output any profiling code before the prologue.  */

#undef PROFILE_BEFORE_PROLOGUE
#define PROFILE_BEFORE_PROLOGUE 1

/* A C statement or compound statement to output to FILE some assembler
code to
   call the profiling subroutine `mcount'.

   FIXME this is not supported until xlC supports it and can thus tell
us
   how to do it.
*/

#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO)  \
do {       \
} while (0)

/* END stuff from ia64/linux.h */

/* Tell the linker where to find the crt*.o files. */

#ifndef CROSS_COMPILE
#undef STANDARD_STARTFILE_PREFIX
#define STANDARD_STARTFILE_PREFIX "/usr/lib/ia64l64/"
#endif

#if 0
/* This would seem to be the right thing to do, except that output.h
gets
   included after this file... */

/* Override the definition in output.h so that no relocs ever go into a
   readonly section.  */
#undef DECL_READONLY_SECTION

/* Decide whether DECL needs to be in a writable section.  RELOC is the
same
   as for SELECT_SECTION.  */

#define DECL_READONLY_SECTION(DECL,RELOC)  \
  (TREE_READONLY (DECL)     \
   && ! TREE_THIS_VOLATILE (DECL)   \
   && DECL_INITIAL (DECL)    \
   && (DECL_INITIAL (DECL) == error_mark_node  \
       || TREE_CONSTANT (DECL_INITIAL (DECL)))  \
   && ! (RELOC))

#endif /* disabled */

/* Override SELECT_SECTION and SELECT_RTX_SECTION from
config/ia64/sysv4.h;
   these definitions ignore flag_pic as if it were always set;
   it is illegal to have relocations in shared segments on AIX.  */

/* A C statement or statements to switch to the appropriate
   section for output of DECL.  DECL is either a `VAR_DECL' node
   or a constant of some sort.  RELOC indicates whether forming
   the initial value of DECL requires link-time relocations.  */

#undef SELECT_SECTION
#define SELECT_SECTION(DECL,RELOC)     \
{         \
  if (TREE_CODE (DECL) == STRING_CST)     \
    {         \
      if (! flag_writable_strings)     \
 const_section ();      \
      else        \
 data_section ();      \
    }         \
  else if (TREE_CODE (DECL) == VAR_DECL)    \
    {         \
      if (XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0]   \
   == SDATA_NAME_FLAG_CHAR)     \
        sdata_section ();      \
      /* ??? We need the extra ! RELOC check, because the default is to
\
  only check RELOC if flag_pic is set, and we don't set flag_pic \
  (yet?).  */       \
      else if (DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC)) \
 const_section ();      \
      else        \
 data_section ();      \
    }         \
  /* This could be a CONSTRUCTOR containing ADDR_EXPR of a VAR_DECL, \
     in which case we can't put it in a shared library rodata.  */ \
  else if (RELOC)
\
    data_section ();       \
  else         \
    const_section ();       \
}

/* Similarly for constant pool data.  */

extern unsigned int ia64_section_threshold;
#undef SELECT_RTX_SECTION
#define SELECT_RTX_SECTION(MODE, RTX)     \
{         \
  if (GET_MODE_SIZE (MODE) > 0      \
      && GET_MODE_SIZE (MODE) <= ia64_section_threshold)  \
    sdata_section ();       \
  else if (symbolic_operand ((RTX), (MODE)))                  \
    data_section ();       \
  else         \
    const_section ();       \
}

#undef UNIQUE_SECTION
#define UNIQUE_SECTION(DECL, RELOC)    \
  do        \
    {        \
      int len;       \
      int sec;       \
      const char *name;      \
      char *string;      \
      const char *prefix;     \
      static const char *prefixes[/*4*/3][2] =   \
      {        \
 { ".text.",   ".gnu.linkonce.t." },   \
 { ".rodata.", ".gnu.linkonce.r." },   \
 { ".data.",   ".gnu.linkonce.d." }   \
 /* Do not generate unique sections for uninitialised  \
    data since we do not have support for this in the    \
    linker scripts yet...    \
        ,{ ".bss.",    ".gnu.linkonce.b." }  */   \
      };       \
              \
      if (TREE_CODE (DECL) == FUNCTION_DECL)   \
 sec = 0;      \
  /*  else if (DECL_INITIAL (DECL) == 0    \
        || DECL_INITIAL (DECL) == error_mark_node) \
        sec =  3; */      \
      else if (DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC))\
 sec = 1;      \
      else       \
 sec = 2;      \
              \
      name   = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
      /* Strip off any encoding in name.  */   \
      STRIP_NAME_ENCODING (name, name);    \
      prefix = prefixes[sec][DECL_ONE_ONLY(DECL)];  \
      len    = strlen (name) + strlen (prefix);   \
      string = alloca (len + 1);    \
              \
      sprintf (string, "%s%s", prefix, name);   \
              \
      DECL_SECTION_NAME (DECL) = build_string (len, string); \
    }        \
  while (0)

/* Override ia64/sysv4.h setting with that used by AIX5. */
#undef WCHAR_TYPE
#ifdef __64BIT__
#define WCHAR_TYPE "unsigned int"
#else
#define WCHAR_TYPE "unsigned short"
#endif

#if 0
/* UNIQUE_SECTION above obviates the need for this definition.  This one
ended
   up causing just about everything to be put into the data section in
some
   cases (including most executable code). */

/* Override definition from elfos.h.  Make sure all relocations go into
   a writable section.  */

#undef ASM_OUTPUT_SECTION_NAME
#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC)  \
  do         \
    {         \
      static htab_t htab;
\

\
      struct section_info
\
      {         \
 enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type;  \
      };
\

\
      struct section_info *s;      \
      const char *mode;       \
      enum sect_enum type;
\
      PTR* slot;
\

\
      /* The names we put in the hashtable will always be the unique
\
  versions gived to us by the stringtable, so we can just use    \
  their addresses as the keys.  */                               \
      if (!htab)
\
 htab = htab_create (31,                                         \
       htab_hash_pointer,                          \
       htab_eq_pointer,                            \
       NULL);                                      \

\
      if (DECL && TREE_CODE (DECL) == FUNCTION_DECL)   \
 type = SECT_EXEC, mode = "ax";     \
      else if (DECL && DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC))
\
 type = SECT_RO, mode = "a";     \
      else        \
 type = SECT_RW, mode = "aw";     \
               \

\
      /* See if we already have an entry for this section.  */
\
      slot = htab_find_slot (htab, NAME, INSERT);
\
      if (!*slot)
\
 {                                                               \
   s = (struct section_info *) xmalloc (sizeof (* s));  \
   s->type = type;      \
   *slot = s;       \
   fprintf (FILE, "\t.section\t%s,\"%s\",@progbits\n",  \
     NAME, mode);      \
 }        \
      else        \
 {        \
   s = (struct section_info *) *slot;                            \
   if (DECL && s->type != type)     \
     error_with_decl (DECL,                                      \
        "%s causes a section type conflict");      \
           \
   fprintf (FILE, "\t.section\t%s\n", NAME);   \
 }        \
    }         \
  while (0)
#endif

/* Have to get rid of the system's definition so that we can use gcc's
   instead. */
#include <sys/machine.h>
#undef REG_SIZE

/* End of aix.h */

New file: gcc/config/ia64/crti.asm:
#   Copyright (C) 2000 Free Software Foundation, Inc.
#   Written By Timothy Wall
#
# This file 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, or (at your option) any
# later version.
#
# In addition to the permissions in the GNU General Public License, the
# Free Software Foundation gives you unlimited permission to link the
# compiled version of this file with other programs, and to distribute
# those programs without any restriction coming from the use of this
# file.  (The General Public License restrictions do apply in other
# respects; for example, they cover modification of the file, and
# distribution when not linked into another program.)
#
# This file 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; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
#    As a special exception, if you link this library with files
#    compiled with GCC to produce an executable, this does not cause
#    the resulting executable to be covered by the GNU General Public
License.
#    This exception does not however invalidate any other reasons why
#    the executable file might be covered by the GNU General Public
License.
#

# This file just make a stack frame for the contents of the .fini and
# .init sections.  Users may put any desired instructions in those
# sections.

 .file  "crti.asm"

 .section ".init"
 .align 16
 .global _init#
 .proc _init#
_init:
 .prologue 14, 33
 .save ar.pfs, r34
 alloc r34 = ar.pfs, 0, 4, 0, 0
 .vframe r35
 mov r35 = r12
 .save rp, r33
 mov r33 = b0
 .body

 .section ".fini"
 .align 16
 .global _fini#
 .proc _fini#
_fini:
 .prologue 14, 33
 .save ar.pfs, r34
 alloc r34 = ar.pfs, 0, 4, 0, 0
 .vframe r35
 mov r35 = r12
 .save rp, r33
 mov r33 = b0
 .body

# end of crti.asm

New file: gcc/config/ia64/crtn.asm
#   Copyright (C) 2000 Free Software Foundation, Inc.
#   Written By Timothy Wall
#
# This file 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, or (at your option) any
# later version.
#
# In addition to the permissions in the GNU General Public License, the
# Free Software Foundation gives you unlimited permission to link the
# compiled version of this file with other programs, and to distribute
# those programs without any restriction coming from the use of this
# file.  (The General Public License restrictions do apply in other
# respects; for example, they cover modification of the file, and
# distribution when not linked into another program.)
#
# This file 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; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
#    As a special exception, if you link this library with files
#    compiled with GCC to produce an executable, this does not cause
#    the resulting executable to be covered by the GNU General Public
License.
#    This exception does not however invalidate any other reasons why
#    the executable file might be covered by the GNU General Public
License.
#

# This file just makes sure that the .fini and .init sections do in
# fact return.  Users may put any desired instructions in those
sections.
# This file is the last thing linked into any executable.

 .file  "crtn.asm"

 .section ".init"
 ;;
 mov ar.pfs = r34
 mov b0 = r33
 .restore sp
 mov r12 = r35
 br.ret.sptk.many b0
 .endp _init#

 .section ".fini"
 ;;
 mov ar.pfs = r34
 mov b0 = r33
 .restore sp
 mov r12 = r35
 br.ret.sptk.many b0
 .endp _fini#

# end of crtn.asm

New file: gcc/config/ia64/t-aix
# AIX support

# Compile crtbeginS.o and crtendS.o with pic.
CRTSTUFF_T_CFLAGS_S = -fPIC
# Compile libgcc2.a with pic and defines required by AIX headers
TARGET_LIBGCC2_CFLAGS = -fPIC -D__64BIT__ -D_LONG_LONG -D_IA64
-D__int128=__size128_t
# Add va_list.h to headers defined by t-ia64.  Replace AIX 5.0
<va_list.h>
EXTRA_HEADERS = $(srcdir)/config/ia64/ia64intrin.h \
                $(srcdir)/config/ia64/va_list.h

# Add crt[in].o to the list defined in t-ia64.  These files provide
# endpoints for crtbegin/end.

EXTRA_PARTS=crti.o crtn.o crtbegin.o crtend.o crtbeginS.o crtendS.o

crti.o: $(srcdir)/config/ia64/crti.asm $(GCC_PASSES)
 $(GCC_FOR_TARGET) -c -o crti.o -x assembler
$(srcdir)/config/ia64/crti.asm
crtn.o: $(srcdir)/config/ia64/crtn.asm $(GCC_PASSES)
 $(GCC_FOR_TARGET) -c -o crtn.o -x assembler
$(srcdir)/config/ia64/crtn.asm

# end t-aix

New file: gcc/config/ia64/va_list.h
/* A replacement for Monterey64's <va_list.h>.  */

#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef __builtin_va_list __gnuc_va_list;
#endif

#if !defined(_VA_LIST) && !defined(_HIDDEN_VA_LIST)
#define _VA_LIST
typedef __gnuc_va_list va_list;

#elif defined(_HIDDEN_VA_LIST) && !defined(_HIDDEN_VA_LIST_DONE)
#define _HIDDEN_VA_LIST_DONE
typedef __gnuc_va_list __va_list;

#elif defined(_HIDDEN_VA_LIST) && defined(_VA_LIST)
#undef _HIDDEN_VA_LIST
typedef __va_list va_list;

#endif



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]