lkml.org 
[lkml]   [2006]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/10] 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 2d4f138..34fccf1 100644
    --- a/arch/i386/kernel/vmlinux.lds.S
    +++ b/arch/i386/kernel/vmlinux.lds.S
    @@ -45,6 +45,7 @@ SECTIONS
    __tracedata_end = .;

    /* writeable */
    + _sdata = .; /* Start of data section */
    .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */
    *(.data)
    CONSTRUCTORS
    @@ -156,6 +157,9 @@ #endif
    __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 b32346d..0884122 100644
    --- a/include/asm-i386/processor.h
    +++ b/include/asm-i386/processor.h
    @@ -731,4 +731,16 @@ extern unsigned long boot_option_idle_ov
    extern void enable_sep_cpu(void);
    extern int sysenter_setup(void);

    +#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 2833fa2..80b9451 100644
    --- a/include/asm-i386/thread_info.h
    +++ b/include/asm-i386/thread_info.h
    @@ -100,12 +100,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-07-11 00:15    [W:0.022 / U:126.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site