csky: Support PC relative diff relocation
Define DIFF_EXPR_OK to Support PC relative diff relocation, and add CKCORE_PCREL32 relocation process bfd/ * elf32-csky.c (csky_elf_howto_table): Fill special_function of R_CKCORE_PCREL32. (csky_elf_relocate_section): Add R_CKCORE_PCREL32 process. gas/ * config/tc-csky.c (md_apply_fix): Transmit BFD_RELOC_32_PCREL to BFD_RELOC_CKCORE_PCREL32. (tc_gen_reloc): Trasmit BFD_RELOC_CKCORE_ADDR32 to BFD_RELOC_CKCORE_PCREL32 while pc-relative. * config/tc-csky.h (DIFF_EXPR_OK): Define to enable PC relative diff relocs.
This commit is contained in:
parent
87b240d485
commit
fe75f42ee1
@ -1,3 +1,9 @@
|
||||
2018-09-14 Lifang Xia <lifang_xia@c-sky.com>
|
||||
|
||||
* elf32-csky.c (csky_elf_howto_table): Fill special_function of
|
||||
R_CKCORE_PCREL32.
|
||||
(csky_elf_relocate_section): Add R_CKCORE_PCREL32 process.
|
||||
|
||||
2018-09-14 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 23425
|
||||
|
@ -150,7 +150,7 @@ static reloc_howto_type csky_elf_howto_table[] =
|
||||
TRUE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont, /* complain_on_overflow */
|
||||
NULL, /* special_function */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_CKCORE_PCREL32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x0, /* src_mask */
|
||||
@ -4307,6 +4307,10 @@ csky_elf_relocate_section (bfd * output_bfd,
|
||||
if (h == NULL && (addend & 0x80000000))
|
||||
addend &= 0xffffffff;
|
||||
break;
|
||||
|
||||
case R_CKCORE_PCREL32:
|
||||
break;
|
||||
|
||||
case R_CKCORE_GOT12:
|
||||
case R_CKCORE_PLT12:
|
||||
case R_CKCORE_GOT_HI16:
|
||||
@ -5027,6 +5031,7 @@ csky_elf_relocate_section (bfd * output_bfd,
|
||||
|
||||
if (howto->size == 2
|
||||
&& (howto->type == R_CKCORE_ADDR32
|
||||
|| howto->type == R_CKCORE_PCREL32
|
||||
|| howto->type == R_CKCORE_GOT32
|
||||
|| howto->type == R_CKCORE_GOTOFF
|
||||
|| howto->type == R_CKCORE_GOTPC
|
||||
|
@ -1,3 +1,12 @@
|
||||
2018-09-10 Lifang Xia <lifang_xia@c-sky.com>
|
||||
|
||||
* config/tc-csky.c (md_apply_fix): Transmit BFD_RELOC_32_PCREL to
|
||||
BFD_RELOC_CKCORE_PCREL32.
|
||||
(tc_gen_reloc): Trasmit BFD_RELOC_CKCORE_ADDR32 to
|
||||
BFD_RELOC_CKCORE_PCREL32 while pc-relative.
|
||||
* config/tc-csky.h (DIFF_EXPR_OK): Define to enable PC relative diff
|
||||
relocs.
|
||||
|
||||
2018-09-14 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* config/tc-i386.c (process_suffix): Simplify CRC32 special
|
||||
|
@ -4920,7 +4920,9 @@ md_apply_fix (fixS *fixP,
|
||||
/* We can handle these relocs. */
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_32_PCREL:
|
||||
case BFD_RELOC_CKCORE_PCREL32:
|
||||
fixP->fx_r_type = BFD_RELOC_CKCORE_PCREL32;
|
||||
break;
|
||||
case BFD_RELOC_VTABLE_INHERIT:
|
||||
fixP->fx_r_type = BFD_RELOC_CKCORE_GNU_VTINHERIT;
|
||||
@ -5133,6 +5135,10 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
|
||||
{
|
||||
arelent *rel;
|
||||
|
||||
if (fixP->fx_pcrel
|
||||
&& fixP->fx_r_type == BFD_RELOC_CKCORE_ADDR32)
|
||||
fixP->fx_r_type = BFD_RELOC_CKCORE_PCREL32;
|
||||
|
||||
rel = xmalloc (sizeof (arelent));
|
||||
rel->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
||||
*rel->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
|
||||
|
@ -62,6 +62,9 @@
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 15
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
||||
|
||||
/* .-foo gets turned into PC relative relocs. */
|
||||
#define DIFF_EXPR_OK 1
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MAP_UNDEFINED = 0,
|
||||
|
Loading…
Reference in New Issue
Block a user