This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
Re: Problems converting elf32-sh to coff-sh
- To: costin00@gel.ulaval.ca
- Subject: Re: Problems converting elf32-sh to coff-sh
- From: Ian Lance Taylor <ian@zembu.com>
- Date: 10 Sep 1999 19:55:26 -0400
- CC: binutils@sourceware.cygnus.com
- References: <000701befbd5$a3d4f140$952d13cc@lyre.qc.ca>
From: =?iso-8859-1?Q?Fran=E7ois_Costin?= <costin00@gel.ulaval.ca>
Date: Fri, 10 Sep 1999 17:44:19 -0400
I need for some reason to convert simple elf object files into coff files.
My compiler produces some R_SH_DIR32 relocations which are not supported by
the binutils for the conversion. I know you can't do it in the general
case, but I've managed somehow to remap the R_SH_DIR32 as a R_SH_IMM32
reloc. This part seems to work fine.
Only one exception... when an object file contains a reloc to a function
inside that same object file, the converter adds a weird negative offset to
the symbol name when I ask for an objdump -x.
I did find where the offset comes from there's a line in the coff-sh.c file
inside the CALC_ADDEND macro which goes like this:
cache_ptr->addend = -(ptr->section->vma + ptr->value);
I did try to simply change this to:
cache_ptr->addend = 0;
Now, after doing an objcopy -O coff-sh, when I do an objdump -x with the new
code, I do not see the offset. But when I do the objdump with an older
version of the code, it does see it. And it fact it stays there.
I'd just like to know where in the code I can once and for all delete that
offset. It is only for that specific application and I know that if I can
delete the offset, I'll have no problems anymore converting my object files.
You've already figured out how to delete that offset: change the
CALC_ADDEND macro.
I don't understand what else you are asking for. For coff-sh, the
addend computed by CALC_ADDEND and reported by objdump -x doesn't
reflect any value that actually appears in the object file. It is a
value computed solely to make the link work correctly.
Try generating a COFF file directly using the assembler, and see what
you get. You want to get the same results after the conversion from
ELF.
Ian