Fix the evaluation of RL78 complex relocs, by making immediate values be computed relative to a new absolute symbol.
gas * config/tc-rl78.c (rl78_abs_sym): New local variable. (md_begin): Initialise the new symbol. (OPIMM): Define the value to be relative to the new symbol and not the absolute section symbol. ld * emulparams/elf32rl78.sh (OTHER_SECTIONS): Provide a value for the _-rl78_abs__ symbol. tests * gas/all/struct.d: Allow for extra symbols in the output. * gas/macros/test1.d: Likewise. * gas/elf/elf.exp: Add an rl78 machine. * gas/elf/sections2e-rl78: New file. tests * binutils-all/localize-hidden-1.d: Allow for extra symbols in the output. * binutils-all/strip-11.d: Skip for the RL78.
This commit is contained in:
parent
5826e15986
commit
aff1a65ecb
|
@ -1,3 +1,9 @@
|
||||||
|
2015-07-24 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* binutils-all/localize-hidden-1.d: Allow for extra symbols in the
|
||||||
|
output.
|
||||||
|
* binutils-all/strip-11.d: Skip for the RL78.
|
||||||
|
|
||||||
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
|
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* binutils-all/compress.exp: Update.
|
* binutils-all/compress.exp: Update.
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
0+2300 l .*\*ABS\* 0+ \.internal Ginternal
|
0+2300 l .*\*ABS\* 0+ \.internal Ginternal
|
||||||
0+3200 l .*\*ABS\* 0+ \.hidden Whidden
|
0+3200 l .*\*ABS\* 0+ \.hidden Whidden
|
||||||
0+3300 l .*\*ABS\* 0+ \.internal Winternal
|
0+3300 l .*\*ABS\* 0+ \.internal Winternal
|
||||||
|
#...
|
||||||
0+2100 g .*\*ABS\* 0+ Gdefault
|
0+2100 g .*\*ABS\* 0+ Gdefault
|
||||||
0+2400 g .*\*ABS\* 0+ \.protected Gprotected
|
0+2400 g .*\*ABS\* 0+ \.protected Gprotected
|
||||||
0+3100 w.*\*ABS\* 0+ Wdefault
|
0+3100 w.*\*ABS\* 0+ Wdefault
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#strip: -g
|
#strip: -g
|
||||||
#readelf: -S --wide
|
#readelf: -S --wide
|
||||||
#name: strip -g empty file
|
#name: strip -g empty file
|
||||||
|
# The RL78 linker scripts always PROVIDE a __rl78_abs__ symbol so the stripped symbol table is never empty.
|
||||||
|
#not-target: rl78-*-*
|
||||||
|
|
||||||
#...
|
#...
|
||||||
\[ 0\] +NULL +0+ .*
|
\[ 0\] +NULL +0+ .*
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-07-24 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* config/tc-rl78.c (rl78_abs_sym): New local variable.
|
||||||
|
(md_begin): Initialise the new symbol.
|
||||||
|
(OPIMM): Define the value to be relative to the new symbol and not
|
||||||
|
the absolute section symbol.
|
||||||
|
|
||||||
2015-07-22 Alan Modra <amodra@gmail.com>
|
2015-07-22 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR gas/18687
|
PR gas/18687
|
||||||
|
|
|
@ -402,9 +402,12 @@ const pseudo_typeS md_pseudo_table[] =
|
||||||
{ NULL, NULL, 0 }
|
{ NULL, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static symbolS * rl78_abs_sym = NULL;
|
||||||
|
|
||||||
void
|
void
|
||||||
md_begin (void)
|
md_begin (void)
|
||||||
{
|
{
|
||||||
|
rl78_abs_sym = symbol_make ("__rl78_abs__");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1240,7 +1243,17 @@ tc_gen_reloc (asection * seg ATTRIBUTE_UNUSED, fixS * fixp)
|
||||||
reloc[rp]->address = fixp->fx_frag->fr_address + fixp->fx_where; \
|
reloc[rp]->address = fixp->fx_frag->fr_address + fixp->fx_where; \
|
||||||
reloc[++rp] = NULL
|
reloc[++rp] = NULL
|
||||||
#define OPSYM(SYM) OPX(BFD_RELOC_RL78_SYM, SYM, 0)
|
#define OPSYM(SYM) OPX(BFD_RELOC_RL78_SYM, SYM, 0)
|
||||||
#define OPIMM(IMM) OPX(BFD_RELOC_RL78_SYM, abs_symbol.bsym, IMM)
|
|
||||||
|
/* FIXME: We cannot do the normal thing for an immediate value reloc,
|
||||||
|
ie creating a RL78_SYM reloc in the *ABS* section with an offset
|
||||||
|
equal to the immediate value we want to store. This fails because
|
||||||
|
the reloc processing in bfd_perform_relocation and bfd_install_relocation
|
||||||
|
will short circuit such relocs and never pass them on to the special
|
||||||
|
reloc processing code. So instead we create a RL78_SYM reloc against
|
||||||
|
the __rl78_abs__ symbol and arrange for the linker scripts to place
|
||||||
|
this symbol at address 0. */
|
||||||
|
#define OPIMM(IMM) OPX (BFD_RELOC_RL78_SYM, symbol_get_bfdsym (rl78_abs_sym), IMM)
|
||||||
|
|
||||||
#define OP(OP) OPX(BFD_RELOC_RL78_##OP, *reloc[0]->sym_ptr_ptr, 0)
|
#define OP(OP) OPX(BFD_RELOC_RL78_##OP, *reloc[0]->sym_ptr_ptr, 0)
|
||||||
#define SYM0() reloc[0]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_RL78_SYM)
|
#define SYM0() reloc[0]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_RL78_SYM)
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-07-24 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* gas/all/struct.d: Allow for extra symbols in the output.
|
||||||
|
* gas/macros/test1.d: Likewise.
|
||||||
|
* gas/elf/elf.exp: Add an rl78 machine.
|
||||||
|
* gas/elf/sections2e-rl78: New file.
|
||||||
|
|
||||||
2015-07-22 Alexander Fomin <alexander.fomin@intel.com>
|
2015-07-22 Alexander Fomin <alexander.fomin@intel.com>
|
||||||
|
|
||||||
PR binutils/18631
|
PR binutils/18631
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#name: struct
|
#name: struct
|
||||||
|
|
||||||
# Test the .struct pseudo-op.
|
# Test the .struct pseudo-op.
|
||||||
|
#...
|
||||||
0+00 A w1
|
0+00 A w1
|
||||||
0+02 A w2
|
0+02 A w2
|
||||||
0+04 A w3
|
0+04 A w3
|
||||||
|
|
|
@ -79,6 +79,9 @@ if { [is_elf_format] } then {
|
||||||
if {[istarget "v850*-*-*"]} then {
|
if {[istarget "v850*-*-*"]} then {
|
||||||
set target_machine -v850
|
set target_machine -v850
|
||||||
}
|
}
|
||||||
|
if {[istarget "rl78-*-*"]} then {
|
||||||
|
set target_machine -rl78
|
||||||
|
}
|
||||||
if {[istarget "arm*-*-*"]} {
|
if {[istarget "arm*-*-*"]} {
|
||||||
set target_machine -arm
|
set target_machine -arm
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
Symbol table '.symtab' contains 6 entries:
|
||||||
|
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||||
|
+0: 0+0 +0 +NOTYPE +LOCAL +DEFAULT +UND
|
||||||
|
+1: 0+0 +0 +SECTION +LOCAL +DEFAULT +1
|
||||||
|
+2: 0+0 +0 +SECTION +LOCAL +DEFAULT +2
|
||||||
|
+3: 0+0 +0 +SECTION +LOCAL +DEFAULT +3
|
||||||
|
+4: 0+0 +0 +SECTION +LOCAL +DEFAULT +4
|
||||||
|
+5: 0+0 +0 +NOTYPE +GLOBAL +DEFAULT +UND __rl78_abs__
|
|
@ -1,5 +1,6 @@
|
||||||
#nm: --extern-only
|
#nm: --extern-only
|
||||||
#name: macro test 1
|
#name: macro test 1
|
||||||
|
|
||||||
|
#...
|
||||||
0+01 A s_not_a_reg_1
|
0+01 A s_not_a_reg_1
|
||||||
0+02 A s_not_a_reg_2
|
0+02 A s_not_a_reg_2
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-07-24 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* emulparams/elf32rl78.sh (OTHER_SECTIONS): Provide a value for
|
||||||
|
the _-rl78_abs__ symbol.
|
||||||
|
|
||||||
2015-07-20 Alan Modra <amodra@gmail.com>
|
2015-07-20 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* emulparams/criself.sh (INIT_ADDR, FINI_ADDR): Define.
|
* emulparams/criself.sh (INIT_ADDR, FINI_ADDR): Define.
|
||||||
|
|
|
@ -8,7 +8,7 @@ ENTRY=_start
|
||||||
EMBEDDED=yes
|
EMBEDDED=yes
|
||||||
TEMPLATE_NAME=elf32
|
TEMPLATE_NAME=elf32
|
||||||
ELFSIZE=32
|
ELFSIZE=32
|
||||||
EXTRA_EM_FILE=needrelax
|
# EXTRA_EM_FILE=needrelax
|
||||||
MAXPAGESIZE=256
|
MAXPAGESIZE=256
|
||||||
# This is like setting STACK_ADDR to 0xffedc, except that the setting can
|
# This is like setting STACK_ADDR to 0xffedc, except that the setting can
|
||||||
# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
|
# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra
|
||||||
|
@ -21,6 +21,7 @@ test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELO
|
||||||
${RELOCATING+__stack = .;}
|
${RELOCATING+__stack = .;}
|
||||||
*(.stack)
|
*(.stack)
|
||||||
LONG(0xdead)
|
LONG(0xdead)
|
||||||
}"
|
}
|
||||||
|
${RELOCATING+PROVIDE (__rl78_abs__ = 0);}"
|
||||||
# We do not need .stack for shared library.
|
# We do not need .stack for shared library.
|
||||||
test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
|
test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
|
||||||
|
|
Loading…
Reference in New Issue