binutils-gdb/include/elf
Jozef Lawrynowicz 7d81bc937c MSP430: Support relocations for subtract expressions in .uleb128 directives
Link-time relaxations of branches are common for MSP430, given that GCC
can generate pessimal branch instructions, and the
-mcode-region=either/-mdata-region=either options to shuffle sections
can further change the type of branch instruction required.

These relaxations can result in invalid code when .uleb128
directives, used in the .gcc_except_table section, are used to calculate
the distance between two labels. A value for the .uleb128 directive is
calculated at assembly-time, and can't be updated at link-time, even if
relaxation causes the distance between the labels to change.

This patch adds relocations for subtract expressions in .uleb128
directives, to allow the linker to re-calculate the value of these
expressions after relaxation has been performed.

bfd/ChangeLog:
	* bfd-in2.h (bfd_reloc_code_real): Add
	BFD_RELOC_MSP430_{SET,SUB}_ULEB128.
	* elf32-msp430.c (msp430_elf_ignore_reloc): New.
	(elf_msp430_howto_table): Add R_MSP430{,X}_GNU_{SET,SUB}_ULEB128.
	(msp430_reloc_map): Add R_MSP430_GNU_{SET,SUB}_ULEB128.
	(msp430x_reloc_map): Add R_MSP430X_GNU_{SET,SUB}_ULEB128.
	(write_uleb128): New.
	(msp430_final_link_relocate): Handle R_MSP430{,X}_GNU_{SET,SUB}_ULEB128.
	* libbfd.c (_bfd_write_unsigned_leb128): New.
	* libbfd.h (_bfd_write_unsigned_leb128): New prototype.
	Add BFD_RELOC_MSP430_{SET,SUB}_ULEB128.
	* reloc.c: Document BFD_RELOC_MSP430_{SET,SUB}_ULEB128.

binutils/ChangeLog:
	* readelf.c (target_specific_reloc_handling): Handle
	R_MSP430{,X}_GNU_{SET,SUB}_ULEB128.

gas/ChangeLog:
	* config/tc-msp430.c (msp430_insert_uleb128_fixes): New.
	(msp430_md_end): Call msp430_insert_uleb128_fixes.

include/ChangeLog:
	* elf/msp430.h (elf_msp430_reloc_type): Add
	R_MSP430_GNU_{SET,SUB}_ULEB128.
	(elf_msp430x_reloc_type): Add R_MSP430X_GNU_{SET,SUB}_ULEB128.

ld/ChangeLog:
	* testsuite/ld-msp430-elf/msp430-elf.exp: Run new tests.
	* testsuite/ld-msp430-elf/uleb128.s: New test.
	* testsuite/ld-msp430-elf/uleb128_430.d: New test.
	* testsuite/ld-msp430-elf/uleb128_430x.d: New test.
2020-09-08 16:18:38 +01:00
..
aarch64.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
alpha.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
arc-cpu.def [ARC][committed] Update ARC cpu list 2020-01-13 11:16:47 +02:00
arc-reloc.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
arc.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
arm.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
avr.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
bfin.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
bpf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ChangeLog-0415
ChangeLog-9103
common.h Add support to readelf for the OpenBSD segment types. 2020-08-26 15:15:10 +01:00
cr16.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
cris.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
crx.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
csky.h CSKY: Support attribute section. 2020-08-28 17:23:24 +08:00
d10v.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
d30v.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dlx.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dwarf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
epiphany.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
external.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fr30.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
frv.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ft32.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
h8.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
hppa.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
i370.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
i386.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
i860.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
i960.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ia64.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
internal.h Fix several mix up between octets and bytes in ELF program headers 2020-03-13 15:48:01 +10:30
ip2k.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
iq2000.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
lm32.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
m32c.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
m32r.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
m68hc11.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
m68k.h m68k: tag floating-point ABI used 2020-06-26 14:42:19 +09:30
mcore.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
mep.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
metag.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
microblaze.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
mips.h asan: readelf: process_mips_specific buffer overflow 2020-06-11 13:54:46 +09:30
mmix.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
mn10200.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
mn10300.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
moxie.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
msp430.h MSP430: Support relocations for subtract expressions in .uleb128 directives 2020-09-08 16:18:38 +01:00
mt.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
nds32.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
nfp.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
nios2.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
or1k.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
pj.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ppc64.h C++ comments 2020-06-29 10:07:56 +09:30
ppc.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
pru.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
reloc-macros.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
riscv.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
rl78.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
rx.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
s12z.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
s390.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
score.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
sh.h Remove SH-5 remnants 2020-04-21 11:35:43 +09:30
sparc.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
spu.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
tic6x-attrs.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
tic6x.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
tilegx.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
tilepro.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
v850.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
vax.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
visium.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
vxworks.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
wasm32.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
x86-64.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xc16x.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xgate.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xstormy16.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xtensa.h xtensa: allow runtime ABI selection 2020-06-15 13:01:30 -07:00
z80.h Add support for the GBZ80 and Z80N variants of the Z80 architecture, and add DWARF debug info support to the Z80 assembler. 2020-02-07 14:53:46 +00:00