diff options
author | Steve Chamberlain <sac@cygnus> | 1995-06-29 00:21:00 +0000 |
---|---|---|
committer | Steve Chamberlain <sac@cygnus> | 1995-06-29 00:21:00 +0000 |
commit | de71eb7786da1170ae4b4acabeb4c62513c19602 (patch) | |
tree | f50c70017dfe024bdec70297d164e8f34c00edcf /ld | |
parent | 1a9924d8b3ff8222fd6bb774990455337a70a4af (diff) | |
download | gdb-de71eb7786da1170ae4b4acabeb4c62513c19602.zip gdb-de71eb7786da1170ae4b4acabeb4c62513c19602.tar.gz gdb-de71eb7786da1170ae4b4acabeb4c62513c19602.tar.bz2 |
Wed Jun 28 17:11:25 1995 Steve Chamberlain <sac@slash.cygnus.com>
* ldmain.c (main): Always initialize PE info in link_info.
* lexsup.c (OPTION_BASE_FILE): New option.
(parse_args): Handle new option.
* emulparams/armpe.sh: Output pei.
* emultempl/i386pe.em: Add newline to end.
* scripttempl/armpe.sc: Change output and quote the $s.
* scripttempl/i386pe.sc: Change output and quote the $s.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 21 | ||||
-rw-r--r-- | ld/config/.Sanitize | 1 | ||||
-rw-r--r-- | ld/config/i386pe.mh | 5 | ||||
-rw-r--r-- | ld/emultempl/.Sanitize | 1 | ||||
-rw-r--r-- | ld/emultempl/armpe.em | 230 | ||||
-rw-r--r-- | ld/emultempl/i386pe.em | 3 | ||||
-rw-r--r-- | ld/ldmain.c | 13 | ||||
-rw-r--r-- | ld/lexsup.c | 163 | ||||
-rw-r--r-- | ld/scripttempl/armpe.sc | 50 | ||||
-rw-r--r-- | ld/scripttempl/i386pe.sc | 50 |
10 files changed, 479 insertions, 58 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index c9d9b4a..ae09d76 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,24 @@ +Wed Jun 28 17:11:25 1995 Steve Chamberlain <sac@slash.cygnus.com> + + * ldmain.c (main): Always initialize PE info in link_info. + * lexsup.c (OPTION_BASE_FILE): New option. + (parse_args): Handle new option. + * emulparams/armpe.sh: Output pei. + * emultempl/i386pe.em: Add newline to end. + * scripttempl/armpe.sc: Change output and quote the $s. + * scripttempl/i386pe.sc: Change output and quote the $s. + +Thu Jun 22 19:55:41 1995 Ken Raeburn <raeburn@cujo.cygnus.com> + + Sun May 7 11:53:41 MDT 1995 Bryan Ford <baford@cs.utah.edu> + + * configure.in (i386-*-msdos*, i386-*-moss*): New targets. + * Makefile.in (ALL_EMULATIONS): Added i386msdos.o. + (i386msdos.o): New target. + * config/i386-msdos.mt: Created. + * emulparams/i386msdos.sh: Created. + * scripttempl/i386msdos.sc: Created. + Thu Jun 22 15:06:35 1995 Michael Meissner <meissner@tiktok.cygnus.com> * scripttempl/elfppc.sc (.fixup): Add support for a .fixup section diff --git a/ld/config/.Sanitize b/ld/config/.Sanitize index ab50c61..dac6803 100644 --- a/ld/config/.Sanitize +++ b/ld/config/.Sanitize @@ -79,6 +79,7 @@ i386-pe.mt i386bsd.mh i386linux.mh i386lynx.mh +i386pe.mh i386sco.mh i386v.mh i386v.mt diff --git a/ld/config/i386pe.mh b/ld/config/i386pe.mh new file mode 100644 index 0000000..216d6a0 --- /dev/null +++ b/ld/config/i386pe.mh @@ -0,0 +1,5 @@ +CC_FOR_BUILD=gcc +CC=i386-newlib-pe-gcc -O2 + + + diff --git a/ld/emultempl/.Sanitize b/ld/emultempl/.Sanitize index e86e204..c4c059f 100644 --- a/ld/emultempl/.Sanitize +++ b/ld/emultempl/.Sanitize @@ -25,6 +25,7 @@ Do-first: Things-to-keep: README +armpe.em elf32.em generic.em gld960.em diff --git a/ld/emultempl/armpe.em b/ld/emultempl/armpe.em new file mode 100644 index 0000000..bd9dfaa --- /dev/null +++ b/ld/emultempl/armpe.em @@ -0,0 +1,230 @@ +# This shell script emits a C file. -*- C -*- +# It does some substitutions. +cat >e${EMULATION_NAME}.c <<EOF +/* For WINDOWS_NT */ +/* This file is a copy of ei385coff which was originally generated on a Linux + system. It has been modified to provide a decent default script file + for the NT PE format. */ + +/* The original file generated returned different default scripts depending + on whether certain switches were set, but these switches pertain to the + Linux system and that particular version of coff. In the NT case, we + only determine if the subsystem is console or windows in order to select + the correct entry point by default. */ + + +/* emulate the original gld for the given armpe + Copyright (C) 1991, 1993 Free Software Foundation, Inc. + Written by Steve Chamberlain steve@cygnus.com + +This file is part of GLD, the Gnu Linker. + +This program 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 of the License, or +(at your option) any later version. + +This program 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; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define TARGET_IS_armpe + +#include "bfd.h" +#include "sysdep.h" +#include "bfdlink.h" + +#include "ld.h" +#include "config.h" +#include "ldmain.h" +#include "ldemul.h" +#include "ldfile.h" +#include "ldmisc.h" + +static void gldarmpe_before_parse PARAMS ((void)); +static char *gldarmpe_get_script PARAMS ((int *isfile)); + +static void +gldarmpe_before_parse() +{ +#ifndef TARGET_ /* I.e., if not generic. */ + ldfile_output_architecture = bfd_arch_arm; +#endif /* not TARGET_ */ +} + +static char * +gldarmpe_get_script(isfile) + int *isfile; +{ + *isfile = 0; + + if (link_info.subsystem == windows) + return +"OUTPUT_FORMAT(\"coff-arm\")\n\ +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/arm-coff/lib);\n\ +ENTRY(_WinMainCRTStartup)\n\ +SECTIONS\n\ +{\n\ + .text 0x401000 : {\n\ + *(.text)\n\ + ;\n\ + }\n\ + .bss BLOCK(0x1000) :\n\ + { \n\ + *(.bss)\n\ + *(COMMON)\n\ + ;\n\ + }\n\ + .rdata BLOCK(0x1000) :\n\ + { \n\ + *(.rdata)\n\ + ;\n\ + }\n\ + .data BLOCK(0x1000) : {\n\ + *(.data)\n\ + *(.data2)\n\ + ;\n\ + }\n\ + .idata BLOCK(0x1000) :\n\ + { \n\ + *(.idata\$\2)\n\ + *(.idata\$\3)\n\ + *(.idata\$\4)\n\ + *(.idata\$\5)\n\ + *(.idata\$\6)\n\ + *(.idata\$\7)\n\ + ;\n\ + }\n\ + .CRT BLOCK(0x1000) :\n\ + { \n\ + *(".CRT\$XCA")\n\ + *(fucl .CRT\$XCC)\n\ + *(.CRT\$XCZ)\n\ + *(.CRT\$XIA)\n\ + *(.CRT\$XIC)\n\ + *(.CRT\$XIZ)\n\ + *(.CRT\$XLA)\n\ + *(.CRT\$XLZ)\n\ + *(.CRT\$XPA)\n\ + *(.CRT\$XPX)\n\ + *(.CRT\$XPZ)\n\ + *(.CRT\$XTA)\n\ + *(.CRT\$XTZ)\n\ + ;\n\ + }\n\ + .rsrc BLOCK(0x1000) :\n\ + { \n\ + *(.rsrc\$01)\n\ + *(.rsrc\$02)\n\ + ;\n\ + }\n\ + .reloc BLOCK(0x1000) :\n\ + { \n\ + *(.reloc)\n\ + ;\n\ + }\n\ + .junk BLOCK(0x1000) :\n\ + { \n\ + *(.debug\$S)\n\ + *(.debug\$T)\n\ + *(.debug\$F)\n\ + *(.drectve)\n\ + ;\n\ + }\n\ +}\n\n" + ; else return +"OUTPUT_FORMAT(\"coff-arm\")\n\ +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/arm-coff/lib);\n\ +ENTRY(_mainCRTStartup)\n\ +SECTIONS\n\ +{\n\ + .text 0x401000 : {\n\ + *(.text)\n\ + ;\n\ + }\n\ + .bss BLOCK(0x1000) :\n\ + { \n\ + *(.bss)\n\ + *(COMMON)\n\ + ;\n\ + }\n\ + .rdata BLOCK(0x1000) :\n\ + { \n\ + *(.rdata)\n\ + ;\n\ + }\n\ + .data BLOCK(0x1000) : {\n\ + *(.data)\n\ + *(.data2)\n\ + ;\n\ + }\n\ + .idata BLOCK(0x1000) :\n\ + { \n\ + *(.idata\$\2)\n\ + *(.idata\$\3)\n\ + *(.idata\$\4)\n\ + *(.idata\$\5)\n\ + *(.idata\$\6)\n\ + *(.idata\$\7)\n\ + ;\n\ + }\n\ + .CRT BLOCK(0x1000) :\n\ + { \n\ + *(.CRT\$XCA)\n\ + *(.CRT\$XCC)\n\ + *(.CRT\$XCZ)\n\ + *(.CRT\$XIA)\n\ + *(.CRT\$XIC)\n\ + *(.CRT\$XIZ)\n\ + *(.CRT\$XLA)\n\ + *(.CRT\$XLZ)\n\ + *(.CRT\$XPA)\n\ + *(.CRT\$XPX)\n\ + *(.CRT\$XPZ)\n\ + *(.CRT\$XTA)\n\ + *(.CRT\$XTZ)\n\ + ;\n\ + }\n\ + .rsrc BLOCK(0x1000) :\n\ + { \n\ + *(.rsrc\$01)\n\ + *(.rsrc\$02)\n\ + ;\n\ + }\n\ + .reloc BLOCK(0x1000) :\n\ + { \n\ + *(.reloc)\n\ + ;\n\ + }\n\ + .junk BLOCK(0x1000) :\n\ + { \n\ + *(.debug\$S)\n\ + *(.debug\$T)\n\ + *(.debug\$F)\n\ + *(.drectve)\n\ + ;\n\ + }\n\ +}\n\n" + ; +} + +struct ld_emulation_xfer_struct ld_armpe_emulation = +{ + gldarmpe_before_parse, + syslib_default, + hll_default, + after_parse_default, + after_allocation_default, + set_output_arch_default, + ldemul_default_target, + before_allocation_default, + gldarmpe_get_script, + "armpe", + "pei-arm" +}; +EOF
\ No newline at end of file diff --git a/ld/emultempl/i386pe.em b/ld/emultempl/i386pe.em index a27ed40..9095ca5 100644 --- a/ld/emultempl/i386pe.em +++ b/ld/emultempl/i386pe.em @@ -227,4 +227,5 @@ struct ld_emulation_xfer_struct ld_i386pe_emulation = "i386pe", "pe-i386" }; -EOF
\ No newline at end of file +EOF + diff --git a/ld/ldmain.c b/ld/ldmain.c index e6bf23d..7c0b705 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -185,6 +185,14 @@ main (argc, argv) link_info.hash = NULL; link_info.keep_hash = NULL; link_info.notice_hash = NULL; + link_info.subsystem = console; + link_info.stack_heap_parameters.stack_defined = false; + link_info.stack_heap_parameters.heap_defined = false; + link_info.stack_heap_parameters.stack_reserve = 0; + link_info.stack_heap_parameters.stack_commit = 0; + link_info.stack_heap_parameters.heap_reserve = 0; + link_info.stack_heap_parameters.heap_commit = 0; + ldfile_add_arch (""); @@ -277,6 +285,7 @@ main (argc, argv) config.map_file = fopen (config.map_filename, FOPEN_WT); if (config.map_file == (FILE *) NULL) { + bfd_set_error (bfd_error_system_call); einfo ("%P%F: cannot open map file %s: %E\n", config.map_filename); } @@ -337,13 +346,17 @@ main (argc, argv) if (config.stats) { extern char **environ; +#ifndef WINDOWS_NT /* no sbrk with NT */ char *lim = (char *) sbrk (0); +#endif long run_time = get_run_time () - start_time; fprintf (stderr, "%s: total time in link: %ld.%06ld\n", program_name, run_time / 1000000, run_time % 1000000); +#ifndef WINDOWS_NT fprintf (stderr, "%s: data size %ld\n", program_name, (long) (lim - (char *) &environ)); +#endif } /* Prevent remove_output from doing anything, after a successful link. */ diff --git a/ld/lexsup.c b/ld/lexsup.c index 1102efd..291c432 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -46,6 +46,10 @@ unsigned long strtoul (); static void set_default_dirlist PARAMS ((char *dirlist_ptr)); static void set_section_start PARAMS ((char *sect, char *valstr)); +/* WINDOWS_NT; declare additional functions */ +static void set_subsystem PARAMS ((char *subsystem_type)); +static void set_stack_heap PARAMS ((char *valstr, boolean for_heap)); + void parse_args (argc, argv) int argc; @@ -59,7 +63,7 @@ parse_args (argc, argv) as if it were the argument of an option with character code 1. */ const char *shortopts = - "-A:B::b:cde:F::G:giL:l:Mm:NnO:o:R:rSsT:tu:VvXxY:y:()"; + "-a:A:B::b:c:de:F::G:giL:l:Mm:NnO:o:R:rSsT:tu:VvXxY:y:()"; /* 150 isn't special; it's just an arbitrary non-ASCII char value. */ @@ -68,7 +72,10 @@ parse_args (argc, argv) #define OPTION_DYNAMIC_LINKER (OPTION_DEFSYM + 1) #define OPTION_EB (OPTION_DYNAMIC_LINKER + 1) #define OPTION_EL (OPTION_EB + 1) -#define OPTION_HELP (OPTION_EL + 1) +#define OPTION_HEAP (OPTION_EL + 1) +#define OPTION_EMBEDDED_RELOCS (OPTION_HEAP + 1) +#define OPTION_EXPORT_DYNAMIC (OPTION_EMBEDDED_RELOCS + 1) +#define OPTION_HELP (OPTION_EXPORT_DYNAMIC + 1) #define OPTION_IGNORE (OPTION_HELP + 1) #define OPTION_MAP (OPTION_IGNORE + 1) #define OPTION_NO_KEEP_MEMORY (OPTION_MAP + 1) @@ -81,16 +88,22 @@ parse_args (argc, argv) #define OPTION_SHARED (OPTION_RPATH + 1) #define OPTION_SONAME (OPTION_SHARED + 1) #define OPTION_SORT_COMMON (OPTION_SONAME + 1) -#define OPTION_STATS (OPTION_SORT_COMMON + 1) -#define OPTION_TBSS (OPTION_STATS + 1) +#define OPTION_STACK (OPTION_SORT_COMMON + 1) /*WINDOWS_NT*/ +#define OPTION_STATS (OPTION_STACK + 1) +#define OPTION_SUBSYSTEM (OPTION_STATS + 1) /* WINDOWS_NT */ +#define OPTION_TBSS (OPTION_SUBSYSTEM + 1) #define OPTION_TDATA (OPTION_TBSS + 1) #define OPTION_TTEXT (OPTION_TDATA + 1) #define OPTION_TRADITIONAL_FORMAT (OPTION_TTEXT + 1) #define OPTION_UR (OPTION_TRADITIONAL_FORMAT + 1) -#define OPTION_VERSION (OPTION_UR + 1) +#define OPTION_VERBOSE (OPTION_UR + 1) +#define OPTION_VERSION (OPTION_VERBOSE + 1) #define OPTION_WARN_COMMON (OPTION_VERSION + 1) #define OPTION_WARN_ONCE (OPTION_WARN_COMMON + 1) - +#define OPTION_SPLIT_BY_RELOC (OPTION_WARN_ONCE + 1) +#define OPTION_SPLIT_BY_FILE (OPTION_SPLIT_BY_RELOC + 1) +#define OPTION_WHOLE_ARCHIVE (OPTION_SPLIT_BY_FILE + 1) +#define OPTION_BASE_FILE (OPTION_WHOLE_ARCHIVE + 1) static struct option longopts[] = { {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED}, {"Bstatic", no_argument, NULL, OPTION_NON_SHARED}, @@ -104,8 +117,11 @@ parse_args (argc, argv) {"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER}, {"EB", no_argument, NULL, OPTION_EB}, {"EL", no_argument, NULL, OPTION_EL}, + {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS}, {"end-group", no_argument, NULL, ')'}, + {"export-dynamic", no_argument, NULL, OPTION_EXPORT_DYNAMIC}, {"format", required_argument, NULL, 'b'}, + {"heap", required_argument, NULL, OPTION_HEAP}, /* WINDOWS_NT */ {"help", no_argument, NULL, OPTION_HELP}, {"Map", required_argument, NULL, OPTION_MAP}, {"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY}, @@ -122,17 +138,24 @@ parse_args (argc, argv) {"soname", required_argument, NULL, OPTION_SONAME}, {"sort-common", no_argument, NULL, OPTION_SORT_COMMON}, {"sort_common", no_argument, NULL, OPTION_SORT_COMMON}, + {"stack", required_argument, NULL, OPTION_STACK}, /* WINDOWS_NT */ {"start-group", no_argument, NULL, '('}, {"stats", no_argument, NULL, OPTION_STATS}, {"static", no_argument, NULL, OPTION_NON_SHARED}, + {"subsystem", required_argument, NULL, OPTION_SUBSYSTEM}, /* WINDOWS_NT */ {"Tbss", required_argument, NULL, OPTION_TBSS}, {"Tdata", required_argument, NULL, OPTION_TDATA}, {"Ttext", required_argument, NULL, OPTION_TTEXT}, {"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}, {"Ur", no_argument, NULL, OPTION_UR}, + {"verbose", no_argument, NULL, OPTION_VERBOSE}, {"version", no_argument, NULL, OPTION_VERSION}, {"warn-common", no_argument, NULL, OPTION_WARN_COMMON}, {"warn-once", no_argument, NULL, OPTION_WARN_ONCE}, + {"split-by-reloc", required_argument, NULL, OPTION_SPLIT_BY_RELOC}, + {"split-by-file", no_argument, NULL, OPTION_SPLIT_BY_FILE}, + {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE}, + {"base-file", required_argument, NULL, OPTION_BASE_FILE}, {NULL, no_argument, NULL, 0} }; @@ -157,6 +180,18 @@ parse_args (argc, argv) case OPTION_IGNORE: break; + case 'a': + /* For HP/UX compatibility. Actually -a shared should mean + ``use only shared libraries'' but, then, we don't + currently support shared libraries on HP/UX anyhow. */ + if (strcmp (optarg, "archive") == 0) + config.dynamic_link = false; + else if (strcmp (optarg, "shared") == 0 + || strcmp (optarg, "default") == 0) + config.dynamic_link = true; + else + einfo ("%P%F: unrecognized -a option `%s'\n", optarg); + break; case 'A': ldfile_add_arch (optarg); break; @@ -191,6 +226,12 @@ parse_args (argc, argv) case OPTION_EL: command_line.endian = ENDIAN_LITTLE; break; + case OPTION_EMBEDDED_RELOCS: + command_line.embedded_relocs = true; + break; + case OPTION_EXPORT_DYNAMIC: + command_line.export_dynamic = true; + break; case 'e': lang_add_entry (optarg, 1); break; @@ -208,6 +249,10 @@ parse_args (argc, argv) case 'g': /* Ignore. */ break; + case OPTION_HEAP: /* WINDOWS_NT */ + link_info.stack_heap_parameters.heap_defined = true; + set_stack_heap (optarg, true); + break; case OPTION_HELP: help (); xexit (0); @@ -320,9 +365,16 @@ parse_args (argc, argv) case OPTION_SORT_COMMON: config.sort_common = true; break; + case OPTION_STACK: /* WINDOWS_NT */ + link_info.stack_heap_parameters.stack_defined = true; + set_stack_heap (optarg, false); + break; case OPTION_STATS: config.stats = true; break; + case OPTION_SUBSYSTEM: /* WINDOWS_NT */ + set_subsystem (optarg); + break; case 't': trace_files = true; break; @@ -353,7 +405,7 @@ parse_args (argc, argv) case 'u': ldlang_add_undef (optarg); break; - case 'V': + case OPTION_VERBOSE: ldversion (1); version_printed = true; trace_file_tries = true; @@ -362,6 +414,10 @@ parse_args (argc, argv) ldversion (0); version_printed = true; break; + case 'V': + ldversion (1); + version_printed = true; + break; case OPTION_VERSION: ldversion (0); version_printed = true; @@ -372,6 +428,17 @@ parse_args (argc, argv) case OPTION_WARN_ONCE: config.warn_once = true; break; + case OPTION_WHOLE_ARCHIVE: + whole_archive = true; + break; + case OPTION_BASE_FILE: + link_info.base_file = fopen (optarg,"w"); + if (!link_info.base_file) { + fprintf (stderr, "%s: Can't open base file %s\n", + program_name, optarg); + xexit (1); + } + break; case 'X': link_info.discard = discard_l; break; @@ -384,6 +451,12 @@ parse_args (argc, argv) case 'y': add_ysym (optarg); break; + case OPTION_SPLIT_BY_RELOC: + config.split_by_reloc = atoi (optarg); + break; + case OPTION_SPLIT_BY_FILE: + config.split_by_file = true; + break; case '(': if (ingroup) { @@ -446,3 +519,79 @@ set_section_start (sect, valstr) einfo ("%P%F: invalid hex number `%s'\n", valstr); lang_section_start (sect, exp_intop (val)); } + +/* WINDOWS_NT; added routines to get the subsystem type, heap and/or stack + parameters which may be input from the command line */ +static void +set_subsystem (subsystem_type) + char *subsystem_type; +{ + if (strcmp (subsystem_type, "native") == 0) + { + link_info.subsystem = native; + } + else if (strcmp (subsystem_type, "windows") == 0) + { + link_info.subsystem = windows; + } + else if (strcmp (subsystem_type, "console") == 0) + { + link_info.subsystem = console; + } + else if (strcmp (subsystem_type, "os2") == 0) + { + link_info.subsystem = os2; + } + else if (strcmp (subsystem_type, "posix") == 0) + { + link_info.subsystem = posix; + } + else + einfo ("%P%F: invalid subsystem type `%s'\n", subsystem_type); + +} + +static void +set_stack_heap (valstr, for_heap) + char *valstr; + boolean for_heap; +{ + char *begin_commit, *end; + bfd_vma reserve = 0; + bfd_vma commit = 0; + + /* There may be two values passed in to the -stack or -heap switches like + this: + -stack 0x10000,0x100 + where the first parameter is the stack (or heap) reserve and the second + is commit. The second parameter is optional. */ + + /* get the reserve value */ + reserve = strtoul (valstr, &begin_commit, 16); + + if (strcmp (valstr, begin_commit) == 0) + /* the reserve value couldn't be read */ + einfo ("%P%F: invalid hex number for reserve[,commit] '%s'\n", valstr); + else if (strcmp (begin_commit, "\0") != 0) /* check for a commit value */ + { + begin_commit += 1; /* increment begin_commit to point past ',' */ + commit = strtoul (begin_commit, &end, 16); + if (strcmp (end, begin_commit) == 0) + einfo ("%P%F: invalid hex number for commit '%s'\n", begin_commit); + } + + if (for_heap) + { + link_info.stack_heap_parameters.heap_reserve = reserve; + link_info.stack_heap_parameters.heap_commit = commit; + } + else + { + link_info.stack_heap_parameters.stack_reserve = reserve; + link_info.stack_heap_parameters.stack_commit = commit; + } + +#if DUMP_INFO + printf ("reserve = %8x commit = %8x\n", reserve, commit); +#endif +} diff --git a/ld/scripttempl/armpe.sc b/ld/scripttempl/armpe.sc index ea4e89c..208ebeb 100644 --- a/ld/scripttempl/armpe.sc +++ b/ld/scripttempl/armpe.sc @@ -4,7 +4,7 @@ INIT='.init : { *(.init) }' FINI='.fini : { *(.fini) }' cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") +OUTPUT_FORMAT($OUTPUT_FORMAT) ${LIB_SEARCH_DIRS} ENTRY(_mainCRTStartup) @@ -34,36 +34,36 @@ SECTIONS } .idata BLOCK(0x1000) : { - *(.idata$2) - *(.idata$3) - *(.idata$4) - *(.idata$5) - *(.idata$6) - *(.idata$7) + *(.idata\$2) + *(.idata\$3) + *(.idata\$4) + *(.idata\$5) + *(.idata\$6) + *(.idata\$7) ; } .CRT BLOCK(0x1000) : { - *(.CRT$XCA) - *(.CRT$XCC) - *(.CRT$XCZ) - *(.CRT$XIA) - *(.CRT$XIC) - *(.CRT$XIZ) - *(.CRT$XLA) - *(.CRT$XLZ) - *(.CRT$XPA) - *(.CRT$XPX) - *(.CRT$XPZ) - *(.CRT$XTA) - *(.CRT$XTZ) + *(.CRT\$XCA) + *(.CRT\$XCC) + *(.CRT\$XCZ) + *(.CRT\$XIA) + *(.CRT\$XIC) + *(.CRT\$XIZ) + *(.CRT\$XLA) + *(.CRT\$XLZ) + *(.CRT\$XPA) + *(.CRT\$XPX) + *(.CRT\$XPZ) + *(.CRT\$XTA) + *(.CRT\$XTZ) ; } .rsrc BLOCK(0x1000) : { - *(.rsrc$01) - *(.rsrc$02) + *(.rsrc\$01) + *(.rsrc\$02) ; } .reloc BLOCK(0x1000) : @@ -73,9 +73,9 @@ SECTIONS } .junk BLOCK(0x1000) : { - *(.debug$S) - *(.debug$T) - *(.debug$F) + *(.debug\$S) + *(.debug\$T) + *(.debug\$F) *(.drectve) ; } diff --git a/ld/scripttempl/i386pe.sc b/ld/scripttempl/i386pe.sc index d23506d..8923ad7 100644 --- a/ld/scripttempl/i386pe.sc +++ b/ld/scripttempl/i386pe.sc @@ -4,7 +4,7 @@ INIT='.init : { *(.init) }' FINI='.fini : { *(.fini) }' cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") +OUTPUT_FORMAT(pei-i386) ${LIB_SEARCH_DIRS} ENTRY(_mainCRTStartup) @@ -38,35 +38,35 @@ SECTIONS } .idata BLOCK(0x1000) : { - *(.idata$2) - *(.idata$3) - *(.idata$4) - *(.idata$5) - *(.idata$6) - *(.idata$7) + *(.idata\$2) + *(.idata\$3) + *(.idata\$4) + *(.idata\$5) + *(.idata\$6) + *(.idata\$7) ; } .CRT BLOCK(0x1000) : { - *(.CRT$XCA) - *(.CRT$XCC) - *(.CRT$XCZ) - *(.CRT$XIA) - *(.CRT$XIC) - *(.CRT$XIZ) - *(.CRT$XLA) - *(.CRT$XLZ) - *(.CRT$XPA) - *(.CRT$XPX) - *(.CRT$XPZ) - *(.CRT$XTA) - *(.CRT$XTZ) + *(.CRT\$XCA) + *(.CRT\$XCC) + *(.CRT\$XCZ) + *(.CRT\$XIA) + *(.CRT\$XIC) + *(.CRT\$XIZ) + *(.CRT\$XLA) + *(.CRT\$XLZ) + *(.CRT\$XPA) + *(.CRT\$XPX) + *(.CRT\$XPZ) + *(.CRT\$XTA) + *(.CRT\$XTZ) ; } .rsrc BLOCK(0x1000) : { - *(.rsrc$01) - *(.rsrc$02) + *(.rsrc\$01) + *(.rsrc\$02) ; } .reloc BLOCK(0x1000) : @@ -76,9 +76,9 @@ SECTIONS } .junk BLOCK(0x1000) : { - *(.debug$S) - *(.debug$T) - *(.debug$F) + *(.debug\$S) + *(.debug\$T) + *(.debug\$F) *(.drectve) ; } |