flatten_strings: fix align (REQ-1)

This commit is contained in:
Tomoki Shirasawa
2016-02-14 22:36:58 +09:00
parent 5d43c135db
commit 2d3fda1d0b
4 changed files with 23 additions and 19 deletions

View File

@@ -125,10 +125,10 @@ static long mcexec_prepare_image(ihk_os_t os,
pdesc->args = (void*)virt_to_phys(args);
printk("args: 0x%lX\n", (unsigned long)pdesc->args);
printk("argc: %d\n", *(int*)args);
printk("argc: %ld\n", *(long *)args);
pdesc->envs = (void*)virt_to_phys(envs);
printk("envs: 0x%lX\n", (unsigned long)pdesc->envs);
printk("envc: %d\n", *(int*)envs);
printk("envc: %ld\n", *(long *)envs);
isp.msg = SCD_MSG_PREPARE_PROCESS;
isp.ref = pdesc->cpu;

View File

@@ -776,7 +776,7 @@ int flatten_strings(int nr_strings, char *first, char **strings, char **flat)
}
/* Count full length */
full_len = sizeof(int) + sizeof(char *); // Counter and terminating NULL
full_len = sizeof(long) + sizeof(char *); // Counter and terminating NULL
if (first) {
full_len += sizeof(char *) + strlen(first) + 1;
}
@@ -786,6 +786,8 @@ int flatten_strings(int nr_strings, char *first, char **strings, char **flat)
full_len += sizeof(char *) + strlen(strings[string_i]) + 1;
}
full_len = (full_len + sizeof(long) - 1) & ~(sizeof(long) - 1);
_flat = (char *)malloc(full_len);
if (!_flat) {
return 0;
@@ -794,14 +796,14 @@ int flatten_strings(int nr_strings, char *first, char **strings, char **flat)
memset(_flat, 0, full_len);
/* Number of strings */
*((int*)_flat) = nr_strings + (first ? 1 : 0);
*((long *)_flat) = nr_strings + (first ? 1 : 0);
// Actual offset
flat_offset = sizeof(int) + sizeof(char *) * (nr_strings + 1 +
flat_offset = sizeof(long) + sizeof(char *) * (nr_strings + 1 +
(first ? 1 : 0));
if (first) {
*((char **)(_flat + sizeof(int))) = (void *)flat_offset;
*((char **)(_flat + sizeof(long))) = (void *)flat_offset;
memcpy(_flat + flat_offset, first, strlen(first) + 1);
flat_offset += strlen(first) + 1;
}
@@ -809,7 +811,7 @@ int flatten_strings(int nr_strings, char *first, char **strings, char **flat)
for (string_i = 0; string_i < nr_strings; ++string_i) {
/* Fabricate the string */
*((char **)(_flat + sizeof(int) + (string_i + (first ? 1 : 0))
*((char **)(_flat + sizeof(long) + (string_i + (first ? 1 : 0))
* sizeof(char *))) = (void *)flat_offset;
memcpy(_flat + flat_offset, strings[string_i], strlen(strings[string_i]) + 1);
flat_offset += strlen(strings[string_i]) + 1;