summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/cbfstool/cbfs-mkpayload.c4
-rw-r--r--util/cbfstool/cbfs-mkstage.c4
-rw-r--r--util/cbfstool/cbfs.h1
-rw-r--r--util/cbfstool/cbfstool.c19
-rw-r--r--util/cbfstool/common.c3
-rw-r--r--util/cbfstool/common.h6
-rw-r--r--util/cbfstool/elfheaders.c1
7 files changed, 20 insertions, 18 deletions
diff --git a/util/cbfstool/cbfs-mkpayload.c b/util/cbfstool/cbfs-mkpayload.c
index b1dd1c027c..6e6e4188e4 100644
--- a/util/cbfstool/cbfs-mkpayload.c
+++ b/util/cbfstool/cbfs-mkpayload.c
@@ -51,7 +51,7 @@ static void xdr_segs(struct buffer *output,
}
}
int parse_elf_to_payload(const struct buffer *input,
- struct buffer *output, comp_algo algo)
+ struct buffer *output, uint32_t arch, comp_algo algo)
{
Elf64_Phdr *phdr;
Elf64_Ehdr ehdr;
@@ -69,7 +69,7 @@ int parse_elf_to_payload(const struct buffer *input,
if (!compress)
return -1;
- if (elf_headers(input, &ehdr, &phdr, &shdr) < 0)
+ if (elf_headers(input, arch, &ehdr, &phdr, &shdr) < 0)
return -1;
DEBUG("start: parse_elf_to_payload\n");
diff --git a/util/cbfstool/cbfs-mkstage.c b/util/cbfstool/cbfs-mkstage.c
index 6a5f6f74ca..233ec57deb 100644
--- a/util/cbfstool/cbfs-mkstage.c
+++ b/util/cbfstool/cbfs-mkstage.c
@@ -33,7 +33,7 @@
* works for all elf files, not just the restricted set.
*/
int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
- comp_algo algo, uint32_t *location)
+ uint32_t arch, comp_algo algo, uint32_t *location)
{
Elf64_Phdr *phdr;
Elf64_Ehdr ehdr;
@@ -50,7 +50,7 @@ int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
DEBUG("start: parse_elf_to_stage(location=0x%x)\n", *location);
- if (elf_headers(input, &ehdr, &phdr, NULL) < 0)
+ if (elf_headers(input, arch, &ehdr, &phdr, NULL) < 0)
return -1;
headers = ehdr.e_phnum;
diff --git a/util/cbfstool/cbfs.h b/util/cbfstool/cbfs.h
index 92dd84ae84..9a5af5b3b1 100644
--- a/util/cbfstool/cbfs.h
+++ b/util/cbfstool/cbfs.h
@@ -129,6 +129,7 @@ uint32_t get_cbfs_compression(const char *name, uint32_t unknown);
/* elfheaders.c */
int
elf_headers(const struct buffer *pinput,
+ uint32_t arch,
Elf64_Ehdr *ehdr,
Elf64_Phdr **pphdr,
Elf64_Shdr **pshdr);
diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index 9935f51f05..1d93981d72 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -56,6 +56,7 @@ static struct param {
uint32_t pagesize;
uint32_t offset;
uint32_t top_aligned;
+ uint32_t arch;
int fit_empty_entries;
comp_algo algo;
/* for linux payloads */
@@ -63,6 +64,7 @@ static struct param {
char *cmdline;
} param = {
/* All variables not listed are initialized as zero. */
+ .arch = CBFS_ARCHITECTURE_UNKNOWN,
.algo = CBFS_COMPRESS_NONE,
};
@@ -178,9 +180,13 @@ static int cbfs_add_component(const char *cbfs_name,
return 0;
}
-static int cbfstool_convert_mkstage(struct buffer *buffer, uint32_t *offset) {
+static int cbfstool_convert_mkstage(struct buffer *buffer, uint32_t *offset)
+{
struct buffer output;
- if (parse_elf_to_stage(buffer, &output, param.algo, offset) != 0)
+ int ret;
+ ret = parse_elf_to_stage(buffer, &output, param.arch, param.algo,
+ offset);
+ if (ret != 0)
return -1;
buffer_delete(buffer);
// direct assign, no dupe.
@@ -192,7 +198,7 @@ static int cbfstool_convert_mkpayload(struct buffer *buffer, uint32_t *offset) {
struct buffer output;
int ret;
/* per default, try and see if payload is an ELF binary */
- ret = parse_elf_to_payload(buffer, &output, param.algo);
+ ret = parse_elf_to_payload(buffer, &output, param.arch, param.algo);
/* If it's not an ELF, see if it's a UEFI FV */
if (ret != 0)
@@ -334,8 +340,7 @@ static int cbfs_create(void)
return 1;
}
- // TODO Remove arch or pack into param.
- if (arch == CBFS_ARCHITECTURE_UNKNOWN) {
+ if (param.arch == CBFS_ARCHITECTURE_UNKNOWN) {
ERROR("You need to specify -m/--machine arch.\n");
return 1;
}
@@ -368,7 +373,7 @@ static int cbfs_create(void)
}
if (cbfs_image_create(&image,
- arch,
+ param.arch,
param.size,
param.alignment,
&bootblock,
@@ -701,7 +706,7 @@ int main(int argc, char **argv)
verbose++;
break;
case 'm':
- arch = string_to_arch(optarg);
+ param.arch = string_to_arch(optarg);
break;
case 'I':
param.initrd = optarg;
diff --git a/util/cbfstool/common.c b/util/cbfstool/common.c
index 715c5df58e..98d9517bf4 100644
--- a/util/cbfstool/common.c
+++ b/util/cbfstool/common.c
@@ -103,9 +103,6 @@ void buffer_delete(struct buffer *buffer) {
buffer->size = 0;
}
-/* FIXME: This global is more difficult to just remove */
-uint32_t arch = CBFS_ARCHITECTURE_UNKNOWN;
-
static struct {
uint32_t arch;
const char *name;
diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h
index b8ff4a3c7c..5bcbcbedf8 100644
--- a/util/cbfstool/common.h
+++ b/util/cbfstool/common.h
@@ -62,8 +62,6 @@ int buffer_write_file(struct buffer *buffer, const char *filename);
/* Destroys a memory buffer. */
void buffer_delete(struct buffer *buffer);
-extern uint32_t arch;
-
uint32_t string_to_arch(const char *arch_string);
#define ALIGN(val, by) (((val) + (by)-1)&~((by)-1))
@@ -79,7 +77,7 @@ uint64_t intfiletype(const char *name);
/* cbfs-mkpayload.c */
int parse_elf_to_payload(const struct buffer *input,
- struct buffer *output, comp_algo algo);
+ struct buffer *output, uint32_t arch, comp_algo algo);
int parse_fv_to_payload(const struct buffer *input,
struct buffer *output, comp_algo algo);
int parse_bzImage_to_payload(const struct buffer *input,
@@ -92,7 +90,7 @@ int parse_flat_binary_to_payload(const struct buffer *input,
comp_algo algo);
/* cbfs-mkstage.c */
int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
- comp_algo algo, uint32_t *location);
+ uint32_t arch, comp_algo algo, uint32_t *location);
void print_supported_filetypes(void);
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c
index fd7a1a1575..0d874a1171 100644
--- a/util/cbfstool/elfheaders.c
+++ b/util/cbfstool/elfheaders.c
@@ -241,6 +241,7 @@ elf_shdr(struct buffer *pinput, Elf64_Shdr *shdr,
*/
int
elf_headers(const struct buffer *pinput,
+ uint32_t arch,
Elf64_Ehdr *ehdr,
Elf64_Phdr **pphdr,
Elf64_Shdr **pshdr)