From: "Paul Edwards" <mutazilah@gmail.com>
To: "Ian Lance Taylor" <iant@google.com>
Cc: "Joseph S. Myers" <joseph@codesourcery.com>,
"Richard Henderson" <rth@redhat.com>, <gcc@gcc.gnu.org>
Subject: Re: i370 port - constructing compile script
Date: Fri, 02 Oct 2009 22:53:00 -0000 [thread overview]
Message-ID: <7AE4510479514D0E9B72A9B827275199@Paullaptop> (raw)
In-Reply-To: <mcr7hvdss5l.fsf@dhcp-172-17-9-151.mtv.corp.google.com>
Hi Ian, thanks for your reply.
>> 1. First I need to use my current build machine, Linux,
>> to first of all convert the i370.md into insn*.c files, then
>> generate an xgcc. The xgcc would be capable of producing
>> i370 code so long as I use the "-S" option. It doesn't really
>> matter how this xgcc was created (ie using non-C90
>> stuff like fork available on my build machine).
>>
>> 2. It is now (at the Alaskan stage) that I need a different sort
>> of config.h/auto-host.h that excludes things like fork. I can
>> present my i370 include files here, that only include C90
>> functions. It is at this stage that I need it to invoke xgcc
>> (still on the build machine), but it will be with the -S option,
>> so there will be no .o files (although I could perhaps fake
>> that via a scipt to keep "make" happy) and no executable
>> built. The "fake" script could generate JCL at the same time.
>> The C90 library (for MVS) also needs to be cross-compiled
>> here.
>>
>> 3. Then I need to assemble all the assembler on real i370
>> (MVS). It is at this point that a real host (ie on i370 MVS)
>> xgcc is built.
>>
>> 4. Then I can use that xgcc (on MVS) to compile arbitary
>> C programs. Technically I could have had a requirement
>> for this i370-mvs host compiler to produce say sparc target
>> code.
>
> What most people do is:
>
> * Configure gcc as a cross-compiler.
So this would not be considered a Canadian Cross after all,
and with configure I only change the target, not the host?
> * Write a cross-assembler and cross-linker.
Sure, and that's what I'm trying to avoid. I have a perfectly working
assembler and linker on MVS already. It's been working for several
decades.
> * Copy header files and libraries from the host (MVS).
That's fine. And use the --with-root option of configure to get
them used?
> Now you have a complete cross-toolchain running on a supported host
> which can produce executables which run on MVS.
It's a can of worms just trying to copy MVS load modules. There's
meta-data in 2 different places and it needs to be packaged.
> * Use that cross-toolchain to build a version of gcc which runs on
> MVS. At this step you port gcc to work on MVS.
> * Run that gcc on MVS.
>
> (Note that you mention fork, but as you probably know the gcc code
> never actually calls fork. It calls the pexecute routines in
> libiberty. Those routines have been ported to several different
> hosts, including MS-DOS. If you port them to MVS, then you don't have
> to worry about fork.)
I spent several minutes going through the config.h looking at the
"detected" functions to find a good example. Maybe I should I
have getrlimit or getrusage or fputs_unlocked instead.
>> To fit into the standard Canadian Cross 3-step model, I need
>> to either collapse steps 2 and 3 into 1 theoretical step, executed
>> across 2 platforms (compile on one, assemble on another),
>
> Right, people normally do this by using a cross-assembler and
> cross-linker.
Ok.
>> I suspect that it will only take 20 lines or similar of intrusive
>> Makefile/shell script changes to shoe-horn my way into the
>> existing gcc methodology. All I need to do is force it to use
>> my C90 headers at the right spot, so that it stops thinking
>> that I have fork etc, and stop it trying to build an executable.
>>
>> Can someone tell me where to put those 20 lines?
>
> One way to shoe-horn those lines in would be to make your
> cross-assembler and cross-linker actually be shell scripts.
Ok, that's no problem.
> They
> would copy the files to MVS, run the real assembler and linker, and
> copy the output back.
I might theoretically be able to do such a thing, but that's not what I'm
after. I'm just after 200+ assembler files to be produced so that I can
zip them up and take them to a real MVS site or whatever to get
compiled. It looks like someone just wrote a C compiler in
370 assembler, which is now all natural MVS (the objective of the
exercise).
> That would be more than 20 lines, but it seems
> doable to me.
Actually, that would be 0 lines of intrusive code (ie changing GCC
itself).
> But I don't understand the bit about C90 headers. gcc doesn't need
> fork, but it does need a way to execute other programs.
No, I use intrusive code to convert the pexecute call into a static
call to cc1 (effectively - I actually intercept it within gcc itself, see
below). And that is why I need a Makefile target that includes
all the object code. Because I compile the 450,000 lines of C code
into 850,000 lines of assembler code to produce a 3.4 MB gcc load
module for MVS. Those figures are from gcc 3.4.6.
BFN. Paul.
***************
*** 2610,2615 ****
--- 2623,2631 ----
static int
execute (void)
{
+ #ifdef SINGLE_EXECUTABLE
+ int ret_code = 0;
+ #endif
int i;
int n_commands; /* # of command. */
char *string;
***************
*** 2756,2761 ****
--- 2772,2792 ----
char *errmsg_fmt, *errmsg_arg;
const char *string = commands[i].argv[0];
+ #ifdef SINGLE_EXECUTABLE
+ {
+ int cnt = 0;
+
+ while (commands[i].argv[cnt] != NULL)
+ {
+ cnt++;
+ }
+ if (strcmp(string, "cc1") == 0)
+ {
+ ret_code = toplev_main(cnt, commands[i].argv);
+ if (ret_code != 0) break;
+ }
+ }
+ #else
/* For some bizarre reason, the second argument of execvp() is
char *const *, not const char *const *. */
commands[i].pid = pexecute (string, (char *const *)
commands[i].argv,
next prev parent reply other threads:[~2009-10-02 22:53 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-09 22:33 i370 port Paul Edwards
2009-09-14 15:42 ` Ulrich Weigand
2009-09-15 12:59 ` Paul Edwards
2009-09-15 13:51 ` Ulrich Weigand
2009-09-17 13:00 ` Paul Edwards
2009-09-17 17:55 ` Ulrich Weigand
2009-09-18 0:35 ` Paul Edwards
2009-09-18 12:06 ` Ulrich Weigand
2009-09-18 12:23 ` Paul Edwards
2009-09-18 13:27 ` Ulrich Weigand
2009-09-18 13:42 ` Paul Edwards
2009-09-18 16:08 ` Ulrich Weigand
2009-09-19 12:57 ` Paul Edwards
2009-09-25 10:19 ` Paul Edwards
2009-09-25 15:20 ` Ulrich Weigand
2009-09-30 17:24 ` i370 port - constructing compile script Paul Edwards
2009-09-30 17:36 ` Richard Henderson
2009-09-30 21:40 ` Paul Edwards
[not found] ` <mcrpr98x9w8.fsf@dhcp-172-17-9-151.mtv.corp.google.com>
2009-10-01 0:16 ` Joseph S. Myers
2009-10-01 14:00 ` Paul Edwards
2009-10-02 12:41 ` Paul Edwards
2009-10-02 16:00 ` Ian Lance Taylor
2009-10-02 22:53 ` Paul Edwards [this message]
2009-10-04 4:11 ` Ian Lance Taylor
2009-10-04 5:14 ` Paul Edwards
2009-10-04 6:04 ` Ian Lance Taylor
2009-10-04 6:50 ` Paul Edwards
2009-10-04 15:38 ` Ulrich Weigand
2009-10-04 22:51 ` Paul Edwards
2009-10-05 13:15 ` Ulrich Weigand
2009-10-06 9:32 ` Paul Edwards
2009-10-06 13:15 ` Ulrich Weigand
2009-10-06 13:38 ` Paul Edwards
2009-10-06 14:01 ` Ulrich Weigand
2009-10-14 14:33 ` Paul Edwards
2009-10-19 14:19 ` Paul Edwards
2009-10-19 17:37 ` Ulrich Weigand
2009-10-20 14:18 ` Paul Edwards
2009-10-20 15:30 ` Ulrich Weigand
2009-11-12 14:03 ` Paul Edwards
2009-11-12 20:06 ` Ralf Wildenhues
2009-11-12 20:56 ` Paul Edwards
2009-11-13 11:43 ` Paul Edwards
2009-11-13 12:01 ` Ulrich Weigand
2009-11-13 12:18 ` Paul Edwards
2009-11-13 12:57 ` Ulrich Weigand
2009-11-14 8:52 ` Paul Edwards
2009-11-14 10:49 ` Ralf Wildenhues
2009-11-14 11:28 ` Paul Edwards
2009-11-22 0:51 ` Paolo Bonzini
2009-11-18 10:51 ` Paul Edwards
2009-11-19 14:27 ` Ulrich Weigand
2009-11-21 13:40 ` Paul Edwards
2009-11-23 10:33 ` i370 port - 3.4.6 to 4.4 upgrade attempt Paul Edwards
2009-11-23 10:43 ` Andreas Schwab
2009-11-23 15:43 ` Paolo Bonzini
2009-11-24 14:05 ` Ulrich Weigand
2009-11-24 14:36 ` Paul Edwards
2009-11-28 15:14 ` i370 port - music/sp - possible generic gcc problem Paul Edwards
2009-11-28 16:03 ` Richard Guenther
2009-11-28 16:35 ` Paul Edwards
2009-11-28 17:03 ` Richard Guenther
2009-11-28 23:44 ` Paul Edwards
2010-05-26 14:40 ` i370 port - status Paul Edwards
2021-03-14 5:55 ` negative indexes Paul Edwards
2021-03-14 8:05 ` Richard Biener
2021-03-14 8:12 ` Paul Edwards
2021-03-14 13:37 ` Richard Biener
[not found] ` <755065BE2A0B4B508DD3A262B2A83801@DESKTOP0OKG1VA>
2021-03-15 9:22 ` Richard Biener
2021-03-15 13:55 ` extended segments on 80386 Paul Edwards
2009-12-07 12:05 ` i370 port - 3.4.6 to 4.4 upgrade attempt Paul Edwards
2009-12-08 13:55 ` Ulrich Weigand
2009-11-15 14:22 ` i370 port - finally building Paul Edwards
2009-11-22 0:46 ` i370 port - constructing compile script Paolo Bonzini
2009-11-13 12:08 ` Ulrich Weigand
2009-10-05 13:17 ` Michael Matz
2009-10-05 13:38 ` Paul Edwards
2009-10-05 13:46 ` Michael Matz
2009-10-01 14:28 ` Paul Brook
2009-10-01 16:00 ` Paul Edwards
2009-10-01 18:36 ` Ian Lance Taylor
2009-10-01 23:43 ` Paul Edwards
2009-10-01 21:10 ` David Edelsohn
2009-10-01 22:22 ` Toon Moene
2009-10-02 0:19 ` Paul Edwards
2009-11-04 5:21 ` i370 port Paul Edwards
2009-11-04 16:47 ` Ulrich Weigand
2009-11-09 14:55 ` Paul Edwards
2009-11-09 15:57 ` Ian Lance Taylor
2009-11-09 23:10 ` Paul Edwards
2009-11-10 14:58 ` Paul Edwards
2009-11-10 15:36 ` Ian Lance Taylor
2009-11-10 15:51 ` Paul Edwards
2009-11-10 15:56 ` Ian Lance Taylor
2009-12-02 22:03 ` Paul Edwards
2011-08-13 8:34 ` Paul Edwards
2011-08-15 14:32 ` Ulrich Weigand
2011-08-15 15:26 ` Paul Edwards
2011-08-15 17:23 ` Ulrich Weigand
2011-08-16 11:20 ` Paul Edwards
2011-08-16 13:26 ` Ulrich Weigand
2011-08-18 12:15 ` Paul Edwards
2011-08-18 13:14 ` Ulrich Weigand
2011-08-18 14:18 ` Paul Edwards
[not found] <OF0A51B575.29A29744-ON42257656.0067E35B-42257656.00682411@de.ibm.com>
2009-10-22 9:06 ` i370 port - constructing compile script Paul Edwards
2009-10-22 19:26 ` Ulrich Weigand
2009-10-22 22:04 ` Paul Edwards
2009-10-23 14:36 ` Paul Edwards
2009-10-23 14:58 ` Ian Lance Taylor
2009-10-23 15:16 ` Ulrich Weigand
2009-10-24 0:20 ` Paul Edwards
2009-10-24 4:11 ` Ulrich Weigand
2009-10-27 12:18 ` Paul Edwards
2009-11-02 14:45 Paul Edwards
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7AE4510479514D0E9B72A9B827275199@Paullaptop \
--to=mutazilah@gmail.com \
--cc=gcc@gcc.gnu.org \
--cc=iant@google.com \
--cc=joseph@codesourcery.com \
--cc=rth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).