lkml.org 
[lkml]   [2006]   [Jun]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2.6.17-rc6 5/9] Add kmemleak support for i386
    Date
    From: Catalin Marinas <catalin.marinas@arm.com>

    This patch modifies the vmlinux.lds.S script and adds the backtrace support
    for i386 to be used with kmemleak.

    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    ---

    arch/i386/kernel/vmlinux.lds.S | 4 ++++
    include/asm-i386/processor.h | 12 ++++++++++++
    include/asm-i386/thread_info.h | 10 +++++++++-
    3 files changed, 25 insertions(+), 1 deletions(-)

    diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S
    index 8831303..370480e 100644
    --- a/arch/i386/kernel/vmlinux.lds.S
    +++ b/arch/i386/kernel/vmlinux.lds.S
    @@ -38,6 +38,7 @@ SECTIONS
    RODATA

    /* writeable */
    + _sdata = .; /* Start of data section */
    .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */
    *(.data)
    CONSTRUCTORS
    @@ -140,6 +141,9 @@ SECTIONS
    __per_cpu_start = .;
    .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
    __per_cpu_end = .;
    + __memleak_offsets_start = .;
    + .init.memleak_offsets : AT(ADDR(.init.memleak_offsets) - LOAD_OFFSET) { *(.init.memleak_offsets) }
    + __memleak_offsets_end = .;
    . = ALIGN(4096);
    __init_end = .;
    /* freed after init ends here */
    diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h
    index 805f0dc..9b6568a 100644
    --- a/include/asm-i386/processor.h
    +++ b/include/asm-i386/processor.h
    @@ -743,4 +743,16 @@ #else
    #define mcheck_init(c) do {} while(0)
    #endif

    +#ifdef CONFIG_FRAME_POINTER
    +static inline unsigned long arch_call_address(void *frame)
    +{
    + return *(unsigned long *) (frame + 4);
    +}
    +
    +static inline void *arch_prev_frame(void *frame)
    +{
    + return *(void **) frame;
    +}
    +#endif
    +
    #endif /* __ASM_I386_PROCESSOR_H */
    diff --git a/include/asm-i386/thread_info.h b/include/asm-i386/thread_info.h
    index 1f7d48c..7e7c508 100644
    --- a/include/asm-i386/thread_info.h
    +++ b/include/asm-i386/thread_info.h
    @@ -102,12 +102,20 @@ #define alloc_thread_info(tsk) \
    struct thread_info *ret; \
    \
    ret = kmalloc(THREAD_SIZE, GFP_KERNEL); \
    + memleak_ignore(ret); \
    if (ret) \
    memset(ret, 0, THREAD_SIZE); \
    ret; \
    })
    #else
    -#define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL)
    +#define alloc_thread_info(tsk) \
    + ({ \
    + struct thread_info *ret; \
    + \
    + ret = kmalloc(THREAD_SIZE, GFP_KERNEL); \
    + memleak_ignore(ret); \
    + ret; \
    + })
    #endif

    #define free_thread_info(info) kfree(info)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-06-11 13:25    [W:4.140 / U:0.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site