131
134
for (i = 0; i < pe_chdr->num_sections; i++, pe_shdr++)
133
136
grub_uint32_t idx;
135
if (! strcmp (pe_shdr->name, ".text"))
137
const char *name = pe_shdr->name;
139
if (name[0] == '/' && isdigit (name[1]))
141
char t[sizeof (pe_shdr->name) + 1];
142
memcpy (t, name, sizeof (pe_shdr->name));
143
t[sizeof (pe_shdr->name)] = 0;
144
name = pe_strtab + atoi (t + 1);
147
if (! strcmp (name, ".text"))
137
149
idx = TEXT_SECTION;
138
150
shdr[idx].sh_flags = SHF_ALLOC | SHF_EXECINSTR;
140
else if (! strcmp (pe_shdr->name, ".rdata"))
152
else if (! strcmp (name, ".rdata"))
142
154
idx = RDATA_SECTION;
143
155
shdr[idx].sh_flags = SHF_ALLOC;
145
else if (! strcmp (pe_shdr->name, ".data"))
157
else if (! strcmp (name, ".data"))
147
159
idx = DATA_SECTION;
148
160
shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE;
150
else if (! strcmp (pe_shdr->name, ".bss"))
162
else if (! strcmp (name, ".bss"))
152
164
idx = BSS_SECTION;
153
165
shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE;
155
else if (! strcmp (pe_shdr->name, ".modname"))
167
else if (! strcmp (name, ".modname"))
156
168
idx = MODNAME_SECTION;
157
else if (! strcmp (pe_shdr->name, ".moddeps"))
169
else if (! strcmp (name, ".moddeps"))
158
170
idx = MODDEPS_SECTION;
171
else if (strcmp (name, ".module_license") == 0)
172
idx = MODLICENSE_SECTION;
161
175
section_map[i + 1] = -1;
182
196
if (pe_shdr->relocations_offset)
184
char name[5 + strlen (pe_shdr->name)];
198
char relname[5 + strlen (name)];
186
200
if (num_sections >= MAX_SECTIONS)
187
201
grub_util_error ("too many sections");
189
sprintf (name, ".rel%s", pe_shdr->name);
203
sprintf (relname, ".rel%s", name);
191
shdr[num_sections].sh_name = insert_string (name);
205
shdr[num_sections].sh_name = insert_string (relname);
192
206
shdr[num_sections].sh_link = i;
193
207
shdr[num_sections].sh_info = idx;