aboutsummaryrefslogtreecommitdiff
path: root/util/cbfstool/elfheaders.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbfstool/elfheaders.c')
-rw-r--r--util/cbfstool/elfheaders.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c
index acb25a7475..36226639d0 100644
--- a/util/cbfstool/elfheaders.c
+++ b/util/cbfstool/elfheaders.c
@@ -1440,3 +1440,26 @@ int elf_writer_add_rel(struct elf_writer *ew, const char *sym, Elf64_Addr addr)
return add_rel(rel_sec, &rel);
}
+
+int elf_program_file_size(const struct buffer *input, size_t *file_size)
+{
+ Elf64_Ehdr ehdr;
+ Elf64_Phdr *phdr;
+ int i;
+ size_t loadable_file_size = 0;
+
+ if (elf_headers(input, &ehdr, &phdr, NULL))
+ return -1;
+
+ for (i = 0; i < ehdr.e_phnum; i++) {
+ if (phdr[i].p_type != PT_LOAD)
+ continue;
+ loadable_file_size += phdr[i].p_filesz;
+ }
+
+ *file_size = loadable_file_size;
+
+ free(phdr);
+
+ return 0;
+}