PERFORCE change 157013 for review
Arnar Mar Sig
antab at FreeBSD.org
Sun Feb 1 15:44:52 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=157013
Change 157013 by antab at 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 <sys/vmmeter.h>
#include <sys/cons.h>
#include <sys/kdb.h>
+#include <vm/vm.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_object.h>
+#include <vm/vm_page.h>
+#include <vm/pmap.h>
+#include <vm/vm_map.h>
+#include <vm/vm_pager.h>
+#include <vm/vm_extern.h>
#include <machine/cpu.h>
#include <machine/reg.h>
#include <machine/pcb.h>
@@ -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 <sys/user.h>
#include <sys/uio.h>
#include <sys/ptrace.h>
+#include <sys/sysproto.h>
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
@@ -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 <vm/vm_map.h>
#include <vm/vm_extern.h>
+#include <machine/cpu.h>
+#include <machine/pcb.h>
#include <machine/debug.h>
/*
@@ -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 <sys/types.h>
@@ -47,6 +47,10 @@
#include <machine/sysarch.h>
#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 <machine/psl.h>
#include <machine/endian.h>
#include <machine/frame.h>
+#include <machine/reg.h>
+#include <machine/reg_sys.h>
// 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
More information about the p4-projects
mailing list