diff options
Diffstat (limited to 'arch/blackfin/kernel/traps.c')
-rw-r--r-- | arch/blackfin/kernel/traps.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 599459749a59..519accaf4afc 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -100,7 +100,11 @@ static void decode_address(char *buf, unsigned long address) | |||
100 | char *modname; | 100 | char *modname; |
101 | char *delim = ":"; | 101 | char *delim = ":"; |
102 | char namebuf[128]; | 102 | char namebuf[128]; |
103 | #endif | ||
104 | |||
105 | buf += sprintf(buf, "<0x%08lx> ", address); | ||
103 | 106 | ||
107 | #ifdef CONFIG_KALLSYMS | ||
104 | /* look up the address and see if we are in kernel space */ | 108 | /* look up the address and see if we are in kernel space */ |
105 | symname = kallsyms_lookup(address, &symsize, &offset, &modname, namebuf); | 109 | symname = kallsyms_lookup(address, &symsize, &offset, &modname, namebuf); |
106 | 110 | ||
@@ -108,23 +112,33 @@ static void decode_address(char *buf, unsigned long address) | |||
108 | /* yeah! kernel space! */ | 112 | /* yeah! kernel space! */ |
109 | if (!modname) | 113 | if (!modname) |
110 | modname = delim = ""; | 114 | modname = delim = ""; |
111 | sprintf(buf, "<0x%p> { %s%s%s%s + 0x%lx }", | 115 | sprintf(buf, "{ %s%s%s%s + 0x%lx }", |
112 | (void *)address, delim, modname, delim, symname, | 116 | delim, modname, delim, symname, |
113 | (unsigned long)offset); | 117 | (unsigned long)offset); |
114 | return; | 118 | return; |
115 | |||
116 | } | 119 | } |
117 | #endif | 120 | #endif |
118 | 121 | ||
119 | /* Problem in fixed code section? */ | ||
120 | if (address >= FIXED_CODE_START && address < FIXED_CODE_END) { | 122 | if (address >= FIXED_CODE_START && address < FIXED_CODE_END) { |
121 | sprintf(buf, "<0x%p> /* Maybe fixed code section */", (void *)address); | 123 | /* Problem in fixed code section? */ |
124 | strcat(buf, "/* Maybe fixed code section */"); | ||
125 | return; | ||
126 | |||
127 | } else if (address < CONFIG_BOOT_LOAD) { | ||
128 | /* Problem somewhere before the kernel start address */ | ||
129 | strcat(buf, "/* Maybe null pointer? */"); | ||
130 | return; | ||
131 | |||
132 | } else if (address >= COREMMR_BASE) { | ||
133 | strcat(buf, "/* core mmrs */"); | ||
134 | return; | ||
135 | |||
136 | } else if (address >= SYSMMR_BASE) { | ||
137 | strcat(buf, "/* system mmrs */"); | ||
122 | return; | 138 | return; |
123 | } | ||
124 | 139 | ||
125 | /* Problem somewhere before the kernel start address */ | 140 | } else if (address >= L1_ROM_START && address < L1_ROM_START + L1_ROM_LENGTH) { |
126 | if (address < CONFIG_BOOT_LOAD) { | 141 | strcat(buf, "/* on-chip L1 ROM */"); |
127 | sprintf(buf, "<0x%p> /* Maybe null pointer? */", (void *)address); | ||
128 | return; | 142 | return; |
129 | } | 143 | } |
130 | 144 | ||
@@ -172,18 +186,16 @@ static void decode_address(char *buf, unsigned long address) | |||
172 | offset = (address - vma->vm_start) + | 186 | offset = (address - vma->vm_start) + |
173 | (vma->vm_pgoff << PAGE_SHIFT); | 187 | (vma->vm_pgoff << PAGE_SHIFT); |
174 | 188 | ||
175 | sprintf(buf, "<0x%p> [ %s + 0x%lx ]", | 189 | sprintf(buf, "[ %s + 0x%lx ]", name, offset); |
176 | (void *)address, name, offset); | ||
177 | } else | 190 | } else |
178 | sprintf(buf, "<0x%p> [ %s vma:0x%lx-0x%lx]", | 191 | sprintf(buf, "[ %s vma:0x%lx-0x%lx]", |
179 | (void *)address, name, | 192 | name, vma->vm_start, vma->vm_end); |
180 | vma->vm_start, vma->vm_end); | ||
181 | 193 | ||
182 | if (!in_atomic) | 194 | if (!in_atomic) |
183 | mmput(mm); | 195 | mmput(mm); |
184 | 196 | ||
185 | if (!strlen(buf)) | 197 | if (buf[0] == '\0') |
186 | sprintf(buf, "<0x%p> [ %s ] dynamic memory", (void *)address, name); | 198 | sprintf(buf, "[ %s ] dynamic memory", name); |
187 | 199 | ||
188 | goto done; | 200 | goto done; |
189 | } | 201 | } |
@@ -193,7 +205,7 @@ static void decode_address(char *buf, unsigned long address) | |||
193 | } | 205 | } |
194 | 206 | ||
195 | /* we were unable to find this address anywhere */ | 207 | /* we were unable to find this address anywhere */ |
196 | sprintf(buf, "<0x%p> /* kernel dynamic memory */", (void *)address); | 208 | sprintf(buf, "/* kernel dynamic memory */"); |
197 | 209 | ||
198 | done: | 210 | done: |
199 | write_unlock_irqrestore(&tasklist_lock, flags); | 211 | write_unlock_irqrestore(&tasklist_lock, flags); |