summaryrefslogtreecommitdiffstats
path: root/gdb
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-05-17 00:31:50 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-05-17 00:31:50 +0000
commit1dc42d1fcbe293513c45cdef1a0278ae3e4ecf1a (patch)
tree103b25b68573d34e3cde9c2a3553ce9eb8352362 /gdb
parente96a085af8b51d20b0925f50abb8dcc2798291e0 (diff)
downloadrockbox-1dc42d1fcbe293513c45cdef1a0278ae3e4ecf1a.tar.gz
rockbox-1dc42d1fcbe293513c45cdef1a0278ae3e4ecf1a.zip
Now compiles without newlib. Refined the Makefile a little.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3674 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'gdb')
-rw-r--r--gdb/Makefile24
-rw-r--r--gdb/README27
-rw-r--r--gdb/setjmp.S59
-rw-r--r--gdb/sh-stub.c40
4 files changed, 135 insertions, 15 deletions
diff --git a/gdb/Makefile b/gdb/Makefile
index 518217fc70..21c0cf8341 100644
--- a/gdb/Makefile
+++ b/gdb/Makefile
@@ -6,25 +6,37 @@
# \/ \/ \/ \/ \/
# $Id$
#
+
+ifdef RECORDER
+EXTRA = -DRECORDER
+EXT = ajz
+else
+EXT = mod
+endif
+
TARGET = stub
-OBJS = start.o sh-stub.o
+OBJS = start.o sh-stub.o setjmp.o
LIBS = -lgcc
.s.o:
sh-elf-as -o $@ $<
.c.o:
- sh-elf-gcc -O -I../firmware/drivers -m1 -Wall -Wstrict-prototypes -c -o $@ $<
+ sh-elf-gcc -O $(EXTRA) -I../firmware/export -I../firmware/include -m1 -Wall -Wstrict-prototypes -c -o $@ $<
+
+.S.o:
+ sh-elf-gcc -O -I../firmware/export -I../firmware/include -m1 -Wall -Wstrict-prototypes -c -o $@ $<
-archos.mod: $(TARGET).elf
+$(TARGET).$(EXT): $(TARGET).elf
sh-elf-objcopy -O binary $(TARGET).elf $(TARGET).out
- ../tools/scramble $(TARGET).out archos.mod
+ ../tools/scramble $(TARGET).out $(TARGET).$(EXT)
$(TARGET).elf: $(OBJS)
- sh-elf-gcc -nostartfiles $(OBJS) -lgcc -Wl,-Map,$(TARGET).map -o $(TARGET).elf -Tlinker.cfg
+ sh-elf-gcc -nostartfiles $(OBJS) -nostdlib -Wl,-Map,$(TARGET).map -o $(TARGET).elf -Tlinker.cfg
clean:
- rm $(OBJS) $(TARGET).map $(TARGET).elf $(TARGET).out archos.mod
+ rm $(OBJS) $(TARGET).map $(TARGET).elf $(TARGET).out $(TARGET).mod $(TARGET).ajz
start.o: start.s
sh-stub.o: sh-stub.c
+setjmp.o: setjmp.S
diff --git a/gdb/README b/gdb/README
index 751fb22946..e61c930ea8 100644
--- a/gdb/README
+++ b/gdb/README
@@ -23,14 +23,23 @@ To debug using the serial port on the Jukebox, you need to do the following:
2) Build or download a GDB SH1 cross debugger
3) Compile the GDB stub from the CVS "gdb" archive
+ For Player models, just type:
+ # make
+
+ For Recorder, type
+ #make RECORDER=1
4) Copy the newly built ARCHOS.MOD to the Jukebox.
5) Start the Jukebox and fire up the GDB with the elf file you want to debug
as an argument along with the baud rate:
+ For Player:
# sh-elf-gdb -b 38400 test.elf
+ For Recorder:
+ # sh-elf-gdb -b 115200 test.elf
+
6) In GDB, type:
(gdb) target remote /dev/ttyS0
@@ -58,13 +67,13 @@ To debug using the serial port on the Jukebox, you need to do the following:
8) You're set. Now try to set a breakpoint and run:
- (gdb) b 22
- Breakpoint 1 at 0x90182c6: file led.c, line 14.
+ (gdb) b main
+ Breakpoint 1 at 0x9011b2a: file main.c, line 192.
(gdb) c
Continuing.
- Breakpoint 2, main () at led.c:15
- 15 SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER);
+ Breakpoint 1, main () at main.c:192
+ 192 app_main();
(gdb)
Good luck!
@@ -73,8 +82,14 @@ To debug using the serial port on the Jukebox, you need to do the following:
Technical details:
As for now, the GDB stub occupies the memory from 0x900000 up to
- 0x9018000. This will change.
+ 0x9018000.
Compile and link your test program at 0x9018000 and up, and it will work.
- The baud rate is 38400, and the settings are 8N1.
+ The baud rate is 38400 for Player, 115200 for Recorder, and the settings
+ are 8N1.
+
+ Note that you may have to change the ATA I/O address in the ATA_CONTROL
+ macro in sh-stub.c. go to Menu->Debug (keep out)->View HW info to find out.
+
+ Linus Nielsen Feltzing
diff --git a/gdb/setjmp.S b/gdb/setjmp.S
new file mode 100644
index 0000000000..28a6ce2f43
--- /dev/null
+++ b/gdb/setjmp.S
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Red Hat Inc
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+ .type _setjmp,@function
+ .global _setjmp
+_setjmp:
+ add #(9*4),r4
+
+ sts.l pr,@-r4
+
+ mov.l r15,@-r4
+ mov.l r14,@-r4
+ mov.l r13,@-r4
+ mov.l r12,@-r4
+
+ mov.l r11,@-r4
+ mov.l r10,@-r4
+ mov.l r9,@-r4
+ mov.l r8,@-r4
+
+ rts
+ mov #0,r0
+
+ .type _longjmp,@function
+ .global _longjmp
+_longjmp:
+ mov.l @r4+,r8
+ mov.l @r4+,r9
+ mov.l @r4+,r10
+ mov.l @r4+,r11
+
+ mov.l @r4+,r12
+ mov.l @r4+,r13
+ mov.l @r4+,r14
+ mov.l @r4+,r15
+
+ lds.l @r4+,pr
+
+ mov r5,r0
+ tst r0,r0
+ bf retr4
+ movt r0
+retr4: rts
+ nop
diff --git a/gdb/sh-stub.c b/gdb/sh-stub.c
index 7a717e0ac5..61c63596bc 100644
--- a/gdb/sh-stub.c
+++ b/gdb/sh-stub.c
@@ -166,8 +166,11 @@
#include "sh7034.h"
#include <string.h>
-#include <setjmp.h>
-#include <signal.h>
+
+typedef int jmp_buf[20];
+
+void longjmp(jmp_buf __jmpb, int __retval);
+int setjmp(jmp_buf __jmpb);
/* We need to undefine this from the sh7034.h file */
#undef GBR
@@ -411,7 +414,12 @@ static char remcomOutBuffer[BUFMAX];
#define ATA_NSECTOR (*((volatile unsigned char*)0x06100102))
#define ATA_COMMAND (*((volatile unsigned char*)0x06100107))
+
+#ifdef RECORDER
+#define ATA_CONTROL (*((volatile unsigned char*)0x06200206))
+#else
#define ATA_CONTROL (*((volatile unsigned char*)0x06200306))
+#endif
#define ATA_ALT_STATUS ATA_CONTROL
#define STATUS_BSY 0x80
@@ -690,6 +698,12 @@ void handle_buserror (void)
longjmp (remcomEnv, 1);
}
+#define SIGINT 2 /* interrupt */
+#define SIGILL 4 /* illegal instruction (not reset when caught) */
+#define SIGTRAP 5 /* trace trap (not reset when caught) */
+#define SIGEMT 7 /* EMT instruction */
+#define SIGBUS 10 /* bus error */
+
/*
* this function takes the SH-1 exception number and attempts to
* translate this number into a unix compatible signal value
@@ -1509,8 +1523,13 @@ void init_serial (void)
/* Set communication to be async, 8-bit data,
no parity, 1 stop bit and use internal clock */
SMR1 = 0;
-/* BRR1 = SYSCLOCK / (9600 * 32) - 1;*/
+
+#ifdef RECORDER
+ #warning 115200
+ BRR1 = 2; /* 115200 */
+#else
BRR1 = 9; /* 38400 */
+#endif
SCR1 &= ~(SCI_CKE1 | SCI_CKE0);
@@ -1575,3 +1594,18 @@ void handleError (char theSSR)
/* Clear all error bits, otherwise the receiver will stop */
SSR1 &= ~(SCI_ORER | SCI_PER | SCI_FER);
}
+
+void *memcpy(void *dest, const void *src0, size_t n)
+{
+ char *dst = (char *) dest;
+ char *src = (char *) src0;
+
+ void *save = dest;
+
+ while(n--)
+ {
+ *dst++ = *src++;
+ }
+
+ return save;
+}