Changeset 2ccd275 in mainline


Ignore:
Timestamp:
2005-11-09T14:23:05Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
802bb95
Parents:
b183865e
Message:

Changes in build system.
For .S targets, always do -DASM.
Remove unnecessary #define ASM from various *.S files.
At the end of build, generate disassembler dump for kernel.raw.

ia64 work.
Better General Exception handler.

Files:
13 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    rb183865e r2ccd275  
    141141.PHONY: all clean config depend boot
    142142
    143 all: kernel.bin boot
     143all: kernel.bin boot disasm
    144144
    145145-include Makefile.depend
    146146
    147147clean:
    148         -rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump generic/src/debug/real_map.bin Makefile.depend generic/include/arch generic/include/genarch arch/$(ARCH)/_link.ld
     148        -rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump kernel.disasm generic/src/debug/real_map.bin Makefile.depend generic/include/arch generic/include/genarch arch/$(ARCH)/_link.ld
    149149        find generic/src/ arch/$(ARCH)/src/ genarch/src/ -name '*.o' -exec rm \{\} \;
    150150        $(MAKE) -C arch/$(ARCH)/boot clean
     
    178178        $(MAKE) -C arch/$(ARCH)/boot build KERNEL_SIZE="`cat kernel.bin | wc -c`" CC=$(CC) AS=$(AS) LD=$(LD)
    179179
     180disasm: kernel.raw
     181        $(OBJDUMP) -d kernel.raw > kernel.disasm
     182
    180183%.o: %.S
    181         $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -c $< -o $@
     184        $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
    182185
    183186%.o: %.s
  • arch/amd64/src/asm_utils.S

    rb183865e r2ccd275  
    3434#define ERROR_WORD_INTERRUPT_LIST 0x00027D00
    3535
    36 #define __ASM__
    3736#include <arch/pm.h>
    3837       
  • arch/amd64/src/boot/boot.S

    rb183865e r2ccd275  
    2626# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727#
    28 
    29 #define __ASM__
    3028
    3129#include <arch/mm/page.h>       
  • arch/amd64/src/smp/ap.S

    rb183865e r2ccd275  
    3131#
    3232
    33 #define __ASM__
    3433#include <arch/boot/boot.h>
    3534#include <arch/pm.h>
  • arch/ia32/src/boot/boot.S

    rb183865e r2ccd275  
    2727#
    2828
    29 #define __ASM__
    30        
    3129#include <arch/boot/boot.h>
    3230#include <arch/boot/memmapasm.h>
  • arch/ia64/include/asm.h

    rb183865e r2ccd275  
    221221static inline void interrupts_restore(ipl_t ipl)
    222222{
    223         __asm__ volatile (
    224                 "mov psr.l = %0\n"
    225                 ";;\n"
    226                 "srlz.d\n"
    227                 : : "r" ((__u64) ipl)
    228         );
     223        if (ipl & PSR_I_MASK)
     224                (void) interrupts_enable();
     225        else
     226                (void) interrupts_disable();
    229227}
    230228
  • arch/ia64/include/interrupt.h

    rb183865e r2ccd275  
    3131
    3232#include <arch/types.h>
     33#include <arch/register.h>
    3334
    34 /** External interrupt vectors. */
     35/** External Interrupt vectors. */
    3536#define INTERRUPT_TIMER         0
    3637#define INTERRUPT_SPURIOUS      15
     38
     39/** General Exception codes. */
     40#define GE_ILLEGALOP            0
     41#define GE_PRIVOP               1
     42#define GE_PRIVREG              2
     43#define GE_RESREGFLD            3
     44#define GE_DISBLDISTRAN         4
     45#define GE_ILLEGALDEP           8
    3746
    3847#define EOI     0               /**< The actual value doesn't matter. */
     
    4655        __u64 ar_rsc;
    4756        __address cr_ifa;
    48         __u64 cr_isr;
     57        cr_isr_t cr_isr;
    4958        __address cr_iipa;
    5059        __u64 cr_ips;
  • arch/ia64/include/register.h

    rb183865e r2ccd275  
    3030#define __ia64_REGISTER_H__
    3131
     32#ifndef __ASM__
    3233#include <arch/types.h>
     34#endif
    3335
    3436#define CR_IVR_MASK     0xf
    3537#define PSR_I_MASK      0x4000
     38#define PSR_IC_MASK     0x2000
    3639
    3740/** Application registers. */
     
    109112/* CR82-CR127 reserved */
    110113
     114#ifndef __ASM__
    111115/** External Interrupt Vector Register */
    112116union cr_ivr {
     
    144148typedef union cr_itv cr_itv_t;
    145149
     150/** Interruption Status Register */
     151union cr_isr {
     152        struct {
     153                union {
     154                        /** General Exception code field structuring. */
     155                        struct {
     156                                unsigned ge_na : 4;
     157                                unsigned ge_code : 4;
     158                        } __attribute__ ((packed));
     159                        __u16 code;
     160                };
     161                __u8 vector;
     162                unsigned : 8;
     163                unsigned x : 1;                 /**< Execute exception. */
     164                unsigned w : 1;                 /**< Write exception. */
     165                unsigned r : 1;                 /**< Read exception. */
     166                unsigned na : 1;                /**< Non-access exception. */
     167                unsigned sp : 1;                /**< Speculative load exception. */
     168                unsigned rs : 1;                /**< Register stack. */
     169                unsigned ir : 1;                /**< Incomplete Register frame. */
     170                unsigned ni : 1;                /**< Nested Interruption. */
     171                unsigned so : 1;                /**< IA-32 Supervisor Override. */
     172                unsigned ei : 2;                /**< Excepting Instruction. */
     173                unsigned ed : 1;                /**< Exception Deferral. */
     174                unsigned : 20;
     175        } __attribute__ ((packed));
     176        __u64 value;
     177};
     178
     179typedef union cr_isr cr_isr_t;
     180
     181#endif /* !__ASM__ */
     182
    146183#endif
  • arch/ia64/src/interrupt.c

    rb183865e r2ccd275  
    106106
    107107static char *vector_to_string(__u16 vector);
    108 static void dump_stack(struct exception_regdump *pstate);
     108static void dump_interrupted_context(struct exception_regdump *pstate);
    109109
    110110char *vector_to_string(__u16 vector)
     
    118118}
    119119
    120 void dump_stack(struct exception_regdump *pstate)
     120void dump_interrupted_context(struct exception_regdump *pstate)
    121121{
    122122        char *ifa, *iipa, *iip;
     
    127127
    128128        putchar('\n');
     129        printf("Interrupted context dump:\n");
    129130        printf("ar.bsp=%P\tar.bspstore=%P\n", pstate->ar_bsp, pstate->ar_bspstore);
    130131        printf("ar.rnat=%Q\tar.rsc=%Q\n", pstate->ar_rnat, pstate->ar_rsc);
    131132        printf("ar.ifs=%Q\tar.pfs=%Q\n", pstate->ar_ifs, pstate->ar_pfs);
    132         printf("cr.isr=%Q\tcr.ips=%Q\t\n", pstate->cr_isr, pstate->cr_ips);
     133        printf("cr.isr=%Q\tcr.ips=%Q\t\n", pstate->cr_isr.value, pstate->cr_ips);
    133134       
    134         printf("cr.iip=%Q (%s)\n", pstate->cr_iip, iip ? iip : "?");
    135         printf("cr.iipa=%Q (%s)\n", pstate->cr_iipa, iipa ? iipa : "?");
    136         printf("cr.ifa=%Q (%s)\n", pstate->cr_ifa, ifa ? ifa : "?");
     135        printf("cr.iip=%Q, #%d\t(%s)\n", pstate->cr_iip, pstate->cr_isr.ei ,iip ? iip : "?");
     136        printf("cr.iipa=%Q\t(%s)\n", pstate->cr_iipa, iipa ? iipa : "?");
     137        printf("cr.ifa=%Q\t(%s)\n", pstate->cr_ifa, ifa ? ifa : "?");
    137138}
    138139
    139140void general_exception(__u64 vector, struct exception_regdump *pstate)
    140141{
    141         dump_stack(pstate);
    142         panic("General Exception\n");
     142        char *desc = "";
     143
     144        dump_interrupted_context(pstate);
     145
     146        switch (pstate->cr_isr.ge_code) {
     147            case GE_ILLEGALOP:
     148                desc = "Illegal Operation fault";
     149                break;
     150            case GE_PRIVOP:
     151                desc = "Privileged Operation fault";
     152                break;
     153            case GE_PRIVREG:
     154                desc = "Privileged Register fault";
     155                break;
     156            case GE_RESREGFLD:
     157                desc = "Reserved Register/Field fault";
     158                break;
     159            case GE_DISBLDISTRAN:
     160                desc = "Disabled Instruction Set Transition fault";
     161                break;
     162            case GE_ILLEGALDEP:
     163                desc = "Illegal Dependency fault";
     164                break;
     165            default:
     166                desc = "unknown";
     167                break;
     168        }
     169
     170        panic("General Exception (%s)\n", desc);
    143171}
    144172
    145173void break_instruction(__u64 vector, struct exception_regdump *pstate)
    146174{
    147         dump_stack(pstate);
     175        dump_interrupted_context(pstate);
    148176        panic("Break Instruction\n");
    149177}
     
    151179void universal_handler(__u64 vector, struct exception_regdump *pstate)
    152180{
    153         dump_stack(pstate);
     181        dump_interrupted_context(pstate);
    154182        panic("Interruption: %W (%s)\n", (__u16) vector, vector_to_string(vector));
    155183}
  • arch/ia64/src/ivt.S

    rb183865e r2ccd275  
    11#
    22# Copyright (C) 2005 Jakub Vana
     3# Copyright (C) 2005 Jakub Jermar
    34# All rights reserved.
    45#
     
    2829
    2930#include <arch/stack.h>
     31#include <arch/register.h>
    3032
    3133#define STACK_ITEMS             12
     
    190192
    191193    /* 6. switch to bank 1 and reenable PSR.ic */
    192         ssm 0x2000
     194        ssm PSR_IC_MASK
    193195        bsw.1 ;;
    194196        srlz.d
     
    308310       
    309311    /* 15. disable PSR.ic and switch to bank 0 */
    310         rsm 0x2000
     312        rsm PSR_IC_MASK
    311313        bsw.0 ;;
    312314        srlz.d
  • arch/mips32/src/context.S

    rb183865e r2ccd275  
    2727#
    2828
    29 #define __ASM__
    3029#include <arch/asm/regname.h>
    3130#include <arch/context_offset.h>
  • arch/mips32/src/start.S

    rb183865e r2ccd275  
    2727#
    2828
    29 #define __ASM__
    30        
    3129#include <arch/asm/regname.h>
    3230#include <arch/mm/page.h>
  • arch/sparc64/src/context.S

    rb183865e r2ccd275  
    2727#
    2828
    29 #define __ASM__
    3029#include <arch/context_offset.h>
    3130       
Note: See TracChangeset for help on using the changeset viewer.