Compare commits
No commits in common. "aaa7bdd2886a73fc9d2827273983a14b47d582d2" and "f4f373d65de6d665a3d96222ae1c3ad7b84ca4c2" have entirely different histories.
aaa7bdd288
...
f4f373d65d
@ -232,6 +232,9 @@ static int elf_patch_update_info(elfpatch_handle_t *ep)
|
||||
{
|
||||
Elf_Kind ek;
|
||||
const char *type_string = "unrecognized";
|
||||
size_t header_count = 0ull;
|
||||
GElf_Phdr phdr;
|
||||
size_t i;
|
||||
|
||||
ret_val_if_ep_err(ep, -1001);
|
||||
|
||||
@ -273,6 +276,20 @@ static int elf_patch_update_info(elfpatch_handle_t *ep)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Get program headers */
|
||||
if ( elf_getphdrnum(ep->elf, &header_count) != 0) {
|
||||
print_err("Error reading count of program headers: %s\n", elf_errmsg(-1));
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0ull; i < header_count; i++) {
|
||||
if (gelf_getphdr(ep->elf, (int)i, &phdr) != &phdr) {
|
||||
print_err("Error reading program header (%zu): %s\n", i, elf_errmsg(-1));
|
||||
return -1;
|
||||
}
|
||||
print_debug("Read program header %zu\n", i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -423,16 +440,8 @@ int elf_patch_compute_crc_over_section(elfpatch_handle_t *ep, const char *sectio
|
||||
}
|
||||
|
||||
print_debug("Section data length: %lu\n", data->d_size);
|
||||
if (!data->d_size) {
|
||||
if (!data->d_size)
|
||||
print_err("Section %s contains no data.\n", section);
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* NOBIT sections have a length but no data in the file. Abort in this case */
|
||||
if (!data->d_buf) {
|
||||
print_err("Section %s does not contain loadable data.\n", section);
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* If big endian or granularity is byte, simply compute CRC. No reordering is necessary */
|
||||
if (!little_endian || granularity == GRANULARITY_BYTE) {
|
||||
@ -534,11 +543,6 @@ int elf_patch_write_crcs_to_section(elfpatch_handle_t *ep, const char *section,
|
||||
/* Get data object of section */
|
||||
output_sec_data = elf_getdata(output_section->scn, NULL);
|
||||
sec_bytes = (uint8_t *)output_sec_data->d_buf;
|
||||
if (!sec_bytes) {
|
||||
print_err("Output section '%s' does not contain loadable data. It has to be allocated in the ELF file\n",
|
||||
section);
|
||||
goto ret_err;
|
||||
}
|
||||
|
||||
/* Check the start and end magics */
|
||||
if (check_start_magic) {
|
||||
|
@ -407,14 +407,12 @@ int main(int argc, char **argv)
|
||||
/* Check if all sections are present */
|
||||
if (check_all_sections_present(ep, cmd_opts.section_list)) {
|
||||
ret = -2;
|
||||
goto ret_close_elf;
|
||||
goto free_cmds;
|
||||
}
|
||||
|
||||
/* Compute CRCs over sections */
|
||||
crcs = (uint32_t *)malloc(sl_list_length(cmd_opts.section_list) * sizeof(uint32_t));
|
||||
if (compute_crcs(ep, cmd_opts.section_list, &cmd_opts, crcs)) {
|
||||
goto ret_close_elf;
|
||||
}
|
||||
compute_crcs(ep, cmd_opts.section_list, &cmd_opts, crcs);
|
||||
|
||||
if (reporting_get_verbosity()) {
|
||||
print_crcs(cmd_opts.section_list, crcs);
|
||||
@ -429,7 +427,6 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
ret_close_elf:
|
||||
elf_patch_close_and_free(ep);
|
||||
|
||||
free_cmds:
|
||||
|
Loading…
Reference in New Issue
Block a user