12 Jun, 2009
1 commit
-
It's theoretically possible that there are exception table entries
which point into the (freed) init text of modules. These could cause
future problems if other modules get loaded into that memory and cause
an exception as we'd see the wrong fixup. The only case I know of is
kvm-intel.ko (when CONFIG_CC_OPTIMIZE_FOR_SIZE=n).Amerigo fixed this long-standing FIXME in the x86 version, but this
patch is more general.This implements trim_init_extable(); most archs are simple since they
use the standard lib/extable.c sort code. Alpha and IA64 use relative
addresses in their fixups, so thier trimming is a slight variation.Sparc32 is unique; it doesn't seem to define ARCH_HAS_SORT_EXTABLE,
yet it defines its own sort_extable() which overrides the one in lib.
It doesn't sort, so we have to mark deleted entries instead of
actually trimming them.Inspired-by: Amerigo Wang
Signed-off-by: Rusty Russell
Cc: linux-alpha@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
07 Feb, 2008
1 commit
-
Actual code let compiler generates idiv instruction on x86.
Using a right shift is OK here and readable as well.
Before patch
10: 57 push %edi
11: 56 push %esi
12: 89 d6 mov %edx,%esi
14: 53 push %ebx
15: 89 c3 mov %eax,%ebx
17: eb 22 jmp 3b
19: 89 f0 mov %esi,%eax
1b: ba 02 00 00 00 mov $0x2,%edx
20: 29 d8 sub %ebx,%eax
22: 89 d7 mov %edx,%edi
24: c1 f8 03 sar $0x3,%eax
27: 99 cltd
28: f7 ff idiv %edi
2a: 8d 04 c3 lea (%ebx,%eax,8),%eax
2d: 39 08 cmp %ecx,(%eax)
...After patch
00000010 :
10: 53 push %ebx
11: 89 c3 mov %eax,%ebx
13: eb 18 jmp 2d
15: 89 d0 mov %edx,%eax
17: 29 d8 sub %ebx,%eax
19: c1 f8 04 sar $0x4,%eax
1c: 8d 04 c3 lea (%ebx,%eax,8),%eax
1f: 39 08 cmp %ecx,(%eax)
...Signed-off-by: Eric Dumazet
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds