https://github.com/torvalds/linux
Revision 7dec80ccbe310fb7e225bf21c48c672bb780ce7b authored by Josh Poimboeuf on 18 May 2018, 20:10:34 UTC, committed by Ingo Molnar on 19 May 2018, 06:10:04 UTC
With the following commit: fd35c88b7417 ("objtool: Support GCC 8 switch tables") I added a "can't find switch jump table" warning, to stop covering up silent failures if add_switch_table() can't find anything. That warning found yet another bug in the objtool switch table detection logic. For cases 1 and 2 (as described in the comments of find_switch_table()), the find_symbol_containing() check doesn't adjust the offset for RIP-relative switch jumps. Incidentally, this bug was already fixed for case 3 with: 6f5ec2993b1f ("objtool: Detect RIP-relative switch table references") However, that commit missed the fix for cases 1 and 2. The different cases are now starting to look more and more alike. So fix the bug by consolidating them into a single case, by checking the original dynamic jump instruction in the case 3 loop. This also simplifies the code and makes it more robust against future switch table detection issues -- of which I'm sure there will be many... Switch table detection has been the most fragile area of objtool, by far. I long for the day when we'll have a GCC plugin for annotating switch tables. Linus asked me to delay such a plugin due to the flakiness of the plugin infrastructure in older versions of GCC, so this rickety code is what we're stuck with for now. At least the code is now a little simpler than it was. Reported-by: kbuild test robot <lkp@intel.com> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/f400541613d45689086329432f3095119ffbc328.1526674218.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 6f5ec29
Tip revision: 7dec80ccbe310fb7e225bf21c48c672bb780ce7b authored by Josh Poimboeuf on 18 May 2018, 20:10:34 UTC
objtool: Detect RIP-relative switch table references, part 2
objtool: Detect RIP-relative switch table references, part 2
Tip revision: 7dec80c
File | Mode | Size |
---|---|---|
Kconfig | -rw-r--r-- | 2.5 KB |
Makefile | -rw-r--r-- | 406 bytes |
budget.c | -rw-r--r-- | 23.8 KB |
commit.c | -rw-r--r-- | 20.5 KB |
compress.c | -rw-r--r-- | 6.7 KB |
crypto.c | -rw-r--r-- | 2.5 KB |
debug.c | -rw-r--r-- | 83.7 KB |
debug.h | -rw-r--r-- | 12.4 KB |
dir.c | -rw-r--r-- | 42.9 KB |
file.c | -rw-r--r-- | 46.8 KB |
find.c | -rw-r--r-- | 30.1 KB |
gc.c | -rw-r--r-- | 27.7 KB |
io.c | -rw-r--r-- | 33.4 KB |
ioctl.c | -rw-r--r-- | 5.8 KB |
journal.c | -rw-r--r-- | 47.4 KB |
key.h | -rw-r--r-- | 14.9 KB |
log.c | -rw-r--r-- | 19.3 KB |
lprops.c | -rw-r--r-- | 35.9 KB |
lpt.c | -rw-r--r-- | 58.6 KB |
lpt_commit.c | -rw-r--r-- | 51.7 KB |
master.c | -rw-r--r-- | 10.4 KB |
misc.c | -rw-r--r-- | 1.1 KB |
misc.h | -rw-r--r-- | 7.9 KB |
orphan.c | -rw-r--r-- | 24.7 KB |
recovery.c | -rw-r--r-- | 42.7 KB |
replay.c | -rw-r--r-- | 29.5 KB |
sb.c | -rw-r--r-- | 24.4 KB |
scan.c | -rw-r--r-- | 9.5 KB |
shrinker.c | -rw-r--r-- | 9.6 KB |
super.c | -rw-r--r-- | 60.7 KB |
tnc.c | -rw-r--r-- | 91.4 KB |
tnc_commit.c | -rw-r--r-- | 26.8 KB |
tnc_misc.c | -rw-r--r-- | 12.7 KB |
ubifs-media.h | -rw-r--r-- | 23.2 KB |
ubifs.h | -rw-r--r-- | 63.3 KB |
xattr.c | -rw-r--r-- | 18.2 KB |
Computing file changes ...