Changeset 7a0359b in mainline for kernel/arch/ia32/include/interrupt.h


Ignore:
Timestamp:
2010-07-02T15:42:19Z (14 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bbfdf62
Parents:
e3ee9b9
Message:

improve kernel function tracing

  • add support for more generic kernel sources
  • replace attribute((no_instrument_function)) with NO_TRACE macro (shorter and for future compatibility with different compilers)
  • to be on the safe side, do not instrument most of the inline and static functions (plus some specific non-static functions)

collateral code cleanup (no change in functionality)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/include/interrupt.h

    re3ee9b9 r7a0359b  
    3838#include <typedefs.h>
    3939#include <arch/pm.h>
     40#include <trace.h>
    4041
    41 #define IVT_ITEMS       IDT_ITEMS
    42 #define IVT_FIRST       0
     42#define IVT_ITEMS  IDT_ITEMS
     43#define IVT_FIRST  0
    4344
    44 #define EXC_COUNT       32
    45 #define IRQ_COUNT       16
     45#define EXC_COUNT  32
     46#define IRQ_COUNT  16
    4647
    47 #define IVT_EXCBASE     0
    48 #define IVT_IRQBASE     (IVT_EXCBASE + EXC_COUNT)
    49 #define IVT_FREEBASE    (IVT_IRQBASE + IRQ_COUNT)
     48#define IVT_EXCBASE   0
     49#define IVT_IRQBASE   (IVT_EXCBASE + EXC_COUNT)
     50#define IVT_FREEBASE  (IVT_IRQBASE + IRQ_COUNT)
    5051
    51 #define IRQ_CLK         0
    52 #define IRQ_KBD         1
    53 #define IRQ_PIC1        2
    54 #define IRQ_PIC_SPUR    7
    55 #define IRQ_MOUSE       12
    56 #define IRQ_DP8390      9
     52#define IRQ_CLK       0
     53#define IRQ_KBD       1
     54#define IRQ_PIC1      2
     55#define IRQ_PIC_SPUR  7
     56#define IRQ_MOUSE     12
     57#define IRQ_DP8390    9
    5758
    58 /* this one must have four least significant bits set to ones */
    59 #define VECTOR_APIC_SPUR        (IVT_ITEMS - 1)
     59/* This one must have four least significant bits set to ones */
     60#define VECTOR_APIC_SPUR  (IVT_ITEMS - 1)
    6061
    6162#if (((VECTOR_APIC_SPUR + 1) % 16) || VECTOR_APIC_SPUR >= IVT_ITEMS)
     
    6364#endif
    6465
    65 #define VECTOR_DEBUG                    1
    66 #define VECTOR_CLK                      (IVT_IRQBASE + IRQ_CLK)
    67 #define VECTOR_PIC_SPUR                 (IVT_IRQBASE + IRQ_PIC_SPUR)
    68 #define VECTOR_SYSCALL                  IVT_FREEBASE
    69 #define VECTOR_TLB_SHOOTDOWN_IPI        (IVT_FREEBASE + 1)
    70 #define VECTOR_DEBUG_IPI                (IVT_FREEBASE + 2)
     66#define VECTOR_DEBUG              1
     67#define VECTOR_CLK                (IVT_IRQBASE + IRQ_CLK)
     68#define VECTOR_PIC_SPUR           (IVT_IRQBASE + IRQ_PIC_SPUR)
     69#define VECTOR_SYSCALL            IVT_FREEBASE
     70#define VECTOR_TLB_SHOOTDOWN_IPI  (IVT_FREEBASE + 1)
     71#define VECTOR_DEBUG_IPI          (IVT_FREEBASE + 2)
    7172
    7273typedef struct istate {
     
    7980        uint32_t ebp;
    8081       
    81         uint32_t ebp_frame;     /* imitation of frame pointer linkage */
    82         uint32_t eip_frame;     /* imitation of return address linkage */
    83 
     82        uint32_t ebp_frame;  /* imitation of frame pointer linkage */
     83        uint32_t eip_frame;  /* imitation of return address linkage */
     84       
    8485        uint32_t gs;
    8586        uint32_t fs;
    8687        uint32_t es;
    8788        uint32_t ds;
    88 
    89         uint32_t error_word;    /* real or fake error word */
     89       
     90        uint32_t error_word;  /* real or fake error word */
    9091        uint32_t eip;
    9192        uint32_t cs;
    9293        uint32_t eflags;
    93         uint32_t esp;           /* only if istate_t is from uspace */
    94         uint32_t ss;            /* only if istate_t is from uspace */
     94        uint32_t esp;         /* only if istate_t is from uspace */
     95        uint32_t ss;          /* only if istate_t is from uspace */
    9596} istate_t;
    9697
    9798/** Return true if exception happened while in userspace */
    98 static inline int istate_from_uspace(istate_t *istate)
     99NO_TRACE static inline int istate_from_uspace(istate_t *istate)
    99100{
    100101        return !(istate->eip & 0x80000000);
    101102}
    102103
    103 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
     104NO_TRACE static inline void istate_set_retaddr(istate_t *istate,
     105    uintptr_t retaddr)
    104106{
    105107        istate->eip = retaddr;
    106108}
    107109
    108 static inline unative_t istate_get_pc(istate_t *istate)
     110NO_TRACE static inline unative_t istate_get_pc(istate_t *istate)
    109111{
    110112        return istate->eip;
    111113}
    112114
    113 static inline unative_t istate_get_fp(istate_t *istate)
     115NO_TRACE static inline unative_t istate_get_fp(istate_t *istate)
    114116{
    115117        return istate->ebp;
    116118}
    117119
    118 extern void (* disable_irqs_function)(uint16_t irqmask);
    119 extern void (* enable_irqs_function)(uint16_t irqmask);
     120extern void (* disable_irqs_function)(uint16_t);
     121extern void (* enable_irqs_function)(uint16_t);
    120122extern void (* eoi_function)(void);
    121123
    122124extern void interrupt_init(void);
    123 extern void trap_virtual_enable_irqs(uint16_t irqmask);
    124 extern void trap_virtual_disable_irqs(uint16_t irqmask);
     125extern void trap_virtual_enable_irqs(uint16_t);
     126extern void trap_virtual_disable_irqs(uint16_t);
    125127
    126128#endif
Note: See TracChangeset for help on using the changeset viewer.