Tue Mar 12 12:43:59 1996 David Mosberger-Tang <davidm@koala.azstarnet.com>
* ld.h (ld_config_type): Add warn_multiple_gp field. * lexsup.c (parse_args): Handle --warn-multiple-gp. * ldmain.c (warning_callback): Suppress multiple gp values warning if --warn_multiple_gp was not used. * ld.texinfo, ld.1: Document --warn-multiple-gp.
This commit is contained in:
parent
a10d3dec45
commit
4b7d2399ae
|
@ -1,3 +1,11 @@
|
||||||
|
Tue Mar 12 12:43:59 1996 David Mosberger-Tang <davidm@koala.azstarnet.com>
|
||||||
|
|
||||||
|
* ld.h (ld_config_type): Add warn_multiple_gp field.
|
||||||
|
* lexsup.c (parse_args): Handle --warn-multiple-gp.
|
||||||
|
* ldmain.c (warning_callback): Suppress multiple gp values warning
|
||||||
|
if --warn_multiple_gp was not used.
|
||||||
|
* ld.texinfo, ld.1: Document --warn-multiple-gp.
|
||||||
|
|
||||||
Tue Mar 12 12:02:21 1996 Ian Lance Taylor <ian@cygnus.com>
|
Tue Mar 12 12:02:21 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
* configure: Rebuild with autoconf 2.8.
|
* configure: Rebuild with autoconf 2.8.
|
||||||
|
|
6
ld/ld.1
6
ld/ld.1
|
@ -119,6 +119,7 @@ ld \- the GNU linker
|
||||||
.RB "[\|" \-\-version "\|]"
|
.RB "[\|" \-\-version "\|]"
|
||||||
.RB "[\|" \-warn\-common "\|]"
|
.RB "[\|" \-warn\-common "\|]"
|
||||||
.RB "[\|" \-warn\-constructors "\|]"
|
.RB "[\|" \-warn\-constructors "\|]"
|
||||||
|
.RB "[\|" \-warn\-multiple\-gp "\|]"
|
||||||
.RB "[\|" \-warn\-once "\|]"
|
.RB "[\|" \-warn\-once "\|]"
|
||||||
.RB "[\|" \-\-whole\-archive "\|]"
|
.RB "[\|" \-\-whole\-archive "\|]"
|
||||||
.RB "[\|" \-\-no\-whole\-archive "\|]"
|
.RB "[\|" \-\-no\-whole\-archive "\|]"
|
||||||
|
@ -907,6 +908,11 @@ Warn if any global constructors are used. This is only useful for a
|
||||||
few object file formats. For formats like COFF or ELF, the linker can
|
few object file formats. For formats like COFF or ELF, the linker can
|
||||||
not detect the use of global constructors.
|
not detect the use of global constructors.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-warn\-multiple\-gp
|
||||||
|
Warn if the output file requires multiple global-pointer values. This
|
||||||
|
option is only meaningful for certain processors, such as the Alpha.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-warn\-once
|
.B \-warn\-once
|
||||||
Only warn once for each undefined symbol, rather than once per module
|
Only warn once for each undefined symbol, rather than once per module
|
||||||
|
|
|
@ -184,7 +184,7 @@ ld [ -o @var{output} ] @var{objfile}@dots{}
|
||||||
[ -Ttext @var{org} ] [ -Tdata @var{org} ]
|
[ -Ttext @var{org} ] [ -Tdata @var{org} ]
|
||||||
[ -Tbss @var{org} ] [ -t ] [ -traditional-format ]
|
[ -Tbss @var{org} ] [ -t ] [ -traditional-format ]
|
||||||
[ -u @var{symbol}] [-V] [-v] [ -verbose] [ -version ]
|
[ -u @var{symbol}] [-V] [-v] [ -verbose] [ -version ]
|
||||||
[ -warn-common ] [ -warn-constructors] [ -warn-once ]
|
[ -warn-common ] [ -warn-constructors] [ -warn-multiple-gp ] [ -warn-once ]
|
||||||
[ -y @var{symbol} ] [ -X ] [-x ]
|
[ -y @var{symbol} ] [ -X ] [-x ]
|
||||||
[ -( [ archives ] -) ]
|
[ -( [ archives ] -) ]
|
||||||
[ --start-group [ archives ] --end-group ]
|
[ --start-group [ archives ] --end-group ]
|
||||||
|
@ -932,6 +932,20 @@ Warn if any global constructors are used. This is only useful for a few
|
||||||
object file formats. For formats like COFF or ELF, the linker can not
|
object file formats. For formats like COFF or ELF, the linker can not
|
||||||
detect the use of global constructors.
|
detect the use of global constructors.
|
||||||
|
|
||||||
|
@kindex -warn-multiple-gp
|
||||||
|
@item -warn-multiple-gp
|
||||||
|
Warn if multiple global pointer values are required in the output file.
|
||||||
|
This is only meaningful for certain processors, such as the Alpha.
|
||||||
|
Specifically, some processors put large-valued constants in a special
|
||||||
|
section. A special register (the global pointer) points into the middle
|
||||||
|
of this section, so that constants can be loaded efficiently via a
|
||||||
|
base-register relative addressing mode. Since the offset in
|
||||||
|
base-register relative mode is fixed and relatively small (e.g., 16
|
||||||
|
bits), this limits the maximum size of the constant pool. Thus, in
|
||||||
|
large programs, it is often necessary to use multiple global pointer
|
||||||
|
values in order to be able to address all possible constants. This
|
||||||
|
option causes a warning to be issued whenever this case occurs.
|
||||||
|
|
||||||
@kindex -warn-once
|
@kindex -warn-once
|
||||||
@cindex warnings, on undefined symbols
|
@cindex warnings, on undefined symbols
|
||||||
@cindex undefined symbols, warnings on
|
@cindex undefined symbols, warnings on
|
||||||
|
@ -941,6 +955,7 @@ which refers to it.
|
||||||
|
|
||||||
@kindex --whole-archive
|
@kindex --whole-archive
|
||||||
@cindex including an entire archive
|
@cindex including an entire archive
|
||||||
|
@item --whole-archive
|
||||||
For each archive mentioned on the command line after the
|
For each archive mentioned on the command line after the
|
||||||
@code{--whole-archive} option, include every object file in the archive
|
@code{--whole-archive} option, include every object file in the archive
|
||||||
in the link, rather than searching the archive for the required object
|
in the link, rather than searching the archive for the required object
|
||||||
|
@ -949,6 +964,7 @@ library, forcing every object to be included in the resulting shared
|
||||||
library.
|
library.
|
||||||
|
|
||||||
@kindex --no-whole-archive
|
@kindex --no-whole-archive
|
||||||
|
@item --no-whole-archive
|
||||||
Turn off the effect of the @code{--whole-archive} option for archives
|
Turn off the effect of the @code{--whole-archive} option for archives
|
||||||
which appear later on the command line.
|
which appear later on the command line.
|
||||||
|
|
||||||
|
|
14
ld/ldmain.c
14
ld/ldmain.c
|
@ -735,7 +735,7 @@ add_to_set (info, h, reloc, abfd, section, value)
|
||||||
if (! config.build_constructors)
|
if (! config.build_constructors)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
ldctor_add_set_entry (h, reloc, section, value);
|
ldctor_add_set_entry (h, reloc, (const char *) NULL, section, value);
|
||||||
|
|
||||||
if (h->type == bfd_link_hash_new)
|
if (h->type == bfd_link_hash_new)
|
||||||
{
|
{
|
||||||
|
@ -775,7 +775,9 @@ constructor_callback (info, constructor, name, abfd, section, value)
|
||||||
|
|
||||||
/* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
|
/* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
|
||||||
useful error message. */
|
useful error message. */
|
||||||
if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL)
|
if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL
|
||||||
|
&& (link_info.relocateable
|
||||||
|
|| bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
|
||||||
einfo ("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n");
|
einfo ("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n");
|
||||||
|
|
||||||
s = set_name;
|
s = set_name;
|
||||||
|
@ -802,7 +804,7 @@ constructor_callback (info, constructor, name, abfd, section, value)
|
||||||
ourselves. */
|
ourselves. */
|
||||||
}
|
}
|
||||||
|
|
||||||
ldctor_add_set_entry (h, BFD_RELOC_CTOR, section, value);
|
ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -829,6 +831,12 @@ warning_callback (info, warning, symbol, abfd, section, address)
|
||||||
asection *section;
|
asection *section;
|
||||||
bfd_vma address;
|
bfd_vma address;
|
||||||
{
|
{
|
||||||
|
/* This is a hack to support warn_multiple_gp. FIXME: This should
|
||||||
|
have a cleaner interface, but what? */
|
||||||
|
if (! config.warn_multiple_gp
|
||||||
|
&& strcmp (warning, "using multiple gp values") == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (section != NULL)
|
if (section != NULL)
|
||||||
einfo ("%C: %s\n", abfd, section, address, warning);
|
einfo ("%C: %s\n", abfd, section, address, warning);
|
||||||
else if (abfd == NULL)
|
else if (abfd == NULL)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Parse options for the GNU linker.
|
/* Parse options for the GNU linker.
|
||||||
Copyright (C) 1991, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
|
|
||||||
|
@ -103,7 +103,8 @@ parse_args (argc, argv)
|
||||||
#define OPTION_VERSION (OPTION_VERBOSE + 1)
|
#define OPTION_VERSION (OPTION_VERBOSE + 1)
|
||||||
#define OPTION_WARN_COMMON (OPTION_VERSION + 1)
|
#define OPTION_WARN_COMMON (OPTION_VERSION + 1)
|
||||||
#define OPTION_WARN_CONSTRUCTORS (OPTION_WARN_COMMON + 1)
|
#define OPTION_WARN_CONSTRUCTORS (OPTION_WARN_COMMON + 1)
|
||||||
#define OPTION_WARN_ONCE (OPTION_WARN_CONSTRUCTORS + 1)
|
#define OPTION_WARN_MULTIPLE_GP (OPTION_WARN_CONSTRUCTORS + 1)
|
||||||
|
#define OPTION_WARN_ONCE (OPTION_WARN_MULTIPLE_GP + 1)
|
||||||
#define OPTION_SPLIT_BY_RELOC (OPTION_WARN_ONCE + 1)
|
#define OPTION_SPLIT_BY_RELOC (OPTION_WARN_ONCE + 1)
|
||||||
#define OPTION_SPLIT_BY_FILE (OPTION_SPLIT_BY_RELOC + 1)
|
#define OPTION_SPLIT_BY_FILE (OPTION_SPLIT_BY_RELOC + 1)
|
||||||
#define OPTION_WHOLE_ARCHIVE (OPTION_SPLIT_BY_FILE + 1)
|
#define OPTION_WHOLE_ARCHIVE (OPTION_SPLIT_BY_FILE + 1)
|
||||||
|
@ -159,6 +160,7 @@ parse_args (argc, argv)
|
||||||
{"version", no_argument, NULL, OPTION_VERSION},
|
{"version", no_argument, NULL, OPTION_VERSION},
|
||||||
{"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
|
{"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
|
||||||
{"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
|
{"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
|
||||||
|
{"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP},
|
||||||
{"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
|
{"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
|
||||||
{"split-by-reloc", required_argument, NULL, OPTION_SPLIT_BY_RELOC},
|
{"split-by-reloc", required_argument, NULL, OPTION_SPLIT_BY_RELOC},
|
||||||
{"split-by-file", no_argument, NULL, OPTION_SPLIT_BY_FILE},
|
{"split-by-file", no_argument, NULL, OPTION_SPLIT_BY_FILE},
|
||||||
|
@ -487,6 +489,9 @@ parse_args (argc, argv)
|
||||||
case OPTION_WARN_CONSTRUCTORS:
|
case OPTION_WARN_CONSTRUCTORS:
|
||||||
config.warn_constructors = true;
|
config.warn_constructors = true;
|
||||||
break;
|
break;
|
||||||
|
case OPTION_WARN_MULTIPLE_GP:
|
||||||
|
config.warn_multiple_gp = true;
|
||||||
|
break;
|
||||||
case OPTION_WARN_ONCE:
|
case OPTION_WARN_ONCE:
|
||||||
config.warn_once = true;
|
config.warn_once = true;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue