# This shell script emits a C file. -*- C -*-
-# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+# Copyright (C) 2013-2021 Free Software Foundation, Inc.
#
# This file is part of GNU Binutils.
#
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
-# This file is sourced from elf32.em, and defines extra C-SKY ELF
+# This file is sourced from elf.em, and defines extra C-SKY ELF
# specific routines.
#
fragment <<EOF
#include "ldctor.h"
#include "elf/csky.h"
+#include "elf32-csky.h"
/* To use branch stub or not. */
-extern bfd_boolean use_branch_stub;
+extern bool use_branch_stub;
/* Fake input file for stubs. */
static lang_input_statement_type *stub_file;
};
/* Traverse the linker tree to find the spot where the stub goes. */
-static bfd_boolean
+static bool
hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
{
lang_statement_union_type *l;
- bfd_boolean ret;
+ bool ret;
for (l = *lp; l != NULL; lp = &l->header.next, l = *lp)
switch (l->header.type)
after its associated input section. */
*(info->add.tail) = l->header.next;
l->header.next = info->add.head;
- return TRUE;
+ return true;
}
break;
break;
}
- return FALSE;
+ return false;
}
EOF
static void
csky_elf_before_parse (void)
{
- use_branch_stub = FALSE;
+ use_branch_stub = false;
gld${EMULATION_NAME}_before_parse ();
}
EOF
{
if (!(bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
&& elf_object_id (link_info.output_bfd) == CSKY_ELF_DATA))
- use_branch_stub = FALSE;
+ use_branch_stub = false;
/* If don't use branch stub, just do not emit stub_file. */
if (!use_branch_stub)
if (stub_sec == NULL)
goto err_ret;
- bfd_set_section_alignment (stub_file->the_bfd, stub_sec, 3);
+ bfd_set_section_alignment (stub_sec, 3);
output_section = input_section->output_section;
- secname = bfd_get_section_name (output_section->owner, output_section);
+ secname = bfd_section_name (output_section);
os = lang_output_section_find (secname);
info.input_section = input_section;
lang_list_init (&info.add);
- lang_add_section (&info.add, stub_sec, NULL, os);
+ lang_add_section (&info.add, stub_sec, NULL, NULL, os);
if (info.add.head == NULL)
goto err_ret;
if (hook_in_stub (&info, &os->children.head))
return stub_sec;
-err_ret:
+ err_ret:
einfo (_("%X%P: can not make stub section: %E\n"));
return NULL;
}
/* If we have changed sizes of the stub sections, then we need
to recalculate all the section offsets. This may mean we need to
add even more stubs. */
- gld${EMULATION_NAME}_map_segments (TRUE);
+ ldelf_map_segments (true);
need_laying_out = -1;
}
}
if (need_laying_out != -1)
- gld${EMULATION_NAME}_map_segments (need_laying_out);
+ ldelf_map_segments (need_laying_out);
}
static void
finish_default ();
}
-/* Avoid processing the fake stub_file in vercheck, stat_needed and
- check_needed routines. */
-
-static void (*real_func) (lang_input_statement_type *);
-
-static void csky_for_each_input_file_wrapper (lang_input_statement_type *l)
-{
- if (l != stub_file)
- (*real_func) (l);
-}
-
-static void
-csky_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
-{
- real_func = func;
- lang_for_each_input_file (&csky_for_each_input_file_wrapper);
-}
-
-#define lang_for_each_input_file csky_lang_for_each_input_file
-
EOF
# This code gets inserted into the generic elf32.sc linker script
{"stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE},
'
PARSE_AND_LIST_OPTIONS='
- fprintf (file, _(" --[no-]branch-stub\n"));
- fprintf (file, _("\t\t\tDisable/enable use of stubs to expand branch "
- "instructions that cannot reach the target.\n"));
- fprintf (file, _(" --stub-group-size=N\n"));
- fprintf (file, _("\t\t\tMaximum size of a group of input sections "
- "handled by one stub section."));
+ fprintf (file, _(" --[no-]branch-stub "
+ "Disable/enable use of stubs to expand branch\n"
+ " "
+ " instructions that cannot reach the target.\n"));
+ fprintf (file, _(" --stub-group-size=N "
+ "Maximum size of a group of input sections\n"
+ " "
+ " handled by one stub section.\n"));
'
PARSE_AND_LIST_ARGS_CASES='
case OPTION_BRANCH_STUB:
- use_branch_stub = TRUE;
+ use_branch_stub = true;
break;
case OPTION_NO_BRANCH_STUB:
- use_branch_stub = FALSE;
+ use_branch_stub = false;
break;
case OPTION_STUBGROUP_SIZE: