kpatch/kpatch-build
Josh Poimboeuf 0019e83622 gcc-plugin: run the plugin at an earlier pass
On ppc64le, building drivers/media/i2c/cx25840/cx25840.ko with GCC 4.85,
the plugin triggers the following errors:

  {standard input}: Assembler messages:
  {standard input}:1078: Error: operand out of range (0x0000000000008fd4 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:1288: Error: operand out of range (0x000000000000874c is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:3844: Error: operand out of range (0x00000000000080e8 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:4028: Error: operand out of range (0x00000000000082b4 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:4031: Error: operand out of range (0x00000000000080b4 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:6661: Error: operand out of range (0x000000000000841c is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:6664: Error: operand out of range (0x0000000000008214 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:6845: Error: operand out of range (0x00000000000089dc is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:6848: Error: operand out of range (0x00000000000087d4 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:7587: Error: operand out of range (0x0000000000008930 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:7590: Error: operand out of range (0x0000000000008728 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  {standard input}:14592: Error: operand out of range (0xffffffffffff79b8 is not between 0xffffffffffff8000 and 0x0000000000007ffc)
  make[1]: *** [drivers/media/i2c/cx25840/cx25840-core.o] Error 1

The problem is that the plugin nops were inserted too late.  GCC laid
out the code with knowledge about the distance between branches, but
then the plugin came along after that and increased the branch distances
by inserting the nops.

Fix it by inserting the nops as early as possible.  The 'vregs' pass is
where the insn codes get initialized, so run the plugin immediately
afterwards.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
2018-03-16 17:16:17 -05:00
..
gcc-plugins gcc-plugin: run the plugin at an earlier pass 2018-03-16 17:16:17 -05:00
insn insn: get it to compile in create-diff-object 2014-05-30 15:19:57 -05:00
create-diff-object.c kpatch-build: 'hint' is not needed in kpatch_create_*_sections() 2018-02-22 15:06:20 +03:00
create-klp-module.c create-diff-object: don't convert relocation destinations to symbols 2017-11-09 19:16:14 -06:00
create-kpatch-module.c create-kpatch-module: support unbundled symbols 2017-09-20 23:57:24 -05:00
kpatch-build Fix resulting module vermagic when source dir is a git tree 2018-03-13 16:23:03 +01:00
kpatch-elf.c kpatch-build: clear Elf_Data d_buf buffer on allocation 2017-10-03 16:42:28 -04:00
kpatch-elf.h kpatch-build: Support gcc-6 function prologue 2017-07-27 12:56:00 +05:30
kpatch-gcc kpatch-build: Add additional debug modes 2017-11-17 15:04:11 +01:00
kpatch-intermediate.h create-klp-module: get rid of redundant kpatch_relocation.offset field 2017-11-09 19:16:14 -06:00
list.h new .fixup group size algorithm 2014-09-15 14:54:57 -05:00
log.h log: include error.h 2017-01-23 12:42:35 -08:00
lookup.c lookup: allow local symbols to be in any order 2017-07-06 12:44:50 -05:00
lookup.h support dup file+symbol 2017-02-04 09:37:18 +08:00
Makefile gcc-plugin: create a ppc64le GCC plugin which inserts nops after local calls 2017-11-10 09:17:00 -06:00