From 758ff64c69e34965f8af5b2d6ffd65e8d7ab2150 Mon Sep 17 00:00:00 2001 From: Ondřej Surý Date: Mon, 14 Feb 2011 13:23:51 +0100 Subject: Imported Upstream version 2011-02-01.1 --- src/cmd/6l/obj.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/cmd/6l/obj.c') diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index 96d78c3b9..f9e257842 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -36,6 +36,7 @@ #include "../ld/elf.h" #include "../ld/macho.h" #include "../ld/dwarf.h" +#include "../ld/pe.h" #include char *noname = ""; @@ -57,7 +58,7 @@ char* paramspace = "FP"; void usage(void) { - fprint(2, "usage: 6l [-options] [-E entry] [-H head] [-L dir] [-T text] [-R rnd] [-r path] [-o out] main.6\n"); + fprint(2, "usage: 6l [-options] [-E entry] [-H head] [-I interpreter] [-L dir] [-T text] [-R rnd] [-r path] [-o out] main.6\n"); exits("usage"); } @@ -95,6 +96,9 @@ main(int argc, char *argv[]) case 'H': HEADTYPE = atolwhex(EARGF(usage())); break; + case 'I': + interpreter = EARGF(usage()); + break; case 'L': Lflag(EARGF(usage())); break; @@ -132,6 +136,9 @@ main(int argc, char *argv[]) else if(strcmp(goos, "freebsd") == 0) HEADTYPE = 9; + else + if(strcmp(goos, "windows") == 0) + HEADTYPE = 10; else print("goos is not known: %s\n", goos); } @@ -200,6 +207,16 @@ main(int argc, char *argv[]) if(INITRND == -1) INITRND = 4096; break; + case 10: /* PE executable */ + peinit(); + HEADR = PEFILEHEADR; + if(INITTEXT == -1) + INITTEXT = PEBASE+PESECTHEADR; + if(INITDAT == -1) + INITDAT = 0; + if(INITRND == -1) + INITRND = PESECTALIGN; + break; } if(INITDAT != 0 && INITRND != 0) print("warning: -D0x%llux is ignored because of -R0x%ux\n", @@ -245,6 +262,8 @@ main(int argc, char *argv[]) else doprof2(); span(); + if(HEADTYPE == 10) + dope(); addexport(); textaddress(); pclntab(); -- cgit v1.2.3