Subject: Re: tracking program counter / assembling objdump output
To: None <port-m68k@NetBSD.org>
From: None <SigmFSK@aol.com>
List: port-m68k
Date: 10/12/2006 06:50:44
In a message dated 10/12/2006 2:45:34 A.M. Eastern Standard Time,  
david@l8s.co.uk writes:
Because it isn't possible.
The disassembler cannot  know whether constants should be absolute numbers,
diffences between  addresses, or addresses themselves.  So when you
reassemmble the output  you'll end up with incorrect code.
 
David
---
Thanks David.  I followed agrier's suggestion last night to ask the  binutils 
mailing list and got a similar response.  I still think it would  be neat to 
make a converter from objdump output to gcc-assemblable source and  have it 
ask for human help when needed, but the more I think about - not neat  enough to 
actually go through the work of doing it.
/arthur
 
 
> It  appears that the objdump output is quite similar to, but  deliberately 
> different  from, the assembly created from compiling  a c program with "gcc 
-S".
> 
> Is  there a mechanism to  convert the objdump disassembly output to an 
> assemblable   form?
 
Apart from doing this by hand, no.
 
> Or is that a deliberate objdump decision to have the output   
> different, as my desire is inherently unworkable,
 
It was a deliberate decision but the motive was to make disassembler's  
output be useful to people who want to examine the contents of a binary  
file, not to allow re-assembly.  To this end, more information is  
presented to the user than is needed to just re-assemble the  
disassembled output.
 
> as modifying the disassembly  
> would change all the  branch offsets and cause everything to break?
 
No, the real problem is coping with relocations.  The disassembled  
output of a file is not just the textual disassembly, but also the  
relocations that are associated with that disassembly.  You would need  
some way to re-install those relocations back into the assembler source,  
possibly regenerating local labels as you go.  A difficult task.
 
Cheers
Nick