On 08.01.2015 06:03, Tom Stellard wrote:
> @@ -75,6 +76,34 @@ static void parse_symbol_table(Elf_Data *symbol_table_data,
>       }
>  }
>  
> +static void parse_relocs(Elf *elf, Elf_Data *relocs, Elf_Data *symbols,
> +                     unsigned symbol_sh_link,
> +                     struct radeon_shader_binary *binary)
> +{
> +     unsigned i;
> +
> +     if (!relocs || !symbols || !binary->reloc_count) {
> +             return;
> +     }
> +     binary->relocs = CALLOC(binary->reloc_count,
> +                     sizeof(struct radeon_shader_reloc));
> +     for (i = 0; i < binary->reloc_count; i++) {
> +             GElf_Sym symbol;
> +             GElf_Rel rel;
> +             unsigned offset;
> +             char *symbol_name;
> +             struct radeon_shader_reloc *reloc = &binary->relocs[i];
> +
> +             gelf_getrel(relocs, i, &rel);
> +             gelf_getsym(symbols, GELF_R_SYM(rel.r_info), &symbol);
> +             symbol_name = elf_strptr(elf, symbol_sh_link, symbol.st_name);
> +
> +             reloc->offset = rel.r_offset;
> +             reloc->name = MALLOC(strlen(symbol_name) + 1);
> +             strcpy(reloc->name, symbol_name);
> +     }
> +}

You could use strdup instead of MALLOC and strcpy.

I don't see any code freeing the memory allocated here, so it's probably
leaked.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to