Convert Linker Output to Binary File
Joel Sherrill
joel.sherrill at oarcorp.com
Mon Jan 8 21:53:40 UTC 2007
Try redoing your linker script based upon the default linker script
used by the target when linking. Maybe that will highlight a problem.
You might also want to try the 4.7 binutils since they are newer. It might
have been a bug that got fixed.
If that doesn't help, ask on the binutils list for some help from a binutils
maintainer. Make it clear that powerpc-rtems is functionally the same as
powerpc-elf.
Some of these binutils problems are pretty esoteric.
--joel
frank.ueberschar at dsa-volgmann.de wrote:
> Hi Ian, thanks a lot - but:
>
>
>
>> Hi Frank,
>>
>> When we converted over from 4.5 to 4.6 we needed to change our linkcmds
>> file as there was a bunch of new things that were not included in our
>> old linkcmds files.
>>
>> One of these was how rodata changed with extra bits tacked on the back.
>>
>> Our 4.5 linkcmds for rodata looked like this:
>>
>> *(.rodata)
>>
>> Our new 4.6 (and 4.7) linkcmds for rodata looked like this:
>>
>> *(.rodata*)
>>
>
> I did change. But thus I dont know why valid addresses of
> sections rodata.str1.1 intermix with adresses 0x0
> in the map file. (This seems not to be an RTEMS specific
> Problem - as I can see until now - but a linker problem.)
>
> In my opinion this is the reason for the convert "error".
>
> Regards, Frank
>
>
>
>
>> Note the extra star at the end.
>>
>> I do not know if this is your problem, but I remember back to when we
>> did the conversion (we use a custom Coldfire 5307 BSP) I had issues like
>> what you are describing.
>>
>> Hope this helps.
>>
>> regards,
>>
>> Ian Caddy
>>
>>
>> frank.ueberschar at dsa-volgmann.de wrote:
>>
>>>> you can use memory bank in the "linkcmds" file like this:
>>>>
>>>> the code running in the zero address is located in the start.s file
>>>> and start.s is compiled to start.o.
>>>>
>>>> MEMORY
>>>> {
>>>> ram : ORIGIN = 0, LENGTH = 1M
>>>> sram : ORIGIN = 0x03100000, LENGTH = 64K
>>>> }
>>>>
>>>> you can put the start.o in the "ram" memery bank and the others in the
>>>> "sram" memory bank.
>>>> like this.
>>>>
>>>> SECTIONS
>>>> {
>>>> .first:
>>>> {
>>>> start.o
>>>> }>ram
>>>>
>>> This won't work because all objects are asserted to be
>>> in our 0x03100000 SDRAM Adress space.
>>>
>>> On Startup we are using a bootloader that copies all
>>> raw binary data stored in flash to sdram. The Bootloader
>>> then jumps to the code now residing in sdram. So the
>>> startup code for the RTEMS C-Runtime has to be there.
>>>
>>> The code is running on our mcf5272 self customized board,
>>> when having the linker produced a raw-binary file itself
>>> by adding OUTPUT_FORMAT (binary) to linkcmds.
>>>
>>> If we were missing this line (to prooduce a disassemble
>>> with objdump) then objcopy fails to convert the built
>>> elf format into raw binary. (740kB -> 50MB)
>>>
>>> ..below:
>>>
>>>
>>>> .text:
>>>> {
>>>> *(.text)
>>>> }>sram
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> 04 Jan 2007 20:30:48 UT, frank.ueberschar at dsa-volgmann.de
>>>> <frank.ueberschar at dsa-volgmann.de>:
>>>>
>>>>> I am bit confused with the following mapfile entry.
>>>>>
>>>>>
>>>>> .rodata.str1.1
>>>>> 0x0318b891 0x66f o-optimize/netcom.o
>>>>> 0x6e4 (size before relaxing)
>>>>> .rodata.str1.1
>>>>> 0x00000000 0x2 o-optimize/misc.o
>>>>>
>>> - When building RTEMS with -fno-merge-constants or when using
>>> OUTPUT_FORMAT (binary) we do not have the above output lines
>>> in the map file - there are a couple more of them even in the
>>> libraries.
>>>
>>> (Could this be a bug in the linker as we never had this
>>> Problem when we were using the tools around RTEMS 4.5.1 ?)
>>>
>>>
>>> Thank you for your advice.
>>> Frank
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>>> .rodata.str1.1
>>>>> 0x0318bf00 0x9e o-optimize/desk.o
>>>>> .rodata.str1.1
>>>>> 0x0318bf9e 0x3d3 o-optimize/aspfunc.o
>>>>> 0x3f8 (size before relaxing)
>>>>>
>>>>> Having built an application with rtems-4.7 I cannot
>>>>> opjcopy the created .exe into a binary that is nearly
>>>>> as small as I expected. (50MB -> 700kB)
>>>>>
>>>>> The code will be running at 0x03100000. But there
>>>>> seems to be some object beeing used at 0x0 so that
>>>>> objcopy fills the gap with 50MB of zeros.
>>>>>
>>>>> I was wondering about the rodata.str1.1 section having
>>>>> adress 0x0 as the link-address (might be merged constants).
>>>>>
>>>>> Can someone give me a hint on how to get rid of the unneeded
>>>>> symbols so objcopy can generate an appropriate binary ?
>>>>>
>>>>>
>>>>>
>>>>> $(CC) ... -fno-merge-constants does not help because any
>>>>> contributed library had to be recompiled)
>>>>>
>>>>> OUTPUT_FORMAT (binary) in fact produces a running binary
>>>>> - but I like to keep always a disassemble which
>>>>> itself needs the symbols for objdump.
>>>>>
>>>>>
>>>>> Happy new year,
>>>>> kind regards:
>>>>>
>>>>> Frank
>>>>>
>>>>>
>>>>>
>>>>>
>> --
>> Ian Caddy
>> Goanna Technologies Pty Ltd
>> +61 8 9221 1860
>>
>>
>>
>
>
> To: ianc at goanna.iinet.net.au
> Cc: rtems-users at rtems.org
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
>
More information about the users
mailing list