Article View: gnu.gcc.bug
Article #331Re: AIX PS/2 implementation
From: Minh Tran-Le
Date: Wed, 29 Jul 1992 18:44
Date: Wed, 29 Jul 1992 18:44
405 lines
14396 bytes
14396 bytes
big@broue.rot.qc.ca (Patrick Drolet) wrote:
|Did anyone of you guys compiled gcc-2.2.2 under AIX PS/2 ? (I know, I know,
|AIX PS/2 is not Sun OS, but I'm stuck with it).
|Anyways, I have a problem wich I cannot solve.
|
To compile gcc-2.2.2 under AIX PS/2 you need a patch for gcc (include at
the end of this message) and a modified version of gas-1.92.3 (alpha).
I can put somewhere for anonymous ftp my whole gas-1.92.3 compiled if
somebody has space. Or I can mail the diff for gas-1.92.3 to whoever
wants it.
Minh Tran-Le.
note: if you have aix ps/2 up to the latest patch you can enable linking
gcc with shared libraries by uncommenting BOOT_LDFLAGS in:
config/t-aix386.
---------------------------------------------------------------------------
*** ./config/t-aix386- Mon Jun 15 00:24:13 1992
--- ./config/t-aix386 Mon Jun 15 00:24:13 1992
***************
*** 0 ****
--- 1,12 ----
+ # The one that comes with the system is POSIX-compliant.
+ LIMITS_H =
+
+ # For svr3 we build crtbegin.o and crtend.o which serve to add begin and
+ # end labels to the .ctors and .dtors section when we link using gcc.
+
+ EXTRA_PARTS=crtbegin.o crtend.o
+
+ CC = gcc
+ BOOT_CFLAGS = -O2 -fno-strength-reduce $(CFLAGS)
+ #BOOT_LDFLAGS = -shlib
+ CFLAGS =
*** ./config/aix386.h- Thu Mar 19 12:42:02 1992
--- ./config/aix386.h Mon Jun 15 00:24:14 1992
***************
*** 1,5 ****
/* Definitions for IBM PS2 running AIX/386.
! From: Minh Tran-Le <TRANLE@intellicorp.com>
! Copyright (C) 1988 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,5 ----
/* Definitions for IBM PS2 running AIX/386.
! From: Minh Tran-Le <tranle@intellicorp.com>
! Copyright (C) 1988-1992 Free Software Foundation, Inc.
This file is part of GNU CC.
***************
*** 19,22 ****
--- 19,30 ----
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+ /* Define USE_GAS if you have the new version of gas that can handle
+ * multiple segments and .section pseudo op. This will allow gcc to
+ * use the .init section for g++ ctor/dtor.
+ *
+ * If you don't have gas then undefined USE_GAS. You will also have
+ * to use collect if you want to use g++
+ */
+ #define USE_GAS
#include "i386.h"
***************
*** 35,54 ****
#define TARGET_DEFAULT 1
! /* Use crt1.o as a startup file and crtn.o as a closing file. */
!
! #define STARTFILE_SPEC \
! "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}} crtbegin.o%s"
! #define LIB_SPEC "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} -lc \
! crtend.o%s crtn.o%s"
! /* Special flags for the linker. I don't know what they do. */
! #define LINK_SPEC "%{K} %{!K:-K} %{T*} %{z:-lm}"
/* Specify predefined symbols in preprocessor. */
! #define CPP_PREDEFINES "-D_I386 -Di386 -DAIX -D_AIX"
/* special flags for the aix assembler to generate the short form for all
qualifying forward reference */
--- 43,85 ----
#define TARGET_DEFAULT 1
! #define LIB_SPEC \
! "%{shlib:-lc_s} -lc"
! /* Use crt1.o as a startup file and crtn.o as a closing file. */
! #ifdef USE_GAS
! # define STARTFILE_SPEC \
! "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}} crtbegin.o%s"
! # define ENDFILE_SPEC \
! "crtend.o%s crtn.o%s"
!
! #else
! # define STARTFILE_SPEC \
! "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}"
! # define ENDFILE_SPEC \
! "crtn.o%s"
! #endif
! /* Special flags for the linker:
! * -K Loads the a.out header into the first bytes of the text segment,
! * followed by the text segments from the object modules. This flag
! * is required on the PS/2.
! * -Tnum Makes num the starting address for the text segment of the output
! * file. If not specified, the text segment begins at location zero.
! * -elabel Makes label the entry point of the executable output file.
! * -N Makes the text writeable.
! * -s Strips the symbol table, line number information, and relocation
! * information from the output.
! * -x Does not enter local symbols in the output symbol table; enters only
! * external and static symbols.
! */
! #define LINK_SPEC "%{K}%{!K:-K} %{T*} %{e*} %{N} %{s} %{x}"
/* Specify predefined symbols in preprocessor. */
! #define CPP_PREDEFINES "-Dps2 -Di386"
+ #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}%{!posix:-DAIX} -D_I386 -D_AIX -D_MBCS"
+
/* special flags for the aix assembler to generate the short form for all
qualifying forward reference */
***************
*** 56,67 ****
#define ASM_SPEC "-s2"
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) \
! do { fprintf (FILE, "\t.file\t\"%s\"\n", dump_base_name); \
! if (optimize) \
! ASM_FILE_START_1 (FILE); \
! else \
! fprintf (FILE, "\t.noopt\n"); \
! } while (0)
/* This was suggested, but it shouldn't be right for DBX output. -- RMS
--- 87,102 ----
#define ASM_SPEC "-s2"
+ /* The .file pseudo op can only handle 14 characters filenames */
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) \
! do { \
! char *p = (char *) strrchr (dump_base_name, '/'); \
! if (!p) \
! p = dump_base_name; \
! else p++; \
! fprintf ((FILE), "\t.file\t\"%s\"\n", p); \
! if (!optimize) \
! fprintf (FILE, "\t.noopt\n"); \
! } while (0)
/* This was suggested, but it shouldn't be right for DBX output. -- RMS
***************
*** 109,112 ****
--- 144,148 ----
ASM_OUTPUT_LABEL ((FILE), (NAME)), \
fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED)))
+
/* Define a few machine-specific details of the implementation of
***************
*** 114,125 ****
#undef INIT_SECTION_ASM_OP
! #define INIT_SECTION_ASM_OP ".section .init,\"x\""
! #define CTOR_LIST_BEGIN \
asm (INIT_SECTION_ASM_OP); \
asm ("pushl $0")
! #define CTOR_LIST_END CTOR_LIST_BEGIN
! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
do { \
init_section (); \
--- 150,182 ----
#undef INIT_SECTION_ASM_OP
! #undef CTORS_SECTION_ASM_OP
! #undef DTORS_SECTION_ASM_OP
!
! #ifdef USE_GAS
! # define INIT_SECTION_ASM_OP ".section .init,\"x\""
! # define CTORS_SECTION_ASM_OP INIT_SECTION_ASM_OP
! # define DTORS_SECTION_ASM_OP INIT_SECTION_ASM_OP
! # define CTOR_LIST_BEGIN \
asm (INIT_SECTION_ASM_OP); \
asm ("pushl $0")
! # define CTOR_LIST_END CTOR_LIST_BEGIN
! # define DTOR_LIST_BEGIN \
! extern int __global_ctors_done
! # define DTOR_LIST_END \
! asm(".data"); \
! int __global_ctors_done = 0
!
! /* We use the same __CTOR_LIST__ stack for both the ctors and dtors.
! * We push the ctor function followed by 1 and
! * we push the dtor function followed by 2.
! * This is because AIX PS/2 ld can handle only 1 .init section
! */
!
! /* A C statement (sans semicolon) to output an element in the table of
! global constructors. */
! # undef ASM_OUTPUT_CONSTRUCTOR
! # define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
do { \
init_section (); \
***************
*** 126,129 ****
fprintf (FILE, "\tpushl $"); \
assemble_name (FILE, NAME); \
! fprintf (FILE, "\n"); \
} while (0)
--- 183,232 ----
fprintf (FILE, "\tpushl $"); \
assemble_name (FILE, NAME); \
! fprintf (FILE, "\n\tpushl $1\n"); \
} while (0)
+
+ /* A C statement (sans semicolon) to output an element in the table of
+ global destructors. */
+ # undef ASM_OUTPUT_DESTRUCTOR
+ # define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
+ do { \
+ init_section (); \
+ fprintf (FILE, "\tpushl $"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n\tpushl $2\n"); \
+ } while (0)
+
+ /* We can handle only ctors for now */
+ # undef DO_GLOBAL_CTORS_BODY
+ # define DO_GLOBAL_CTORS_BODY \
+ do { \
+ func_ptr *__CTOR_LIST__ = __builtin_alloca (0), *p; \
+ int fn_type; \
+ extern int __global_ctors_done; \
+ if (__global_ctors_done) \
+ { \
+ for (p = __CTOR_LIST__; *p; p++) \
+ if (*p++ == (func_ptr)2) \
+ (*p) (); \
+ } \
+ else \
+ { \
+ for (p = __CTOR_LIST__; *p; p += 2) \
+ ; \
+ while (p != __CTOR_LIST__) \
+ { \
+ func_ptr *fn = --p; \
+ if (*--p == (func_ptr)1) \
+ (*fn) (); \
+ } \
+ __global_ctors_done = 1; \
+ } \
+ } while (0)
+
+ # ifdef CRT_BEGIN
+ # define INVOKE__main
+ # endif /* CRT_BEGIN */
+
+ # undef DO_GLOBAL_DTORS_BODY
+ # define DO_GLOBAL_DTORS_BODY __do_global_ctors ()
+ #endif /* USE_GAS */
*** ./config/x-aix386- Fri Jan 17 23:42:17 1992
--- ./config/x-aix386 Mon Jun 15 00:24:14 1992
***************
*** 2,5 ****
ALLOCA = alloca.o
! # Is this right?
! # INSTALL=cp
--- 2,5 ----
ALLOCA = alloca.o
! INSTALL = /usr/ucb/install -c
! RANLIB = /bin/true
*** ./configure- Thu Jun 11 12:46:42 1992
--- ./configure Mon Jun 15 00:24:15 1992
***************
*** 275,279 ****
xm_file=xm-aix386.h
xmake_file=x-aix386
! broken_install=yes
;;
i386-sun-sunos*) # Sun i386 roadrunner
--- 275,279 ----
xm_file=xm-aix386.h
xmake_file=x-aix386
! tmake_file=t-aix386
;;
i386-sun-sunos*) # Sun i386 roadrunner
*** ./Makefile.in- Sun Jun 14 14:40:34 1992
--- ./Makefile.in Mon Jun 15 00:24:16 1992
***************
*** 1629,1643 ****
# because alloca.o is newer, we permit these recursive makes to compile
# alloca.o. Then cc1 is newer, so it won't have to be relinked.
! $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap2: force
! $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap3: force
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
# Compare the object files in the current directory with those in the
--- 1629,1643 ----
# because alloca.o is newer, we permit these recursive makes to compile
# alloca.o. Then cc1 is newer, so it won't have to be relinked.
! $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap2: force
! $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap3: force
! $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
# Compare the object files in the current directory with those in the
*** ./limits.h- Tue May 26 21:36:59 1992
--- ./limits.h Mon Jun 15 08:40:16 1992
***************
*** 80,83 ****
--- 80,119 ----
#endif
+ /* POSIX limit values */
+
+ /* pathconf() specific constants... */
+
+ #define LINK_MAX 32767 /* Max value of file's link count */
+ #define MAX_INPUT 255 /* Max no of bytes in term input queue */
+ #define MAX_CANON 255 /* Max no of bytes in canonical input */
+ #define NAME_MAX 255 /* Max no of bytes in file name */
+ #define PATH_MAX 1023 /* Max no of bytes in pathname */
+ #define PIPE_BUF 40960 /* Max no of bytes written to pipe */
+
+ /* sysconf() specific constants... */
+
+ #define NGROUPS_MAX 32 /* Max no of group ID's per process */
+ #define OPEN_MAX 200 /* Max no of open files per process */
+ #define ARG_MAX 16384 /* Max length of args for exec */
+
+ #define _POSIX_ARG_MAX 4096
+ #define _POSIX_CHILD_MAX 6
+ #define _POSIX_LINK_MAX 8
+ #define _POSIX_MAX_CANON 255
+ #define _POSIX_MAX_INPUT 255
+ #define _POSIX_NAME_MAX 14
+ #define _POSIX_NGROUPS_MAX 0
+ #define _POSIX_OPEN_MAX 16
+ #define _POSIX_PATH_MAX 255
+ #define _POSIX_PIPE_BUF 512
+
+ #ifndef _POSIX_SOURCE
+ /* defines for message catalog usage */
+ #define NL_ARGMAX 9 /* max number of printf args */
+ #define NL_MSGMAX 65535 /* max number of messages per set */
+ #define NL_SETMAX 65535 /* max number of set per catalog */
+ #define NL_TEXTMAX 4096 /* max message length in bytes */
+ #endif /* NOT _POSIX_SOURCE */
+
#endif /* _MACH_MACHLIMITS_H_ */
#endif /* _LIMITS_H___ */
*** ./ChangeLog- Sun Jun 14 15:14:35 1992
--- ./ChangeLog Mon Jun 15 00:43:49 1992
***************
*** 1,2 ****
--- 1,15 ----
+ Mon Jun 15 00:42:56 1992 Minh Tran-Le (mtranle@paris)
+
+ * Makefile.in: changed bootstrap to use LDFLAGS="$(BOOT_LDFLAGS)".
+
+ * config/aix386.h: added handling of -posix and -shlib.
+ Conditionalize the code not to use .init section if USE_GAS is
+ not defined.
+ changed for aix386 ld which can only 1 additional .init section.
+
+ * configure: for aix386 added tmake_file and removed broken_install
+
+ * config/t-aix386: new file for aix386.
+
Sun Jun 14 16:30:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-------
Technical Details
Message-ID:
<9207291849.AA12503@life.ai.mit.edu>Path:
arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!intellicorp.com!TRANLEReferences:
<1hGKOC#3NVy8Z=big@broue.rot.qc.ca>Show Full Headers
Complete Article Headers
Newsgroups: gnu.gcc.bug Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!intellicorp.com!TRANLE From: TRANLE@intellicorp.com (Minh Tran-Le) Subject: Re: AIX PS/2 implementation Message-ID: <9207291849.AA12503@life.ai.mit.edu> Sender: gnulists@ai.mit.edu Reply-To: tranle@intellicorp.com Organization: GNUs Not Usenet References: <1hGKOC#3NVy8Z=big@broue.rot.qc.ca> Distribution: gnu Date: Wed, 29 Jul 1992 18:44:50 GMT Approved: bug-gcc@prep.ai.mit.edu Lines: 406