Skip to content

Commit

Permalink
x86, relocs: When printing an error, say relative or absolute
Browse files Browse the repository at this point in the history
commit 24ab82b upstream.

When the relocs tool throws an error, let the error message say if it
is an absolute or relative symbol.  This should make it a lot more
clear what action the programmer needs to take and should help us find
the reason if additional symbol bugs show up.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
  • Loading branch information
H. Peter Anvin authored and Ben Hutchings committed May 30, 2012
1 parent 5a3270a commit cd88adf
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions arch/x86/tools/relocs.c
Original file line number Diff line number Diff line change
Expand Up @@ -562,10 +562,14 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
Elf32_Sym *sym;
unsigned r_type;
const char *symname;
int shn_abs;

rel = &sec->reltab[j];
sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
r_type = ELF32_R_TYPE(rel->r_info);

shn_abs = sym->st_shndx == SHN_ABS;

switch (r_type) {
case R_386_NONE:
case R_386_PC32:
Expand All @@ -581,7 +585,7 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
symname = sym_name(sym_strtab, sym);
if (!use_real_mode)
goto bad;
if (sym->st_shndx == SHN_ABS) {
if (shn_abs) {
if (is_reloc(S_ABS, symname))
break;
else if (!is_reloc(S_SEG, symname))
Expand All @@ -597,7 +601,7 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),

case R_386_32:
symname = sym_name(sym_strtab, sym);
if (sym->st_shndx == SHN_ABS) {
if (shn_abs) {
if (is_reloc(S_ABS, symname))
break;
else if (!is_reloc(S_REL, symname))
Expand All @@ -615,7 +619,8 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
break;
bad:
symname = sym_name(sym_strtab, sym);
die("Invalid %s relocation: %s\n",
die("Invalid %s %s relocation: %s\n",
shn_abs ? "absolute" : "relative",
rel_type(r_type), symname);
}
}
Expand Down

0 comments on commit cd88adf

Please sign in to comment.