From owner-p4-projects@FreeBSD.ORG Sun Feb 1 23:44:51 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1CD001065670; Sun, 1 Feb 2009 23:44:51 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B76FD106566C for ; Sun, 1 Feb 2009 23:44:50 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A455B8FC21 for ; Sun, 1 Feb 2009 23:44:50 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n11Nioql069638 for ; Sun, 1 Feb 2009 23:44:50 GMT (envelope-from antab@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n11NioTZ069636 for perforce@freebsd.org; Sun, 1 Feb 2009 23:44:50 GMT (envelope-from antab@FreeBSD.org) Date: Sun, 1 Feb 2009 23:44:50 GMT Message-Id: <200902012344.n11NioTZ069636@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to antab@FreeBSD.org using -f From: Arnar Mar Sig To: Perforce Change Reviews Cc: Subject: PERFORCE change 157013 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Feb 2009 23:44:52 -0000 http://perforce.freebsd.org/chv.cgi?CH=157013 Change 157013 by antab@antab_farm on 2009/02/01 23:44:50 Misc changes to get AVR32 working. Stops at cpu_fork() now. Affected files ... .. //depot/projects/avr32/src/sys/avr32/avr32/cpu.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/db_disasm.c#1 add .. //depot/projects/avr32/src/sys/avr32/avr32/db_interface.c#1 add .. //depot/projects/avr32/src/sys/avr32/avr32/db_trace.c#1 add .. //depot/projects/avr32/src/sys/avr32/avr32/gdb_machdep.c#1 add .. //depot/projects/avr32/src/sys/avr32/avr32/machdep.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/stack_machdep.c#1 add .. //depot/projects/avr32/src/sys/avr32/avr32/support.S#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/tlb.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/uboot.c#2 edit .. //depot/projects/avr32/src/sys/avr32/avr32/vm_machdep.c#2 edit .. //depot/projects/avr32/src/sys/avr32/conf/NGW100#2 edit .. //depot/projects/avr32/src/sys/avr32/include/atomic.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/cpu.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/cpufunc.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/db_machdep.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/gdb_machdep.h#1 add .. //depot/projects/avr32/src/sys/avr32/include/pcpu.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/pte.h#2 edit .. //depot/projects/avr32/src/sys/avr32/include/tlb.h#2 edit .. //depot/projects/avr32/src/sys/conf/files.avr32#2 edit Differences ... ==== //depot/projects/avr32/src/sys/avr32/avr32/cpu.c#2 (text+ko) ==== @@ -108,22 +108,3 @@ avr32_debug(": needs implementing\n"); while (1) { } } - -void avr32_hexdump(uint8_t *data, size_t size) { - int i; - - printf("*** %4d bytes *******************************************\n", size); - for (i = 0; i < size; i++) { - if (!(i % 32)) { - printf("%08X ", (uint32_t)data + i); - } - printf("%02X", data[i]); - - if (!((i + 1) % 32)) { - printf("\n"); - } else if (!((i + 1) % 4)) { - printf(" "); - } - } - printf("\n"); -} ==== //depot/projects/avr32/src/sys/avr32/avr32/machdep.c#2 (text+ko) ==== @@ -54,6 +54,14 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -71,20 +79,25 @@ extern vm_offset_t proc0_stack_end; vm_offset_t phys_avail[10]; -long realmem = 0; +long realmem; +struct kva_md_info kmi; + +static void cpu_startup(void *); +SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL); // Prototypes (Should be in headers!) void mi_startup(void); void avr32_init(void); void avr32_init_proc0(void); - void avr32_init() { cninit(); // Init console cpu_init(); // Init needed cpu things (evb and irq) uboot_parse_tags(); // Parse uboot tags + + realmem = btoc(phys_avail[1] - phys_avail[0]); init_param1(); - init_param2(phys_avail[1] - phys_avail[2]); + init_param2(realmem); pmap_bootstrap(); // Bootstrap pmap so we so virtual memory works avr32_init_proc0(); // Init proc0 mutex_init(); @@ -96,16 +109,37 @@ proc_linkup(&proc0, &thread0); thread0.td_kstack = proc0_stack_end; thread0.td_kstack_pages = KSTACK_PAGES - 1; - thread0.td_pcb = &proc0_pcb; - thread0.td_frame = &thread0.td_pcb->pcb_regs; + thread0.td_pcb = &proc0_pcb; + thread0.td_frame = &thread0.td_pcb->pcb_regs; pcpu_init(pcpup, 0, sizeof(struct pcpu)); PCPU_SET(curthread, &thread0); PCPU_SET(curpcb, thread0.td_pcb); } +static void cpu_startup(void *dummy) { + if (boothowto & RB_VERBOSE) { + bootverbose++; + } + bootverbose++; + printf("real memory = %u (%u MB)\n", ptoa(realmem), + ptoa(realmem) / 1048576); + + + vm_ksubmap_init(&kmi); + + printf("avail memory = %u (%uMB)\n", ptoa(cnt.v_free_count), + ptoa(cnt.v_free_count) / 1048576); + + /* + * Set up buffers, so they can be used to read disk labels. + */ + bufinit(); + vm_pager_bufferinit(); +} + void cpu_pcpu_init(struct pcpu *pcpu, int cpuid, size_t size) { - pcpu->pc_next_asid = 1; + pcpu->pc_asid_next = 1; pcpu->pc_asid_generation = 1; } @@ -167,6 +201,7 @@ int savectx(struct pcb *pcb) { avr32_impl(); + return (0); } void makectx(struct trapframe *tf, struct pcb *pcb) { ==== //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#2 (text+ko) ==== @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -53,10 +54,12 @@ int get_mcontext(struct thread *td, mcontext_t *mcp, int flags) { avr32_impl(); + return (0); } int set_mcontext(struct thread *td, const mcontext_t *mcp) { avr32_impl(); + return (0); } void exec_setregs(struct thread *td, u_long entry, u_long stack, u_long ps_strings) { @@ -65,14 +68,17 @@ int ptrace_set_pc(struct thread *td, unsigned long addr) { avr32_impl(); + return (0); } int ptrace_single_step(struct thread *td) { avr32_impl(); + return (0); } int ptrace_clear_single_step(struct thread *td) { avr32_impl(); + return (0); } void cpu_switch(struct thread *td, struct thread *newtd, struct mtx *lock) { @@ -88,5 +94,6 @@ */ int sigreturn(struct thread *td, struct sigreturn_args *uap) { avr32_impl(); + return (0); } ==== //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#2 (text+ko) ==== @@ -53,7 +53,6 @@ vm_offset_t kernel_vm_end = 0; vm_offset_t virtual_avail; /* VA of first avail page (after kernel bss) */ vm_offset_t virtual_end; /* VA of last avail page (end of kernel AS) */ -int asid_current, asid_current_generation; /* * Data for the pv entry allocation mechanism @@ -96,6 +95,7 @@ } // Enable paging + tlb_flush(); sysreg_write(PTBR, (uint32_t)kernel_pmap); sysreg_write(MMUCR, bit_offset(SYS, MMUCR, S) | bit_offset(SYS, MMUCR, E) | @@ -148,15 +148,26 @@ * such as one in a vmspace structure. */ int pmap_pinit(pmap_t pmap) { -/* mtx_init(&(pmap)->pm_mtx, "pmap", NULL, MTX_DEF); + vm_page_t ptdpg; + + PMAP_LOCK_INIT(pmap); + + /* allocate the page directory page */ + ptdpg = vm_page_alloc(NULL, 512, + VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL | + VM_ALLOC_WIRED | VM_ALLOC_ZERO); - pmap->pm_active = 0; - pmap->pm_asid.asid = PMAP_ASID_RESERVED; - pmap->pm_asid.gen = 0; + pmap->pm_pd = (pd_entry_t *)AVR32_PHYS_TO_P2(VM_PAGE_TO_PHYS(ptdpg)); + if ((ptdpg->flags & PG_ZERO) == 0) { + bzero(pmap->pm_pd, PAGE_SIZE); + } + pmap->pm_active = 0; + pmap->pm_asid = 0; + pmap->pm_asid_generation = 0; TAILQ_INIT(&pmap->pm_pvlist); - bzero(&pmap->pm_stats, sizeof(pmap->pm_stats)); */ - avr32_impl(); + bzero(&pmap->pm_stats, sizeof(pmap->pm_stats)); + return(1); } @@ -166,6 +177,7 @@ boolean_t pmap_is_modified(vm_page_t m) { avr32_impl(); + return (0); } void pmap_clear_modify(vm_page_t m) { @@ -174,6 +186,7 @@ int pmap_ts_referenced(vm_page_t m) { avr32_impl(); + return (0); } void pmap_clear_reference(vm_page_t m) { @@ -226,6 +239,7 @@ */ boolean_t pmap_is_prefaultable(pmap_t pmap, vm_offset_t addr) { avr32_impl(); + return (0); } void pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, vm_offset_t src_addr) { @@ -239,7 +253,7 @@ void pmap_zero_page(vm_page_t m) { vm_paddr_t phys = VM_PAGE_TO_PHYS(m); - bzero(AVR32_PHYS_TO_P2(phys), PAGE_SIZE); + bzero((caddr_t)AVR32_PHYS_TO_P2(phys), PAGE_SIZE); } void pmap_zero_page_area(vm_page_t m, int off, int size) { @@ -250,12 +264,20 @@ avr32_impl(); } -void pmap_qenter(vm_offset_t sva, vm_page_t *m, int count) { - avr32_impl(); +void pmap_qenter(vm_offset_t va, vm_page_t *m, int count) { + int i; + + for (i = 0; i < count; i++) { + pmap_kenter(va, VM_PAGE_TO_PHYS(m[i])); + va += PAGE_SIZE; + } } -void pmap_qremove(vm_offset_t sva, int count) { - avr32_impl(); +void pmap_qremove(vm_offset_t va, int count) { + while (count-- > 0) { + pmap_kremove(va); + va += PAGE_SIZE; + } } void pmap_page_init(vm_page_t m) { @@ -270,7 +292,6 @@ void pmap_growkernel(vm_offset_t addr) { // Not really sure what to do here, need to look better into it, but the // kernel should have all the pages tables needed to grow within the P3 segment - avr32_debug("pmap_growkernel: Needs implementing?\n"); } /* @@ -480,10 +501,12 @@ vm_page_t pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot) { avr32_impl(); + return (0); } boolean_t pmap_page_exists_quick(pmap_t pmap, vm_page_t m) { avr32_impl(); + return (0); } /* @@ -507,6 +530,7 @@ */ int pmap_page_wired_mappings(vm_page_t m) { avr32_impl(); + return (0); } /* @@ -516,6 +540,7 @@ */ int pmap_mincore(pmap_t pmap, vm_offset_t addr) { avr32_impl(); + return (0); } /* @@ -675,7 +700,7 @@ static void pmap_update_page(pmap_t pmap, vm_offset_t va, pt_entry_t pte) { uint32_t tlbehi, mmucr; - if (pmap->pm_asid_generation != asid_current_generation) { + if (pmap->pm_asid_generation != PCPU_GET(asid_generation)) { return; } @@ -703,8 +728,6 @@ pmap_t pmap = (pmap_t)sysreg_read(PTBR); pt_entry_t *ent; - - ent = pmap_pte(pmap, tlbear); if (!ent || !*ent) { printf("\nTLB miss: %x\n", ecr); @@ -718,20 +741,20 @@ } // Generate ASID? - if (pmap->pm_asid == 0 || pmap->pm_asid_generation < asid_current_generation) { - asid_current++; - if (asid_current == ASID_MAX) { - asid_current_generation++; - asid_current = 1; + if (pmap->pm_asid_generation < PCPU_GET(asid_generation)) { + if (PCPU_GET(asid_next) == ASID_MAX) { + PCPU_INC(asid_generation); + PCPU_SET(asid_next, 0); } - pmap->pm_asid = asid_current; - pmap->pm_asid_generation = asid_current_generation; + pmap->pm_asid = PCPU_GET(asid_next); + pmap->pm_asid_generation = PCPU_GET(asid_generation); + PCPU_INC(asid_next); } // Insert into TLB sysreg_write(TLBEHI, (tlbehi & bit_mask(SYS, TLBEHI, VPN)) | bit_offset(SYS, TLBEHI, V) | - asid_current); + pmap->pm_asid); sysreg_write(TLBELO, (*ent & ~bit_mask(SYS, TLBELO, SZ)) | PTE_DIRTY | PTE_SIZE_4K); sysreg_write(MMUCR, bit_offset(SYS, MMUCR, S) | bit_offset(SYS, MMUCR, E) | @@ -743,7 +766,7 @@ cpu_sync_pipeline(); tlb_at++; - if (tlb_at == 32) { + if (tlb_at == TLB_SIZE) { tlb_at = 0; } } ==== //depot/projects/avr32/src/sys/avr32/avr32/support.S#2 (text+ko) ==== @@ -189,9 +189,6 @@ -ENTRY(breakpoint) - - ENTRY(setjmp) ENTRY(longjmp) sub r12, pc, (. - 2f) ==== //depot/projects/avr32/src/sys/avr32/avr32/tlb.c#2 (text+ko) ==== @@ -47,7 +47,7 @@ uint32_t i, tlbehi, tlbelo, mmucr, mmucr_save; mmucr_save = sysreg_read(MMUCR); - for (i = 0; i < 32; i++) { + for (i = 0; i < TLB_SIZE; i++) { mmucr = (mmucr_save & ~bit_mask(SYS, MMUCR, DRP)) | (i << bit_shift(SYS, MMUCR, DRP)); sysreg_write(MMUCR, mmucr); @@ -60,3 +60,19 @@ } sysreg_write(MMUCR, mmucr_save); } + +void tlb_flush() { + uint32_t i, mmucr, mmucr_save; + + mmucr_save = sysreg_read(MMUCR); + sysreg_write(TLBEHI, 0); + sysreg_write(TLBELO, 0); + for (i = 0; i < TLB_SIZE; i++) { + mmucr = (mmucr_save & ~bit_mask(SYS, MMUCR, DRP)) | (i << bit_shift(SYS, MMUCR, DRP)); + sysreg_write(MMUCR, mmucr); + + __builtin_tlbw(); + cpu_sync_pipeline(); + } + sysreg_write(MMUCR, mmucr_save); +} ==== //depot/projects/avr32/src/sys/avr32/avr32/uboot.c#2 (text+ko) ==== @@ -25,9 +25,6 @@ if (tag->u.mem_range.size > 0) { phys_avail[0] = AVR32_P1_TO_PHYS(&_end); phys_avail[1] = tag->u.mem_range.addr + tag->u.mem_range.size; - printf("Memory start: %x to %x\n", - phys_avail[0], - phys_avail[1]); } break; ==== //depot/projects/avr32/src/sys/avr32/avr32/vm_machdep.c#2 (text+ko) ==== @@ -50,6 +50,8 @@ #include #include +#include +#include #include /* @@ -95,7 +97,8 @@ } void cpu_thread_alloc(struct thread *td) { - avr32_impl(); + td->td_pcb = (struct pcb *)(td->td_kstack + td->td_kstack_pages * PAGE_SIZE) - 1; + td->td_frame = &td->td_pcb->pcb_regs; } /* ==== //depot/projects/avr32/src/sys/avr32/conf/NGW100#2 (text+ko) ==== @@ -9,12 +9,21 @@ hints "NGW100.hints" makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols -options VERBOSE_SYSINIT +options VERBOSE_SYSINIT #options DDB #options KDB +#options GDB +options MUTEX_DEBUG +#options WITNESS +#options WITNESS_KDB +#options WITNESS_SKIPSPIN +options INVARIANTS +options INVARIANT_SUPPORT +options DIAGNOSTIC + options SCHED_4BSD #4BSD scheduler -options INET #InterNETworking +#options INET #InterNETworking #ioptions NFSCLIENT #Network Filesystem Client #options NFS_ROOT #NFS usable as /, requires NFSCLIENT #options PSEUDOFS #Pseudo-filesystem framework @@ -35,7 +44,7 @@ #device atmel_ssc # Sync Serial controller #device atmel_mci # Media card interface -device loop -device ether +#device loop +#device ether #device md #device mem ==== //depot/projects/avr32/src/sys/avr32/include/atomic.h#2 (text+ko) ==== @@ -38,7 +38,7 @@ * antab todo: Make this atomic. when needed */ -#ifndef _MACHINE_ATOMIC_H_ +#ifndef _MACHINE_ATOMIC_H_ #define _MACHINE_ATOMIC_H_ #include @@ -47,6 +47,10 @@ #include #endif +#define mb() +#define wmb() +#define rmb() + #ifdef _KERNEL static __inline void atomic_set_32(volatile uint32_t *address, uint32_t setmask) ==== //depot/projects/avr32/src/sys/avr32/include/cpu.h#2 (text+ko) ==== @@ -33,6 +33,8 @@ #include #include #include +#include +#include // Macros for segment addressing #define AVR32_SEG_P0 0x00000000 @@ -45,8 +47,9 @@ #define AVR32_P2_TO_PHYS(x) ((unsigned)(x) & ~AVR32_SEG_MASK) #define AVR32_PHYS_TO_P1(x) ((unsigned)(x) | AVR32_SEG_P1) #define AVR32_PHYS_TO_P2(x) ((unsigned)(x) | AVR32_SEG_P2) +#define AVR32_MODE_USER bit_value(SYS, SR, MODE, 0) -#define TRAPF_USERMODE(frame) ((frame->regs.sr & PSR_MODE) == PSR_USR32_MODE) +#define TRAPF_USERMODE(frame) ((frame->regs.sr & bit_mask(SYS, SR, MODE)) == AVR32_MODE_USER) #define TRAPF_PC(tfp) ((tfp)->regs.pc) #define cpu_getstack(td) ((td)->td_frame->regs.sp) //#define cpu_setstack(td, sp) ((td)->td_frame->sp = (sp)) ==== //depot/projects/avr32/src/sys/avr32/include/cpufunc.h#2 (text+ko) ==== @@ -45,5 +45,11 @@ register_t intr_disable(void); void intr_restore(register_t s); +static __inline void +breakpoint(void) +{ + __asm __volatile ("breakpoint"); +} + #endif /* _KERNEL */ #endif /* _MACHINE_CPUFUNC_H_ */ ==== //depot/projects/avr32/src/sys/avr32/include/db_machdep.h#2 (text+ko) ==== @@ -37,16 +37,18 @@ typedef vm_offset_t db_addr_t; typedef int db_expr_t; -#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_pc) +#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_regs.regs.pc) -#define BKPT_INST (KERNEL_BREAKPOINT) -#define BKPT_SIZE (4) +#define BKPT_INST (0xD673) +#define BKPT_SIZE (2) #define BKPT_SET(inst) (BKPT_INST) -#define BKPT_SKIP do { \ - kdb_frame->tf_pc += BKPT_SIZE; \ +#define BKPT_SKIP do { \ + kdb_frame->regs.pc += BKPT_SIZE; \ } while (0) +#define SOFTWARE_SSTEP 1 + #define T_BREAKPOINT 0xffff #define IS_BREAKPOINT_TRAP(type, code) (type == T_BREAKPOINT) ==== //depot/projects/avr32/src/sys/avr32/include/pcpu.h#2 (text+ko) ==== @@ -39,9 +39,9 @@ struct vmspace; -#define PCPU_MD_FIELDS \ - struct pmap *pc_curpmap; /* pmap of curthread */ \ - u_int32_t pc_next_asid; /* next ASID to alloc */ \ +#define PCPU_MD_FIELDS \ + struct pmap *pc_curpmap; /* pmap of curthread */ \ + u_int32_t pc_asid_next; /* next ASID to alloc */ \ u_int32_t pc_asid_generation; /* current ASID generation */ struct pcb; @@ -50,15 +50,14 @@ extern struct pcpu *pcpup; extern struct pcpu __pcpu; -#define PCPU_GET(member) (__pcpu.pc_ ## member) - /* * XXX The implementation of this operation should be made atomic * with respect to preemption. */ +#define PCPU_GET(member) (__pcpu.pc_ ## member) #define PCPU_ADD(member, value) (__pcpu.pc_ ## member += (value)) -#define PCPU_INC(member) PCPU_ADD(member, 1) -#define PCPU_PTR(member) (&__pcpu.pc_ ## member) +#define PCPU_INC(member) PCPU_ADD(member, 1) +#define PCPU_PTR(member) (&__pcpu.pc_ ## member) #define PCPU_SET(member,value) (__pcpu.pc_ ## member = (value)) #endif /* _KERNEL */ ==== //depot/projects/avr32/src/sys/avr32/include/pte.h#2 (text+ko) ==== @@ -61,6 +61,7 @@ #define PTE_DIRTY bit_offset(SYS, TLBELO, D) /* Dirty */ #define pfn_get(x) (x & bit_mask(SYS, TLBELO, PFN)) #define pfn_set(x, pfn) x &= ~bit_mask(SYS, TLBELO, PFN); x |= (pfn & bit_mask(SYS, TLBELO, PFN)); +#define PTE_RW (PTE_PERM_READ | PTE_PERM_WRITE) // Page size, not set in PTE, always 4K #define PTE_SIZE_1K bit_value(SYS, TLBELO, SZ, 0) ==== //depot/projects/avr32/src/sys/avr32/include/tlb.h#2 (text+ko) ==== @@ -1,6 +1,9 @@ #ifndef _MACHINE_TLB_H_ #define _MACHINE_TLB_H_ -void tlb_dump(void); +#define TLB_SIZE 32 /* Number of TLB entries, this should be read from config1 */ + +void tlb_dump(void); /* Dump content of TLB to console */ +void tlb_flush(void); /* Invalid all TLB entries */ #endif // !_MACHINE_TLB_H_ ==== //depot/projects/avr32/src/sys/conf/files.avr32#2 (text+ko) ==== @@ -19,6 +19,11 @@ avr32/avr32/at32.c standard avr32/avr32/trap.c standard avr32/avr32/tlb.c standard +avr32/avr32/db_interface.c optional ddb +avr32/avr32/db_trace.c optional ddb +avr32/avr32/db_disasm.c optional gdb +avr32/avr32/stack_machdep.c optional ddb | stack +avr32/avr32/gdb_machdep.c optional gdb libkern/ashldi3.c standard libkern/ashrdi3.c standard