* mpw-config.in: Add PowerMac target support, generate config.h.
* mac-ld.r: New file, Mac resources. * mpw-make.sed: New file, edits Makefile.in into MPW syntax. * mpw-make.in: Remove. * mpw-eppcmacos.c: Prebuilt version of PowerMac linking script.
This commit is contained in:
parent
e33bf0ab90
commit
49af8a4ec7
6 changed files with 953 additions and 754 deletions
|
@ -1,3 +1,11 @@
|
|||
Thu Oct 26 22:22:49 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||
|
||||
* mpw-config.in: Add PowerMac target support, generate config.h.
|
||||
* mac-ld.r: New file, Mac resources.
|
||||
* mpw-make.sed: New file, edits Makefile.in into MPW syntax.
|
||||
* mpw-make.in: Remove.
|
||||
* mpw-eppcmacos.c: Prebuilt version of PowerMac linking script.
|
||||
|
||||
Thu Oct 26 14:11:26 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Treat
|
||||
|
|
16
ld/mac-ld.r
Normal file
16
ld/mac-ld.r
Normal file
|
@ -0,0 +1,16 @@
|
|||
#ifdef WANT_CFRG
|
||||
|
||||
#include "CodeFragmentTypes.r"
|
||||
|
||||
resource 'cfrg' (0) {
|
||||
{
|
||||
kPowerPC,
|
||||
kFullLib,
|
||||
kNoVersionNum, kNoVersionNum,
|
||||
0, 0,
|
||||
kIsApp, kOnDiskFlat, kZeroOffset, kWholeFork,
|
||||
"ld"
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* WANT_CFRG */
|
|
@ -4,10 +4,10 @@ If "{target_canonical}" =~ /m68k-apple-macos/
|
|||
Set emulname m68kcoff
|
||||
forward-include "{srcdir}"mpw-em68kcoff.c em68kcoff.c
|
||||
Set emulation_ofiles "{o}"em68kcoff.c.o
|
||||
Else If "{target_canonical}" =~ /ppc-apple-macos/
|
||||
Set emulname xcoff
|
||||
forward-include "{srcdir}"mpw-excoff.c excoff.c
|
||||
Set emulation_ofiles "{o}"excoff.c.o
|
||||
Else If "{target_canonical}" =~ /powerpc-apple-macos/
|
||||
Set emulname ppcmacos
|
||||
forward-include "{srcdir}"mpw-eppcmacos.c eppcmacos.c
|
||||
Set emulation_ofiles "{o}"eppcmacos.c.o
|
||||
Else If "{target_canonical}" =~ /i386-unknown-go32/
|
||||
Set emulname i386go32
|
||||
forward-include "{srcdir}"mpw-ei386go32.c ei386go32.c
|
||||
|
@ -27,13 +27,17 @@ Echo "extern ld_emulation_xfer_type ld_{emulname}_emulation;" >> "{o}"ldemul-tmp
|
|||
Echo '#define EMULATION_LIST \' >> "{o}"ldemul-tmp.h
|
||||
Echo " &ld_{emulname}_emulation, \" >> "{o}"ldemul-tmp.h
|
||||
Echo ' 0' >> "{o}"ldemul-tmp.h
|
||||
|
||||
MoveIfChange "{o}"ldemul-tmp.h "{o}"ldemul-list.h
|
||||
|
||||
Echo '# From mpw-config.in' > "{o}"mk.tmp
|
||||
|
||||
Echo "EMUL = " {emulname} >> "{o}"mk.tmp
|
||||
Echo "EMULATION_OFILES = " {emulation_ofiles} >> "{o}"mk.tmp
|
||||
Echo '# From mpw-config.in' > "{o}"mk.tmp
|
||||
Echo "EMUL = " {emulname} >> "{o}"mk.tmp
|
||||
Echo "EMULATION_OFILES = " {emulation_ofiles} >> "{o}"mk.tmp
|
||||
Echo 'version = ' `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version \([^ ]*\).*/\1/'` >> "{o}"mk.tmp
|
||||
Echo "TDEFINES = " >> "{o}"mk.tmp
|
||||
Echo "TDEFINES = " >> "{o}"mk.tmp
|
||||
Echo '# End from mpw-config.in' >> "{o}"mk.tmp
|
||||
|
||||
Echo '# End from mpw-config.in' >> "{o}"mk.tmp
|
||||
Echo '/* config.h. Generated by mpw-configure. */' > "{o}"config.new
|
||||
Echo '#include "mpw.h"' >> "{o}"config.new
|
||||
|
||||
MoveIfChange "{o}"config.new "{o}"config.h
|
||||
|
|
841
ld/mpw-eppcmacos.c
Normal file
841
ld/mpw-eppcmacos.c
Normal file
|
@ -0,0 +1,841 @@
|
|||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||
|
||||
/* AIX emulation code for ppcmacos
|
||||
Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
|
||||
Written by Steve Chamberlain <sac@cygnus.com>
|
||||
AIX support by Ian Lance Taylor <ian@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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define TARGET_IS_ppcmacos
|
||||
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libiberty.h"
|
||||
#include "getopt.h"
|
||||
#include "bfdlink.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include "ld.h"
|
||||
#include "ldmain.h"
|
||||
#include "ldemul.h"
|
||||
#include "ldfile.h"
|
||||
#include "ldmisc.h"
|
||||
#include "ldexp.h"
|
||||
#include "ldlang.h"
|
||||
|
||||
static void gldppcmacos_before_parse PARAMS ((void));
|
||||
static int gldppcmacos_parse_args PARAMS ((int, char **));
|
||||
static void gldppcmacos_before_allocation PARAMS ((void));
|
||||
static void gldppcmacos_read_file PARAMS ((const char *, boolean));
|
||||
static void gldppcmacos_free PARAMS ((PTR));
|
||||
static char *gldppcmacos_get_script PARAMS ((int *isfile));
|
||||
|
||||
/* The file alignment required for each section. */
|
||||
static unsigned long file_align;
|
||||
|
||||
/* The maximum size the stack is permitted to grow. This is stored in
|
||||
the a.out header. */
|
||||
static unsigned long maxstack;
|
||||
|
||||
/* The maximum data size. This is stored in the a.out header. */
|
||||
static unsigned long maxdata;
|
||||
|
||||
/* Whether to perform garbage collection. */
|
||||
static int gc = 1;
|
||||
|
||||
/* The module type to use. */
|
||||
static unsigned short modtype = ('1' << 8) | 'L';
|
||||
|
||||
/* Whether the .text section must be read-only (i.e., no relocs
|
||||
permitted). */
|
||||
static int textro;
|
||||
|
||||
/* Structure used to hold import or export file list. */
|
||||
|
||||
struct filelist
|
||||
{
|
||||
struct filelist *next;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
/* List of import files. */
|
||||
struct filelist *import_files;
|
||||
|
||||
/* List of export files. */
|
||||
struct filelist *export_files;
|
||||
|
||||
static void
|
||||
gldppcmacos_before_parse()
|
||||
{
|
||||
#ifndef TARGET_ /* I.e., if not generic. */
|
||||
ldfile_output_architecture = bfd_arch_powerpc;
|
||||
#endif /* not TARGET_ */
|
||||
}
|
||||
|
||||
/* Handle AIX specific options. */
|
||||
|
||||
static int
|
||||
gldppcmacos_parse_args (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int prevoptind = optind;
|
||||
int prevopterr = opterr;
|
||||
int longind;
|
||||
int optc;
|
||||
long val;
|
||||
char *end;
|
||||
|
||||
#define OPTION_IGNORE (300)
|
||||
#define OPTION_AUTOIMP (OPTION_IGNORE + 1)
|
||||
#define OPTION_ERNOTOK (OPTION_AUTOIMP + 1)
|
||||
#define OPTION_EROK (OPTION_ERNOTOK + 1)
|
||||
#define OPTION_EXPORT (OPTION_EROK + 1)
|
||||
#define OPTION_IMPORT (OPTION_EXPORT + 1)
|
||||
#define OPTION_MAXDATA (OPTION_IMPORT + 1)
|
||||
#define OPTION_MAXSTACK (OPTION_MAXDATA + 1)
|
||||
#define OPTION_MODTYPE (OPTION_MAXSTACK + 1)
|
||||
#define OPTION_NOAUTOIMP (OPTION_MODTYPE + 1)
|
||||
#define OPTION_NOSTRCMPCT (OPTION_NOAUTOIMP + 1)
|
||||
#define OPTION_STRCMPCT (OPTION_NOSTRCMPCT + 1)
|
||||
|
||||
static struct option longopts[] = {
|
||||
{"basis", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
|
||||
{"bcomprld", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bcrld", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bcror31", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bD", required_argument, NULL, OPTION_MAXDATA},
|
||||
{"bE", required_argument, NULL, OPTION_EXPORT},
|
||||
{"bernotok", no_argument, NULL, OPTION_ERNOTOK},
|
||||
{"berok", no_argument, NULL, OPTION_EROK},
|
||||
{"berrmsg", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bexport", required_argument, NULL, OPTION_EXPORT},
|
||||
{"bf", no_argument, NULL, OPTION_ERNOTOK},
|
||||
{"bgc", no_argument, &gc, 1},
|
||||
{"bh", required_argument, NULL, OPTION_IGNORE},
|
||||
{"bhalt", required_argument, NULL, OPTION_IGNORE},
|
||||
{"bI", required_argument, NULL, OPTION_IMPORT},
|
||||
{"bimport", required_argument, NULL, OPTION_IMPORT},
|
||||
{"bmaxdata", required_argument, NULL, OPTION_MAXDATA},
|
||||
{"bmaxstack", required_argument, NULL, OPTION_MAXSTACK},
|
||||
{"bM", required_argument, NULL, OPTION_MODTYPE},
|
||||
{"bmodtype", required_argument, NULL, OPTION_MODTYPE},
|
||||
{"bnoautoimp", no_argument, NULL, OPTION_NOAUTOIMP},
|
||||
{"bnodelcsect", no_argument, NULL, OPTION_IGNORE},
|
||||
{"bnogc", no_argument, &gc, 0},
|
||||
{"bnso", no_argument, NULL, OPTION_NOAUTOIMP},
|
||||
{"bnostrcmpct", no_argument, NULL, OPTION_NOSTRCMPCT},
|
||||
{"bnotextro", no_argument, &textro, 0},
|
||||
{"bnro", no_argument, &textro, 0},
|
||||
{"bro", no_argument, &textro, 1},
|
||||
{"bS", required_argument, NULL, OPTION_MAXSTACK},
|
||||
{"bso", no_argument, NULL, OPTION_AUTOIMP},
|
||||
{"bstrcmpct", no_argument, NULL, OPTION_STRCMPCT},
|
||||
{"btextro", no_argument, &textro, 1},
|
||||
{NULL, no_argument, NULL, 0}
|
||||
};
|
||||
|
||||
/* Options supported by the AIX linker which we do not support: -f,
|
||||
-S, -v, -Z, -bbindcmds, -bbinder, -bbindopts, -bcalls, -bcaps,
|
||||
-bcror15, -bdebugopt, -bdbg, -bdelcsect, -bex?, -bfilelist, -bfl,
|
||||
-bgcbypass, -bglink, -binsert, -bi, -bloadmap, -bl, -bmap, -bnl,
|
||||
-bnobind, -bnocomprld, -bnocrld, -bnoerrmsg, -bnoglink,
|
||||
-bnoloadmap, -bnl, -bnoobjreorder, -bnoquiet, -bnoreorder,
|
||||
-bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
|
||||
-bx, -bX, -bxref. */
|
||||
|
||||
/* If the first option starts with -b, change the first : to an =.
|
||||
The AIX linker uses : to separate the option from the argument;
|
||||
changing it to = lets us treat it as a getopt option. */
|
||||
if (optind < argc && strncmp (argv[optind], "-b", 2) == 0)
|
||||
{
|
||||
char *s;
|
||||
|
||||
for (s = argv[optind]; *s != '\0'; s++)
|
||||
{
|
||||
if (*s == ':')
|
||||
{
|
||||
*s = '=';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
opterr = 0;
|
||||
optc = getopt_long_only (argc, argv, "-D:H:KT:z", longopts, &longind);
|
||||
opterr = prevopterr;
|
||||
|
||||
switch (optc)
|
||||
{
|
||||
default:
|
||||
optind = prevoptind;
|
||||
return 0;
|
||||
|
||||
case 0:
|
||||
/* Long option which just sets a flag. */
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
val = strtol (optarg, &end, 0);
|
||||
if (*end != '\0')
|
||||
einfo ("%P: warning: ignoring invalid -D number %s\n", optarg);
|
||||
else if (val != -1)
|
||||
lang_section_start (".data", exp_intop (val));
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
val = strtoul (optarg, &end, 0);
|
||||
if (*end != '\0'
|
||||
|| (val & (val - 1)) != 0)
|
||||
einfo ("%P: warning: ignoring invalid -H number %s\n", optarg);
|
||||
else
|
||||
file_align = val;
|
||||
break;
|
||||
|
||||
case 'K':
|
||||
case 'z':
|
||||
/* FIXME: This should use the page size for the target system. */
|
||||
file_align = 4096;
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
/* On AIX this is the same as GNU ld -Ttext. When we see -T
|
||||
number, we assume the AIX option is intended. Otherwise, we
|
||||
assume the usual GNU ld -T option is intended. We can't just
|
||||
ignore the AIX option, because gcc passes it to the linker. */
|
||||
val = strtoul (optarg, &end, 0);
|
||||
if (*end != '\0')
|
||||
{
|
||||
optind = prevoptind;
|
||||
return 0;
|
||||
}
|
||||
lang_section_start (".text", exp_intop (val));
|
||||
break;
|
||||
|
||||
case OPTION_IGNORE:
|
||||
break;
|
||||
|
||||
case OPTION_AUTOIMP:
|
||||
link_info.static_link = false;
|
||||
break;
|
||||
|
||||
case OPTION_ERNOTOK:
|
||||
force_make_executable = false;
|
||||
break;
|
||||
|
||||
case OPTION_EROK:
|
||||
force_make_executable = true;
|
||||
break;
|
||||
|
||||
case OPTION_EXPORT:
|
||||
case OPTION_IMPORT:
|
||||
{
|
||||
struct filelist *n;
|
||||
struct filelist **flpp;
|
||||
|
||||
n = (struct filelist *) xmalloc (sizeof (struct filelist));
|
||||
n->next = NULL;
|
||||
n->name = optarg;
|
||||
if (optc == OPTION_EXPORT)
|
||||
flpp = &export_files;
|
||||
else
|
||||
flpp = &import_files;
|
||||
while (*flpp != NULL)
|
||||
flpp = &(*flpp)->next;
|
||||
*flpp = n;
|
||||
}
|
||||
break;
|
||||
|
||||
case OPTION_MAXDATA:
|
||||
val = strtoul (optarg, &end, 0);
|
||||
if (*end != '\0')
|
||||
einfo ("%P: warning: ignoring invalid -bmaxdata number %s\n",
|
||||
optarg);
|
||||
else
|
||||
maxdata = val;
|
||||
break;
|
||||
|
||||
case OPTION_MAXSTACK:
|
||||
val = strtoul (optarg, &end, 0);
|
||||
if (*end != '\0')
|
||||
einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n",
|
||||
optarg);
|
||||
else
|
||||
maxstack = val;
|
||||
break;
|
||||
|
||||
case OPTION_MODTYPE:
|
||||
if (*optarg == 'S')
|
||||
{
|
||||
link_info.shared = true;
|
||||
++optarg;
|
||||
}
|
||||
if (*optarg == '\0' || optarg[1] == '\0')
|
||||
einfo ("%P: warning: ignoring invalid module type %s\n", optarg);
|
||||
else
|
||||
modtype = (*optarg << 8) | optarg[1];
|
||||
break;
|
||||
|
||||
case OPTION_NOAUTOIMP:
|
||||
link_info.static_link = true;
|
||||
break;
|
||||
|
||||
case OPTION_NOSTRCMPCT:
|
||||
config.traditional_format = true;
|
||||
break;
|
||||
|
||||
case OPTION_STRCMPCT:
|
||||
config.traditional_format = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* This is called after the sections have been attached to output
|
||||
sections, but before any sizes or addresses have been set. */
|
||||
|
||||
static void
|
||||
gldppcmacos_before_allocation ()
|
||||
{
|
||||
struct filelist *fl;
|
||||
char *libpath;
|
||||
|
||||
/* Handle the import and export files, if any. */
|
||||
for (fl = import_files; fl != NULL; fl = fl->next)
|
||||
gldppcmacos_read_file (fl->name, true);
|
||||
for (fl = export_files; fl != NULL; fl = fl->next)
|
||||
gldppcmacos_read_file (fl->name, false);
|
||||
|
||||
/* We need to build LIBPATH from the -L arguments. If any -rpath
|
||||
arguments were used, though, we use -rpath instead, as a GNU
|
||||
extension. */
|
||||
if (command_line.rpath != NULL)
|
||||
libpath = command_line.rpath;
|
||||
else if (search_head == NULL)
|
||||
libpath = (char *) "";
|
||||
else
|
||||
{
|
||||
size_t len;
|
||||
search_dirs_type *search;
|
||||
|
||||
len = strlen (search_head->name);
|
||||
libpath = xmalloc (len + 1);
|
||||
strcpy (libpath, search_head->name);
|
||||
for (search = search_head->next; search != NULL; search = search->next)
|
||||
{
|
||||
size_t nlen;
|
||||
|
||||
nlen = strlen (search->name);
|
||||
libpath = xrealloc (libpath, len + nlen + 2);
|
||||
libpath[len] = ':';
|
||||
strcpy (libpath + len + 1, search->name);
|
||||
len += nlen + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Let the XCOFF backend set up the .loader section. */
|
||||
if (! bfd_xcoff_size_dynamic_sections (output_bfd, &link_info, libpath,
|
||||
entry_symbol, file_align,
|
||||
maxstack, maxdata,
|
||||
gc ? true : false,
|
||||
modtype,
|
||||
textro ? true : false))
|
||||
einfo ("%P%F: failed to set dynamic section sizes: %E\n");
|
||||
}
|
||||
|
||||
/* Read an import or export file. */
|
||||
|
||||
static void
|
||||
gldppcmacos_read_file (filename, import)
|
||||
const char *filename;
|
||||
boolean import;
|
||||
{
|
||||
struct obstack *o;
|
||||
FILE *f;
|
||||
int lineno;
|
||||
int c;
|
||||
boolean keep;
|
||||
const char *imppath;
|
||||
const char *impfile;
|
||||
const char *impmember;
|
||||
|
||||
o = (struct obstack *) xmalloc (sizeof (struct obstack));
|
||||
obstack_specify_allocation (o, 0, 0, xmalloc, gldppcmacos_free);
|
||||
|
||||
f = fopen (filename, "r");
|
||||
if (f == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_system_call);
|
||||
einfo ("%F%s: %E\n", filename);
|
||||
}
|
||||
|
||||
keep = false;
|
||||
|
||||
imppath = NULL;
|
||||
impfile = NULL;
|
||||
impmember = NULL;
|
||||
|
||||
lineno = 0;
|
||||
while ((c = getc (f)) != EOF)
|
||||
{
|
||||
char *s;
|
||||
char *symname;
|
||||
boolean syscall;
|
||||
bfd_vma address;
|
||||
struct bfd_link_hash_entry *h;
|
||||
|
||||
if (c != '\n')
|
||||
{
|
||||
obstack_1grow (o, c);
|
||||
continue;
|
||||
}
|
||||
|
||||
obstack_1grow (o, '\0');
|
||||
++lineno;
|
||||
|
||||
s = (char *) obstack_base (o);
|
||||
while (isspace ((unsigned char) *s))
|
||||
++s;
|
||||
if (*s == '\0'
|
||||
|| *s == '*'
|
||||
|| (*s == '#' && s[1] == ' ')
|
||||
|| (! import && *s == '#' && s[1] == '!'))
|
||||
{
|
||||
obstack_free (o, obstack_base (o));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (*s == '#' && s[1] == '!')
|
||||
{
|
||||
s += 2;
|
||||
while (isspace ((unsigned char) *s))
|
||||
++s;
|
||||
if (*s == '\0')
|
||||
{
|
||||
imppath = NULL;
|
||||
impfile = NULL;
|
||||
impmember = NULL;
|
||||
obstack_free (o, obstack_base (o));
|
||||
}
|
||||
else if (*s == '(')
|
||||
einfo ("%F%s%d: #! ([member]) is not supported in import files",
|
||||
filename, lineno);
|
||||
else
|
||||
{
|
||||
char cs;
|
||||
char *file;
|
||||
|
||||
(void) obstack_finish (o);
|
||||
keep = true;
|
||||
imppath = s;
|
||||
impfile = NULL;
|
||||
while (! isspace ((unsigned char) *s) && *s != '(' && *s != '\0')
|
||||
{
|
||||
if (*s == '/')
|
||||
file = s + 1;
|
||||
++s;
|
||||
}
|
||||
if (file != NULL)
|
||||
{
|
||||
file[-1] = '\0';
|
||||
impfile = file;
|
||||
if (imppath == file - 1)
|
||||
imppath = "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
impfile = imppath;
|
||||
imppath = "";
|
||||
}
|
||||
cs = *s;
|
||||
*s = '\0';
|
||||
while (isspace ((unsigned char) cs))
|
||||
{
|
||||
++s;
|
||||
cs = *s;
|
||||
}
|
||||
if (cs != '(')
|
||||
{
|
||||
impmember = "";
|
||||
if (cs != '\0')
|
||||
einfo ("%s:%d: warning: syntax error in import file\n",
|
||||
filename, lineno);
|
||||
}
|
||||
else
|
||||
{
|
||||
++s;
|
||||
impmember = s;
|
||||
while (*s != ')' && *s != '\0')
|
||||
++s;
|
||||
if (*s == ')')
|
||||
*s = '\0';
|
||||
else
|
||||
einfo ("%s:%d: warning: syntax error in import file\n",
|
||||
filename, lineno);
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/* This is a symbol to be imported or exported. */
|
||||
symname = s;
|
||||
syscall = false;
|
||||
address = (bfd_vma) -1;
|
||||
|
||||
while (! isspace ((unsigned char) *s) && *s != '\0')
|
||||
++s;
|
||||
if (*s != '\0')
|
||||
{
|
||||
char *se;
|
||||
|
||||
*s++ = '\0';
|
||||
|
||||
while (isspace ((unsigned char) *s))
|
||||
++s;
|
||||
|
||||
se = s;
|
||||
while (! isspace ((unsigned char) *se) && *se != '\0')
|
||||
++se;
|
||||
if (*se != '\0')
|
||||
{
|
||||
*se++ = '\0';
|
||||
while (isspace ((unsigned char) *se))
|
||||
++se;
|
||||
if (*se != '\0')
|
||||
einfo ("%s%d: warning: syntax error in import/export file\n",
|
||||
filename, lineno);
|
||||
}
|
||||
|
||||
if (strcasecmp (s, "svc") == 0
|
||||
|| strcasecmp (s, "syscall") == 0)
|
||||
syscall = true;
|
||||
else
|
||||
{
|
||||
char *end;
|
||||
|
||||
address = strtoul (s, &end, 0);
|
||||
if (*end != '\0')
|
||||
einfo ("%s:%d: warning: syntax error in import/export file\n",
|
||||
filename, lineno);
|
||||
}
|
||||
}
|
||||
|
||||
h = bfd_link_hash_lookup (link_info.hash, symname, false, false, true);
|
||||
if (h == NULL || h->type == bfd_link_hash_new)
|
||||
{
|
||||
/* We can just ignore attempts to import an unreferenced
|
||||
symbol. */
|
||||
if (! import)
|
||||
einfo ("%X%s:%d: attempt to export undefined symbol %s\n",
|
||||
filename, lineno, symname);
|
||||
}
|
||||
else if (import)
|
||||
{
|
||||
if (! bfd_xcoff_import_symbol (output_bfd, &link_info, h, address,
|
||||
imppath, impfile, impmember))
|
||||
einfo ("%X%s:%d: failed to import symbol %s: %E\n",
|
||||
filename, lineno, symname);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! bfd_xcoff_export_symbol (output_bfd, &link_info, h, syscall))
|
||||
einfo ("%X%s:%d: failed to export symbol %s: %E\n",
|
||||
filename, lineno, symname);
|
||||
}
|
||||
|
||||
obstack_free (o, obstack_base (o));
|
||||
}
|
||||
|
||||
if (obstack_object_size (o) > 0)
|
||||
{
|
||||
einfo ("%s:%d: warning: ignoring unterminated last line\n",
|
||||
filename, lineno);
|
||||
obstack_free (o, obstack_base (o));
|
||||
}
|
||||
|
||||
if (! keep)
|
||||
{
|
||||
obstack_free (o, NULL);
|
||||
free (o);
|
||||
}
|
||||
}
|
||||
|
||||
/* This routine saves us from worrying about declaring free. */
|
||||
|
||||
static void
|
||||
gldppcmacos_free (p)
|
||||
PTR p;
|
||||
{
|
||||
free (p);
|
||||
}
|
||||
|
||||
static char *
|
||||
gldppcmacos_get_script(isfile)
|
||||
int *isfile;
|
||||
{
|
||||
*isfile = 0;
|
||||
|
||||
if (link_info.relocateable == true && config.build_constructors == true)
|
||||
return
|
||||
"OUTPUT_FORMAT(\"xcoff-powermac\")\n\
|
||||
OUTPUT_ARCH(powerpc)\n\
|
||||
ENTRY(__start)\n\
|
||||
SECTIONS\n\
|
||||
{\n\
|
||||
.pad 0 : { *(.pad) }\n\
|
||||
.text 0 : {\n\
|
||||
*(.text)\n\
|
||||
*(.pr)\n\
|
||||
*(.ro)\n\
|
||||
*(.db)\n\
|
||||
*(.gl)\n\
|
||||
*(.xo)\n\
|
||||
*(.ti)\n\
|
||||
*(.tb)\n\
|
||||
}\n\
|
||||
.data 0 : {\n\
|
||||
*(.data)\n\
|
||||
*(.rw)\n\
|
||||
*(.sv)\n\
|
||||
*(.ua)\n\
|
||||
*(.ds)\n\
|
||||
*(.tc0)\n\
|
||||
*(.tc)\n\
|
||||
*(.td)\n\
|
||||
}\n\
|
||||
.bss : {\n\
|
||||
*(.bss)\n\
|
||||
*(.bs)\n\
|
||||
*(.uc)\n\
|
||||
*(COMMON)\n\
|
||||
}\n\
|
||||
.loader 0 : {\n\
|
||||
*(.loader)\n\
|
||||
}\n\
|
||||
.debug 0 : {\n\
|
||||
*(.debug)\n\
|
||||
}\n\
|
||||
}\n\n"
|
||||
; else if (link_info.relocateable == true) return
|
||||
"OUTPUT_FORMAT(\"xcoff-powermac\")\n\
|
||||
OUTPUT_ARCH(powerpc)\n\
|
||||
ENTRY(__start)\n\
|
||||
SECTIONS\n\
|
||||
{\n\
|
||||
.pad 0 : { *(.pad) }\n\
|
||||
.text 0 : {\n\
|
||||
*(.text)\n\
|
||||
*(.pr)\n\
|
||||
*(.ro)\n\
|
||||
*(.db)\n\
|
||||
*(.gl)\n\
|
||||
*(.xo)\n\
|
||||
*(.ti)\n\
|
||||
*(.tb)\n\
|
||||
}\n\
|
||||
.data 0 : {\n\
|
||||
*(.data)\n\
|
||||
*(.rw)\n\
|
||||
*(.sv)\n\
|
||||
*(.ua)\n\
|
||||
*(.ds)\n\
|
||||
*(.tc0)\n\
|
||||
*(.tc)\n\
|
||||
*(.td)\n\
|
||||
}\n\
|
||||
.bss : {\n\
|
||||
*(.bss)\n\
|
||||
*(.bs)\n\
|
||||
*(.uc)\n\
|
||||
*(COMMON)\n\
|
||||
}\n\
|
||||
.loader 0 : {\n\
|
||||
*(.loader)\n\
|
||||
}\n\
|
||||
.debug 0 : {\n\
|
||||
*(.debug)\n\
|
||||
}\n\
|
||||
}\n\n"
|
||||
; else if (!config.text_read_only) return
|
||||
"OUTPUT_FORMAT(\"xcoff-powermac\")\n\
|
||||
OUTPUT_ARCH(powerpc)\n\
|
||||
SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
|
||||
ENTRY(__start)\n\
|
||||
SECTIONS\n\
|
||||
{\n\
|
||||
.pad 0 : { *(.pad) }\n\
|
||||
.text : {\n\
|
||||
PROVIDE (_text = .);\n\
|
||||
*(.text)\n\
|
||||
*(.pr)\n\
|
||||
*(.ro)\n\
|
||||
*(.db)\n\
|
||||
*(.gl)\n\
|
||||
*(.xo)\n\
|
||||
*(.ti)\n\
|
||||
*(.tb)\n\
|
||||
PROVIDE (_etext = .);\n\
|
||||
}\n\
|
||||
.data 0 : {\n\
|
||||
PROVIDE (_data = .);\n\
|
||||
*(.data)\n\
|
||||
*(.rw)\n\
|
||||
*(.sv)\n\
|
||||
*(.ua)\n\
|
||||
*(.ds)\n\
|
||||
*(.tc0)\n\
|
||||
*(.tc)\n\
|
||||
*(.td)\n\
|
||||
PROVIDE (_edata = .);\n\
|
||||
}\n\
|
||||
.bss : {\n\
|
||||
*(.bss)\n\
|
||||
*(.bs)\n\
|
||||
*(.uc)\n\
|
||||
*(COMMON)\n\
|
||||
PROVIDE (_end = .);\n\
|
||||
PROVIDE (end = .);\n\
|
||||
}\n\
|
||||
.loader 0 : {\n\
|
||||
*(.loader)\n\
|
||||
}\n\
|
||||
.debug 0 : {\n\
|
||||
*(.debug)\n\
|
||||
}\n\
|
||||
}\n\n"
|
||||
; else if (!config.magic_demand_paged) return
|
||||
"OUTPUT_FORMAT(\"xcoff-powermac\")\n\
|
||||
OUTPUT_ARCH(powerpc)\n\
|
||||
SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
|
||||
ENTRY(__start)\n\
|
||||
SECTIONS\n\
|
||||
{\n\
|
||||
.pad 0 : { *(.pad) }\n\
|
||||
.text : {\n\
|
||||
PROVIDE (_text = .);\n\
|
||||
*(.text)\n\
|
||||
*(.pr)\n\
|
||||
*(.ro)\n\
|
||||
*(.db)\n\
|
||||
*(.gl)\n\
|
||||
*(.xo)\n\
|
||||
*(.ti)\n\
|
||||
*(.tb)\n\
|
||||
PROVIDE (_etext = .);\n\
|
||||
}\n\
|
||||
.data 0 : {\n\
|
||||
PROVIDE (_data = .);\n\
|
||||
*(.data)\n\
|
||||
*(.rw)\n\
|
||||
*(.sv)\n\
|
||||
*(.ua)\n\
|
||||
*(.ds)\n\
|
||||
*(.tc0)\n\
|
||||
*(.tc)\n\
|
||||
*(.td)\n\
|
||||
PROVIDE (_edata = .);\n\
|
||||
}\n\
|
||||
.bss : {\n\
|
||||
*(.bss)\n\
|
||||
*(.bs)\n\
|
||||
*(.uc)\n\
|
||||
*(COMMON)\n\
|
||||
PROVIDE (_end = .);\n\
|
||||
PROVIDE (end = .);\n\
|
||||
}\n\
|
||||
.loader 0 : {\n\
|
||||
*(.loader)\n\
|
||||
}\n\
|
||||
.debug 0 : {\n\
|
||||
*(.debug)\n\
|
||||
}\n\
|
||||
}\n\n"
|
||||
; else return
|
||||
"OUTPUT_FORMAT(\"xcoff-powermac\")\n\
|
||||
OUTPUT_ARCH(powerpc)\n\
|
||||
SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
|
||||
ENTRY(__start)\n\
|
||||
SECTIONS\n\
|
||||
{\n\
|
||||
.pad 0 : { *(.pad) }\n\
|
||||
.text : {\n\
|
||||
PROVIDE (_text = .);\n\
|
||||
*(.text)\n\
|
||||
*(.pr)\n\
|
||||
*(.ro)\n\
|
||||
*(.db)\n\
|
||||
*(.gl)\n\
|
||||
*(.xo)\n\
|
||||
*(.ti)\n\
|
||||
*(.tb)\n\
|
||||
PROVIDE (_etext = .);\n\
|
||||
}\n\
|
||||
.data 0 : {\n\
|
||||
PROVIDE (_data = .);\n\
|
||||
*(.data)\n\
|
||||
*(.rw)\n\
|
||||
*(.sv)\n\
|
||||
*(.ua)\n\
|
||||
*(.ds)\n\
|
||||
*(.tc0)\n\
|
||||
*(.tc)\n\
|
||||
*(.td)\n\
|
||||
PROVIDE (_edata = .);\n\
|
||||
}\n\
|
||||
.bss : {\n\
|
||||
*(.bss)\n\
|
||||
*(.bs)\n\
|
||||
*(.uc)\n\
|
||||
*(COMMON)\n\
|
||||
PROVIDE (_end = .);\n\
|
||||
PROVIDE (end = .);\n\
|
||||
}\n\
|
||||
.loader 0 : {\n\
|
||||
*(.loader)\n\
|
||||
}\n\
|
||||
.debug 0 : {\n\
|
||||
*(.debug)\n\
|
||||
}\n\
|
||||
}\n\n"
|
||||
; }
|
||||
|
||||
struct ld_emulation_xfer_struct ld_ppcmacos_emulation =
|
||||
{
|
||||
gldppcmacos_before_parse,
|
||||
syslib_default,
|
||||
hll_default,
|
||||
after_parse_default,
|
||||
after_open_default,
|
||||
after_allocation_default,
|
||||
set_output_arch_default,
|
||||
ldemul_default_target,
|
||||
gldppcmacos_before_allocation,
|
||||
gldppcmacos_get_script,
|
||||
"ppcmacos",
|
||||
"xcoff-powermac",
|
||||
0, /* finish */
|
||||
0, /* create_output_section_statements */
|
||||
0, /* open_dynamic_archive */
|
||||
0, /* place_orphan */
|
||||
0, /* set_symbols */
|
||||
gldppcmacos_parse_args,
|
||||
};
|
744
ld/mpw-make.in
744
ld/mpw-make.in
|
@ -1,744 +0,0 @@
|
|||
|
||||
s = "{srcdir}"
|
||||
|
||||
o = :
|
||||
|
||||
# File in object dir can come from either the current dir or srcdir.
|
||||
|
||||
"{o}" \Option-f : "{s}"
|
||||
|
||||
# Default rule that puts each file into separate segment.
|
||||
|
||||
.c.o \Option-f .c
|
||||
{CC} {DepDir}{Default}.c {ALL_CFLAGS} {SymOptions} -s {Default} -o {TargDir}{Default}.c.o
|
||||
|
||||
# Makefile for the GNU linker ld (version 2)
|
||||
# Copyright (C) 1989, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
|
||||
|
||||
# This file is part of GNU ld..
|
||||
|
||||
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
# srcdir = :
|
||||
objdir = :
|
||||
|
||||
prefix = :usr:local
|
||||
|
||||
program_transform_name =
|
||||
exec_prefix = {prefix}
|
||||
bindir = {exec_prefix}bin:
|
||||
libdir = {exec_prefix}:lib
|
||||
tooldir = {exec_prefix}:{target_alias}
|
||||
datadir = {prefix}:lib
|
||||
mandir = {prefix}:man
|
||||
man1dir = {mandir}:man1
|
||||
man2dir = {mandir}:man2
|
||||
man3dir = {mandir}:man3
|
||||
man4dir = {mandir}:man4
|
||||
man5dir = {mandir}:man5
|
||||
man6dir = {mandir}:man6
|
||||
man7dir = {mandir}:man7
|
||||
man8dir = {mandir}:man8
|
||||
man9dir = {mandir}:man9
|
||||
infodir = {prefix}:info
|
||||
includedir = {prefix}:include
|
||||
docdir = {datadir}:doc
|
||||
# We put the scripts in the directory {scriptdir}:ldscripts.
|
||||
# We can't put the scripts in {datadir} because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
scriptdir = {tooldir}:lib
|
||||
|
||||
SHELL = :bin:sh
|
||||
|
||||
INSTALL = `cd {srcdir}; pwd`:::install.sh -c
|
||||
INSTALL_PROGRAM = {INSTALL}
|
||||
INSTALL_DATA = {INSTALL}
|
||||
INSTALL_XFORM = {INSTALL} -t='{program_transform_name}'
|
||||
INSTALL_XFORM1 = {INSTALL_XFORM} -b=.1
|
||||
|
||||
AR = ar
|
||||
AR_FLAGS = qv
|
||||
#CFLAGS = -g
|
||||
MAKEINFO = makeinfo
|
||||
TEXI2DVI = texi2dvi
|
||||
RANLIB = ranlib
|
||||
CC_FOR_BUILD={CC}
|
||||
BISON = byacc
|
||||
LEX = flex
|
||||
|
||||
# Seach path to override the default search path for -lfoo libraries.
|
||||
# If LIB_PATH is empty, the ones in the script (if any) are left alone.
|
||||
# (The default is usually :lib \Option-f usr:lib \Option-f :usr:local:lib, unless building
|
||||
# a cross-linker, in which case the default is empty. See genscripts.sh.)
|
||||
# Otherwise, they are replaced with the ones given in LIB_PATH,
|
||||
# which may have the form \Option-f LIB_PATH=:lib \Option-f :usr:local:lib
|
||||
LIB_PATH =
|
||||
|
||||
# Additional libraries which are used when ld is built native. This
|
||||
# is set by some host makefile fragments.
|
||||
NATIVE_LIB_DIRS =
|
||||
|
||||
BASEDIR = "{srcroot}"
|
||||
BFDDIR = {BASEDIR}bfd
|
||||
INCDIR = {BASEDIR}include
|
||||
INCLUDES = -i : -i {srcdir} -i ::bfd: -i {BFDDIR} -i {INCDIR} -i ::extra-include -i "{INCDIR}":mpw:
|
||||
DEP = mkdep
|
||||
|
||||
# What version of the manual to build
|
||||
DOCVER = gen
|
||||
|
||||
# Where to find texinfo.tex to format docn with TeX
|
||||
TEXIDIR = "{srcdir}":texinfo
|
||||
|
||||
# Where to find other docs needed to format with TeX
|
||||
TEXINPUTS = {TEXIDIR} \Option-f {BFDDIR}:doc \Option-f {srcdir}
|
||||
|
||||
# Whether to get roff to put indexing entries on stderr
|
||||
TEXI2OPT =
|
||||
# You neeed this to generate ld-index.ms (or .mm or .me)
|
||||
# TEXI2OPT = -i
|
||||
|
||||
TEXI2ROFF=texi2roff
|
||||
|
||||
# Which roff program to use to generate index for texi2roff'd doc
|
||||
ROFF = groff
|
||||
|
||||
#stuff for self hosting (can be overridden in config file).
|
||||
HOSTING_CRT0 = "{o}":lib:crt0.c.o
|
||||
HOSTING_LIBS = `if [ -f ::gcc:libgcc.o ] ; then echo ::gcc:libgcc.o ; else gcc -print-libgcc-file-name; fi` -lc
|
||||
HOSTING_EMU = -m {EMUL}
|
||||
|
||||
CXX = `if [ -f ::gcc:xgcc ] ; then \Option-d
|
||||
echo ::gcc:xgcc -B::gcc:; \Option-d
|
||||
else echo gcc; \Option-d
|
||||
fi`
|
||||
CXXFLAGS = -fgnu-linker
|
||||
|
||||
# FIX_ME \Option-f using ::gcc:xgcc breaks the cdtest.
|
||||
CXX = g++
|
||||
|
||||
# Setup the testing framework, if you have one
|
||||
RUNTEST = runtest
|
||||
RUNTEST_FLAGS =
|
||||
RUNTEST_CC = `if [ -f ::gcc:xgcc ] ; then \Option-d
|
||||
echo ::gcc:xgcc -B::gcc:; \Option-d
|
||||
else echo gcc; \Option-d
|
||||
fi`
|
||||
RUNTEST_CFLAGS = {CFLAGS}
|
||||
RUNTEST_CXX = `if [ -f ::gcc:xgcc ] ; then \Option-d
|
||||
echo ::gcc:xgcc -B::gcc:; \Option-d
|
||||
else echo gcc; \Option-d
|
||||
fi`
|
||||
# FIX_ME \Option-f using ::gcc:xgcc breaks the cdtest.
|
||||
RUNTEST_CXX = {CXX}
|
||||
RUNTEST_CXXFLAGS = {CXXFLAGS}
|
||||
|
||||
# go directly to ld.new in case this ld isn't capable of
|
||||
# linking native object on this host. It can be renamed on
|
||||
# install.
|
||||
LD_PROG = ld.new
|
||||
|
||||
all \Option-f {LD_PROG}
|
||||
# .PHONY \Option-f all
|
||||
|
||||
### Host, target, and site specific Makefile fragments come in here.
|
||||
####
|
||||
|
||||
LINTFLAGS = {INCLUDES} {EXTRA_DEF}
|
||||
|
||||
# The "{s}".cc suffix is used by `make check'.
|
||||
|
||||
# .SUFFIXES \Option-f "{s}".y {SUFFIXES} "{s}".cc
|
||||
|
||||
# Suppress smart makes who think they know how to automake Yacc files
|
||||
# .y.c \Option-f
|
||||
|
||||
# This rule is used for the check-cdtest target.
|
||||
"{o}".cc.c.o \Option-f
|
||||
{CXX} -c -i {srcdir} {CXXFLAGS} {CFLAGS} $<
|
||||
|
||||
ALL_CFLAGS={INCLUDES} {HDEFINES} {TDEFINES} {CDEFINES} {CFLAGS}
|
||||
"{o}".c.c.o \Option-f
|
||||
{CC} -c {ALL_CFLAGS} $<
|
||||
|
||||
# for self hosting
|
||||
BFDLIB = ::bfd:libbfd.o
|
||||
LIBIBERTY = ::libiberty:libiberty.o
|
||||
|
||||
ALL_EMULATIONS = "{o}"elnk960.c.o "{o}"esun3.c.o "{o}"ei386aout.c.o "{o}"ego32.c.o "{o}"evsta.c.o \Option-d
|
||||
"{o}"em88kbcs.c.o "{o}"ea29k.c.o "{o}"enews.c.o "{o}"ehp300bsd.c.o "{o}"ehp3hpux.c.o \Option-d
|
||||
"{o}"eh8300.c.o "{o}"eh8300h.c.o "{o}"eebmon29k.c.o "{o}"esun4.c.o "{o}"egld960.c.o \Option-d
|
||||
"{o}"em68kcoff.c.o "{o}"est2000.c.o "{o}"esa29200.c.o "{o}"ei386mach.c.o \Option-d
|
||||
"{o}"evanilla.c.o "{o}"ei386coff.c.o "{o}"ez8ksim.c.o "{o}"emipslit.c.o "{o}"ei386bsd.c.o \Option-d
|
||||
"{o}"emipsbig.c.o "{o}"emipsbsd.c.o "{o}"emipsidt.c.o "{o}"evax.c.o "{o}"eh8500.c.o \Option-d
|
||||
"{o}"ehppaosf.c.o "{o}"emipsidtl.c.o "{o}"esh.c.o "{o}"eelf_i386.c.o "{o}"ealpha.c.o \Option-d
|
||||
"{o}"ei386lynx.c.o "{o}"em68klynx.c.o "{o}"esparclynx.c.o "{o}"ecoff_sparc.c.o \Option-d
|
||||
"{o}"edelta68.c.o \Option-d
|
||||
{OTHER_EMULATIONS}
|
||||
|
||||
CFILES = "{s}"ldctor.c "{s}"ldemul.c "{s}"ldexp.c "{s}"ldfile.c "{s}"ldlang.c \Option-d
|
||||
ldmain.c "{s}"ldmisc.c "{s}"ldver.c "{s}"ldwrite.c "{s}"lexsup.c \Option-d
|
||||
mri.c
|
||||
|
||||
|
||||
HFILES = "{s}"config.h "{s}"ld.h "{s}"ldctor.h "{s}"ldemul.h "{s}"ldexp.h "{s}"ldfile.h \Option-d
|
||||
ldlang.h "{s}"ldlex.h "{s}"ldmain.h "{s}"ldmisc.h "{s}"ldver.h \Option-d
|
||||
ldwrite.h "{s}"mri.h
|
||||
|
||||
GENERATED_CFILES = :ldgram.c :ldlex.c
|
||||
GENERATED_HFILES = :ldgram.h :ldemul-list.h
|
||||
|
||||
OFILES = "{o}"ldgram.c.o "{o}"ldlex.c.o "{o}"lexsup.c.o "{o}"ldlang.c.o "{o}"mri.c.o "{o}"ldctor.c.o "{o}"ldmain.c.o \Option-d
|
||||
"{o}"ldwrite.c.o "{o}"ldexp.c.o "{o}"ldemul.c.o "{o}"ldver.c.o "{o}"ldmisc.c.o \Option-d
|
||||
"{o}"ldfile.c.o {EMULATION_OFILES}
|
||||
|
||||
LINTSOURCES = {CFILES} {GENERATED_CFILES} e\Option-x.c
|
||||
|
||||
STAGESTUFF = "{o}"\Option-x.c.o ldscripts:\Option-x e\Option-x.c {GENERATED_CFILES} {GENERATED_HFILES}
|
||||
|
||||
info \Option-f ld.info
|
||||
# .PHONY \Option-f info
|
||||
|
||||
:ldgram.c \Option-f "{s}"ldgram.y
|
||||
{BISON} {BISONFLAGS} -d "{srcdir}"ldgram.y
|
||||
Rename -y y.tab.c :ldgram.c
|
||||
Rename -y y.tab.h :ldgram.h
|
||||
|
||||
# Separate from ldgram.c so that a parallel make doesn't try to build
|
||||
# both ldgram.c and ldgram.h simultaneously.
|
||||
:ldgram.h \Option-f :ldgram.c
|
||||
|
||||
# EMUL is the name of a file in the emulparams subdir, without the .sh.
|
||||
"{o}"ldmain.c.o \Option-f "{s}"ldmain.c config.status
|
||||
{CC} {INCLUDES} {HDEFINES} {TDEFINES} {CDEFINES} -d DEFAULT_EMULATION=\Option-d"{EMUL}\Option-d" -d SCRIPTDIR=\Option-d"{scriptdir}\Option-d" {CFLAGS} "{s}"ldmain.c -o "{o}"ldmain.c.o
|
||||
|
||||
# Use this when flex is working correctly.
|
||||
:ldlex.c \Option-f "{s}"ldlex.l
|
||||
{LEX} -i -Cem "{srcdir}"ldlex.l
|
||||
Catenate :lex.yy.c >:ldlex.c.new
|
||||
Delete -y :lex.yy.c
|
||||
Rename -y :ldlex.c.new :ldlex.c
|
||||
#:ldlex.c \Option-f "{s}"mpw-ldlex.c
|
||||
# Catenate "{s}"mpw-ldlex.c >:ldlex.c
|
||||
|
||||
# These all start with e so 'make clean' can find them.
|
||||
|
||||
GENSCRIPTS = {SHELL} "{srcdir}"genscripts.sh {srcdir} {libdir} {host_alias} {target_alias} {EMUL} "{NATIVE_LIB_DIRS}"
|
||||
GEN_DEPENDS = "{srcdir}"genscripts.sh
|
||||
|
||||
esun4.c \Option-f "{srcdir}"emulparams:sun4.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} sun4
|
||||
esun3.c \Option-f "{srcdir}"emulparams:sun3.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} sun3
|
||||
evsta.c \Option-f "{srcdir}"emulparams:vsta.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} vsta
|
||||
ego32.c \Option-f "{srcdir}"emulparams:go32.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} go32
|
||||
enews.c \Option-f "{srcdir}"emulparams:news.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} news
|
||||
evax.c \Option-f "{srcdir}"emulparams:vax.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} vax
|
||||
ehp300bsd.c \Option-f "{srcdir}"emulparams:hp300bsd.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} hp300bsd
|
||||
ehp3hpux.c \Option-f "{srcdir}"emulparams:hp3hpux.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} hp3hpux
|
||||
ehppaosf.c \Option-f "{srcdir}"emulparams:hppaosf.sh \Option-d
|
||||
"{srcdir}"emultempl:hppaosf.em "{srcdir}"scripttempl:hppaosf.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} hppaosf
|
||||
ei386aout.c \Option-f "{srcdir}"emulparams:i386aout.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} i386aout
|
||||
ei386mach.c \Option-f "{srcdir}"emulparams:i386mach.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} i386mach
|
||||
eebmon29k.c \Option-f "{srcdir}"emulparams:ebmon29k.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:ebmon29k.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} ebmon29k
|
||||
esa29200.c \Option-f "{srcdir}"emulparams:sa29200.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sa29200.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} sa29200
|
||||
ea29k.c \Option-f "{srcdir}"emulparams:a29k.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:a29k.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} a29k
|
||||
em88kbcs.c \Option-f "{srcdir}"emulparams:m88kbcs.sh \Option-d
|
||||
"{srcdir}"emultempl:m88kbcs.em "{srcdir}"scripttempl:m88kbcs.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} m88kbcs
|
||||
eh8300.c \Option-f "{srcdir}"emulparams:h8300.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8300.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} h8300
|
||||
eh8300h.c \Option-f "{srcdir}"emulparams:h8300h.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8300h.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} h8300h
|
||||
eh8500.c \Option-f "{srcdir}"emulparams:h8500.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8500.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} h8500
|
||||
esh.c \Option-f "{srcdir}"emulparams:sh.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sh.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} sh
|
||||
est2000.c \Option-f "{srcdir}"emulparams:st2000.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:st2000.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} st2000
|
||||
ez8ksim.c \Option-f "{srcdir}"emulparams:z8ksim.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:z8ksim.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} z8ksim
|
||||
evanilla.c \Option-f "{srcdir}"emulparams:vanilla.sh \Option-d
|
||||
"{srcdir}"emultempl:vanilla.em "{srcdir}"scripttempl:vanilla.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} vanilla
|
||||
elnk960.c \Option-f "{srcdir}"emulparams:lnk960.sh \Option-d
|
||||
"{srcdir}"emultempl:lnk960.em "{srcdir}"scripttempl:i960.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} lnk960
|
||||
egld960.c \Option-f "{srcdir}"emulparams:gld960.sh \Option-d
|
||||
"{srcdir}"emultempl:gld960.em "{srcdir}"scripttempl:i960.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} gld960
|
||||
em68kcoff.c \Option-f "{srcdir}"emulparams:m68kcoff.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:m68kcoff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} m68kcoff
|
||||
edelta68.c \Option-f "{srcdir}"emulparams:delta68.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:delta68.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} delta68
|
||||
em68klynx.c \Option-f "{srcdir}"emulparams:m68klynx.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:m68kcoff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} m68klynx
|
||||
ei386coff.c \Option-f "{srcdir}"emulparams:i386coff.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:i386coff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} i386coff
|
||||
ei386lynx.c \Option-f "{srcdir}"emulparams:i386lynx.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:i386coff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} i386lynx
|
||||
esparclynx.c \Option-f "{srcdir}"emulparams:sparclynx.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sparccoff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} sparclynx
|
||||
emipslit.c \Option-f "{srcdir}"emulparams:mipslit.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} mipslit
|
||||
ei386bsd.c \Option-f "{srcdir}"emulparams:i386bsd.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} i386bsd
|
||||
emipsbig.c \Option-f "{srcdir}"emulparams:mipsbig.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} mipsbig
|
||||
emipsbsd.c \Option-f "{srcdir}"emulparams:mipsbsd.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} mipsbsd
|
||||
emipsidt.c \Option-f "{srcdir}"emulparams:mipsidt.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} mipsidt
|
||||
emipsidtl.c \Option-f "{srcdir}"emulparams:mipsidtl.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} mipsidtl
|
||||
eelf_i386.c \Option-f "{srcdir}"emulparams:elf_i386.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:elf.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} elf_i386
|
||||
eelf32mipb.c \Option-f "{srcdir}"emulparams:elf32mipb.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:elf.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} elf32mipb
|
||||
ealpha.c \Option-f "{srcdir}"emulparams:alpha.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:alpha.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} alpha
|
||||
ecoff_sparc.c \Option-f "{srcdir}"emulparams:coff_sparc.sh \Option-d
|
||||
"{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sparccoff.sc {GEN_DEPENDS}
|
||||
{GENSCRIPTS} coff_sparc
|
||||
|
||||
{LD_PROG} \Option-f {OFILES} {BFDLIB} {LIBIBERTY} "{o}"Version.r
|
||||
Rez -rd -o {LD_PROG} "{o}"Version.r -append
|
||||
Link {LDFLAGS} -o {LD_PROG} {OFILES} {BFDLIB} {LIBIBERTY} {EXTRALIBS}
|
||||
|
||||
"{o}"Version.r \Option-f "{o}"version-stamp
|
||||
|
||||
"{o}"version-stamp \Option-f Makefile
|
||||
Delete -i -y "{o}"version.new "{o}"version-stamp
|
||||
Set major `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version [^0-9]*\([0-9]*\)\.\([0-9]*\)\..*/\1/'`
|
||||
Set minor `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version [^0-9]*\([0-9]*\)\.\([0-9]*\)\..*/\2/'`
|
||||
Set release 0
|
||||
Echo '/* Version resources. */' > "{o}"version.new
|
||||
Echo '#include "SysTypes.r"' >> "{o}"version.new
|
||||
Echo '' >> "{o}"version.new
|
||||
Echo "resource 'vers' (1) " `open-brace` >> "{o}"version.new
|
||||
Echo " {major}," >> "{o}"version.new
|
||||
Echo " {minor}," >> "{o}"version.new
|
||||
Echo " {release}," >> "{o}"version.new
|
||||
Echo ' 0,' >> "{o}"version.new
|
||||
Echo ' verUs,' >> "{o}"version.new
|
||||
Echo ' "{version}",' >> "{o}"version.new
|
||||
Echo ' "{version} (c) 1986-95 FSF, Inc. "' >> "{o}"version.new
|
||||
Echo '};' >> "{o}"version.new
|
||||
Echo '' >> "{o}"version.new
|
||||
Echo "resource 'vers' (2, purgeable) " `open-brace` >> "{o}"version.new
|
||||
Echo " {major}," >> "{o}"version.new
|
||||
Echo " {minor}," >> "{o}"version.new
|
||||
Echo " {release}," >> "{o}"version.new
|
||||
Echo ' 0,' >> "{o}"version.new
|
||||
Echo ' verUs,' >> "{o}"version.new
|
||||
Echo ' "{version}",' >> "{o}"version.new
|
||||
Echo ' "GNU LD for MPW"' >> "{o}"version.new
|
||||
Echo '};' >> "{o}"version.new
|
||||
MoveIfChange "{o}"version.new "{o}"Version.r
|
||||
Echo ' ' > "{o}"version-stamp
|
||||
|
||||
# The generated emulation files mostly have the same dependencies.
|
||||
{EMULATION_OFILES} \Option-f ::bfd:bfd.h ::bfd:sysdep.h "{INCDIR}":bfdlink.h \Option-d
|
||||
"{s}"ld.h "{s}"ldmain.h "{s}"ldemul.h "{s}"ldfile.h "{s}"ldmisc.h "{s}"ldexp.h "{s}"ldlang.h "{s}"config.h "{s}"ldctor.h
|
||||
|
||||
# These targets are for the dejagnu testsuites. The file site.exp
|
||||
# contains global variables that all the testsuites will use.
|
||||
# There is a current debate as to how and where to generate test
|
||||
# outputs. Rob feels each test should be built in {objdir} with
|
||||
# a unique name. Cassidy feels that we should create a directory
|
||||
# called {objdir}:tmpdir and do the work there. This way, there
|
||||
# is no potential conflict with existing objects, ie \Option-f as there
|
||||
# was in the past with "{o}"loop.c.o and "{o}"flow.c.o, and, there is no chance
|
||||
# of filling :tmp, which would cause other problems. Lastly, this
|
||||
# allow retention of the testcase name making debugging easier.
|
||||
#
|
||||
testdir = {objdir}:tmpdir
|
||||
|
||||
site.exp \Option-f :config.status Makefile
|
||||
@if [ -d {testdir} ]; then true; else mkdir {testdir}; fi
|
||||
@echo "Making a new config file..."
|
||||
@rm -f :tmp?
|
||||
@touch site.exp
|
||||
@mv site.exp site.bak
|
||||
@echo "## variables are automatically generated by make ##" > :tmp0
|
||||
@echo "# Do not edit here. If you wish to override these" >> :tmp0
|
||||
@echo "# values, add them to the last section" >> :tmp0
|
||||
@echo "# HOST AND TARGET INFO" >> :tmp0
|
||||
@echo "set host_os {host_os}" >> :tmp0
|
||||
@echo "set host_alias {host_alias}" >> :tmp0
|
||||
@echo "set host_cpu {host_cpu}" >> :tmp0
|
||||
@echo "set host_vendor {host_vendor}" >> :tmp0
|
||||
@echo "set target_os {target_os}" >> :tmp0
|
||||
@echo "set target_alias {target_alias}" >> :tmp0
|
||||
@echo "set target_cpu {target_cpu}" >> :tmp0
|
||||
@echo "set target_vendor {target_vendor}" >> :tmp0
|
||||
@echo "set host_triplet {host_canonical}" >> :tmp0
|
||||
@echo "set target_triplet {target_canonical}" >> :tmp0
|
||||
@echo "# DIRECTORY INFO" >> :tmp0
|
||||
@echo "set objdir `pwd`" >> :tmp0
|
||||
@echo "set tmpdir `cd {testdir}; pwd`" >> :tmp0
|
||||
@echo "" >> :tmp0
|
||||
@echo "# LD DEPENDANCIES" >> :tmp0
|
||||
@echo "set OFILES \"{OFILES}\"" >> :tmp0
|
||||
@echo "set BFDLIB \"{BFDLIB}\"" >> :tmp0
|
||||
@echo "set LIBIBERTY \"{LIBIBERTY}\"" >> :tmp0
|
||||
@echo "set HOSTING_EMU \"{HOSTING_EMU}\"" >> :tmp0
|
||||
@echo "set HOSTING_CRT0 \"{HOSTING_CRT0}\"" >> :tmp0
|
||||
@echo "set HOSTING_LIBS \"{HOSTING_LIBS}\"" >> :tmp0
|
||||
@echo "" >> :tmp0
|
||||
@echo "## Variables generated by configure. Do Not Edit ##" >> :tmp0
|
||||
@cat :tmp0 > site.exp
|
||||
@cat site.bak | sed \Option-d
|
||||
e '1,:^## Variables generated by.\Option-x##: d' >> site.exp
|
||||
@rm -f :tmp?
|
||||
|
||||
check \Option-f ld.new site.exp
|
||||
{RUNTEST} --tool ld \Option-d
|
||||
-srcdir "{srcdir}"testsuite {RUNTEST_FLAGS} \Option-d
|
||||
CC="{RUNTEST_CC}" CFLAGS="{RUNTEST_CFLAGS}" \Option-d
|
||||
CXX="{RUNTEST_CXX}" CXXFLAGS="{RUNTEST_CXXFLAGS}"
|
||||
|
||||
installcheck \Option-f
|
||||
# .PHONY \Option-f check installcheck
|
||||
|
||||
# Rules for testing by relinking ld itself.
|
||||
|
||||
"{o}"ld-partial.c.o \Option-f ld.new
|
||||
:ld.new {HOSTING_EMU} -o "{o}"ld-partial.c.o -r {OFILES}
|
||||
ld1 \Option-f "{o}"ld-partial.c.o
|
||||
:ld.new {HOSTING_EMU} -o ld1 {HOSTING_CRT0} "{o}"ld-partial.c.o {BFDLIB} {LIBIBERTY} {HOSTING_LIBS}
|
||||
|
||||
ld1-full \Option-f ld.new
|
||||
:ld.new {HOSTING_EMU} -o ld1-full {HOSTING_CRT0} {OFILES} {BFDLIB} {LIBIBERTY} {HOSTING_LIBS}
|
||||
|
||||
ld2 \Option-f ld1
|
||||
:ld1 {HOSTING_EMU} -o ld2 {HOSTING_CRT0} {OFILES} {BFDLIB} {LIBIBERTY} {HOSTING_LIBS}
|
||||
|
||||
ld3 \Option-f ld2
|
||||
:ld2 {HOSTING_EMU} -o ld3 {HOSTING_CRT0} {OFILES} {BFDLIB} {LIBIBERTY} {HOSTING_LIBS}
|
||||
|
||||
bootstrap \Option-f ld3
|
||||
cmp ld2 ld3
|
||||
|
||||
# .PHONY \Option-f bootstrap
|
||||
|
||||
# A test program for C++ constructors and destructors.
|
||||
|
||||
cdtest \Option-f "{o}"cdtest-main.c.o "{o}"cdtest-func.c.o "{o}"cdtest-foo.c.o ld.new
|
||||
:ld.new {HOSTING_EMU} -o cdtest {HOSTING_CRT0} \Option-d
|
||||
"{o}"cdtest-main.c.o "{o}"cdtest-func.c.o "{o}"cdtest-foo.c.o {HOSTING_LIBS}
|
||||
|
||||
check-cdtest \Option-f cdtest "{srcdir}"cdtest.exp
|
||||
:cdtest "{o}">cdtest.c.out
|
||||
diff "{srcdir}"cdtest.exp "{o}"cdtest.c.out
|
||||
|
||||
# .PHONY \Option-f check-cdtest
|
||||
|
||||
# END OF CHECK TARGETS
|
||||
|
||||
# DOCUMENTATION TARGETS
|
||||
# Manual configuration file; not usually attached to normal configuration,
|
||||
# because almost all configs use "gen" version of manual.
|
||||
# Set DOCVER above to change.
|
||||
configdoc.texi \Option-f {DOCVER}-doc.texi
|
||||
# ln -s "{srcdir}"{DOCVER}-doc.texi :configdoc.texi || \Option-d
|
||||
# ln "{srcdir}"{DOCVER}-doc.texi :configdoc.texi || \Option-d
|
||||
Duplicate -d -y "{srcdir}"{DOCVER}-doc.texi :configdoc.texi
|
||||
|
||||
# TeX output
|
||||
dvi \Option-f ld.dvi
|
||||
ld.dvi \Option-f "{srcdir}"ld.texinfo "{srcdir}"configdoc.texi {BFDDIR}:doc:bfdsumm.texi
|
||||
TEXINPUTS={BFDDIR}:doc \Option-f $$TEXINPUTS {TEXI2DVI} "{srcdir}"ld.texinfo
|
||||
|
||||
ldint.dvi \Option-f "{srcdir}"ldint.texinfo
|
||||
{TEXI2DVI} "{srcdir}"ldint.texinfo
|
||||
|
||||
# info file for online browsing
|
||||
ld.info \Option-f "{srcdir}"ld.texinfo configdoc.texi {BFDDIR}:doc:bfdsumm.texi
|
||||
{MAKEINFO} -i {BFDDIR}:doc -o ld.info "{srcdir}"ld.texinfo
|
||||
|
||||
ldint.info \Option-f "{srcdir}"ldint.texinfo
|
||||
{MAKEINFO} -o ldint.info "{srcdir}"ldint.texinfo
|
||||
|
||||
# .PHONY \Option-f dvi
|
||||
|
||||
#separate targets for "ms", "me", and "mm" forms of roff doc
|
||||
# Try to use a recent texi2roff. v2 was put on prep in jan91.
|
||||
# If you want an index, see texi2roff doc for postprocessing
|
||||
# and add -i to texi2roff invocations below.
|
||||
# Workarounds for texi2roff-2 (probably fixed in later texi2roff's, delete
|
||||
# correspondint -e lines when later texi2roff's are current)
|
||||
# + @ifinfo's deleted explicitly due to texi2roff-2 bug w nested constructs.
|
||||
# + @c's deleted explicitly because texi2roff sees texinfo commands in them
|
||||
# + @ (that's at-BLANK) not recognized by texi2roff, turned into blank
|
||||
# + @alphaenumerate is ridiculously new, turned into @enumerate
|
||||
|
||||
ld.ms \Option-f "{srcdir}"ld.texinfo
|
||||
sed -e ':\\input texinfo:d' \Option-d
|
||||
e ':@c TEXI2ROFF-KILL:,:@c END TEXI2ROFF-KILL:d' \Option-d
|
||||
e ':^end ifinfo:d' \Option-d
|
||||
e ':^@c:d' \Option-d
|
||||
e 's:{.\Option-x,,:{:' \Option-d
|
||||
e 's:@ : :g' \Option-d
|
||||
e 's:^enumerate:g' \Option-d
|
||||
e 's:^@end alphaenumerate:@end enumerate:g' \Option-d
|
||||
"{srcdir}"ld.texinfo | \Option-d
|
||||
{TEXI2ROFF} {TEXI2OPT} -ms | \Option-d
|
||||
sed -e 's:---:\\(em:g' \Option-d
|
||||
>>ld.ms
|
||||
|
||||
# index for roff output
|
||||
ld-index.ms \Option-f ld.ms
|
||||
{ROFF} -ms ld.ms 2>&1 1>:dev:null | \Option-d
|
||||
sed -e ': \Option-f warning \Option-f :d' | \Option-d
|
||||
texi2index >ld-index.ms
|
||||
|
||||
# roff output (-mm)
|
||||
ld.mm \Option-f "{srcdir}"ld.texinfo
|
||||
sed -e ':\\input texinfo:d' \Option-d
|
||||
e ':@c TEXI2ROFF-KILL:,:@c END TEXI2ROFF-KILL:d' \Option-d
|
||||
e ':^end ifinfo:d' \Option-d
|
||||
e ':^@c:d' \Option-d
|
||||
e 's:{.\Option-x,,:{:' \Option-d
|
||||
e ':@noindent:d' \Option-d
|
||||
e 's:@ : :g' \Option-d
|
||||
e 's:^enumerate:g' \Option-d
|
||||
e 's:^@end alphaenumerate:@end enumerate:g' \Option-d
|
||||
"{srcdir}"ld.texinfo | \Option-d
|
||||
{TEXI2ROFF} {TEXI2OPT} -mm | \Option-d
|
||||
sed -e 's:---:\\(em:g' \Option-d
|
||||
>ld.mm
|
||||
|
||||
# index for roff output
|
||||
ld-index.mm \Option-f ld.mm
|
||||
{ROFF} -mm ld.mm 2>&1 1>:dev:null | \Option-d
|
||||
sed -e ': \Option-f warning \Option-f :d' | \Option-d
|
||||
texi2index >ld-index.mm
|
||||
|
||||
# roff output (-me)
|
||||
ld.me \Option-f "{srcdir}"ld.texinfo
|
||||
sed -e ':\\input texinfo:d' \Option-d
|
||||
e ':@c TEXI2ROFF-KILL:,:@c END TEXI2ROFF-KILL:d' \Option-d
|
||||
e ':^end ifinfo:d' \Option-d
|
||||
e ':^@c:d' \Option-d
|
||||
e 's:{.\Option-x,,:{:' \Option-d
|
||||
e 's:@ : :g' \Option-d
|
||||
e 's:^enumerate:g' \Option-d
|
||||
e 's:^@end alphaenumerate:@end enumerate:g' \Option-d
|
||||
"{srcdir}"ld.texinfo | \Option-d
|
||||
{TEXI2ROFF} {TEXI2OPT} -me | \Option-d
|
||||
sed -e 's:---:\\(em:g' \Option-d
|
||||
>>ld.me
|
||||
|
||||
# index for roff output
|
||||
ld-index.me \Option-f ld.me
|
||||
{ROFF} -me ld.me 2>&1 1>:dev:null | \Option-d
|
||||
sed -e ': \Option-f warning \Option-f :d' | \Option-d
|
||||
texi2index >ld-index.me
|
||||
|
||||
stage1 \Option-f force
|
||||
mkdir stage1
|
||||
Rename -y {STAGESTUFF} {LD_PROG} stage1
|
||||
(cd stage1 ; ln -s {LD_PROG} ld)
|
||||
|
||||
stage2 \Option-f force
|
||||
mkdir stage2
|
||||
Rename -y {STAGESTUFF} {LD_PROG} stage2
|
||||
(cd stage2 ; ln -s {LD_PROG} ld)
|
||||
|
||||
stage3 \Option-f force
|
||||
mkdir stage3
|
||||
Rename -y {STAGESTUFF} {LD_PROG} stage3
|
||||
(cd stage3 ; ln -s {LD_PROG} ld)
|
||||
|
||||
against = stage2
|
||||
|
||||
comparison \Option-f force
|
||||
for i in {STAGESTUFF} {LD_PROG} ; do cmp $$i {against}:$$i ; done
|
||||
|
||||
de-stage1 \Option-f force
|
||||
(cd stage1 ; mv -f \Option-x ..)
|
||||
Delete -y ld
|
||||
rmdir stage1
|
||||
|
||||
de-stage2 \Option-f force
|
||||
(cd stage2 ; mv -f \Option-x ..)
|
||||
Delete -y ld
|
||||
rmdir stage2
|
||||
|
||||
de-stage3 \Option-f force
|
||||
(cd stage3 ; mv -f \Option-x ..)
|
||||
Delete -y ld
|
||||
rmdir stage3
|
||||
|
||||
# .PHONY \Option-f stage1 stage2 stage3 comparison de-stage1 de-stage2 de-stage3
|
||||
|
||||
# Stuff that should be included in a distribution \Option-f
|
||||
LDDISTSTUFF = :ldgram.c :ldgram.h :ldlex.c
|
||||
diststuff \Option-f {LDDISTSTUFF}
|
||||
|
||||
mostlyclean \Option-f
|
||||
Delete -y {STAGESTUFF} ld.?? ld.??? ldlex.[qp]
|
||||
Delete -y ld ld1 ld2 ld3 "{o}"\Option-x.c.o "{o}"y.c.output cdtest "{o}"cdtest.c.out
|
||||
clean \Option-f mostlyclean
|
||||
Delete -y {LD_PROG}
|
||||
distclean \Option-f
|
||||
Delete -yr Makefile config.status TAGS "{s}"sysdep.h ldscripts site.exp \Option-d
|
||||
{STAGESTUFF} ld.?? ld.??s ld.toc ld.aux "{s}"ld.log ldlex.[qp] \Option-d
|
||||
{LD_PROG} ld ld1 ld2 ld3 "{o}"\Option-x.c.o "{o}"y.c.output cdtest "{o}"cdtest.c.out
|
||||
realclean \Option-f clean distclean
|
||||
Delete -y {LDDISTSTUFF}
|
||||
|
||||
# .PHONY \Option-f diststuff mostlyclean clean distclean realclean
|
||||
|
||||
|
||||
|
||||
TAGS \Option-f
|
||||
etags -t "{srcdir}"\Option-x.[chly] \Option-x.[chly]
|
||||
|
||||
|
||||
install \Option-f all install-only
|
||||
|
||||
install-only \Option-f
|
||||
If "`Exists "{prefix}"`" == ""
|
||||
Echo "{prefix}" does not exist, cannot install anything
|
||||
Exit 1
|
||||
End If
|
||||
If "`Exists "{bindir}"`" == ""
|
||||
NewFolder "{bindir}"
|
||||
End If
|
||||
Duplicate -y :ld.new "{bindir}"ld
|
||||
|
||||
install-info \Option-f
|
||||
for i in ld.info\Option-x ; do \Option-d
|
||||
{INSTALL_DATA} $$i {infodir}:$$i ; \Option-d
|
||||
done
|
||||
|
||||
clean-info \Option-f
|
||||
Delete -y -rf \Option-x.info\Option-x
|
||||
|
||||
# .PHONY \Option-f install install-info clean-info
|
||||
|
||||
# Targets to rebuild dependencies in this Makefile.
|
||||
# Have to get rid of .dep1 here so that "$?" later includes all of {CFILES}.
|
||||
|
||||
# Dummy target to force execution of dependent targets.
|
||||
#
|
||||
force \Option-f
|
||||
|
||||
# .PHONY \Option-f force
|
||||
|
||||
Makefile \Option-f "{srcdir}"Makefile.in {host_makefile_frag} {target_makefile_frag}
|
||||
{SHELL} :config.status
|
||||
|
||||
# What appears below is generated by a hacked mkdep using gcc -MM.
|
||||
|
||||
# DO NOT DELETE THIS LINE -- mkdep uses it.
|
||||
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
|
||||
|
||||
"{o}"ldctor.c.o \Option-f "{s}"ldctor.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"ld.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldmisc.h \Option-d
|
||||
:ldgram.h "{s}"ldctor.h
|
||||
"{o}"ldemul.c.o \Option-f "{s}"ldemul.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{s}"config.h "{s}"ld.h "{s}"ldemul.h "{s}"ldmisc.h "{s}"ldfile.h "{s}"ldmain.h :ldemul-list.h
|
||||
"{o}"ldexp.c.o \Option-f "{s}"ldexp.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"ld.h "{s}"ldmain.h "{s}"ldmisc.h "{s}"ldexp.h \Option-d
|
||||
:ldgram.h "{s}"ldlang.h
|
||||
"{o}"ldfile.c.o \Option-f "{s}"ldfile.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{s}"ld.h "{s}"ldmisc.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldfile.h "{s}"ldmain.h "{s}"ldlex.h
|
||||
"{o}"ldlang.c.o \Option-f "{s}"ldlang.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"ld.h "{s}"ldmain.h :ldgram.h "{s}"ldexp.h \Option-d
|
||||
"{s}"ldlang.h "{s}"ldemul.h "{s}"ldlex.h "{s}"ldmisc.h "{s}"ldctor.h "{s}"ldfile.h
|
||||
"{o}"ldmain.c.o \Option-f "{s}"ldmain.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"config.h "{s}"ld.h "{s}"ldmain.h "{s}"ldmisc.h \Option-d
|
||||
"{s}"ldwrite.h :ldgram.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldemul.h "{s}"ldlex.h \Option-d
|
||||
"{s}"ldfile.h "{s}"ldctor.h
|
||||
"{o}"ldmisc.c.o \Option-f "{s}"ldmisc.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{s}"ld.h "{s}"ldmisc.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldlex.h "{s}"ldmain.h "{s}"ldfile.h
|
||||
"{o}"ldver.c.o \Option-f "{s}"ldver.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{s}"ld.h "{s}"ldver.h "{s}"ldemul.h "{s}"ldmain.h
|
||||
"{o}"ldwrite.c.o \Option-f "{s}"ldwrite.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"ld.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldwrite.h \Option-d
|
||||
"{s}"ldmisc.h :ldgram.h "{s}"ldmain.h
|
||||
"{o}"lexsup.c.o \Option-f "{s}"lexsup.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{s}"ldlex.h "{s}"ld.h "{s}"ldexp.h :ldgram.h "{s}"ldmisc.h
|
||||
"{o}"mri.c.o \Option-f "{s}"mri.c ::bfd:bfd.h "{INCDIR}":ansidecl.h "{INCDIR}":obstack.h \Option-d
|
||||
::bfd:sysdep.h "{INCDIR}":fopen-same.h "{s}"ld.h "{s}"ldexp.h \Option-d
|
||||
"{s}"ldlang.h "{s}"ldmisc.h "{s}"mri.h :ldgram.h
|
||||
"{o}"ldgram.c.o \Option-f :ldgram.c ::bfd:bfd.h "{INCDIR}":ansidecl.h \Option-d
|
||||
"{INCDIR}":obstack.h ::bfd:sysdep.h "{INCDIR}":fopen-same.h \Option-d
|
||||
"{INCDIR}":bfdlink.h "{s}"ld.h "{s}"ldexp.h "{s}"ldver.h "{s}"ldlang.h "{s}"ldemul.h \Option-d
|
||||
"{s}"ldfile.h "{s}"ldmisc.h "{s}"ldmain.h "{s}"mri.h "{s}"ldlex.h
|
||||
"{o}"ldlex.c.o \Option-f :ldlex.c ::bfd:bfd.h "{INCDIR}":obstack.h \Option-d
|
||||
"{s}"ld.h :ldgram.h "{s}"ldmisc.h "{s}"ldexp.h "{s}"ldlang.h "{s}"ldfile.h "{s}"ldlex.h
|
||||
|
||||
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
|
74
ld/mpw-make.sed
Normal file
74
ld/mpw-make.sed
Normal file
|
@ -0,0 +1,74 @@
|
|||
# Sed commands to finish translating the ld Makefile.in into MPW syntax.
|
||||
|
||||
/HDEFINES/s/@HDEFINES@//
|
||||
|
||||
/^target_alias = @target_alias@/s/^/#/
|
||||
|
||||
/^EMUL = @EMUL@/s/^/#/
|
||||
|
||||
/^EMULATION_OFILES = @EMULATION_OFILES@/s/^/#/
|
||||
|
||||
# Fixadd to the include paths.
|
||||
/^INCLUDES = .*$/s/$/ -i "{INCDIR}":mpw: -i ::extra-include:/
|
||||
/BFDDIR/s/-i {BFDDIR} /-i "{BFDDIR}": /
|
||||
/INCDIR/s/-i {INCDIR} /-i "{INCDIR}": /
|
||||
|
||||
# Use byacc instead of bison (for now anyway).
|
||||
/BISON/s/^BISON =.*$/BISON = byacc/
|
||||
#/BISONFLAGS/s/^BISONFLAGS =.*$/BISONFLAGS = /
|
||||
|
||||
# Suppress the suppression of smart makes.
|
||||
/^\.y\.c/d
|
||||
|
||||
# Hack up ldmain compile.
|
||||
/^"{o}"ldmain.c.o \\Option-f .* config.status$/,/^$/c\
|
||||
"{o}"ldmain.c.o \\Option-f "{s}"ldmain.c\
|
||||
{CC} -d DEFAULT_EMULATION='"'{EMUL}'"' -d SCRIPTDIR='"'{scriptdir}'"' {ALL_CFLAGS} "{s}"ldmain.c -o "{o}"ldmain.c.o\
|
||||
|
||||
|
||||
# Remove ldemul-list.h build, rely on configure to make one.
|
||||
/^ldemul-list.h /,/Rename -y "{s}"ldemul-tmp.h /d
|
||||
|
||||
# Fix pathnames to generated files.
|
||||
/config.h/s/"{s}"config\.h/"{o}"config.h/g
|
||||
/config.h/s/^config\.h/"{o}"config.h/
|
||||
|
||||
/y.tab.c/s/"{s}"y\.tab\.c/"{o}"y.tab.c/g
|
||||
/y.tab.c/s/^y\.tab\.c/"{o}"y.tab.c/
|
||||
/y.tab.h/s/"{s}"y\.tab\.h/"{o}"y.tab.h/g
|
||||
/y.tab.h/s/^y\.tab\.h/"{o}"y.tab.h/
|
||||
|
||||
/ldgram.c/s/"{s}"ldgram\.c/"{o}"ldgram.c/g
|
||||
/ldgram.c/s/^ldgram\.c/"{o}"ldgram.c/
|
||||
|
||||
/ldgram.h/s/"{s}"ldgram\.h/"{o}"ldgram.h/g
|
||||
/ldgram.h/s/^ldgram\.h/"{o}"ldgram.h/
|
||||
|
||||
/ldlex.c/s/"{s}"ldlex\.c/"{o}"ldlex.c/g
|
||||
/ldlex.c/s/^ldlex\.c/"{o}"ldlex.c/
|
||||
|
||||
/ldlex.c.new/s/"{s}"ldlex\.c\.new/"{o}"ldlex.c.new/g
|
||||
|
||||
/lex.yy.c/s/"{s}"lex\.yy\.c/"{o}"lex.yy.c/g
|
||||
|
||||
/ldemul-list.h/s/"{s}"ldemul-list\.h/"{o}"ldemul-list.h/g
|
||||
/ldemul-list.h/s/^ldemul-list\.h/"{o}"ldemul-list.h/
|
||||
|
||||
/"{s}"e.*\.c/s/"{s}"e\([-_a-z0-9]*\)\.c/"{o}"e\1.c/g
|
||||
/^e.*\.c/s/^e\([-_a-z0-9]*\)\.c/"{o}"e\1.c/
|
||||
|
||||
#/sed.*free/,/> "{o}"ldlex.c.new/c\
|
||||
# \ Catenate "{o}"lex.yy.c >"{o}"ldlex.c.new
|
||||
|
||||
# The resource file is called mac-ld.r.
|
||||
/{LD_PROG}.r/s/{LD_PROG}\.r/mac-ld.r/
|
||||
|
||||
# Remove dependency rebuilding crud.
|
||||
/^.dep /,/# .PHONY /d
|
||||
|
||||
# Remove the lintlog action, pipe symbols in column 1 lose.
|
||||
/^lintlog \\Option-f/,/^$/d
|
||||
|
||||
/^Makefile \\Option-f/,/^$/d
|
||||
/^"{o}"config.h \\Option-f/,/^$/d
|
||||
/^config.status \\Option-f/,/^$/d
|
Loading…
Reference in a new issue