This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: objcopy of coff-i386 to elf32-i386?
On Wed, Sep 13, 2000 at 10:57:32AM -0700, H . J . Lu wrote:
> On Wed, Sep 13, 2000 at 02:56:46PM +1100, Lachlan O'Dea wrote:
> >
> > objcopy --remove-leading-char \
> > --input-target=coff-i386 --output-target=elf32-i386 \
> > $(COFFDIR)/$*.obj $*.o
> >
>
> That never worked. If it did, it did by accident. Please read the
> updated documentation from sourceware or my Linux binutils. Basically,
> you can only use objcopy on fully linked files. You can mix .o files
> in the final link.
Sorry, my mistake. It almost works :-)
So are you suggesting I do something like this (on an elf system):
gcc -g -o test main.o c_code.o -Wl,-b,coff-i386 masm_code.obj
where masm_code.obj is coff produced by MASM, main.o and c_code.o are
elf32 compiled by gcc.
This gives me an executable, but again the calls from the coff files
have the wrong offsets. When I run objdump -d on the executable produced
by the above command, I get:
08048448 <asm_function>:
8048448: 51 push %ecx
8048449: b9 2a 00 00 00 mov $0x2a,%ecx
804844e: 51 push %ecx
804844f: e8 d8 ff ff ff call 804842c <print_int+0xc>
8048454: 59 pop %ecx
8048455: 59 pop %ecx
8048456: c3 ret
asm_function is from masm_code.obj, and the call should be to
print_int(int) from c_code.o. main.o also has a call to print_int, and
it comes out fine:
080483e4 <main>:
[ cut ]
804840b: 6a 2b push $0x2b
804840d: e8 0e 00 00 00 call 8048420 <print_int>
8048412: 83 c4 10 add $0x10,%esp
8048415: 89 ec mov %ebp,%esp
8048417: 5d pop %ebp
8048418: c3 ret
Am I doing this right? I can send you this example code if it's
useful. Thanks for the help.
--
Lachlan O'Dea <mailto:lodea@vet.com.au> Computer Associates Pty Ltd
Webmaster Vet - Anti-Virus Software
http://www.vet.com.au/