History

kallsyms: support kernel symbols in Blackfin on-chip memory

The Blackfin arch has a discontiguous .text layout due to having on-chip instruction memory and no virtual memory support. As such, we need to add explicit checks for these additional .text regions.

Robin Getz committed 20 years ago

Commit 028f0421 parent 2185a5e1 file · +12 −1Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/kallsyms.c+12−1
@@ -35,6 +35,7 @@ struct sym_entry { · 34 unmodified lines
35static struct sym_entry *table;35static struct sym_entry *table;
36static unsigned int table_size, table_cnt;36static unsigned int table_size, table_cnt;
37static unsigned long long _text, _stext, _etext, _sinittext, _einittext;37static unsigned long long _text, _stext, _etext, _sinittext, _einittext;
38static unsigned long long _stext_l1, _etext_l1, _stext_l2, _etext_l2;
38static int all_symbols = 0;39static int all_symbols = 0;
39static char symbol_prefix_char = '\0';40static char symbol_prefix_char = '\0';
40 41
@@ -92,6 +93,14 @@ static int read_symbol(FILE *in, struct sym_entry *s) · 51 unmodified lines
92 _sinittext = s->addr;93 _sinittext = s->addr;
93 else if (strcmp(sym, "_einittext") == 0)94 else if (strcmp(sym, "_einittext") == 0)
94 _einittext = s->addr;95 _einittext = s->addr;
96 else if (strcmp(sym, "_stext_l1") == 0)
97 _stext_l1 = s->addr;
98 else if (strcmp(sym, "_etext_l1") == 0)
99 _etext_l1 = s->addr;
100 else if (strcmp(sym, "_stext_l2") == 0)
101 _stext_l2 = s->addr;
102 else if (strcmp(sym, "_etext_l2") == 0)
103 _etext_l2 = s->addr;
95 else if (toupper(stype) == 'A')104 else if (toupper(stype) == 'A')
96 {105 {
97 /* Keep these useful absolute symbols */106 /* Keep these useful absolute symbols */
@@ -157,7 +166,9 @@ static int symbol_valid(struct sym_entry *s) · 59 unmodified lines
157 * and inittext sections are discarded */166 * and inittext sections are discarded */
158 if (!all_symbols) {167 if (!all_symbols) {
159 if ((s->addr < _stext || s->addr > _etext)168 if ((s->addr < _stext || s->addr > _etext)
160 && (s->addr < _sinittext || s->addr > _einittext))169 && (s->addr < _sinittext || s->addr > _einittext)
170 && (s->addr < _stext_l1 || s->addr > _etext_l1)
171 && (s->addr < _stext_l2 || s->addr > _etext_l2))
161 return 0;172 return 0;
162 /* Corner case. Discard any symbols with the same value as173 /* Corner case. Discard any symbols with the same value as
163 * _etext _einittext; they can move between pass 1 and 2 when174 * _etext _einittext; they can move between pass 1 and 2 when