Changes in / [571addd:1720cf9] in mainline


Ignore:
Files:
1 deleted
35 edited

Legend:

Unmodified
Added
Removed
  • HelenOS.config

    r571addd r1720cf9  
    498498@ "1152x720"
    499499@ "1152x864"
    500 @ "1280x720"
    501 @ "1280x800"
    502500@ "1280x960"
    503501@ "1280x1024"
     
    546544! CONFIG_BAREBONE (n/y)
    547545
    548 % Line debugging information
    549 ! [CONFIG_STRIP_BINARIES!=y] CONFIG_LINE_DEBUG (n/y)
  • boot/Makefile.build

    r571addd r1720cf9  
    6161        GCC_CFLAGS += -Werror
    6262        ICC_CFLAGS += -Werror
    63 endif
    64 
    65 ifeq ($(CONFIG_LINE_DEBUG),y)
    66         GCC_CFLAGS += -g
    67         ICC_CFLAGS += -g
    68         SUNCC_CFLAGS += -g
    69         CLANG_CFLAGS += -g
    7063endif
    7164
  • boot/arch/arm32/Makefile.inc

    r571addd r1720cf9  
    5454        $(COMPS_C) \
    5555        genarch/src/division.c \
    56         generic/src/memstr.c \
    5756        generic/src/printf_core.c \
    5857        generic/src/vprintf.c \
  • boot/arch/arm32/src/asm.S

    r571addd r1720cf9  
    3535.global boot_stack
    3636.global halt
     37.global memcpy
    3738.global jump_to_kernel
    3839
     
    5455        b halt
    5556
     57memcpy:
     58        add r3, r1, #3
     59        bic r3, r3, #3
     60        cmp r1, r3
     61        stmdb sp!, {r4, r5, lr}
     62        mov r5, r0
     63        beq 4f
     64       
     65        1:
     66                cmp r2, #0
     67                movne ip, #0
     68                beq 3f
     69       
     70        2:
     71                ldrb r3, [ip, r1]
     72                strb r3, [ip, r0]
     73                add ip, ip, #1
     74                cmp ip, r2
     75                bne 2b
     76       
     77        3:
     78                mov r0, r5
     79                ldmia sp!, {r4, r5, pc}
     80       
     81        4:
     82                add r3, r0, #3
     83                bic r3, r3, #3
     84                cmp r0, r3
     85                bne 1b
     86                movs r4, r2, lsr #2
     87                moveq lr, r4
     88                beq 6f
     89                mov lr, #0
     90                mov ip, lr
     91       
     92        5:
     93                ldr r3, [ip, r1]
     94                add lr, lr, #1
     95                cmp lr, r4
     96                str r3, [ip, r0]
     97                add ip, ip, #4
     98                bne 5b
     99       
     100        6:
     101                ands r4, r2, #3
     102                beq 3b
     103                mov r3, lr, lsl #2
     104                add r0, r3, r0
     105                add ip, r3, r1
     106                mov r2, #0
     107       
     108        7:
     109                ldrb r3, [r2, ip]
     110                strb r3, [r2, r0]
     111                add r2, r2, #1
     112                cmp r2, r4
     113                bne 7b
     114                b 3b
     115
    56116jump_to_kernel:
    57117        #
  • boot/arch/ia64/Makefile.inc

    r571addd r1720cf9  
    4949        genarch/src/division.c \
    5050        generic/src/balloc.c \
    51         generic/src/memstr.c \
    5251        generic/src/printf_core.c \
    5352        generic/src/vprintf.c \
  • boot/arch/ia64/src/asm.S

    r571addd r1720cf9  
    11#
    22# Copyright (c) 2006 Martin Decky
    3 # Copyright (c) 2006 Jakub Jermar
     3# Copyright (c) 2006 Jakub Jermar 
    44# All rights reserved.
    55#
     
    3939        br halt
    4040
     41memcpy:
     42        alloc loc0 = ar.pfs, 3, 1, 0, 0
     43
     44        adds r14 = 7, in1
     45        mov r2 = ar.lc
     46        mov r8 = in0 ;;
     47        and r14 = -8, r14 ;;
     48        cmp.ne p6, p7 = r14, in1
     49(p7)    br.cond.dpnt 3f ;;
     500:
     51        cmp.ne p6, p7 = 0, in2
     52(p7)    br.cond.dpnt 2f ;;
     53(p6)    adds r14 = -1, in2
     54(p6)    mov r16 = r0
     55(p6)    mov r17 = r0 ;;
     56(p6)    mov ar.lc = r14
     571:
     58        add r14 = r16, in1
     59        add r15 = r16, in0
     60        adds r17 = 1, r17 ;;
     61        ld1 r14 = [r14]
     62        mov r16 = r17 ;;
     63        st1 [r15] = r14
     64        br.cloop.sptk.few 1b ;;
     652:
     66        mov ar.lc = r2
     67        mov ar.pfs = loc0
     68        br.ret.sptk.many rp
     693:
     70        adds r14 = 7, in0 ;;
     71        and r14 = -8, r14 ;;
     72        cmp.eq p6, p7 = r14, in0
     73(p7)    br.cond.dptk 0b
     74        shr.u r18 = in2, 3 ;;
     75        cmp.ne p6, p7 = 0, r18
     76(p7)    br.cond.dpnt 5f ;;
     77(p6)    adds r14 = -1, r18
     78(p6)    mov r16 = r0
     79(p6)    mov r17 = r0 ;;
     80(p6)    mov ar.lc = r14
     814:
     82        shladd r14 = r16, 3, r0
     83        adds r16 = 1, r17 ;;
     84        add r15 = in1, r14
     85        add r14 = in0, r14
     86        mov r17 = r16 ;;
     87        ld8 r15 = [r15] ;;
     88        st8 [r14] = r15
     89        br.cloop.sptk.few 4b
     905:
     91        and r15 = 7, in2
     92        shladd r14 = r18, 3, r0
     93        mov r16 = r0
     94        mov r18 = r0 ;;
     95        cmp.eq p6, p7 = 0, r15
     96        add in0 = r14, in0
     97        adds r15 = -1, r15
     98        add r17 = r14, in1
     99(p6)    br.cond.dpnt 2b ;;
     100        mov ar.lc = r15
     1016:
     102        add r14 = r16, r17
     103        add r15 = r16, in0
     104        adds r16 = 1, r18 ;;
     105        ld1 r14 = [r14]
     106        mov r18 = r16 ;;
     107        st1 [r15] = r14
     108        br.cloop.sptk.few 6b ;;
     109        mov ar.lc = r2
     110        mov ar.pfs = loc0
     111        br.ret.sptk.many rp
     112
    41113jump_to_kernel:
    42114        alloc loc0 = ar.pfs, 1, 1, 0, 0
  • boot/arch/mips32/Makefile.inc

    r571addd r1720cf9  
    6161        genarch/src/division.c \
    6262        genarch/src/multiplication.c \
    63         generic/src/memstr.c \
    6463        generic/src/printf_core.c \
    6564        generic/src/vprintf.c \
  • boot/arch/mips32/src/asm.S

    r571addd r1720cf9  
    3636.global start
    3737.global halt
     38.global memcpy
    3839.global jump_to_kernel
    3940
     
    125126        j halt
    126127        nop
     128
     129memcpy:
     130        addiu $v0, $a1, 3
     131        li $v1, -4
     132        and $v0, $v0, $v1
     133        beq $a1, $v0, 3f
     134        move $t0, $a0
     135        move $t2, $a0
     136       
     137        0:
     138                beq $a2, $zero, 2f
     139                move $a3, $zero
     140       
     141        1:
     142                addu $v0, $a1, $a3
     143                lbu $a0, 0($v0)
     144                addu $v1, $t0, $a3
     145                addiu $a3, $a3, 1
     146                bne $a3, $a2, 1b
     147                sb $a0, 0($v1)
     148       
     149        2:
     150                jr $ra
     151                move $v0, $t2
     152       
     153        3:
     154                addiu $v0, $a0, 3
     155                and $v0, $v0, $v1
     156                bne $a0, $v0, 0b
     157                srl $t1, $a2, 2
     158               
     159                beq $t1, $zero, 5f
     160                move $a3, $zero
     161               
     162                move $a3, $zero
     163                move $a0, $zero
     164       
     165        4:
     166                addu $v0, $a1, $a0
     167                lw $v1, 0($v0)
     168                addiu $a3, $a3, 1
     169                addu $v0, $t0, $a0
     170                sw $v1, 0($v0)
     171                bne $a3, $t1, 4b
     172                addiu $a0, $a0, 4
     173       
     174        5:
     175                andi $a2, $a2, 0x3
     176                beq $a2, $zero, 2b
     177                nop
     178               
     179                sll $v0, $a3, 2
     180                addu $t1, $v0, $t0
     181                move $a3, $zero
     182                addu $t0, $v0, $a1
     183       
     184        6:
     185                addu $v0, $t0, $a3
     186                lbu $a0, 0($v0)
     187                addu $v1, $t1, $a3
     188                addiu $a3, $a3, 1
     189                bne $a3, $a2, 6b
     190                sb $a0, 0($v1)
     191               
     192                jr $ra
     193                move $v0, $t2
    127194
    128195jump_to_kernel:
  • boot/arch/ppc32/Makefile.inc

    r571addd r1720cf9  
    5656        genarch/src/multiplication.c \
    5757        generic/src/balloc.c \
    58         generic/src/memstr.c \
    5958        generic/src/printf_core.c \
    6059        generic/src/vprintf.c \
  • boot/arch/ppc32/src/asm.S

    r571addd r1720cf9  
    6060.global start
    6161.global halt
     62.global memcpy
    6263.global jump_to_kernel
    6364.global real_mode
     
    7778halt:
    7879        b halt
     80
     81memcpy:
     82        srwi. r7, r5, 3
     83        addi r6, r3, -4
     84        addi r4, r4, -4
     85        beq 2f
     86       
     87        andi. r0, r6, 3
     88        mtctr r7
     89        bne 5f
     90       
     91        1:
     92                lwz r7, 4(r4)
     93                lwzu r8, 8(r4)
     94                stw r7, 4(r6)
     95                stwu r8, 8(r6)
     96                bdnz 1b
     97               
     98                andi. r5, r5, 7
     99       
     100        2:
     101                cmplwi 0, r5, 4
     102                blt 3f
     103               
     104                lwzu r0, 4(r4)
     105                addi r5, r5, -4
     106                stwu r0, 4(r6)
     107       
     108        3:
     109                cmpwi 0, r5, 0
     110                beqlr
     111                mtctr r5
     112                addi r4, r4, 3
     113                addi r6, r6, 3
     114       
     115        4:
     116                lbzu r0, 1(r4)
     117                stbu r0, 1(r6)
     118                bdnz 4b
     119                blr
     120       
     121        5:
     122                subfic r0, r0, 4
     123                mtctr r0
     124       
     125        6:
     126                lbz r7, 4(r4)
     127                addi r4, r4, 1
     128                stb r7, 4(r6)
     129                addi r6, r6, 1
     130                bdnz 6b
     131                subf r5, r0, r5
     132                rlwinm. r7, r5, 32-3, 3, 31
     133                beq 2b
     134                mtctr r7
     135                b 1b
    79136
    80137jump_to_kernel:
  • boot/arch/sparc64/Makefile.inc

    r571addd r1720cf9  
    5454        genarch/src/ofw_tree.c \
    5555        generic/src/balloc.c \
    56         generic/src/memstr.c \
    5756        generic/src/printf_core.c \
    5857        generic/src/vprintf.c \
  • boot/arch/sparc64/src/asm.S

    r571addd r1720cf9  
    4242.global start
    4343.global halt
     44.global memcpy
    4445.global jump_to_kernel
    4546
     
    9798        ba %xcc, halt
    9899        nop
     100
     101memcpy:
     102        ! Save dst
     103       
     104        mov %o0, %o3
     105        add %o1, 7, %g1
     106        and %g1, -8, %g1
     107        cmp %o1, %g1
     108        be,pn %xcc, 3f
     109        add %o0, 7, %g1
     110        mov 0, %g3
     111       
     112        0:
     113                brz,pn %o2, 2f
     114                mov 0, %g2
     115       
     116        1:
     117                ldub [%g3 + %o1], %g1
     118                add %g2, 1, %g2
     119                cmp %o2, %g2
     120                stb %g1, [%g3 + %o0]
     121                bne,pt %xcc, 1b
     122                mov %g2, %g3
     123       
     124        2:
     125                ! Exit point
     126               
     127                jmp %o7 + 8
     128                mov %o3, %o0
     129       
     130        3:
     131                and %g1, -8, %g1
     132                cmp %o0, %g1
     133                bne,pt %xcc, 0b
     134                mov 0, %g3
     135                srlx %o2, 3, %g4
     136                brz,pn %g4, 5f
     137                mov 0, %g5
     138       
     139        4:
     140                sllx %g3, 3, %g2
     141                add %g5, 1, %g3
     142                ldx [%o1 + %g2], %g1
     143                mov %g3, %g5
     144                cmp %g4, %g3
     145                bne,pt %xcc, 4b
     146                stx %g1, [%o0 + %g2]
     147       
     148        5:
     149                and %o2, 7, %o2
     150                brz,pn %o2, 2b
     151                sllx %g4, 3, %g1
     152                mov 0, %g2
     153                add %g1, %o0, %o0
     154                add %g1, %o1, %g4
     155                mov 0, %g3
     156       
     157        6:
     158                ldub [%g2 + %g4], %g1
     159                stb %g1, [%g2 + %o0]
     160                add %g3, 1, %g2
     161                cmp %o2, %g2
     162                bne,pt %xcc, 6b
     163                mov %g2, %g3
     164       
     165        ! Exit point
     166       
     167        jmp %o7 + 8
     168        mov %o3, %o0
    99169
    100170jump_to_kernel:
  • kernel/Makefile

    r571addd r1720cf9  
    120120ifeq ($(CONFIG_LTO),y)
    121121        GCC_CFLAGS += -flto
    122 endif
    123 
    124 ifeq ($(CONFIG_LINE_DEBUG),y)
    125         GCC_CFLAGS += -g
    126         ICC_CFLAGS += -g
    127         SUNCC_CFLAGS += -g
    128         CLANG_CFLAGS += -g
    129122endif
    130123
     
    408401
    409402$(DISASM): $(RAW)
    410 ifeq ($(CONFIG_LINE_DEBUG),y)
    411         $(OBJDUMP) -d -S $< > $@
    412 else
    413403        $(OBJDUMP) -d $< > $@
    414 endif
    415404
    416405$(RAW): $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(SYMTAB_OBJECTS)
  • kernel/arch/abs32le/src/debug/stacktrace.c

    r571addd r1720cf9  
    3737#include <typedefs.h>
    3838
    39 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     39bool kernel_frame_pointer_validate(uintptr_t fp)
    4040{
    4141        return true;
    4242}
    4343
    44 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     44bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4545{
    4646        return true;
    4747}
    4848
    49 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     49bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5050{
    5151        return true;
    5252}
    5353
    54 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     54bool uspace_frame_pointer_validate(uintptr_t fp)
    5555{
    5656        return true;
    5757}
    5858
    59 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     59bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6060{
    6161        return true;
    6262}
    6363
    64 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     64bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    6565{
    6666        return true;
  • kernel/arch/amd64/_link.ld.in

    r571addd r1720cf9  
    5353        }
    5454       
    55 #ifdef CONFIG_LINE_DEBUG
    56         .comment 0 : { *(.comment); }
    57         .debug_abbrev 0 : { *(.debug_abbrev); }
    58         .debug_aranges 0 : { *(.debug_aranges); }
    59         .debug_info 0 : { *(.debug_info); }
    60         .debug_line 0 : { *(.debug_line); }
    61         .debug_loc 0 : { *(.debug_loc); }
    62         .debug_pubnames 0 : { *(.debug_pubnames); }
    63         .debug_pubtypes 0 : { *(.debug_pubtypes); }
    64         .debug_ranges 0 : { *(.debug_ranges); }
    65         .debug_str 0 : { *(.debug_str); }
    66 #endif
    67        
    6855        /DISCARD/ : {
    6956                *(*);
  • kernel/arch/amd64/src/debug/stacktrace.c

    r571addd r1720cf9  
    4040#define FRAME_OFFSET_RA       1
    4141
    42 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     42bool kernel_frame_pointer_validate(uintptr_t fp)
    4343{
    44         return ctx->fp != 0;
     44        return fp != 0;
    4545}
    4646
    47 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     47bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4848{
    49         uint64_t *stack = (void *) ctx->fp;
     49        uint64_t *stack = (void *) fp;
    5050        *prev = stack[FRAME_OFFSET_FP_PREV];
    5151       
     
    5353}
    5454
    55 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     55bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5656{
    57         uint64_t *stack = (void *) ctx->fp;
     57        uint64_t *stack = (void *) fp;
    5858        *ra = stack[FRAME_OFFSET_RA];
    5959       
     
    6161}
    6262
    63 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     63bool uspace_frame_pointer_validate(uintptr_t fp)
    6464{
    65         return ctx->fp != 0;
     65        return fp != 0;
    6666}
    6767
    68 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     68bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6969{
    7070        return !copy_from_uspace((void *) prev,
    71             (uint64_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
     71            (uint64_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    7272}
    7373
    74 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     74bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    7575{
    76         return !copy_from_uspace((void *) ra,
    77             (uint64_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
     76        return !copy_from_uspace((void *) ra, (uint64_t *) fp + FRAME_OFFSET_RA,
     77            sizeof(*ra));
    7878}
    7979
  • kernel/arch/arm32/src/debug/stacktrace.c

    r571addd r1720cf9  
    4040#define FRAME_OFFSET_RA         -1
    4141
    42 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     42bool kernel_frame_pointer_validate(uintptr_t fp)
    4343{
    44         return ctx->fp != 0;
     44        return fp != 0;
    4545}
    4646
    47 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     47bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4848{
    49         uint32_t *stack = (void *) ctx->fp;
     49        uint32_t *stack = (void *) fp;
    5050
    5151        *prev = stack[FRAME_OFFSET_FP_PREV];
     
    5353}
    5454
    55 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     55bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5656{
    57         uint32_t *stack = (void *) ctx->fp;
     57        uint32_t *stack = (void *) fp;
    5858
    5959        *ra = stack[FRAME_OFFSET_RA];
     
    6161}
    6262
    63 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     63bool uspace_frame_pointer_validate(uintptr_t fp)
    6464{
    65         return ctx->fp != 0;
     65        return fp != 0;
    6666}
    6767
    68 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     68bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6969{
    7070        return !copy_from_uspace((void *) prev,
    71             (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
     71            (uint32_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    7272}
    7373
    74 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     74bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    7575{
    76         return !copy_from_uspace((void *) ra,
    77             (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
     76        return !copy_from_uspace((void *) ra, (uint32_t *) fp + FRAME_OFFSET_RA,
     77            sizeof(*ra));
    7878}
    7979
  • kernel/arch/ia32/src/debug/stacktrace.c

    r571addd r1720cf9  
    4040#define FRAME_OFFSET_RA         1
    4141
    42 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     42bool kernel_frame_pointer_validate(uintptr_t fp)
    4343{
    44         return ctx->fp != 0;
     44        return fp != 0;
    4545}
    4646
    47 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     47bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4848{
    49         uint32_t *stack = (void *) ctx->fp;
     49        uint32_t *stack = (void *) fp;
    5050        *prev = stack[FRAME_OFFSET_FP_PREV];
    5151        return true;
    5252}
    5353
    54 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     54bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5555{
    56         uint32_t *stack = (void *) ctx->fp;
     56        uint32_t *stack = (void *) fp;
    5757        *ra = stack[FRAME_OFFSET_RA];
    5858        return true;
    5959}
    6060
    61 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     61bool uspace_frame_pointer_validate(uintptr_t fp)
    6262{
    63         return ctx->fp != 0;
     63        return fp != 0;
    6464}
    6565
    66 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     66bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6767{
    6868        return !copy_from_uspace((void *) prev,
    69             (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
     69            (uint32_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    7070}
    7171
    72 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     72bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    7373{
    74         return !copy_from_uspace((void *) ra,
    75             (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
     74        return !copy_from_uspace((void *) ra, (uint32_t *) fp + FRAME_OFFSET_RA,
     75            sizeof(*ra));
    7676}
    7777
  • kernel/arch/ia32/src/mm/frame.c

    r571addd r1720cf9  
    131131                        if (last_frame < ALIGN_UP(new_base + new_size, FRAME_SIZE))
    132132                                last_frame = ALIGN_UP(new_base + new_size, FRAME_SIZE);
    133                 } else if ((e820table[i].type == MEMMAP_MEMORY_ACPI) ||
    134                     (e820table[i].type == MEMMAP_MEMORY_NVS)) {
     133                }
     134               
     135                if (e820table[i].type == MEMMAP_MEMORY_RESERVED) {
     136                        /* To be safe, make the reserved zone possibly larger */
     137                        uint64_t new_base = ALIGN_DOWN(base, FRAME_SIZE);
     138                        uint64_t new_size = ALIGN_UP(size + (base - new_base),
     139                            FRAME_SIZE);
     140                       
     141                        zone_create(ADDR2PFN(new_base), SIZE2FRAMES(new_size), 0,
     142                            ZONE_RESERVED);
     143                }
     144               
     145                if (e820table[i].type == MEMMAP_MEMORY_ACPI) {
    135146                        /* To be safe, make the firmware zone possibly larger */
    136147                        uint64_t new_base = ALIGN_DOWN(base, FRAME_SIZE);
     
    140151                        zone_create(ADDR2PFN(new_base), SIZE2FRAMES(new_size), 0,
    141152                            ZONE_FIRMWARE);
    142                 } else {
    143                         /* To be safe, make the reserved zone possibly larger */
    144                         uint64_t new_base = ALIGN_DOWN(base, FRAME_SIZE);
    145                         uint64_t new_size = ALIGN_UP(size + (base - new_base),
    146                             FRAME_SIZE);
    147                        
    148                         zone_create(ADDR2PFN(new_base), SIZE2FRAMES(new_size), 0,
    149                             ZONE_RESERVED);
    150153                }
    151154        }
     
    200203#ifdef CONFIG_SMP
    201204                /* Reserve AP real mode bootstrap memory */
    202                 frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH,
     205                frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH, 
    203206                    (hardcoded_unmapped_ktext_size +
    204207                    hardcoded_unmapped_kdata_size) >> FRAME_WIDTH);
  • kernel/arch/ia64/src/debug/stacktrace.c

    r571addd r1720cf9  
    3737#include <typedefs.h>
    3838
    39 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     39bool kernel_frame_pointer_validate(uintptr_t fp)
    4040{
    4141        return false;
    4242}
    4343
    44 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     44bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4545{
    4646        return false;
    4747}
    4848
    49 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     49bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5050{
    5151        return false;
    5252}
    5353
    54 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     54bool uspace_frame_pointer_validate(uintptr_t fp)
    5555{
    5656        return false;
    5757}
    5858
    59 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     59bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6060{
    6161        return false;
    6262}
    6363
    64 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     64bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    6565{
    6666        return false;
  • kernel/arch/mips32/include/debugger.h

    r571addd r1720cf9  
    6868extern bpinfo_t breakpoints[BKPOINTS_MAX];
    6969
    70 extern bool is_jump(unative_t);
    71 
    7270extern void debugger_init(void);
    7371extern void debugger_bpoint(istate_t *);
  • kernel/arch/mips32/src/debug/stacktrace.c

    r571addd r1720cf9  
    3636#include <syscall/copy.h>
    3737#include <typedefs.h>
    38 #include <arch/debugger.h>
    39 #include <print.h>
    4038
    41 #define R0      0U
    42 #define SP      29U
    43 #define RA      31U
    44 
    45 #define OP_SHIFT        26
    46 #define RS_SHIFT        21
    47 #define RT_SHIFT        16
    48 #define RD_SHIFT        11
    49 
    50 #define HINT_SHIFT      6
    51 #define BASE_SHIFT      RS_SHIFT
    52 #define IMM_SHIFT       0
    53 #define OFFSET_SHIFT    IMM_SHIFT
    54 
    55 #define RS_MASK         (0x1f << RS_SHIFT)
    56 #define RT_MASK         (0x1f << RT_SHIFT)
    57 #define RD_MASK         (0x1f << RD_SHIFT)
    58 #define HINT_MASK       (0x1f << HINT_SHIFT)
    59 #define BASE_MASK       RS_MASK
    60 #define IMM_MASK        (0xffff << IMM_SHIFT)
    61 #define OFFSET_MASK     IMM_MASK       
    62 
    63 #define RS_GET(inst)            (((inst) & RS_MASK) >> RS_SHIFT)
    64 #define RD_GET(inst)            (((inst) & RD_MASK) >> RD_SHIFT)
    65 #define IMM_GET(inst)           (int16_t)(((inst) & IMM_MASK) >> IMM_SHIFT)
    66 #define BASE_GET(inst)          RS_GET(inst)
    67 #define OFFSET_GET(inst)        IMM_GET(inst)   
    68 
    69 #define ADDU_R_SP_R0_TEMPL \
    70         ((0x0 << OP_SHIFT) | (SP << RS_SHIFT) | (R0 << RT_SHIFT) | 0x21)
    71 #define ADDU_SP_R_R0_TEMPL \
    72         ((0x0 << OP_SHIFT) | (SP << RD_SHIFT) | (R0 << RT_SHIFT) | 0x21)
    73 #define ADDI_SP_SP_IMM_TEMPL \
    74         ((0x8 << OP_SHIFT) | (SP << RS_SHIFT) | (SP << RT_SHIFT))
    75 #define ADDIU_SP_SP_IMM_TEMPL \
    76         ((0x9 << OP_SHIFT) | (SP << RS_SHIFT) | (SP << RT_SHIFT))
    77 #define JR_RA_TEMPL \
    78         ((0x0 << OP_SHIFT) | (RA << RS_SHIFT) | (0x0 << HINT_SHIFT) | 0x8)
    79 #define SW_RA_TEMPL \
    80         ((0x2b << OP_SHIFT) | (RA << RT_SHIFT))
    81 
    82 #define IS_ADDU_R_SP_R0(inst) \
    83         (((inst) & ~RD_MASK) == ADDU_R_SP_R0_TEMPL)
    84 #define IS_ADDU_SP_R_R0(inst) \
    85         (((inst) & ~RS_MASK) == ADDU_SP_R_R0_TEMPL)
    86 #define IS_ADDI_SP_SP_IMM(inst) \
    87         (((inst) & ~IMM_MASK) == ADDI_SP_SP_IMM_TEMPL)
    88 #define IS_ADDIU_SP_SP_IMM(inst) \
    89         (((inst) & ~IMM_MASK) == ADDIU_SP_SP_IMM_TEMPL)
    90 #define IS_JR_RA(inst) \
    91         (((inst) & ~HINT_MASK) == JR_RA_TEMPL)
    92 #define IS_SW_RA(inst) \
    93         (((inst) & ~(BASE_MASK | OFFSET_MASK)) == SW_RA_TEMPL)
    94 
    95 extern char ktext_start;
    96 extern char ktext_end;
    97 
    98 static bool
    99 scan(stack_trace_context_t *ctx, uintptr_t *prev_fp, uintptr_t *prev_ra)
    100 {
    101         uint32_t *inst = (void *) ctx->pc;
    102         bool has_fp = false;
    103         size_t frame_size;
    104         unsigned int fp = SP;
    105 
    106         do {
    107                 inst--;
    108 #if 0
    109                 /*
    110                  * This is one of the situations in which the theory (ABI) does
    111                  * not meet the practice (GCC). GCC simply does not place the
    112                  * JR $ra instruction as dictated by the ABI, rendering the
    113                  * official stack tracing algorithm somewhat unapplicable.
    114                  */
    115 
    116                 if (IS_ADDU_R_SP_R0(*inst)) {
    117                         uint32_t *cur;
    118                         fp = RD_GET(*inst);
    119                         /*
    120                          * We have a candidate for frame pointer.
    121                          */
    122                        
    123                         /* Seek to the end of this function. */
    124                         for (cur = inst + 1; !IS_JR_RA(*cur); cur++)
    125                                 ;
    126                         /* Scan the last basic block */
    127                         for (cur--; !is_jump(*(cur - 1)); cur--) {
    128                                 if (IS_ADDU_SP_R_R0(*cur) &&
    129                                     (fp == RS_GET(*cur))) {
    130                                         has_fp = true;
    131                                 }
    132                         }
    133                         continue;
    134                 }
    135                
    136                 if (IS_JR_RA(*inst)) {
    137                         if (!ctx->istate)
    138                                 return false;
    139                         /*
    140                          * No stack frame has been allocated yet.
    141                          * Use the values stored in istate.
    142                          */
    143                         if (prev_fp)
    144                                 *prev_fp = ctx->istate->sp;
    145                         if (prev_ra)
    146                                 *prev_ra = ctx->istate->ra - 8;
    147                         ctx->istate = NULL;
    148                         return true;
    149                 }
    150 #endif
    151 
    152         } while ((!IS_ADDIU_SP_SP_IMM(*inst) && !IS_ADDI_SP_SP_IMM(*inst)) ||
    153             (IMM_GET(*inst) >= 0));
    154        
    155         /*
    156          * We are at the instruction which allocates the space for the current
    157          * stack frame.
    158          */
    159         frame_size = -IMM_GET(*inst);
    160         if (prev_fp)
    161                 *prev_fp = ctx->fp + frame_size;
    162 
    163         /*
    164          * Scan the first basic block for the occurrence of
    165          * SW $ra, OFFSET($base).
    166          */
    167         for (inst++; !is_jump(*(inst - 1)) && (uintptr_t) inst < ctx->pc;
    168             inst++) {
    169                 if (IS_SW_RA(*inst)) {
    170                         unsigned int base = BASE_GET(*inst);
    171                         int16_t offset = OFFSET_GET(*inst);
    172 
    173                         if (base == SP || (has_fp && base == fp)) {
    174                                 uint32_t *addr = (void *) (ctx->fp + offset);
    175                                
    176                                 if (offset % 4 != 0)
    177                                         return false;
    178                                 /* cannot store below current stack pointer */
    179                                 if (offset < 0)
    180                                         return false;
    181                                 /* too big offsets are suspicious */
    182                                 if (offset > 32 * 4)
    183                                         return false;
    184 
    185                                 if (prev_ra)
    186                                         *prev_ra = *addr;
    187                                 return true;
    188                         }
    189                 }
    190         }
    191 
    192         /*
    193          * The first basic block does not save the return address or saves it
    194          * after ctx->pc, which means that the correct value is in istate.
    195          */
    196         if (prev_ra) {
    197                 if (!ctx->istate)
    198                         return false;
    199                 *prev_ra = ctx->istate->ra - 8;
    200                 ctx->istate = NULL;
    201         }
    202         return true;
    203 }
    204 
    205 
    206 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
    207 {
    208         return !((ctx->fp == 0) || ((ctx->fp % 8) != 0) ||
    209             (ctx->pc % 4 != 0) || (ctx->pc < (uintptr_t) &ktext_start) ||
    210             (ctx->pc >= (uintptr_t) &ktext_end));
    211 }
    212 
    213 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
    214 {
    215         return scan(ctx, prev, NULL);
    216 }
    217 
    218 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
    219 {
    220         return scan(ctx, NULL, ra);
    221 }
    222 
    223 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     39bool kernel_frame_pointer_validate(uintptr_t fp)
    22440{
    22541        return false;
    22642}
    22743
    228 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     44bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    22945{
    23046        return false;
    23147}
    23248
    233 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     49bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
     50{
     51        return false;
     52}
     53
     54bool uspace_frame_pointer_validate(uintptr_t fp)
     55{
     56        return false;
     57}
     58
     59bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
     60{
     61        return false;
     62}
     63
     64bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    23465{
    23566        return false;
  • kernel/arch/mips32/src/debug/stacktrace_asm.S

    r571addd r1720cf9  
    3737frame_pointer_get:
    3838        j $ra
    39         move $v0, $sp
     39        xor $v0, $v0
    4040
    4141program_counter_get:
    4242        j $ra
    43         move $v0, $ra
     43        xor $v0, $v0
  • kernel/arch/mips32/src/debugger.c

    r571addd r1720cf9  
    134134 *
    135135 */
    136 bool is_jump(unative_t instr)
     136static bool is_jump(unative_t instr)
    137137{
    138138        unsigned int i;
  • kernel/arch/ppc32/src/debug/stacktrace.c

    r571addd r1720cf9  
    4040#define FRAME_OFFSET_RA       1
    4141
    42 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     42bool kernel_frame_pointer_validate(uintptr_t fp)
    4343{
    44         return ctx->fp != 0;
     44        return fp != 0;
    4545}
    4646
    47 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     47bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4848{
    49         uint32_t *stack = (void *) ctx->fp;
     49        uint32_t *stack = (void *) fp;
    5050        *prev = stack[FRAME_OFFSET_FP_PREV];
    5151        return true;
    5252}
    5353
    54 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     54bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5555{
    56         uint32_t *stack = (void *) ctx->fp;
     56        uint32_t *stack = (void *) fp;
    5757        *ra = stack[FRAME_OFFSET_RA];
    5858        return true;
    5959}
    6060
    61 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     61bool uspace_frame_pointer_validate(uintptr_t fp)
    6262{
    63         return ctx->fp != 0;
     63        return fp != 0;
    6464}
    6565
    66 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     66bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6767{
    6868        return !copy_from_uspace((void *) prev,
    69             (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
     69            (uint32_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    7070}
    7171
    72 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     72bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    7373{
    74         return !copy_from_uspace((void *) ra,
    75             (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
     74        return !copy_from_uspace((void *) ra, (uint32_t *) fp + FRAME_OFFSET_RA,
     75            sizeof(*ra));
    7676}
    7777
  • kernel/arch/sparc64/src/debug/stacktrace.c

    r571addd r1720cf9  
    5050extern void alloc_window_and_flush(void);
    5151
    52 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
     52bool kernel_frame_pointer_validate(uintptr_t fp)
    5353{
    5454        uintptr_t kstack;
     
    6363        kstack -= PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE;
    6464
    65         if (THREAD && (ctx->fp == kstack))
     65        if (THREAD && (fp == kstack))
    6666                return false;
    67         return ctx->fp != 0;
     67        return fp != 0;
    6868}
    6969
    70 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     70bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    7171{
    72         uint64_t *stack = (void *) ctx->fp;
     72        uint64_t *stack = (void *) fp;
    7373        alloc_window_and_flush();
    7474        *prev = stack[FRAME_OFFSET_FP_PREV] + STACK_BIAS;
     
    7676}
    7777
    78 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
     78bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    7979{
    80         uint64_t *stack = (void *) ctx->fp;
     80        uint64_t *stack = (void *) fp;
    8181        alloc_window_and_flush();
    8282        *ra = stack[FRAME_OFFSET_RA];
     
    8484}
    8585
    86 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     86bool uspace_frame_pointer_validate(uintptr_t fp)
    8787{
    8888        return false;
    8989}
    9090
    91 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     91bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    9292{
    9393        return false;
    9494}
    9595
    96 bool uspace_return_address_get(stack_trace_context_t *ctx , uintptr_t *ra)
     96bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    9797{
    9898        return false;
  • kernel/generic/include/macros.h

    r571addd r1720cf9  
    4747 * @param s2  Start address of the second interval.
    4848 * @param sz2 Size of the second interval.
    49  *
    5049 */
    51 NO_TRACE static inline int overlaps(uint64_t s1, uint64_t sz1, uint64_t s2,
    52     uint64_t sz2)
     50NO_TRACE static inline int overlaps(uintptr_t s1, size_t sz1, uintptr_t s2,
     51    size_t sz2)
    5352{
    54         uint64_t e1 = s1 + sz1;
    55         uint64_t e2 = s2 + sz2;
     53        uintptr_t e1 = s1 + sz1;
     54        uintptr_t e2 = s2 + sz2;
    5655       
    5756        return ((s1 < e2) && (s2 < e1));
    58 }
    59 
    60 /** Return true if the second interval is within the first interval.
    61  *
    62  * @param s1  Start address of the first interval.
    63  * @param sz1 Size of the first interval.
    64  * @param s2  Start address of the second interval.
    65  * @param sz2 Size of the second interval.
    66  *
    67  */
    68 NO_TRACE static inline int iswithin(uint64_t s1, uint64_t sz1, uint64_t s2,
    69     uint64_t sz2)
    70 {
    71         uint64_t e1 = s1 + sz1;
    72         uint64_t e2 = s2 + sz2;
    73        
    74         return ((s1 <= s2) && (e1 >= e2));
    7557}
    7658
     
    9274
    9375/* Compute overlapping of physical addresses */
    94 #define PA_OVERLAPS(x, szx, y, szy) \
     76#define PA_overlaps(x, szx, y, szy) \
    9577        overlaps(KA2PA((x)), (szx), KA2PA((y)), (szy))
    9678
  • kernel/generic/include/stacktrace.h

    r571addd r1720cf9  
    4242
    4343typedef struct {
    44         uintptr_t fp;
    45         uintptr_t pc;
    46         struct istate *istate;
    47 } stack_trace_context_t;
    48 
    49 typedef struct {
    50         bool (* stack_trace_context_validate)(stack_trace_context_t *);
    51         bool (* frame_pointer_prev)(stack_trace_context_t *, uintptr_t *);
    52         bool (* return_address_get)(stack_trace_context_t *, uintptr_t *);
     44        bool (* frame_pointer_validate)(uintptr_t);
     45        bool (* frame_pointer_prev)(uintptr_t, uintptr_t *);
     46        bool (* return_address_get)(uintptr_t, uintptr_t *);
    5347        bool (* symbol_resolve)(uintptr_t, const char **, uintptr_t *);
    5448} stack_trace_ops_t;
     
    5953extern void stack_trace(void);
    6054extern void stack_trace_istate(struct istate *);
    61 extern void stack_trace_ctx(stack_trace_ops_t *, stack_trace_context_t *);
     55extern void stack_trace_fp_pc(stack_trace_ops_t *, uintptr_t, uintptr_t);
    6256
    6357/*
     
    6761extern uintptr_t program_counter_get(void);
    6862
    69 extern bool kernel_stack_trace_context_validate(stack_trace_context_t *);
    70 extern bool kernel_frame_pointer_prev(stack_trace_context_t *, uintptr_t *);
    71 extern bool kernel_return_address_get(stack_trace_context_t *, uintptr_t *);
     63extern bool kernel_frame_pointer_validate(uintptr_t);
     64extern bool kernel_frame_pointer_prev(uintptr_t, uintptr_t *);
     65extern bool kernel_return_address_get(uintptr_t, uintptr_t *);
    7266
    73 extern bool uspace_stack_trace_context_validate(stack_trace_context_t *);
    74 extern bool uspace_frame_pointer_prev(stack_trace_context_t *, uintptr_t *);
    75 extern bool uspace_return_address_get(stack_trace_context_t *, uintptr_t *);
     67extern bool uspace_frame_pointer_validate(uintptr_t);
     68extern bool uspace_frame_pointer_prev(uintptr_t, uintptr_t *);
     69extern bool uspace_return_address_get(uintptr_t, uintptr_t *);
    7670
    7771#endif
  • kernel/generic/src/debug/stacktrace.c

    r571addd r1720cf9  
    2727 */
    2828
    29 /** @addtogroup genericdebug
     29/** @addtogroup genericdebug 
    3030 * @{
    3131 */
     
    4242
    4343void
    44 stack_trace_ctx(stack_trace_ops_t *ops, stack_trace_context_t *ctx)
     44stack_trace_fp_pc(stack_trace_ops_t *ops, uintptr_t fp, uintptr_t pc)
    4545{
    4646        int cnt = 0;
    4747        const char *symbol;
    4848        uintptr_t offset;
    49         uintptr_t fp;
    50         uintptr_t pc;
    5149       
    52         while (cnt++ < STACK_FRAMES_MAX &&
    53             ops->stack_trace_context_validate(ctx)) {
     50        while (cnt++ < STACK_FRAMES_MAX && ops->frame_pointer_validate(fp)) {
    5451                if (ops->symbol_resolve &&
    55                     ops->symbol_resolve(ctx->pc, &symbol, &offset)) {
     52                    ops->symbol_resolve(pc, &symbol, &offset)) {
    5653                        if (offset)
    57                                 printf("%p: %s+%" PRIp "()\n",
    58                                     ctx->fp, symbol, offset);
     54                                printf("%p: %s+%" PRIp "()\n", fp, symbol, offset);
    5955                        else
    60                                 printf("%p: %s()\n",
    61                                     ctx->fp, symbol);
     56                                printf("%p: %s()\n", fp, symbol);
    6257                } else {
    63                         printf("%p: %p()\n", ctx->fp, ctx->pc);
     58                        printf("%p: %p()\n", fp, pc);
    6459                }
    65                 if (!ops->return_address_get(ctx, &pc))
     60                if (!ops->return_address_get(fp, &pc))
    6661                        break;
    67                 if (!ops->frame_pointer_prev(ctx, &fp))
     62                if (!ops->frame_pointer_prev(fp, &fp))
    6863                        break;
    69                 ctx->fp = fp;
    70                 ctx->pc = pc;
    7164        }
    7265}
     
    7467void stack_trace(void)
    7568{
    76         stack_trace_context_t ctx = {
    77                 .fp = frame_pointer_get(),
    78                 .pc = program_counter_get(),
    79                 .istate = NULL
    80         };
    81 
    82         stack_trace_ctx(&kst_ops, &ctx);
     69        stack_trace_fp_pc(&kst_ops, frame_pointer_get(), program_counter_get());
    8370
    8471        /*
     
    9178void stack_trace_istate(istate_t *istate)
    9279{
    93         stack_trace_context_t ctx = {
    94                 .fp = istate_get_fp(istate),
    95                 .pc = istate_get_pc(istate),
    96                 .istate = istate
    97         };
    98        
    9980        if (istate_from_uspace(istate))
    100                 stack_trace_ctx(&ust_ops, &ctx);
     81                stack_trace_fp_pc(&ust_ops, istate_get_fp(istate),
     82                    istate_get_pc(istate));
    10183        else
    102                 stack_trace_ctx(&kst_ops, &ctx);
     84                stack_trace_fp_pc(&kst_ops, istate_get_fp(istate),
     85                    istate_get_pc(istate));
    10386}
    10487
    105 static bool
    106 kernel_symbol_resolve(uintptr_t addr, const char **sp, uintptr_t *op)
     88static bool kernel_symbol_resolve(uintptr_t addr, const char **sp, uintptr_t *op)
    10789{
    10890        return (symtab_name_lookup(addr, sp, op) == 0);
     
    11092
    11193stack_trace_ops_t kst_ops = {
    112         .stack_trace_context_validate = kernel_stack_trace_context_validate,
     94        .frame_pointer_validate = kernel_frame_pointer_validate,
    11395        .frame_pointer_prev = kernel_frame_pointer_prev,
    11496        .return_address_get = kernel_return_address_get,
     
    11799
    118100stack_trace_ops_t ust_ops = {
    119         .stack_trace_context_validate = uspace_stack_trace_context_validate,
     101        .frame_pointer_validate = uspace_frame_pointer_validate,
    120102        .frame_pointer_prev = uspace_frame_pointer_prev,
    121103        .return_address_get = uspace_return_address_get,
  • kernel/generic/src/main/main.c

    r571addd r1720cf9  
    147147        size_t i;
    148148        for (i = 0; i < init.cnt; i++) {
    149                 if (PA_OVERLAPS(config.stack_base, config.stack_size,
     149                if (PA_overlaps(config.stack_base, config.stack_size,
    150150                    init.tasks[i].addr, init.tasks[i].size))
    151151                        config.stack_base = ALIGN_UP(init.tasks[i].addr +
     
    155155        /* Avoid placing stack on top of boot allocations. */
    156156        if (ballocs.size) {
    157                 if (PA_OVERLAPS(config.stack_base, config.stack_size,
     157                if (PA_overlaps(config.stack_base, config.stack_size,
    158158                    ballocs.base, ballocs.size))
    159159                        config.stack_base = ALIGN_UP(ballocs.base +
  • kernel/generic/src/mm/frame.c

    r571addd r1720cf9  
    121121 *
    122122 */
    123 NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count,
    124     zone_flags_t flags)
     123NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count)
    125124{
    126125        if (zones.count + 1 == ZONES_MAX) {
     
    132131        for (i = 0; i < zones.count; i++) {
    133132                /* Check for overlap */
    134                 if (overlaps(zones.info[i].base, zones.info[i].count,
    135                     base, count)) {
    136                        
    137                         /*
    138                          * If the overlaping zones are of the same type
    139                          * and the new zone is completely within the previous
    140                          * one, then quietly ignore the new zone.
    141                          *
    142                          */
    143                        
    144                         if ((zones.info[i].flags != flags) ||
    145                             (!iswithin(zones.info[i].base, zones.info[i].count,
    146                             base, count))) {
    147                                 printf("Zone (%p, %p) overlaps with previous zone (%p, %p)!\n",
    148                                     PFN2ADDR(base), PFN2ADDR(count),
    149                                     PFN2ADDR(zones.info[i].base),
    150                                     PFN2ADDR(zones.info[i].count));
    151                         }
    152                        
     133                if (overlaps(base, count,
     134                    zones.info[i].base, zones.info[i].count)) {
     135                        printf("Zone (%p, %p) overlaps with zone (%p, %p)!\n",
     136                            PFN2ADDR(base), PFN2ADDR(base + count),
     137                            PFN2ADDR(zones.info[i].base),
     138                            PFN2ADDR(zones.info[i].base + zones.info[i].count));
    153139                        return (size_t) -1;
    154140                }
     
    161147        for (j = zones.count; j > i; j--) {
    162148                zones.info[j] = zones.info[j - 1];
    163                 if (zones.info[j].buddy_system != NULL)
    164                         zones.info[j].buddy_system->data =
    165                             (void *) &zones.info[j];
     149                zones.info[j].buddy_system->data =
     150                    (void *) &zones.info[j - 1];
    166151        }
    167152       
     
    763748        for (i = z2 + 1; i < zones.count; i++) {
    764749                zones.info[i - 1] = zones.info[i];
    765                 if (zones.info[i - 1].buddy_system != NULL)
    766                         zones.info[i - 1].buddy_system->data =
    767                             (void *) &zones.info[i - 1];
     750                zones.info[i - 1].buddy_system->data =
     751                    (void *) &zones.info[i - 1];
    768752        }
    769753       
     
    914898                }
    915899               
    916                 size_t znum = zones_insert_zone(start, count, flags);
     900                size_t znum = zones_insert_zone(start, count);
    917901                if (znum == (size_t) -1) {
    918902                        irq_spinlock_unlock(&zones.lock, true);
     
    937921       
    938922        /* Non-available zone */
    939         size_t znum = zones_insert_zone(start, count, flags);
     923        size_t znum = zones_insert_zone(start, count);
    940924        if (znum == (size_t) -1) {
    941925                irq_spinlock_unlock(&zones.lock, true);
  • uspace/Makefile.common

    r571addd r1720cf9  
    172172ifneq ($(BINARY),)
    173173%.disasm: $(BINARY)
    174 ifeq ($(CONFIG_LINE_DEBUG),y)
    175         $(OBJDUMP) -d -S $< > $@
    176 else
    177174        $(OBJDUMP) -d $< > $@
    178 endif
    179175
    180176$(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBS) $(BASE_LIBS)
  • uspace/app/klog/klog.c

    r571addd r1720cf9  
    4343#include <event.h>
    4444#include <errno.h>
    45 #include <str_error.h>
    4645#include <io/klog.h>
    4746
    48 #define NAME       "klog"
    49 #define LOG_FNAME  "/log/klog"
     47#define NAME  "klog"
    5048
    5149/* Pointer to klog area */
    5250static wchar_t *klog;
    5351static size_t klog_length;
    54 
    55 static FILE *log;
    5652
    5753static void interrupt_received(ipc_callid_t callid, ipc_call_t *call)
     
    6258        size_t i;
    6359       
    64         for (i = klog_len - klog_stored; i < klog_len; i++) {
    65                 wchar_t ch = klog[(klog_start + i) % klog_length];
    66                
    67                 putchar(ch);
    68                
    69                 if (log != NULL)
    70                         fprintf(log, "%lc", ch);
    71         }
    72        
    73         if (log != NULL) {
    74                 fflush(log);
    75                 fsync(fileno(log));
    76         }
     60        for (i = klog_len - klog_stored; i < klog_len; i++)
     61                putchar(klog[(klog_start + i) % klog_length]);
    7762}
    7863
     
    10691        }
    10792       
    108         /*
    109          * Mode "a" would be definitively much better here, but it is
    110          * not well supported by the FAT driver.
    111          *
    112          */
    113         log = fopen(LOG_FNAME, "w");
    114         if (log == NULL)
    115                 printf("%s: Unable to create log file %s (%s)\n", NAME, LOG_FNAME,
    116                     str_error(errno));
    117        
    11893        async_set_interrupt_received(interrupt_received);
    11994        klog_update();
  • uspace/lib/c/generic/io/io.c

    r571addd r1720cf9  
    757757}
    758758
    759 int fileno(FILE *stream)
    760 {
    761         if (stream->klog) {
    762                 errno = EBADF;
    763                 return -1;
    764         }
    765        
    766         return stream->fd;
    767 }
    768 
    769759int fphone(FILE *stream)
    770760{
  • uspace/lib/c/include/stdio.h

    r571addd r1720cf9  
    171171extern off64_t ftell(FILE *);
    172172extern int feof(FILE *);
    173 extern int fileno(FILE *);
    174173
    175174extern int fflush(FILE *);
Note: See TracChangeset for help on using the changeset viewer.