Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] FRV: Introduce asm-offsets for FRV arch

Introduce the use of asm-offsets into the FRV architecture.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

David Howells and committed by
Linus Torvalds
84e8cd6d 6d8c4e3b

+311 -195
+115 -1
arch/frv/kernel/asm-offsets.c
··· 1 - /* Dummy asm-offsets.c file. Required by kbuild and ready to be used - hint! */ 1 + /* 2 + * Generate definitions needed by assembly language modules. 3 + * This code generates raw asm output which is post-processed 4 + * to extract and format the required data. 5 + */ 6 + 7 + #include <linux/sched.h> 8 + #include <linux/signal.h> 9 + #include <linux/personality.h> 10 + #include <asm/registers.h> 11 + #include <asm/ucontext.h> 12 + #include <asm/processor.h> 13 + #include <asm/thread_info.h> 14 + #include <asm/gdb-stub.h> 15 + 16 + #define DEFINE(sym, val) \ 17 + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 18 + 19 + #define DEF_PTREG(sym, reg) \ 20 + asm volatile("\n->" #sym " %0 offsetof(struct pt_regs, " #reg ")" \ 21 + : : "i" (offsetof(struct pt_regs, reg))) 22 + 23 + #define DEF_IREG(sym, reg) \ 24 + asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \ 25 + : : "i" (offsetof(struct user_context, reg))) 26 + 27 + #define DEF_FREG(sym, reg) \ 28 + asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \ 29 + : : "i" (offsetof(struct user_context, reg))) 30 + 31 + #define DEF_0REG(sym, reg) \ 32 + asm volatile("\n->" #sym " %0 offsetof(struct frv_frame0, " #reg ")" \ 33 + : : "i" (offsetof(struct frv_frame0, reg))) 34 + 35 + #define BLANK() asm volatile("\n->" : : ) 36 + 37 + #define OFFSET(sym, str, mem) \ 38 + DEFINE(sym, offsetof(struct str, mem)); 39 + 40 + void foo(void) 41 + { 42 + /* offsets into the thread_info structure */ 43 + OFFSET(TI_TASK, thread_info, task); 44 + OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain); 45 + OFFSET(TI_FLAGS, thread_info, flags); 46 + OFFSET(TI_STATUS, thread_info, status); 47 + OFFSET(TI_CPU, thread_info, cpu); 48 + OFFSET(TI_PREEMPT_COUNT, thread_info, preempt_count); 49 + OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit); 50 + OFFSET(TI_RESTART_BLOCK, thread_info, restart_block); 51 + BLANK(); 52 + 53 + /* offsets into register file storage */ 54 + DEF_PTREG(REG_PSR, psr); 55 + DEF_PTREG(REG_ISR, isr); 56 + DEF_PTREG(REG_CCR, ccr); 57 + DEF_PTREG(REG_CCCR, cccr); 58 + DEF_PTREG(REG_LR, lr); 59 + DEF_PTREG(REG_LCR, lcr); 60 + DEF_PTREG(REG_PC, pc); 61 + DEF_PTREG(REG__STATUS, __status); 62 + DEF_PTREG(REG_SYSCALLNO, syscallno); 63 + DEF_PTREG(REG_ORIG_GR8, orig_gr8); 64 + DEF_PTREG(REG_GNER0, gner0); 65 + DEF_PTREG(REG_GNER1, gner1); 66 + DEF_PTREG(REG_IACC0, iacc0); 67 + DEF_PTREG(REG_TBR, tbr); 68 + DEF_PTREG(REG_GR0, tbr); 69 + DEFINE(REG__END, sizeof(struct pt_regs)); 70 + BLANK(); 71 + 72 + DEF_0REG(REG_DCR, debug.dcr); 73 + DEF_0REG(REG_IBAR0, debug.ibar[0]); 74 + DEF_0REG(REG_DBAR0, debug.dbar[0]); 75 + DEF_0REG(REG_DBDR00, debug.dbdr[0][0]); 76 + DEF_0REG(REG_DBMR00, debug.dbmr[0][0]); 77 + BLANK(); 78 + 79 + DEF_IREG(__INT_GR0, i.gr[0]); 80 + DEF_FREG(__USER_FPMEDIA, f); 81 + DEF_FREG(__FPMEDIA_FR0, f.fr[0]); 82 + DEF_FREG(__FPMEDIA_FNER0, f.fner[0]); 83 + DEF_FREG(__FPMEDIA_MSR0, f.msr[0]); 84 + DEF_FREG(__FPMEDIA_ACC0, f.acc[0]); 85 + DEF_FREG(__FPMEDIA_ACCG0, f.accg[0]); 86 + DEF_FREG(__FPMEDIA_FSR0, f.fsr[0]); 87 + BLANK(); 88 + 89 + DEFINE(NR_PT_REGS, sizeof(struct pt_regs) / 4); 90 + DEFINE(NR_USER_INT_REGS, sizeof(struct user_int_regs) / 4); 91 + DEFINE(NR_USER_FPMEDIA_REGS, sizeof(struct user_fpmedia_regs) / 4); 92 + DEFINE(NR_USER_CONTEXT, sizeof(struct user_context) / 4); 93 + DEFINE(FRV_FRAME0_SIZE, sizeof(struct frv_frame0)); 94 + BLANK(); 95 + 96 + /* offsets into thread_struct */ 97 + OFFSET(__THREAD_FRAME, thread_struct, frame); 98 + OFFSET(__THREAD_CURR, thread_struct, curr); 99 + OFFSET(__THREAD_SP, thread_struct, sp); 100 + OFFSET(__THREAD_FP, thread_struct, fp); 101 + OFFSET(__THREAD_LR, thread_struct, lr); 102 + OFFSET(__THREAD_PC, thread_struct, pc); 103 + OFFSET(__THREAD_GR16, thread_struct, gr[0]); 104 + OFFSET(__THREAD_SCHED_LR, thread_struct, sched_lr); 105 + OFFSET(__THREAD_FRAME0, thread_struct, frame0); 106 + OFFSET(__THREAD_USER, thread_struct, user); 107 + BLANK(); 108 + 109 + /* offsets into frv_debug_status */ 110 + OFFSET(DEBUG_BPSR, frv_debug_status, bpsr); 111 + OFFSET(DEBUG_DCR, frv_debug_status, dcr); 112 + OFFSET(DEBUG_BRR, frv_debug_status, brr); 113 + OFFSET(DEBUG_NMAR, frv_debug_status, nmar); 114 + BLANK(); 115 + }
+19 -15
arch/frv/kernel/break.S
··· 9 9 * 2 of the License, or (at your option) any later version. 10 10 */ 11 11 12 - #include <linux/sys.h> 13 12 #include <linux/linkage.h> 14 13 #include <asm/setup.h> 15 14 #include <asm/segment.h> 16 15 #include <asm/ptrace.h> 16 + #include <asm/thread_info.h> 17 17 #include <asm/spr-regs.h> 18 18 19 19 #include <asm/errno.h> ··· 23 23 # 24 24 .section .bss.stack 25 25 .globl __break_user_context 26 - .balign 8192 26 + .balign THREAD_SIZE 27 27 __break_stack: 28 - .space (8192 - (USER_CONTEXT_SIZE + REG__DEBUG_XTRA)) & ~7 29 - __break_stack_tos: 30 - .space REG__DEBUG_XTRA 31 - __break_user_context: 32 - .space USER_CONTEXT_SIZE 28 + .space THREAD_SIZE - FRV_FRAME0_SIZE 29 + __break_frame_0: 30 + .space FRV_FRAME0_SIZE 33 31 34 32 # 35 33 # miscellaneous variables ··· 72 74 #endif 73 75 LEDS 0x1001,gr31 74 76 75 - sethi.p %hi(__break_user_context),gr31 76 - setlo %lo(__break_user_context),gr31 77 + sethi.p %hi(__break_frame_0),gr31 78 + setlo %lo(__break_frame_0),gr31 77 79 78 80 stdi gr2,@(gr31,#REG_GR(2)) 79 81 movsg ccr,gr3 ··· 583 585 # set up the kernel stack pointer 584 586 sti sp,@(gr31,#REG_SP) 585 587 586 - sethi.p %hi(__break_stack_tos),sp 587 - setlo %lo(__break_stack_tos),sp 588 + sethi.p %hi(__break_frame_0),sp 589 + setlo %lo(__break_frame_0),sp 588 590 589 591 # finish building the exception frame 590 592 stdi gr4 ,@(gr31,#REG_GR(4)) ··· 649 651 movsg nmar,gr5 650 652 movsg dcr,gr6 651 653 652 - stdi gr4 ,@(gr31,#REG_BRR) 653 - sti gr19,@(gr31,#REG_BPSR) 654 - sti.p gr6 ,@(gr31,#REG_DCR) 654 + sethi.p %hi(__debug_status),gr7 655 + setlo %lo(__debug_status),gr7 656 + 657 + stdi gr4 ,@(gr7,#DEBUG_BRR) 658 + sti gr19,@(gr7,#DEBUG_BPSR) 659 + sti.p gr6 ,@(gr7,#DEBUG_DCR) 655 660 656 661 # trap exceptions during break handling and disable h/w breakpoints/watchpoints 657 662 sethi %hi(DCR_EBE),gr5 ··· 699 698 lddi @(gr31,#REG_PSR) ,gr22 700 699 ldi @(gr31,#REG_PC) ,gr21 701 700 ldi @(gr31,#REG_TBR) ,gr20 702 - ldi.p @(gr31,#REG_DCR) ,gr6 701 + 702 + sethi.p %hi(__debug_status),gr6 703 + setlo %lo(__debug_status),gr6 704 + ldi.p @(gr6,#DEBUG_DCR) ,gr6 703 705 704 706 andi gr22,#PSR_S,gr19 /* rebuild BPSR */ 705 707 andi.p gr22,#PSR_ET,gr5
+6 -7
arch/frv/kernel/debug-stub.c
··· 39 39 gdbstub_do_rx(); \ 40 40 } while(!FLOWCTL_QUERY(LINE)) 41 41 42 - static void __init debug_stub_init(void); 42 + struct frv_debug_status __debug_status; 43 43 44 - extern asmlinkage void __break_hijack_kernel_event(void); 45 - extern asmlinkage void __break_hijack_kernel_event_breaks_here(void); 44 + static void __init debug_stub_init(void); 46 45 47 46 /*****************************************************************************/ 48 47 /* ··· 66 67 __set_HSR(0, hsr0 & ~HSR0_ETMD); 67 68 68 69 /* disable single stepping */ 69 - __debug_regs->dcr &= ~DCR_SE; 70 + __debug_status.dcr &= ~DCR_SE; 70 71 71 72 /* kernel mode can propose an exception be handled in debug mode by jumping to a special 72 73 * location */ ··· 75 76 * the top kernel context */ 76 77 *__debug_frame = *__frame; 77 78 __frame = __debug_frame->next_frame; 78 - __debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12; 79 - __debug_regs->brr |= BRR_EB; 79 + __debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12; 80 + __debug_status.brr |= BRR_EB; 80 81 } 81 82 82 83 if (__debug_frame->pc == (unsigned long) __debug_bug_trap + 4) { ··· 123 124 __debug_frame->pc = (unsigned long) start_kernel; 124 125 125 126 /* enable the debug events we want to trap */ 126 - __debug_regs->dcr = DCR_EBE; 127 + __debug_status.dcr = DCR_EBE; 127 128 128 129 #ifdef CONFIG_GDBSTUB 129 130 gdbstub_init();
-1
arch/frv/kernel/entry.S
··· 27 27 * 28 28 */ 29 29 30 - #include <linux/sys.h> 31 30 #include <linux/linkage.h> 32 31 #include <asm/thread_info.h> 33 32 #include <asm/setup.h>
+90 -69
arch/frv/kernel/gdb-stub.c
··· 124 124 #include <linux/slab.h> 125 125 #include <linux/nmi.h> 126 126 127 + #include <asm/asm-offsets.h> 127 128 #include <asm/pgtable.h> 128 129 #include <asm/system.h> 129 130 #include <asm/gdb-stub.h> ··· 137 136 extern void gdbstub_console_write(struct console *co, const char *p, unsigned n); 138 137 139 138 extern volatile uint32_t __break_error_detect[3]; /* ESFR1, ESR15, EAR15 */ 140 - extern struct user_context __break_user_context; 141 139 142 140 struct __debug_amr { 143 141 unsigned long L, P; ··· 926 926 if (!(__debug_regs->dcr & DCR_IBE0)) { 927 927 //gdbstub_printk("set h/w break 0: %08lx\n", addr); 928 928 __debug_regs->dcr |= DCR_IBE0; 929 + __debug_regs->ibar[0] = addr; 929 930 asm volatile("movgs %0,ibar0" : : "r"(addr)); 930 931 return 0; 931 932 } ··· 934 933 if (!(__debug_regs->dcr & DCR_IBE1)) { 935 934 //gdbstub_printk("set h/w break 1: %08lx\n", addr); 936 935 __debug_regs->dcr |= DCR_IBE1; 936 + __debug_regs->ibar[1] = addr; 937 937 asm volatile("movgs %0,ibar1" : : "r"(addr)); 938 938 return 0; 939 939 } ··· 942 940 if (!(__debug_regs->dcr & DCR_IBE2)) { 943 941 //gdbstub_printk("set h/w break 2: %08lx\n", addr); 944 942 __debug_regs->dcr |= DCR_IBE2; 943 + __debug_regs->ibar[2] = addr; 945 944 asm volatile("movgs %0,ibar2" : : "r"(addr)); 946 945 return 0; 947 946 } ··· 950 947 if (!(__debug_regs->dcr & DCR_IBE3)) { 951 948 //gdbstub_printk("set h/w break 3: %08lx\n", addr); 952 949 __debug_regs->dcr |= DCR_IBE3; 950 + __debug_regs->ibar[3] = addr; 953 951 asm volatile("movgs %0,ibar3" : : "r"(addr)); 954 952 return 0; 955 953 } ··· 975 971 if (!(__debug_regs->dcr & (DCR_DRBE0|DCR_DWBE0))) { 976 972 //gdbstub_printk("set h/w watchpoint 0 type %ld: %08lx\n", type, addr); 977 973 tmp = type==2 ? DCR_DWBE0 : type==3 ? DCR_DRBE0 : DCR_DRBE0|DCR_DWBE0; 974 + 978 975 __debug_regs->dcr |= tmp; 976 + __debug_regs->dbar[0] = addr; 977 + __debug_regs->dbmr[0][0] = dbmr.mask0; 978 + __debug_regs->dbmr[0][1] = dbmr.mask1; 979 + __debug_regs->dbdr[0][0] = 0; 980 + __debug_regs->dbdr[0][1] = 0; 981 + 979 982 asm volatile(" movgs %0,dbar0 \n" 980 983 " movgs %1,dbmr00 \n" 981 984 " movgs %2,dbmr01 \n" ··· 995 984 if (!(__debug_regs->dcr & (DCR_DRBE1|DCR_DWBE1))) { 996 985 //gdbstub_printk("set h/w watchpoint 1 type %ld: %08lx\n", type, addr); 997 986 tmp = type==2 ? DCR_DWBE1 : type==3 ? DCR_DRBE1 : DCR_DRBE1|DCR_DWBE1; 987 + 998 988 __debug_regs->dcr |= tmp; 989 + __debug_regs->dbar[1] = addr; 990 + __debug_regs->dbmr[1][0] = dbmr.mask0; 991 + __debug_regs->dbmr[1][1] = dbmr.mask1; 992 + __debug_regs->dbdr[1][0] = 0; 993 + __debug_regs->dbdr[1][1] = 0; 994 + 999 995 asm volatile(" movgs %0,dbar1 \n" 1000 996 " movgs %1,dbmr10 \n" 1001 997 " movgs %2,dbmr11 \n" ··· 1065 1047 if (__debug_regs->dcr & DCR_IBE0 && __get_ibar(0) == addr) { 1066 1048 //gdbstub_printk("clear h/w break 0: %08lx\n", addr); 1067 1049 __debug_regs->dcr &= ~DCR_IBE0; 1050 + __debug_regs->ibar[0] = 0; 1068 1051 asm volatile("movgs gr0,ibar0"); 1069 1052 return 0; 1070 1053 } ··· 1073 1054 if (__debug_regs->dcr & DCR_IBE1 && __get_ibar(1) == addr) { 1074 1055 //gdbstub_printk("clear h/w break 1: %08lx\n", addr); 1075 1056 __debug_regs->dcr &= ~DCR_IBE1; 1057 + __debug_regs->ibar[1] = 0; 1076 1058 asm volatile("movgs gr0,ibar1"); 1077 1059 return 0; 1078 1060 } ··· 1081 1061 if (__debug_regs->dcr & DCR_IBE2 && __get_ibar(2) == addr) { 1082 1062 //gdbstub_printk("clear h/w break 2: %08lx\n", addr); 1083 1063 __debug_regs->dcr &= ~DCR_IBE2; 1064 + __debug_regs->ibar[2] = 0; 1084 1065 asm volatile("movgs gr0,ibar2"); 1085 1066 return 0; 1086 1067 } ··· 1089 1068 if (__debug_regs->dcr & DCR_IBE3 && __get_ibar(3) == addr) { 1090 1069 //gdbstub_printk("clear h/w break 3: %08lx\n", addr); 1091 1070 __debug_regs->dcr &= ~DCR_IBE3; 1071 + __debug_regs->ibar[3] = 0; 1092 1072 asm volatile("movgs gr0,ibar3"); 1093 1073 return 0; 1094 1074 } ··· 1126 1104 1127 1105 //gdbstub_printk("clear h/w watchpoint 0 type %ld: %08lx\n", type, addr); 1128 1106 __debug_regs->dcr &= ~(DCR_DRBE0|DCR_DWBE0); 1107 + __debug_regs->dbar[0] = 0; 1108 + __debug_regs->dbmr[0][0] = 0; 1109 + __debug_regs->dbmr[0][1] = 0; 1110 + __debug_regs->dbdr[0][0] = 0; 1111 + __debug_regs->dbdr[0][1] = 0; 1112 + 1129 1113 asm volatile(" movgs gr0,dbar0 \n" 1130 1114 " movgs gr0,dbmr00 \n" 1131 1115 " movgs gr0,dbmr01 \n" ··· 1151 1123 1152 1124 //gdbstub_printk("clear h/w watchpoint 1 type %ld: %08lx\n", type, addr); 1153 1125 __debug_regs->dcr &= ~(DCR_DRBE1|DCR_DWBE1); 1126 + __debug_regs->dbar[1] = 0; 1127 + __debug_regs->dbmr[1][0] = 0; 1128 + __debug_regs->dbmr[1][1] = 0; 1129 + __debug_regs->dbdr[1][0] = 0; 1130 + __debug_regs->dbdr[1][1] = 0; 1131 + 1154 1132 asm volatile(" movgs gr0,dbar1 \n" 1155 1133 " movgs gr0,dbmr10 \n" 1156 1134 " movgs gr0,dbmr11 \n" ··· 1197 1163 */ 1198 1164 static void __attribute__((unused)) gdbstub_show_regs(void) 1199 1165 { 1200 - uint32_t *reg; 1166 + unsigned long *reg; 1201 1167 int loop; 1202 1168 1203 1169 gdbstub_printk("\n"); ··· 1206 1172 __debug_frame, 1207 1173 __debug_frame->psr & PSR_S ? "kernel" : "user"); 1208 1174 1209 - reg = (uint32_t *) __debug_frame; 1210 - for (loop = 0; loop < REG__END; loop++) { 1211 - printk("%s %08x", regnames[loop + 0], reg[loop + 0]); 1175 + reg = (unsigned long *) __debug_frame; 1176 + for (loop = 0; loop < NR_PT_REGS; loop++) { 1177 + printk("%s %08lx", regnames[loop + 0], reg[loop + 0]); 1212 1178 1213 - if (loop == REG__END - 1 || loop % 5 == 4) 1179 + if (loop == NR_PT_REGS - 1 || loop % 5 == 4) 1214 1180 printk("\n"); 1215 1181 else 1216 1182 printk(" | "); ··· 1225 1191 */ 1226 1192 static void __attribute__((unused)) gdbstub_dump_debugregs(void) 1227 1193 { 1228 - unsigned long x; 1229 - 1230 - x = __debug_regs->dcr; 1231 - gdbstub_printk("DCR %08lx ", x); 1232 - 1233 - x = __debug_regs->brr; 1234 - gdbstub_printk("BRR %08lx\n", x); 1194 + gdbstub_printk("DCR %08lx ", __debug_status.dcr); 1195 + gdbstub_printk("BRR %08lx\n", __debug_status.brr); 1235 1196 1236 1197 gdbstub_printk("IBAR0 %08lx ", __get_ibar(0)); 1237 1198 gdbstub_printk("IBAR1 %08lx ", __get_ibar(1)); ··· 1389 1360 #endif 1390 1361 } 1391 1362 1392 - save_user_regs(&__break_user_context); 1363 + save_user_regs(&__debug_frame0->uc); 1393 1364 1394 1365 #if 0 1395 1366 gdbstub_printk("--> gdbstub() %08x %p %08x %08x\n", ··· 1418 1389 __debug_frame->psr &= ~PSR_S; 1419 1390 if (__debug_frame->psr & PSR_PS) 1420 1391 __debug_frame->psr |= PSR_S; 1421 - __debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12; 1422 - __debug_regs->brr |= BRR_EB; 1392 + __debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12; 1393 + __debug_status.brr |= BRR_EB; 1423 1394 sigval = SIGINT; 1424 1395 } 1425 1396 ··· 1433 1404 __debug_frame->psr &= ~PSR_S; 1434 1405 if (__debug_frame->psr & PSR_PS) 1435 1406 __debug_frame->psr |= PSR_S; 1436 - __debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12; 1437 - __debug_regs->brr |= BRR_EB; 1407 + __debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12; 1408 + __debug_status.brr |= BRR_EB; 1438 1409 sigval = SIGXCPU; 1439 1410 } 1440 1411 1441 1412 LEDS(0x5002); 1442 1413 1443 1414 /* after a BREAK insn, the PC lands on the far side of it */ 1444 - if (__debug_regs->brr & BRR_SB) 1415 + if (__debug_status.brr & BRR_SB) 1445 1416 gdbstub_check_breakpoint(); 1446 1417 1447 1418 LEDS(0x5003); ··· 1460 1431 } 1461 1432 1462 1433 if (!sigval) 1463 - sigval = gdbstub_compute_signal(__debug_regs->brr); 1434 + sigval = gdbstub_compute_signal(__debug_status.brr); 1464 1435 1465 1436 LEDS(0x5004); 1466 1437 ··· 1470 1441 if (sigval != SIGINT && sigval != SIGTRAP && sigval != SIGILL) { 1471 1442 static const char title[] = "Break "; 1472 1443 static const char crlf[] = "\r\n"; 1473 - unsigned long brr = __debug_regs->brr; 1444 + unsigned long brr = __debug_status.brr; 1474 1445 char hx; 1475 1446 1476 1447 ptr = output_buffer; ··· 1594 1565 ptr = mem2hex(&zero, ptr, 4, 0); 1595 1566 1596 1567 for (loop = 1; loop <= 27; loop++) 1597 - ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop), 1598 - ptr, 4, 0); 1568 + ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0); 1599 1569 temp = (unsigned long) __frame; 1600 1570 ptr = mem2hex(&temp, ptr, 4, 0); 1601 - ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(29), ptr, 4, 0); 1602 - ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(30), ptr, 4, 0); 1571 + ptr = mem2hex(&__debug_user_context->i.gr[29], ptr, 4, 0); 1572 + ptr = mem2hex(&__debug_user_context->i.gr[30], ptr, 4, 0); 1603 1573 #ifdef CONFIG_MMU 1604 - ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(31), ptr, 4, 0); 1574 + ptr = mem2hex(&__debug_user_context->i.gr[31], ptr, 4, 0); 1605 1575 #else 1606 1576 temp = (unsigned long) __debug_frame; 1607 1577 ptr = mem2hex(&temp, ptr, 4, 0); 1608 1578 #endif 1609 1579 1610 1580 for (loop = 32; loop <= 63; loop++) 1611 - ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop), 1612 - ptr, 4, 0); 1581 + ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0); 1613 1582 1614 1583 /* deal with FR0-FR63 */ 1615 1584 for (loop = 0; loop <= 63; loop++) 1616 - ptr = mem2hex((unsigned long *)&__break_user_context + 1617 - __FPMEDIA_FR(loop), 1618 - ptr, 4, 0); 1585 + ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0); 1619 1586 1620 1587 /* deal with special registers */ 1621 1588 ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0); ··· 1622 1597 ptr = mem2hex(&zero, ptr, 4, 0); 1623 1598 ptr = mem2hex(&zero, ptr, 4, 0); 1624 1599 ptr = mem2hex(&__debug_frame->tbr, ptr, 4, 0); 1625 - ptr = mem2hex(&__debug_regs->brr , ptr, 4, 0); 1600 + ptr = mem2hex(&__debug_status.brr , ptr, 4, 0); 1626 1601 1627 1602 asm volatile("movsg dbar0,%0" : "=r"(dbar)); 1628 1603 ptr = mem2hex(&dbar, ptr, 4, 0); ··· 1647 1622 1648 1623 ptr = mem2hex(&__debug_frame->iacc0, ptr, 8, 0); 1649 1624 1650 - ptr = mem2hex(&__break_user_context.f.fsr[0], ptr, 4, 0); 1625 + ptr = mem2hex(&__debug_user_context->f.fsr[0], ptr, 4, 0); 1651 1626 1652 1627 for (loop = 0; loop <= 7; loop++) 1653 - ptr = mem2hex(&__break_user_context.f.acc[loop], ptr, 4, 0); 1628 + ptr = mem2hex(&__debug_user_context->f.acc[loop], ptr, 4, 0); 1654 1629 1655 - ptr = mem2hex(&__break_user_context.f.accg, ptr, 8, 0); 1630 + ptr = mem2hex(&__debug_user_context->f.accg, ptr, 8, 0); 1656 1631 1657 1632 for (loop = 0; loop <= 1; loop++) 1658 - ptr = mem2hex(&__break_user_context.f.msr[loop], ptr, 4, 0); 1633 + ptr = mem2hex(&__debug_user_context->f.msr[loop], ptr, 4, 0); 1659 1634 1660 1635 ptr = mem2hex(&__debug_frame->gner0, ptr, 4, 0); 1661 1636 ptr = mem2hex(&__debug_frame->gner1, ptr, 4, 0); 1662 1637 1663 - ptr = mem2hex(&__break_user_context.f.fner[0], ptr, 4, 0); 1664 - ptr = mem2hex(&__break_user_context.f.fner[1], ptr, 4, 0); 1638 + ptr = mem2hex(&__debug_user_context->f.fner[0], ptr, 4, 0); 1639 + ptr = mem2hex(&__debug_user_context->f.fner[1], ptr, 4, 0); 1665 1640 1666 1641 break; 1667 1642 ··· 1673 1648 ptr = hex2mem(ptr, &temp, 4); 1674 1649 1675 1650 for (loop = 1; loop <= 27; loop++) 1676 - ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop), 1677 - 4); 1651 + ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4); 1678 1652 1679 1653 ptr = hex2mem(ptr, &temp, 4); 1680 1654 __frame = (struct pt_regs *) temp; ··· 1686 1662 #endif 1687 1663 1688 1664 for (loop = 32; loop <= 63; loop++) 1689 - ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop), 1690 - 4); 1665 + ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4); 1691 1666 1692 1667 /* deal with FR0-FR63 */ 1693 1668 for (loop = 0; loop <= 63; loop++) 1694 - ptr = mem2hex((unsigned long *)&__break_user_context + 1695 - __FPMEDIA_FR(loop), 1696 - ptr, 4, 0); 1669 + ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0); 1697 1670 1698 1671 /* deal with special registers */ 1699 1672 ptr = hex2mem(ptr, &__debug_frame->pc, 4); ··· 1715 1694 1716 1695 ptr = hex2mem(ptr, &__debug_frame->iacc0, 8); 1717 1696 1718 - ptr = hex2mem(ptr, &__break_user_context.f.fsr[0], 4); 1697 + ptr = hex2mem(ptr, &__debug_user_context->f.fsr[0], 4); 1719 1698 1720 1699 for (loop = 0; loop <= 7; loop++) 1721 - ptr = hex2mem(ptr, &__break_user_context.f.acc[loop], 4); 1700 + ptr = hex2mem(ptr, &__debug_user_context->f.acc[loop], 4); 1722 1701 1723 - ptr = hex2mem(ptr, &__break_user_context.f.accg, 8); 1702 + ptr = hex2mem(ptr, &__debug_user_context->f.accg, 8); 1724 1703 1725 1704 for (loop = 0; loop <= 1; loop++) 1726 - ptr = hex2mem(ptr, &__break_user_context.f.msr[loop], 4); 1705 + ptr = hex2mem(ptr, &__debug_user_context->f.msr[loop], 4); 1727 1706 1728 1707 ptr = hex2mem(ptr, &__debug_frame->gner0, 4); 1729 1708 ptr = hex2mem(ptr, &__debug_frame->gner1, 4); 1730 1709 1731 - ptr = hex2mem(ptr, &__break_user_context.f.fner[0], 4); 1732 - ptr = hex2mem(ptr, &__break_user_context.f.fner[1], 4); 1710 + ptr = hex2mem(ptr, &__debug_user_context->f.fner[0], 4); 1711 + ptr = hex2mem(ptr, &__debug_user_context->f.fner[1], 4); 1733 1712 1734 1713 gdbstub_strcpy(output_buffer,"OK"); 1735 1714 break; ··· 1790 1769 case GDB_REG_GR(0): 1791 1770 break; 1792 1771 case GDB_REG_GR(1) ... GDB_REG_GR(63): 1793 - __break_user_context.i.gr[addr - GDB_REG_GR(0)] = temp; 1772 + __debug_user_context->i.gr[addr - GDB_REG_GR(0)] = temp; 1794 1773 break; 1795 1774 case GDB_REG_FR(0) ... GDB_REG_FR(63): 1796 - __break_user_context.f.fr[addr - GDB_REG_FR(0)] = temp; 1775 + __debug_user_context->f.fr[addr - GDB_REG_FR(0)] = temp; 1797 1776 break; 1798 1777 case GDB_REG_PC: 1799 - __break_user_context.i.pc = temp; 1778 + __debug_user_context->i.pc = temp; 1800 1779 break; 1801 1780 case GDB_REG_PSR: 1802 - __break_user_context.i.psr = temp; 1781 + __debug_user_context->i.psr = temp; 1803 1782 break; 1804 1783 case GDB_REG_CCR: 1805 - __break_user_context.i.ccr = temp; 1784 + __debug_user_context->i.ccr = temp; 1806 1785 break; 1807 1786 case GDB_REG_CCCR: 1808 - __break_user_context.i.cccr = temp; 1787 + __debug_user_context->i.cccr = temp; 1809 1788 break; 1810 1789 case GDB_REG_BRR: 1811 - __debug_regs->brr = temp; 1790 + __debug_status.brr = temp; 1812 1791 break; 1813 1792 case GDB_REG_LR: 1814 - __break_user_context.i.lr = temp; 1793 + __debug_user_context->i.lr = temp; 1815 1794 break; 1816 1795 case GDB_REG_LCR: 1817 - __break_user_context.i.lcr = temp; 1796 + __debug_user_context->i.lcr = temp; 1818 1797 break; 1819 1798 case GDB_REG_FSR0: 1820 - __break_user_context.f.fsr[0] = temp; 1799 + __debug_user_context->f.fsr[0] = temp; 1821 1800 break; 1822 1801 case GDB_REG_ACC(0) ... GDB_REG_ACC(7): 1823 - __break_user_context.f.acc[addr - GDB_REG_ACC(0)] = temp; 1802 + __debug_user_context->f.acc[addr - GDB_REG_ACC(0)] = temp; 1824 1803 break; 1825 1804 case GDB_REG_ACCG(0): 1826 - *(uint32_t *) &__break_user_context.f.accg[0] = temp; 1805 + *(uint32_t *) &__debug_user_context->f.accg[0] = temp; 1827 1806 break; 1828 1807 case GDB_REG_ACCG(4): 1829 - *(uint32_t *) &__break_user_context.f.accg[4] = temp; 1808 + *(uint32_t *) &__debug_user_context->f.accg[4] = temp; 1830 1809 break; 1831 1810 case GDB_REG_MSR(0) ... GDB_REG_MSR(1): 1832 - __break_user_context.f.msr[addr - GDB_REG_MSR(0)] = temp; 1811 + __debug_user_context->f.msr[addr - GDB_REG_MSR(0)] = temp; 1833 1812 break; 1834 1813 case GDB_REG_GNER(0) ... GDB_REG_GNER(1): 1835 - __break_user_context.i.gner[addr - GDB_REG_GNER(0)] = temp; 1814 + __debug_user_context->i.gner[addr - GDB_REG_GNER(0)] = temp; 1836 1815 break; 1837 1816 case GDB_REG_FNER(0) ... GDB_REG_FNER(1): 1838 - __break_user_context.f.fner[addr - GDB_REG_FNER(0)] = temp; 1817 + __debug_user_context->f.fner[addr - GDB_REG_FNER(0)] = temp; 1839 1818 break; 1840 1819 default: 1841 1820 temp2 = 0; ··· 1871 1850 /* step to next instruction */ 1872 1851 case 's': 1873 1852 __debug_regs->dcr |= DCR_SE; 1853 + __debug_status.dcr |= DCR_SE; 1874 1854 goto done; 1875 1855 1876 1856 /* set baud rate (bBB) */ ··· 1956 1934 } 1957 1935 1958 1936 done: 1959 - restore_user_regs(&__break_user_context); 1937 + restore_user_regs(&__debug_frame0->uc); 1960 1938 1961 1939 //gdbstub_dump_debugregs(); 1962 1940 //gdbstub_printk("<-- gdbstub() %08x\n", __debug_frame->pc); ··· 1988 1966 #endif 1989 1967 1990 1968 gdbstub_printk("%s", gdbstub_banner); 1991 - gdbstub_printk("DCR: %x\n", __debug_regs->dcr); 1992 1969 1993 1970 gdbstub_io_init(); 1994 1971
+1
arch/frv/kernel/head.S
··· 11 11 12 12 #include <linux/threads.h> 13 13 #include <linux/linkage.h> 14 + #include <asm/thread_info.h> 14 15 #include <asm/ptrace.h> 15 16 #include <asm/page.h> 16 17 #include <asm/spr-regs.h>
+2 -1
arch/frv/kernel/process.c
··· 26 26 #include <linux/reboot.h> 27 27 #include <linux/interrupt.h> 28 28 29 + #include <asm/asm-offsets.h> 29 30 #include <asm/uaccess.h> 30 31 #include <asm/system.h> 31 32 #include <asm/setup.h> ··· 208 207 209 208 regs0 = __kernel_frame0_ptr; 210 209 childregs0 = (struct pt_regs *) 211 - (task_stack_page(p) + THREAD_SIZE - USER_CONTEXT_SIZE); 210 + (task_stack_page(p) + THREAD_SIZE - FRV_FRAME0_SIZE); 212 211 childregs = childregs0; 213 212 214 213 /* set up the userspace frame (the only place that the USP is stored) */
+2 -1
arch/frv/kernel/switch_to.S
··· 11 11 # 2 of the License, or (at your option) any later version. 12 12 # 13 13 ############################################################################### 14 + 14 15 #include <linux/linkage.h> 15 16 #include <asm/thread_info.h> 16 17 #include <asm/processor.h> ··· 31 30 # address of frame 0 (userspace) on current kernel stack 32 31 .globl __kernel_frame0_ptr 33 32 __kernel_frame0_ptr: 34 - .long init_thread_union + THREAD_SIZE - USER_CONTEXT_SIZE 33 + .long init_thread_union + THREAD_SIZE - FRV_FRAME0_SIZE 35 34 36 35 # address of current task 37 36 .globl __kernel_current_task
+13 -12
arch/frv/kernel/traps.c
··· 20 20 #include <linux/init.h> 21 21 #include <linux/module.h> 22 22 23 + #include <asm/asm-offsets.h> 23 24 #include <asm/setup.h> 24 25 #include <asm/fpu.h> 25 26 #include <asm/system.h> ··· 280 279 281 280 void show_regs(struct pt_regs *regs) 282 281 { 283 - uint32_t *reg; 282 + unsigned long *reg; 284 283 int loop; 285 284 286 285 printk("\n"); 287 286 288 - printk("Frame: @%08x [%s]\n", 289 - (uint32_t) regs, 287 + printk("Frame: @%08lx [%s]\n", 288 + (unsigned long) regs, 290 289 regs->psr & PSR_S ? "kernel" : "user"); 291 290 292 - reg = (uint32_t *) regs; 293 - for (loop = 0; loop < REG__END; loop++) { 294 - printk("%s %08x", regnames[loop + 0], reg[loop + 0]); 291 + reg = (unsigned long *) regs; 292 + for (loop = 0; loop < NR_PT_REGS; loop++) { 293 + printk("%s %08lx", regnames[loop + 0], reg[loop + 0]); 295 294 296 - if (loop == REG__END - 1 || loop % 5 == 4) 295 + if (loop == NR_PT_REGS - 1 || loop % 5 == 4) 297 296 printk("\n"); 298 297 else 299 298 printk(" | "); ··· 329 328 */ 330 329 static void show_backtrace_regs(struct pt_regs *frame) 331 330 { 332 - uint32_t *reg; 331 + unsigned long *reg; 333 332 int loop; 334 333 335 334 /* print the registers for this frame */ ··· 337 336 frame->psr & PSR_S ? "Kernel Mode" : "User Mode", 338 337 frame); 339 338 340 - reg = (uint32_t *) frame; 341 - for (loop = 0; loop < REG__END; loop++) { 342 - printk("%s %08x", regnames[loop + 0], reg[loop + 0]); 339 + reg = (unsigned long *) frame; 340 + for (loop = 0; loop < NR_PT_REGS; loop++) { 341 + printk("%s %08lx", regnames[loop + 0], reg[loop + 0]); 343 342 344 - if (loop == REG__END - 1 || loop % 5 == 4) 343 + if (loop == NR_PT_REGS - 1 || loop % 5 == 4) 345 344 printk("\n"); 346 345 else 347 346 printk(" | ");
+22
include/asm-frv/gdb-stub.h
··· 89 89 90 90 extern asmlinkage void __debug_stub_init_break(void); 91 91 extern asmlinkage void __break_hijack_kernel_event(void); 92 + extern asmlinkage void __break_hijack_kernel_event_breaks_here(void); 92 93 extern asmlinkage void start_kernel(void); 93 94 94 95 extern asmlinkage void gdbstub_rx_handler(void); ··· 114 113 #else 115 114 #define gdbstub_proto(FMT,...) ({ 0; }) 116 115 #endif 116 + 117 + /* 118 + * we dedicate GR31 to keeping a pointer to the gdbstub exception frame 119 + * - gr31 is destroyed on entry to the gdbstub if !MMU 120 + * - gr31 is saved in scr3 on entry to the gdbstub if in !MMU 121 + */ 122 + register struct frv_frame0 *__debug_frame0 asm("gr31"); 123 + 124 + #define __debug_frame (&__debug_frame0->regs) 125 + #define __debug_user_context (&__debug_frame0->uc) 126 + #define __debug_regs (&__debug_frame0->debug) 127 + #define __debug_reg(X) ((unsigned long *) ((unsigned long) &__debug_frame0 + (X))) 128 + 129 + struct frv_debug_status { 130 + unsigned long bpsr; 131 + unsigned long dcr; 132 + unsigned long brr; 133 + unsigned long nmar; 134 + }; 135 + 136 + extern struct frv_debug_status __debug_status; 117 137 118 138 #endif /* _LANGUAGE_ASSEMBLY */ 119 139 #endif /* __ASM_GDB_STUB_H */
+2 -10
include/asm-frv/ptrace.h
··· 62 62 #ifndef __ASSEMBLY__ 63 63 64 64 /* 65 - * dedicate GR28; to keeping the a pointer to the current exception frame 65 + * we dedicate GR28 to keeping a pointer to the current exception frame 66 + * - gr28 is destroyed on entry to the kernel from userspace 66 67 */ 67 68 register struct pt_regs *__frame asm("gr28"); 68 - register struct pt_regs *__debug_frame asm("gr31"); 69 - 70 - #ifndef container_of 71 - #define container_of(ptr, type, member) ({ \ 72 - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 73 - (type *)( (char *)__mptr - offsetof(type,member) );}) 74 - #endif 75 - 76 - #define __debug_regs container_of(__debug_frame, struct pt_debug_regs, normal_regs) 77 69 78 70 #define user_mode(regs) (!((regs)->psr & PSR_S)) 79 71 #define instruction_pointer(regs) ((regs)->pc)
+35 -58
include/asm-frv/registers.h
··· 23 23 * 24 24 * +0x2000 +---------------------- 25 25 * | union { 26 - * | struct user_context 26 + * | struct frv_frame0 { 27 + * | struct user_context { 28 + * | struct user_int_regs 29 + * | struct user_fpmedia_regs 30 + * | } 31 + * | struct frv_debug_regs 32 + * | } 27 33 * | struct pt_regs [user exception] 28 34 * | } 29 35 * +---------------------- <-- __kernel_frame0_ptr (maybe GR28) ··· 57 51 #define _ASM_REGISTERS_H 58 52 59 53 #ifndef __ASSEMBLY__ 60 - #define __OFFSET(X) (X) 54 + #define __OFFSET(X,N) ((X)+(N)*4) 61 55 #define __OFFSETC(X,N) xxxxxxxxxxxxxxxxxxxxxxxx 62 56 #else 63 - #define __OFFSET(X) ((X)*4) 64 - #define __OFFSETC(X,N) ((X)*4+(N)) 57 + #define __OFFSET(X,N) ((X)+(N)*4) 58 + #define __OFFSETC(X,N) ((X)+(N)) 65 59 #endif 66 60 67 61 /*****************************************************************************/ ··· 123 117 124 118 #endif 125 119 126 - #define REG_PSR __OFFSET( 0) /* Processor Status Register */ 127 - #define REG_ISR __OFFSET( 1) /* Integer Status Register */ 128 - #define REG_CCR __OFFSET( 2) /* Condition Code Register */ 129 - #define REG_CCCR __OFFSET( 3) /* Condition Code for Conditional Insns Register */ 130 - #define REG_LR __OFFSET( 4) /* Link Register */ 131 - #define REG_LCR __OFFSET( 5) /* Loop Count Register */ 132 - #define REG_PC __OFFSET( 6) /* Program Counter */ 133 - 134 - #define REG__STATUS __OFFSET( 7) /* exception status */ 135 120 #define REG__STATUS_STEP 0x00000001 /* - reenable single stepping on return */ 136 121 #define REG__STATUS_STEPPED 0x00000002 /* - single step caused exception */ 137 122 #define REG__STATUS_BROKE 0x00000004 /* - BREAK insn caused exception */ 138 123 #define REG__STATUS_SYSC_ENTRY 0x40000000 /* - T on syscall entry (ptrace.c only) */ 139 124 #define REG__STATUS_SYSC_EXIT 0x80000000 /* - T on syscall exit (ptrace.c only) */ 140 125 141 - #define REG_SYSCALLNO __OFFSET( 8) /* syscall number or -1 */ 142 - #define REG_ORIG_GR8 __OFFSET( 9) /* saved GR8 for signal handling */ 143 - #define REG_GNER0 __OFFSET(10) 144 - #define REG_GNER1 __OFFSET(11) 145 - #define REG_IACC0 __OFFSET(12) 146 - 147 - #define REG_TBR __OFFSET(14) /* Trap Vector Register */ 148 - #define REG_GR(R) __OFFSET((14+(R))) 149 - #define REG__END REG_GR(32) 126 + #define REG_GR(R) __OFFSET(REG_GR0, (R)) 150 127 151 128 #define REG_SP REG_GR(1) 152 129 #define REG_FP REG_GR(2) ··· 138 149 139 150 /*****************************************************************************/ 140 151 /* 141 - * extension tacked in front of the exception frame in debug mode 152 + * debugging registers 142 153 */ 143 154 #ifndef __ASSEMBLY__ 144 155 145 - struct pt_debug_regs 156 + struct frv_debug_regs 146 157 { 147 - unsigned long bpsr; 148 158 unsigned long dcr; 149 - unsigned long brr; 150 - unsigned long nmar; 151 - struct pt_regs normal_regs; 159 + unsigned long ibar[4] __attribute__((aligned(8))); 160 + unsigned long dbar[4] __attribute__((aligned(8))); 161 + unsigned long dbdr[4][4] __attribute__((aligned(8))); 162 + unsigned long dbmr[4][4] __attribute__((aligned(8))); 152 163 } __attribute__((aligned(8))); 153 164 154 165 #endif 155 - 156 - #define REG_NMAR __OFFSET(-1) 157 - #define REG_BRR __OFFSET(-2) 158 - #define REG_DCR __OFFSET(-3) 159 - #define REG_BPSR __OFFSET(-4) 160 - #define REG__DEBUG_XTRA __OFFSET(4) 161 166 162 167 /*****************************************************************************/ 163 168 /* ··· 206 223 void *extension; 207 224 } __attribute__((aligned(8))); 208 225 226 + struct frv_frame0 { 227 + union { 228 + struct pt_regs regs; 229 + struct user_context uc; 230 + }; 231 + 232 + struct frv_debug_regs debug; 233 + 234 + } __attribute__((aligned(32))); 235 + 209 236 #endif 210 237 211 - #define NR_USER_INT_REGS (14 + 64) 212 - #define NR_USER_FPMEDIA_REGS (64 + 2 + 2 + 8 + 8/4 + 1) 213 - #define NR_USER_CONTEXT (NR_USER_INT_REGS + NR_USER_FPMEDIA_REGS + 1) 238 + #define __INT_GR(R) __OFFSET(__INT_GR0, (R)) 214 239 215 - #define USER_CONTEXT_SIZE (((NR_USER_CONTEXT + 1) & ~1) * 4) 240 + #define __FPMEDIA_FR(R) __OFFSET(__FPMEDIA_FR0, (R)) 241 + #define __FPMEDIA_FNER(R) __OFFSET(__FPMEDIA_FNER0, (R)) 242 + #define __FPMEDIA_MSR(R) __OFFSET(__FPMEDIA_MSR0, (R)) 243 + #define __FPMEDIA_ACC(R) __OFFSET(__FPMEDIA_ACC0, (R)) 244 + #define __FPMEDIA_ACCG(R) __OFFSETC(__FPMEDIA_ACCG0, (R)) 245 + #define __FPMEDIA_FSR(R) __OFFSET(__FPMEDIA_FSR0, (R)) 216 246 217 - #define __THREAD_FRAME __OFFSET(0) 218 - #define __THREAD_CURR __OFFSET(1) 219 - #define __THREAD_SP __OFFSET(2) 220 - #define __THREAD_FP __OFFSET(3) 221 - #define __THREAD_LR __OFFSET(4) 222 - #define __THREAD_PC __OFFSET(5) 223 - #define __THREAD_GR(R) __OFFSET(6 + (R) - 16) 224 - #define __THREAD_FRAME0 __OFFSET(19) 225 - #define __THREAD_USER __OFFSET(19) 226 - 227 - #define __USER_INT __OFFSET(0) 228 - #define __INT_GR(R) __OFFSET(14 + (R)) 229 - 230 - #define __USER_FPMEDIA __OFFSET(NR_USER_INT_REGS) 231 - #define __FPMEDIA_FR(R) __OFFSET(NR_USER_INT_REGS + (R)) 232 - #define __FPMEDIA_FNER(R) __OFFSET(NR_USER_INT_REGS + 64 + (R)) 233 - #define __FPMEDIA_MSR(R) __OFFSET(NR_USER_INT_REGS + 66 + (R)) 234 - #define __FPMEDIA_ACC(R) __OFFSET(NR_USER_INT_REGS + 68 + (R)) 235 - #define __FPMEDIA_ACCG(R) __OFFSETC(NR_USER_INT_REGS + 76, (R)) 236 - #define __FPMEDIA_FSR(R) __OFFSET(NR_USER_INT_REGS + 78 + (R)) 247 + #define __THREAD_GR(R) __OFFSET(__THREAD_GR16, (R) - 16) 237 248 238 249 #endif /* _ASM_REGISTERS_H */
+4 -20
include/asm-frv/thread_info.h
··· 19 19 #include <asm/processor.h> 20 20 #endif 21 21 22 + #define THREAD_SIZE 8192 23 + 22 24 /* 23 25 * low level task data that entry.S needs immediate access to 24 26 * - this struct should fit entirely inside of one cache line ··· 48 46 49 47 #else /* !__ASSEMBLY__ */ 50 48 51 - /* offsets into the thread_info struct for assembly code access */ 52 - #define TI_TASK 0x00000000 53 - #define TI_EXEC_DOMAIN 0x00000004 54 - #define TI_FLAGS 0x00000008 55 - #define TI_STATUS 0x0000000C 56 - #define TI_CPU 0x00000010 57 - #define TI_PRE_COUNT 0x00000014 58 - #define TI_ADDR_LIMIT 0x00000018 59 - #define TI_RESTART_BLOCK 0x0000001C 49 + #include <asm/asm-offsets.h> 60 50 61 51 #endif 62 52 ··· 77 83 #define init_thread_info (init_thread_union.thread_info) 78 84 #define init_stack (init_thread_union.stack) 79 85 80 - #ifdef CONFIG_SMALL_TASKS 81 - #define THREAD_SIZE 4096 82 - #else 83 - #define THREAD_SIZE 8192 84 - #endif 85 - 86 86 /* how to get the thread information struct from C */ 87 87 register struct thread_info *__current_thread_info asm("gr15"); 88 88 ··· 99 111 100 112 #define free_thread_info(info) kfree(info) 101 113 102 - #else /* !__ASSEMBLY__ */ 103 - 104 - #define THREAD_SIZE 8192 105 - 106 - #endif 114 + #endif /* __ASSEMBLY__ */ 107 115 108 116 /* 109 117 * thread information flags