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. Successfully regtested the GCC, G++, Binutils, GAS and LD testsuites for the msp430-elf target in the default, -mcpu=msp430, -mlarge and -mlarge/-mdata-region=either/-mcode-region=either configurations. The patch fixes a number of failures in the G++ testsuite for -mlarge/-mdata-region=either/-mcode-region=either. Ok to apply? Thanks, Jozef