aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2000-09-27 17:30:19 +0000
committerAlan Modra <amodra@gmail.com>2000-09-27 17:30:19 +0000
commit47d89dba5e87eb8f200e5f1a8a37d71716856a6d (patch)
tree35e27d3ec96747bf2587c7ca2f96f6a70b93c938 /ld/emultempl
parent5506e1a5d86d957f3e71068785509d96d81e46a9 (diff)
downloadgdb-47d89dba5e87eb8f200e5f1a8a37d71716856a6d.zip
gdb-47d89dba5e87eb8f200e5f1a8a37d71716856a6d.tar.gz
gdb-47d89dba5e87eb8f200e5f1a8a37d71716856a6d.tar.bz2
.plt stub for lazy linking, --stub-group-size=N ld switch,
import stub fix, extra DIR14F reloc to fix abort in tc_gen_reloc
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/hppaelf.em35
1 files changed, 32 insertions, 3 deletions
diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em
index 3455cc8..065bcdd 100644
--- a/ld/emultempl/hppaelf.em
+++ b/ld/emultempl/hppaelf.em
@@ -44,6 +44,10 @@ static lang_input_statement_type *stub_file;
stubs. */
static int multi_subspace = 0;
+/* Maximum size of a group of input sections that can be handled by
+ one stub section. A value of +/-1 indicates the bfd back-end
+ should use a suitable default size. */
+static bfd_signed_vma group_size = 1;
/* This is called before the input files are opened. We create a new
fake input file to hold the stub sections. */
@@ -292,6 +296,7 @@ hppaelf_finish ()
stub_file->the_bfd,
&link_info,
multi_subspace,
+ group_size,
&hppaelf_add_stub_section,
&hppaelf_layaout_sections_again))
{
@@ -349,16 +354,31 @@ EOF
#
PARSE_AND_LIST_PROLOGUE='
#define OPTION_MULTI_SUBSPACE 301
+#define OPTION_STUBGROUP_SIZE (OPTION_MULTI_SUBSPACE + 1)
'
+# The options are repeated below so that no abbreviations are allowed.
+# Otherwise -s matches stub-group-size
PARSE_AND_LIST_LONGOPTS='
- { "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE},
+ { "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
+ { "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
'
PARSE_AND_LIST_OPTIONS='
fprintf (file, _("\
- --multi-subspace Generate import and export stubs to support\n\
- multiple sub-space shared libraries\n"
+ --multi-subspace Generate import and export stubs to support\n\
+ multiple sub-space shared libraries\n"
+ ));
+ fprintf (file, _("\
+ --stub-group-size=N Maximum size of a group of input sections that can be\n\
+ handled by one stub section. A negative value\n\
+ locates all stubs before their branches (with a\n\
+ group size of -N), while a positive value allows\n\
+ two groups of input sections, one before, and one\n\
+ after each stub section. Values of +/-1 indicate\n\
+ the linker should choose suitable defaults."
));
'
@@ -366,6 +386,15 @@ PARSE_AND_LIST_ARGS_CASES='
case OPTION_MULTI_SUBSPACE:
multi_subspace = 1;
break;
+
+ case OPTION_STUBGROUP_SIZE:
+ {
+ const char *end;
+ group_size = bfd_scan_vma (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\''\n"), optarg);
+ }
+ break;
'
# Put these extra hppaelf routines in ld_${EMULATION_NAME}_emulation