lkml.org 
[lkml]   [2013]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/2] Fix a build warning in scripts/sortextable.h
    Added David Daney to CC.

    On 9.6.2013 04:33, Daniel Tang wrote:
    > The pointer passed to the _r() macro does not always match the type
    > of the function that it is aliasing and raises several of the following
    > warnings at compile time:
    >
    > warning: passing argument 1 of ‘r8’ from incompatible pointer type

    In what environment (arch, compiler, glibc) are you seeing this?

    Michal

    > Fixed by casting the pointers to (void *) so they work with both the
    > 32bit and 64bit code.
    >
    > Signed-off-by: Daniel Tang <dt.tangr@gmail.com>
    > ---
    > scripts/sortextable.h | 29 +++++++++++++++--------------
    > 1 file changed, 15 insertions(+), 14 deletions(-)
    >
    > diff --git a/scripts/sortextable.h b/scripts/sortextable.h
    > index f5eb43d..0a38fbd 100644
    > --- a/scripts/sortextable.h
    > +++ b/scripts/sortextable.h
    > @@ -110,9 +110,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
    > int i;
    > int idx;
    >
    > - shdr = (Elf_Shdr *)((char *)ehdr + _r(&ehdr->e_shoff));
    > + shdr = (Elf_Shdr *)((char *)ehdr + _r((void *)&ehdr->e_shoff));
    > shstrtab_sec = shdr + r2(&ehdr->e_shstrndx);
    > - secstrtab = (const char *)ehdr + _r(&shstrtab_sec->sh_offset);
    > + secstrtab = (const char *)ehdr + _r((void *)&shstrtab_sec->sh_offset);
    > for (i = 0; i < r2(&ehdr->e_shnum); i++) {
    > idx = r(&shdr[i].sh_name);
    > if (strcmp(secstrtab + idx, "__ex_table") == 0) {
    > @@ -122,8 +122,8 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
    > if ((r(&shdr[i].sh_type) == SHT_REL ||
    > r(&shdr[i].sh_type) == SHT_RELA) &&
    > r(&shdr[i].sh_info) == extab_index) {
    > - relocs = (void *)ehdr + _r(&shdr[i].sh_offset);
    > - relocs_size = _r(&shdr[i].sh_size);
    > + relocs = (void *)ehdr + _r((void *)&shdr[i].sh_offset);
    > + relocs_size = _r((void *)&shdr[i].sh_size);
    > }
    > if (strcmp(secstrtab + idx, ".symtab") == 0)
    > symtab_sec = shdr + i;
    > @@ -142,14 +142,14 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
    > fprintf(stderr, "no __ex_table in file: %s\n", fname);
    > fail_file();
    > }
    > - strtab = (const char *)ehdr + _r(&strtab_sec->sh_offset);
    > + strtab = (const char *)ehdr + _r((void *)&strtab_sec->sh_offset);
    >
    > - extab_image = (void *)ehdr + _r(&extab_sec->sh_offset);
    > + extab_image = (void *)ehdr + _r((void *)&extab_sec->sh_offset);
    >
    > if (custom_sort) {
    > - custom_sort(extab_image, _r(&extab_sec->sh_size));
    > + custom_sort(extab_image, _r((void *)&extab_sec->sh_size));
    > } else {
    > - int num_entries = _r(&extab_sec->sh_size) / extable_ent_size;
    > + int num_entries = _r((void *)&extab_sec->sh_size) / extable_ent_size;
    > qsort(extab_image, num_entries,
    > extable_ent_size, compare_extable);
    > }
    > @@ -159,12 +159,13 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
    >
    > /* find main_extable_sort_needed */
    > sort_needed_sym = NULL;
    > - for (i = 0; i < _r(&symtab_sec->sh_size) / sizeof(Elf_Sym); i++) {
    > - sym = (void *)ehdr + _r(&symtab_sec->sh_offset);
    > + for (i = 0; i < _r((void *)&symtab_sec->sh_size) / sizeof(Elf_Sym); i++)
    > + {
    > + sym = (void *)ehdr + _r((void *)&symtab_sec->sh_offset);
    > sym += i;
    > if (ELF_ST_TYPE(sym->st_info) != STT_OBJECT)
    > continue;
    > - idx = r(&sym->st_name);
    > + idx = r((void *)&sym->st_name);
    > if (strcmp(strtab + idx, "main_extable_sort_needed") == 0) {
    > sort_needed_sym = sym;
    > break;
    > @@ -178,9 +179,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
    > }
    > sort_needed_sec = &shdr[r2(&sort_needed_sym->st_shndx)];
    > sort_done_location = (void *)ehdr +
    > - _r(&sort_needed_sec->sh_offset) +
    > - _r(&sort_needed_sym->st_value) -
    > - _r(&sort_needed_sec->sh_addr);
    > + _r((void *)&sort_needed_sec->sh_offset) +
    > + _r((void *)&sort_needed_sym->st_value) -
    > + _r((void *)&sort_needed_sec->sh_addr);
    >
    > #if 0
    > printf("sort done marker at %lx\n",
    >

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2013-07-03 14:41    [W:2.921 / U:0.472 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site