This is the mail archive of the crossgcc@sourceware.cygnus.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more infromation.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
You're getting an F-line trap. In other words, you are trying to execute an illegal opcode which has the value $Fxxx. Have a look at the opcode that the PC is pointing to (location $00033acc). Then you can check the linker map file to find out what function (if any) corresponds to this location, and you should then be able to figure out where it came from and what to do about it. From what I can tell here, you're linking the correct set of libraries. However, if you are using any of the 'libgloss' IDP I/O routines supplied by Cygnus (for example: inbyte(), outbyte(), etc) be aware that (at least in newlib-1.8.0) there was an error in libgloss/m68k/Makefile.in which caused these routines to be compiled for the 68020 instruction set for all targets. This may be the source of the illegal opcodes when you link for a 68000 target. To fix it, remove the command lines associated with these files in Makefile.in and re-build libgloss. As far as the bus errors are concerned, my guess is that somehow the a0 register is getting loaded with an invalid address (it might be an odd value, or it might point to an unimplemented memory address), and the processor is getting a bus error when it tries to read from that location. You didn't show the register dump from the bus error, so it's kind of hard to tell from here. Your linker script and makefile look reasonable. One thing confused me, why do you specify __DYNAMIC=1 in the script? This should probably be omitted for most embedded applications. Scott -----Original Message----- From: crossgcc-owner@sourceware.cygnus.com [mailto:crossgcc-owner@sourceware.cygnus.com]On Behalf Of Aklilu Noah Sent: Wednesday, May 17, 2000 4:57 PM To: crossgcc@sourceware.cygnus.com Subject: Re: Problem with the stack on m68k Thanks Peter and Scott for your responses. So that takes care of the calling procedure. But I am still get bus errors and an strange exception that I don't recognize: F-Line Vector = B True A7 = FFCF0 True SR = 2700 PC =$00033ACC SR =$00002700 USP =$00001B00 SSP =$000FFCF8 D0 =$FFFFFFFF D1 =$00000007 D2 =$000409B1 D3 =$00000008 D4 =$00000008 D5 =$00000009 D6 =$00000001 D7 =$0003646E A0 =$000FFF1A A1 =$000FFF18 A2 =$000409B3 A3 =$000FFF30 A4 =$000FFF60 A5 =$00000008 A6 =$000FFD04 A7 =$000 The monitor on the board is derived from the now old FBug68 v. 1.1 (circa 1990). The errors seem to linked to values in the variable space of the function (main in this case), for example the sequence would be 87 0162 206E FFFC move.l -4(%a6),%a0 88 0166 2D50 FFE8 move.l (%a0),-24(%a6) the bus error would occur with the second instruction. I wondering if the way I am linking the libraries in is incorrect. The way I am trying to do it, is have it use the gizmo.ld linker script in the current directory as well as the crt0.o in the current directory. I tried to use gcc to do everything like this : CFLAGS = -mc68000 -msoft-float -malign-int -Wall -DDEBUG CC = m68k-coff-gcc AR = m68k-coff-ar LIBS = testcram.s19 : testcram.o crt0.o rotate.o ${CC} ${CFLAGS} testcram.o rotate.o -nodefaultlibs -nostartfiles -Wl,-Tgizmo.ld -Wl,-M -Wl,-otestcram.s19 But the executable it generated would not run. This is what my current makefile looks like: CFLAGS = -m68000 -mno-align-int -Wall -Wa,-alh,-L -fstack-check CC = m68k-coff-gcc AR = m68k-coff-ar LIBS = -lgizmo -lgcc -lc testcram.s19 : testcram.o crt0.o m68k-coff-ld testcram.o -L/usr/local/m68k-coff/lib/m68000 -L/usr/local/lib/gcc-lib/m68k-coff/2.95.2/m68000 -M -Tgizmo.ld -otestcram.s19 and my linker script looks like STARTUP(crt0.o) OUTPUT_ARCH(m68k) OUTPUT_FORMAT(srec) SEARCH_DIR(.) GROUP(-lgizmo -lc -lgcc) __DYNAMIC = 1; /* * Setup the memory map of the M68332BCC Business Card Computer. * stack grows down from high memory. * * The memory map look like this: * +--------------------+ <- low memory * | .text | * | _etext | * | ctor list | the ctor and dtor lists are for * | dtor list | C++ support * +--------------------+ * | .data | initialized data goes here * | _edata | * +--------------------+ * | .bss | * | __bss_start | start of bss, cleared by crt0 * | _end | start of heap, used by sbrk() * +--------------------+ * . . * . . * . . * | __stack | top of stack * +--------------------+ */ MEMORY { ram (rwx) : ORIGIN = 0x30000, LENGTH = 1M - 0x30000 } /* * allocate the stack to be at the top of memory, since the stack * grows down */ PROVIDE (__stack = 1M); /* * Initalize some symbols to be zero so we can reference them in the * crt0 without core dumping. These functions are all optional, but * we do this so we can have our crt0 always use them if they exist. * This is so BSPs work better when using the crt0 installed with gcc. * We have to initalize them twice, so we cover a.out (which prepends * an underscore) and coff object file formats. */ PROVIDE (hardware_init_hook = 0); PROVIDE (_hardware_init_hook = 0); PROVIDE (software_init_hook = 0); PROVIDE (_software_init_hook = 0); /* * stick everything in ram (of course) */ SECTIONS { .text : { *(.text) . = ALIGN(0x4); __CTOR_LIST__ = .; ___CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) __CTOR_END__ = .; __DTOR_LIST__ = .; ___DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) __DTOR_END__ = .; *(.rodata) *(.gcc_except_table) __INIT_SECTION__ = . ; LONG (0x4e560000) /* linkw %fp,#0 */ *(.init) SHORT (0x4e5e) /* unlk %fp */ SHORT (0x4e75) /* rts */ __FINI_SECTION__ = . ; LONG (0x4e560000) /* linkw %fp,#0 */ *(.fini) SHORT (0x4e5e) /* unlk %fp */ SHORT (0x4e75) /* rts */ _etext = .; *(.lit) } > ram .data : { *(.shdata) *(.data) _edata = .; } > ram .bss : { . = ALIGN(0x4); __bss_start = . ; *(.shbss) *(.bss) *(COMMON) _end = ALIGN (0x8); __end = _end; } > ram .stab 0 (NOLOAD) : { *(.stab) } .stabstr 0 (NOLOAD) : { *(.stabstr) } } Noah Aklilu aklilu@nyquist.ee.ualberta.ca http://www.ee.ualberta.ca/~aklilu/ "Integrity is something you do when no one is looking" ------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com ------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |