* bfd-in.h (bfd_elf32_arm_process_before_allocation): Update
	prototype.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
	* elf32-arm.h (elf32_arm_link_hash_table): Add target1_is_rel.
	(elf32_arm_link_hash_table_create): Set target1_is_rel.
	(bfd_elf32_arm_process_before_allocation): Ditto.
	(elf32_arm_final_link_relocate): Handle R_ARM_TARGET1.
	(elf32_arm_gc_sweep_hook, elf32_arm_check_relocs): Ditto.
	* elfarm-nabi.c (elf32_arm_howto_table): Rename RELABS to TARGET1.
	* reloc.c: Ditto.
gas/
	* config/tc-arm.c: Rename RELABS to TARGET1.
gas/testsuite/
	* gas/arm/pic.d: Rename RELABS to TARGET1.
	* gas/arm/pic.s: Ditto.
include/
	* elf/arm.h: Rename RELABS to TARGET1.
ld/
	* emulparams/armsymbian.sh: Set TARGET1_IS_REL.
	* emultempl/armelf.em: Use TARGET1_IS_REL.  Add --target1-{rel,abs}.
This commit is contained in:
Paul Brook 2004-09-13 14:14:32 +00:00
parent ee31a58d74
commit 9c50426849
17 changed files with 96 additions and 21 deletions

View File

@ -1,3 +1,17 @@
2004-09-13 Paul Brook <paul@codesourcery.com>
* bfd-in.h (bfd_elf32_arm_process_before_allocation): Update
prototype.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* elf32-arm.h (elf32_arm_link_hash_table): Add target1_is_rel.
(elf32_arm_link_hash_table_create): Set target1_is_rel.
(bfd_elf32_arm_process_before_allocation): Ditto.
(elf32_arm_final_link_relocate): Handle R_ARM_TARGET1.
(elf32_arm_gc_sweep_hook, elf32_arm_check_relocs): Ditto.
* elfarm-nabi.c (elf32_arm_howto_table): Rename RELABS to TARGET1.
* reloc.c: Ditto.
2004-09-10 Joel Brobecker <brobecker@gnat.com> 2004-09-10 Joel Brobecker <brobecker@gnat.com>
* hpux-core.c (thread_section_p): New function. * hpux-core.c (thread_section_p): New function.

View File

@ -814,7 +814,7 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *); (struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *, int, int); (bfd *, struct bfd_link_info *, int, int, int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *); (bfd *, struct bfd_link_info *);

View File

@ -821,7 +821,7 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *); (struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *, int, int); (bfd *, struct bfd_link_info *, int, int, int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *); (bfd *, struct bfd_link_info *);
@ -2641,7 +2641,7 @@ field in the instruction. */
/* Pc-relative or absolute relocation depending on target. Used for /* Pc-relative or absolute relocation depending on target. Used for
entries in .init_array sections. */ entries in .init_array sections. */
BFD_RELOC_ARM_RELABS32, BFD_RELOC_ARM_TARGET1,
/* Read-only segment base relative address. */ /* Read-only segment base relative address. */
BFD_RELOC_ARM_ROSEGREL32, BFD_RELOC_ARM_ROSEGREL32,

View File

@ -182,6 +182,10 @@ struct elf32_arm_link_hash_table
/* Nonzero to output a BE8 image. */ /* Nonzero to output a BE8 image. */
int byteswap_code; int byteswap_code;
/* Zero if R_ARM_TARGET1 means R_ARM_ABS32.
Nonzero if R_ARM_TARGET1 means R_ARM_ABS32. */
int target1_is_rel;
/* The number of bytes in the initial entry in the PLT. */ /* The number of bytes in the initial entry in the PLT. */
bfd_size_type plt_header_size; bfd_size_type plt_header_size;
@ -373,6 +377,7 @@ elf32_arm_link_hash_table_create (bfd *abfd)
ret->bfd_of_glue_owner = NULL; ret->bfd_of_glue_owner = NULL;
ret->no_pipeline_knowledge = 0; ret->no_pipeline_knowledge = 0;
ret->byteswap_code = 0; ret->byteswap_code = 0;
ret->target1_is_rel = 0;
#ifdef FOUR_WORD_PLT #ifdef FOUR_WORD_PLT
ret->plt_header_size = 16; ret->plt_header_size = 16;
ret->plt_entry_size = 16; ret->plt_entry_size = 16;
@ -752,7 +757,8 @@ bfd_boolean
bfd_elf32_arm_process_before_allocation (bfd *abfd, bfd_elf32_arm_process_before_allocation (bfd *abfd,
struct bfd_link_info *link_info, struct bfd_link_info *link_info,
int no_pipeline_knowledge, int no_pipeline_knowledge,
int byteswap_code) int byteswap_code,
int target1_is_rel)
{ {
Elf_Internal_Shdr *symtab_hdr; Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *internal_relocs = NULL; Elf_Internal_Rela *internal_relocs = NULL;
@ -775,6 +781,7 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
BFD_ASSERT (globals->bfd_of_glue_owner != NULL); BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
globals->no_pipeline_knowledge = no_pipeline_knowledge; globals->no_pipeline_knowledge = no_pipeline_knowledge;
globals->target1_is_rel = target1_is_rel;
if (byteswap_code && !bfd_big_endian (abfd)) if (byteswap_code && !bfd_big_endian (abfd))
{ {
_bfd_error_handler (_("%B: BE8 images only valid in big-endian mode."), _bfd_error_handler (_("%B: BE8 images only valid in big-endian mode."),
@ -1174,6 +1181,22 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_signed_vma signed_addend; bfd_signed_vma signed_addend;
struct elf32_arm_link_hash_table * globals; struct elf32_arm_link_hash_table * globals;
globals = elf32_arm_hash_table (info);
#ifndef OLD_ARM_ABI
/* Some relocation type map to different relocations depending on the
target. We pick the right one here. */
if (r_type == R_ARM_TARGET1)
{
if (globals->target1_is_rel)
r_type = R_ARM_REL32;
else
r_type = R_ARM_ABS32;
howto = &elf32_arm_howto_table[r_type];
}
#endif /* OLD_ARM_ABI */
/* If the start address has been set, then set the EF_ARM_HASENTRY /* If the start address has been set, then set the EF_ARM_HASENTRY
flag. Setting this more than once is redundant, but the cost is flag. Setting this more than once is redundant, but the cost is
not too high, and it keeps the code simple. not too high, and it keeps the code simple.
@ -1186,8 +1209,6 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
if (bfd_get_start_address (output_bfd) != 0) if (bfd_get_start_address (output_bfd) != 0)
elf_elfheader (output_bfd)->e_flags |= EF_ARM_HASENTRY; elf_elfheader (output_bfd)->e_flags |= EF_ARM_HASENTRY;
globals = elf32_arm_hash_table (info);
dynobj = elf_hash_table (info)->dynobj; dynobj = elf_hash_table (info)->dynobj;
if (dynobj) if (dynobj)
{ {
@ -2738,6 +2759,7 @@ elf32_arm_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
case R_ARM_ABS32: case R_ARM_ABS32:
case R_ARM_REL32: case R_ARM_REL32:
case R_ARM_TARGET1:
case R_ARM_PC24: case R_ARM_PC24:
case R_ARM_PLT32: case R_ARM_PLT32:
r_symndx = ELF32_R_SYM (rel->r_info); r_symndx = ELF32_R_SYM (rel->r_info);
@ -2753,7 +2775,8 @@ elf32_arm_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
h->plt.refcount -= 1; h->plt.refcount -= 1;
if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32 if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32
|| ELF32_R_TYPE (rel->r_info) == R_ARM_REL32) || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32
|| ELF32_R_TYPE (rel->r_info) == R_ARM_TARGET1)
{ {
eh = (struct elf32_arm_link_hash_entry *) h; eh = (struct elf32_arm_link_hash_entry *) h;
@ -2864,6 +2887,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_ARM_ABS32: case R_ARM_ABS32:
case R_ARM_REL32: case R_ARM_REL32:
case R_ARM_TARGET1:
case R_ARM_PC24: case R_ARM_PC24:
case R_ARM_PLT32: case R_ARM_PLT32:
if (h != NULL) if (h != NULL)
@ -2906,7 +2930,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
&& (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_ALLOC) != 0
&& ((ELF32_R_TYPE (rel->r_info) != R_ARM_PC24 && ((ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
&& ELF32_R_TYPE (rel->r_info) != R_ARM_PLT32 && ELF32_R_TYPE (rel->r_info) != R_ARM_PLT32
&& ELF32_R_TYPE (rel->r_info) != R_ARM_REL32) && ELF32_R_TYPE (rel->r_info) != R_ARM_REL32
&& ELF32_R_TYPE (rel->r_info) != R_ARM_TARGET1)
|| (h != NULL || (h != NULL
&& (! info->symbolic && (! info->symbolic
|| (h->elf_link_hash_flags || (h->elf_link_hash_flags
@ -2991,7 +3016,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
} }
if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32 if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32
|| ELF32_R_TYPE (rel->r_info) == R_ARM_REL32) || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32
|| ELF32_R_TYPE (rel->r_info) == R_ARM_TARGET1)
p->count += 1; p->count += 1;
} }
break; break;

View File

@ -595,7 +595,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
0x0ff00000, /* dst_mask */ 0x0ff00000, /* dst_mask */
FALSE), /* pcrel_offset */ FALSE), /* pcrel_offset */
HOWTO (R_ARM_RELABS32, /* type */ HOWTO (R_ARM_TARGET1, /* type */
0, /* rightshift */ 0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */ 2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */ 32, /* bitsize */
@ -603,7 +603,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
0, /* bitpos */ 0, /* bitpos */
complain_overflow_dont,/* complain_on_overflow */ complain_overflow_dont,/* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */ bfd_elf_generic_reloc, /* special_function */
"R_ARM_RELABS32", /* name */ "R_ARM_TARGET1", /* name */
FALSE, /* partial_inplace */ FALSE, /* partial_inplace */
0xffffffff, /* src_mask */ 0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */ 0xffffffff, /* dst_mask */
@ -769,7 +769,7 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
{BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC}, {BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},
{BFD_RELOC_ARM_GOT32, R_ARM_GOT32}, {BFD_RELOC_ARM_GOT32, R_ARM_GOT32},
{BFD_RELOC_ARM_PLT32, R_ARM_PLT32}, {BFD_RELOC_ARM_PLT32, R_ARM_PLT32},
{BFD_RELOC_ARM_RELABS32, R_ARM_RELABS32}, {BFD_RELOC_ARM_TARGET1, R_ARM_TARGET1},
{BFD_RELOC_ARM_ROSEGREL32, R_ARM_ROSEGREL32}, {BFD_RELOC_ARM_ROSEGREL32, R_ARM_ROSEGREL32},
{BFD_RELOC_ARM_SBREL32, R_ARM_SBREL32} {BFD_RELOC_ARM_SBREL32, R_ARM_SBREL32}
}; };

View File

@ -1134,7 +1134,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_ARM_RELATIVE", "BFD_RELOC_ARM_RELATIVE",
"BFD_RELOC_ARM_GOTOFF", "BFD_RELOC_ARM_GOTOFF",
"BFD_RELOC_ARM_GOTPC", "BFD_RELOC_ARM_GOTPC",
"BFD_RELOC_ARM_RELABS32", "BFD_RELOC_ARM_TARGET1",
"BFD_RELOC_ARM_ROSEGREL32", "BFD_RELOC_ARM_ROSEGREL32",
"BFD_RELOC_ARM_SBREL32", "BFD_RELOC_ARM_SBREL32",
"BFD_RELOC_SH_PCDISP8BY2", "BFD_RELOC_SH_PCDISP8BY2",

View File

@ -2609,7 +2609,7 @@ ENUMDOC
These relocs are only used within the ARM assembler. They are not These relocs are only used within the ARM assembler. They are not
(at present) written to any object files. (at present) written to any object files.
ENUM ENUM
BFD_RELOC_ARM_RELABS32 BFD_RELOC_ARM_TARGET1
ENUMDOC ENUMDOC
Pc-relative or absolute relocation depending on target. Used for Pc-relative or absolute relocation depending on target. Used for
entries in .init_array sections. entries in .init_array sections.

View File

@ -1,3 +1,7 @@
2004-09-13 Paul Brook <paul@codesourcery.com>
* config/tc-arm.c: Rename RELABS to TARGET1.
2004-09-13 Alan Modra <amodra@bigpond.net.au> 2004-09-13 Alan Modra <amodra@bigpond.net.au>
* messages.c (as_internal_value_out_of_range): Cast values passed * messages.c (as_internal_value_out_of_range): Cast values passed

View File

@ -12487,7 +12487,7 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_RVA: case BFD_RELOC_RVA:
case BFD_RELOC_32: case BFD_RELOC_32:
case BFD_RELOC_ARM_RELABS32: case BFD_RELOC_ARM_TARGET1:
case BFD_RELOC_ARM_ROSEGREL32: case BFD_RELOC_ARM_ROSEGREL32:
case BFD_RELOC_ARM_SBREL32: case BFD_RELOC_ARM_SBREL32:
if (fixP->fx_done || fixP->fx_pcrel) if (fixP->fx_done || fixP->fx_pcrel)
@ -12777,7 +12777,7 @@ tc_gen_reloc (section, fixp)
case BFD_RELOC_ARM_GOT32: case BFD_RELOC_ARM_GOT32:
case BFD_RELOC_ARM_GOTOFF: case BFD_RELOC_ARM_GOTOFF:
case BFD_RELOC_ARM_PLT32: case BFD_RELOC_ARM_PLT32:
case BFD_RELOC_ARM_RELABS32: case BFD_RELOC_ARM_TARGET1:
case BFD_RELOC_ARM_ROSEGREL32: case BFD_RELOC_ARM_ROSEGREL32:
case BFD_RELOC_ARM_SBREL32: case BFD_RELOC_ARM_SBREL32:
code = fixp->fx_r_type; code = fixp->fx_r_type;
@ -14149,7 +14149,7 @@ arm_parse_reloc ()
/* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)" /* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)"
branch instructions generated by GCC for PLT relocs. */ branch instructions generated by GCC for PLT relocs. */
MAP ("(plt)", BFD_RELOC_ARM_PLT32), MAP ("(plt)", BFD_RELOC_ARM_PLT32),
MAP ("(relabs)", BFD_RELOC_ARM_RELABS32), MAP ("(target1)", BFD_RELOC_ARM_TARGET1),
MAP ("(sbrel)", BFD_RELOC_ARM_SBREL32), MAP ("(sbrel)", BFD_RELOC_ARM_SBREL32),
{ NULL, 0, BFD_RELOC_UNUSED } { NULL, 0, BFD_RELOC_UNUSED }
#undef MAP #undef MAP

View File

@ -1,3 +1,8 @@
2004-09-13 Paul Brook <paul@codesourcery.com>
* gas/arm/pic.d: Rename RELABS to TARGET1.
* gas/arm/pic.s: Ditto.
2004-09-03 Tomer Levi <Tomer.Levi@nsc.com> 2004-09-03 Tomer Levi <Tomer.Levi@nsc.com>
* gas/crx: New directory. * gas/crx: New directory.

View File

@ -15,5 +15,5 @@ Disassembly of section .text:
c: R_ARM_GOT32 sym c: R_ARM_GOT32 sym
10: R_ARM_GOTOFF sym 10: R_ARM_GOTOFF sym
14: R_ARM_GOTPC _GLOBAL_OFFSET_TABLE_ 14: R_ARM_GOTPC _GLOBAL_OFFSET_TABLE_
18: R_ARM_RELABS32 foo2 18: R_ARM_TARGET1 foo2
1c: R_ARM_SBREL32 foo3 1c: R_ARM_SBREL32 foo3

View File

@ -9,5 +9,5 @@
.word sym(GOTOFF) .word sym(GOTOFF)
1: 1:
.word _GLOBAL_OFFSET_TABLE_ - 1b .word _GLOBAL_OFFSET_TABLE_ - 1b
.word foo2(RELABS) .word foo2(TARGET1)
.word foo3(SBREL) .word foo3(SBREL)

View File

@ -1,3 +1,7 @@
2004-09-13 Paul Brook <paul@codesourcery.com>
* elf/arm.h: Rename RELABS to TARGET1.
2004-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2004-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* ansidecl.h (ATTRIBUTE_SENTINEL): Define. * ansidecl.h (ATTRIBUTE_SENTINEL): Define.

View File

@ -127,7 +127,7 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35) RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35)
RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36) RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36)
RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37) RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37)
RELOC_NUMBER (R_ARM_RELABS32, 38) RELOC_NUMBER (R_ARM_TARGET1, 38)
RELOC_NUMBER (R_ARM_ROSEGREL32, 39) RELOC_NUMBER (R_ARM_ROSEGREL32, 39)
RELOC_NUMBER (R_ARM_V4BX, 40) RELOC_NUMBER (R_ARM_V4BX, 40)
RELOC_NUMBER (R_ARM_STKCHK, 41) RELOC_NUMBER (R_ARM_STKCHK, 41)

View File

@ -1,3 +1,8 @@
2004-09-13 Paul Brook <paul@codesourcery.com>
* emulparams/armsymbian.sh: Set TARGET1_IS_REL.
* emultempl/armelf.em: Use TARGET1_IS_REL. Add --target1-{rel,abs}.
2004-09-07 H.J. Lu <hongjiu.lu@intel.com> 2004-09-07 H.J. Lu <hongjiu.lu@intel.com>
* configure: Regenerated with autconfig 2.13. * configure: Regenerated with autconfig 2.13.

View File

@ -4,6 +4,7 @@ GENERATE_COMBRELOC_SCRIPT=1
OUTPUT_FORMAT="elf32-littlearm-symbian" OUTPUT_FORMAT="elf32-littlearm-symbian"
BIG_OUTPUT_FORMAT="elf32-bigarm-symbian" BIG_OUTPUT_FORMAT="elf32-bigarm-symbian"
LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT" LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT"
TARGET1_IS_REL=1
# This value should match ELF_MAXPAGESIZE in BFD. Otherwise, elf.c # This value should match ELF_MAXPAGESIZE in BFD. Otherwise, elf.c
# will not place read-write sections in a separate ELF segment from # will not place read-write sections in a separate ELF segment from

View File

@ -28,6 +28,7 @@ static int no_pipeline_knowledge = 0;
static char *thumb_entry_symbol = NULL; static char *thumb_entry_symbol = NULL;
static bfd *bfd_for_interwork; static bfd *bfd_for_interwork;
static int byteswap_code = 0; static int byteswap_code = 0;
static int target1_is_rel = 0${TARGET1_IS_REL};
static void static void
gld${EMULATION_NAME}_before_parse (void) gld${EMULATION_NAME}_before_parse (void)
@ -120,7 +121,8 @@ arm_elf_before_allocation (void)
{ {
if (!bfd_elf32_arm_process_before_allocation (is->the_bfd, & link_info, if (!bfd_elf32_arm_process_before_allocation (is->the_bfd, & link_info,
no_pipeline_knowledge, no_pipeline_knowledge,
byteswap_code)) byteswap_code,
target1_is_rel))
{ {
/* xgettext:c-format */ /* xgettext:c-format */
einfo (_("Errors encountered processing file %s"), is->filename); einfo (_("Errors encountered processing file %s"), is->filename);
@ -188,6 +190,8 @@ EOF
PARSE_AND_LIST_PROLOGUE=' PARSE_AND_LIST_PROLOGUE='
#define OPTION_THUMB_ENTRY 301 #define OPTION_THUMB_ENTRY 301
#define OPTION_BE8 302 #define OPTION_BE8 302
#define OPTION_TARGET1_REL 303
#define OPTION_TARGET1_ABS 304
' '
PARSE_AND_LIST_SHORTOPTS=p PARSE_AND_LIST_SHORTOPTS=p
@ -196,12 +200,16 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-pipeline-knowledge", no_argument, NULL, '\'p\''}, { "no-pipeline-knowledge", no_argument, NULL, '\'p\''},
{ "thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY}, { "thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
{ "be8", no_argument, NULL, OPTION_BE8}, { "be8", no_argument, NULL, OPTION_BE8},
{ "target1-rel", no_argument, NULL, OPTION_TARGET1_REL},
{ "target1-abs", no_argument, NULL, OPTION_TARGET1_ABS},
' '
PARSE_AND_LIST_OPTIONS=' PARSE_AND_LIST_OPTIONS='
fprintf (file, _(" -p --no-pipeline-knowledge Stop the linker knowing about the pipeline length\n")); fprintf (file, _(" -p --no-pipeline-knowledge Stop the linker knowing about the pipeline length\n"));
fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n")); fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
fprintf (file, _(" --be8 Oputput BE8 format image\n")); fprintf (file, _(" --be8 Oputput BE8 format image\n"));
fprintf (file, _(" --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"));
fprintf (file, _(" --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n"));
' '
PARSE_AND_LIST_ARGS_CASES=' PARSE_AND_LIST_ARGS_CASES='
@ -216,6 +224,14 @@ PARSE_AND_LIST_ARGS_CASES='
case OPTION_BE8: case OPTION_BE8:
byteswap_code = 1; byteswap_code = 1;
break; break;
case OPTION_TARGET1_REL:
target1_is_rel = 1;
break;
case OPTION_TARGET1_ABS:
target1_is_rel = 0;
break;
' '
# We have our own after_open and before_allocation functions, but they call # We have our own after_open and before_allocation functions, but they call