diff options
Diffstat (limited to 'scripts/sortextable.c')
-rw-r--r-- | scripts/sortextable.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/scripts/sortextable.c b/scripts/sortextable.c index 7c2310c5b996..5f7a8b663cb9 100644 --- a/scripts/sortextable.c +++ b/scripts/sortextable.c | |||
@@ -152,6 +152,30 @@ static void (*w2)(uint16_t, uint16_t *); | |||
152 | 152 | ||
153 | typedef void (*table_sort_t)(char *, int); | 153 | typedef void (*table_sort_t)(char *, int); |
154 | 154 | ||
155 | /* | ||
156 | * Move reserved section indices SHN_LORESERVE..SHN_HIRESERVE out of | ||
157 | * the way to -256..-1, to avoid conflicting with real section | ||
158 | * indices. | ||
159 | */ | ||
160 | #define SPECIAL(i) ((i) - (SHN_HIRESERVE + 1)) | ||
161 | |||
162 | static inline int is_shndx_special(unsigned int i) | ||
163 | { | ||
164 | return i != SHN_XINDEX && i >= SHN_LORESERVE && i <= SHN_HIRESERVE; | ||
165 | } | ||
166 | |||
167 | /* Accessor for sym->st_shndx, hides ugliness of "64k sections" */ | ||
168 | static inline unsigned int get_secindex(unsigned int shndx, | ||
169 | unsigned int sym_offs, | ||
170 | const Elf32_Word *symtab_shndx_start) | ||
171 | { | ||
172 | if (is_shndx_special(shndx)) | ||
173 | return SPECIAL(shndx); | ||
174 | if (shndx != SHN_XINDEX) | ||
175 | return shndx; | ||
176 | return r(&symtab_shndx_start[sym_offs]); | ||
177 | } | ||
178 | |||
155 | /* 32 bit and 64 bit are very similar */ | 179 | /* 32 bit and 64 bit are very similar */ |
156 | #include "sortextable.h" | 180 | #include "sortextable.h" |
157 | #define SORTEXTABLE_64 | 181 | #define SORTEXTABLE_64 |