On Thu, Sep 2, 2010 at 2:24 PM, Dave Martin <dave.mar...@linaro.org> wrote:
> On Thu, Sep 2, 2010 at 5:42 PM, Jon Smirl <jonsm...@gmail.com> wrote:
>> On Thu, Sep 2, 2010 at 4:55 AM, Dave Martin <dave.mar...@linaro.org> wrote:
>>> [ un-breaking Loic email address in CC so people reply to the right
>>> place--- not sure what happened there ]
>>>
>>> On Thu, Sep 2, 2010 at 9:53 AM, Dave Martin <dave.mar...@linaro.org> wrote:
>>>> On Thu, Sep 2, 2010 at 9:31 AM, Ramana Radhakrishnan
>>>> <ramana.radhakrish...@arm.com> wrote:
>>>>>
>>>>>>
>>>>>> > arm-linux-gnueabi-gcc -g -DDEBUG -Os  -fno-strict-aliasing
>>>>>> > -fno-common -ffixed-r8 -ffunction-sections -msoft-float -Wcast-align
>>>>>> > -Wall -D__KERNEL__ -DTEXT_BASE= -fno-builtin -ffreestanding -isystem
>>>>>> > /usr/lib/gcc/arm-linux-gnueabi/4.5.1/include -pipe -march=armv4t
>>>>>> > -mlong-calls -mtune=arm7tdmi-s -DCONFIG_ARM -D__ARM__
>>>>>> > -mthumb-interwork  -Wall -Wstrict-prototypes -Wcast-align -Wextra
>>>>>> > -Werror -Iobj_redbee-econotag_board -I../board -DBOARD=redbee-econotag
>>>>>> > -I../lib/include -I../src -I. -mthumb -mcallee-super-interworking -MMD
>>>>>> > -c -o obj_redbee-econotag_board/sleep.o sleep.c
>>>>>> > sleep.c:1:0: error: AAPCS does not support -mcallee-super-interworking
>>>>>>
>>>>>>  This sounds like a missing implementation rather than just a toolchain
>>>>>>  flag; or perhaps it's not needed at all with AAPCS?
>>>>>
>>>>> -mcallee-super-interworking is ancient and need not be used with AAPCS
>>>>> toolchains. The linker will deal with interworking issues on AAPCS
>>>>> toolchains by inserting stubs at appropriate locations and arranging for
>>>>> correct control and state transfer at the required interfaces.
>>>>
>>>> Note that this may only work if the calls to/from the ROM are via
>>>> linker-visible interfaces.
>>>>
>>>> This means that no magic interworking would happen for things like
>>>> calling magic addresses, or for callback pointers passed into the ROM.
>>>>  This is because the the tools have no way to know whether the target
>>>> symbols for call/return are interworking or not in these cases.
>>>>
>>>> There are some ways around this--- but it's probably best not to get
>>>> into that unless it's really needed.
>>
>> The Freescale mc13224 contains an armv4t and a ROM that implements a
>> bunch of radio support in thumb code. Freescale has licensed this code
>> from somebody and can't release it GPL. The link libraries supporting
>> it are also not GPL.
>>
>> Freescale's solution to this is to provide us with a human readable
>> link map for the ROM. With the link map we have the entry points and
>> can read the documentation on how they work.
>
> If I remember correctly, with the newer AAPCS ABI, non-interworking
> code is not supported directly: to conform to the ABI, code _must_
> interwork.
>
> You may find that using a legacy ABI such as -mabi=atpcs will allow
> you to use the super-interworking options, but since support for this
> may eventually disappear this might not be the best long-term
> approach.
>
>
> Otherwise, I guess the solution depends on what types of transition
> occur between the ROM and your code.
>
> Since you are building your code in Thumb, and the code you are
> calling in the ROM is also Thumb, you might not need interworking at
> all.
>
> If you are passing callbacks to the ROM which the ROM expects to call
> as ARM code, you have the option of writing some assembler stubs in
> ARM for getting from the ROM to your callbacks, and passing the stubs'
> addresses to the ROM instead of the real function entry points. This
> is effectively what -mcallee-super-interworking does if I understand
> the documentation correctly.  Alternatively, simply build your
> callback functions as ARM: since you are building your code with
> interworking, there should be no problems unless the callback
> functions call back into the ROM.  Returning from a callback to the
> ROM is probably not a problem, since _your_ functions are built with
> interworking enabled and will return in the correct way.
>
> For calling the functions in the ROM, doing things like ((void
> (*)())<address>)() should work fine, though you must remember to set
> the bottom bit of the address if the target function is Thumb.
> Defining the symbols in a linker script should also work, and avoids
> adding any extra code to the image -- the same restriction applies
> concerning the bottom bit of the address.
>
> Returning correctly from ROM functions back to callers in your code is
> unlikely to be a problem--- either the ROM code will unconditionally
> return to Thumb state  (OK for you since you are building your code in
> Thumb anyway) or the ROM code will do correct interworking returns.
> Depending on how the code in the ROM was generated, there might be a
> mixture of these two cases.
>
>
> Do you have any thoughts on this, Ramana?  Is there an easier way?
>

Mar, how are you getting this?  Maybe there is a simple solution to
calling the ROM thumb code that we haven't discovered yet.

On Thu, Sep 2, 2010 at 3:10 PM, Mariano Alvira <m...@redwirellc.com> wrote:
> Anyway, calle-super might not be necessary --- I might have done that
> back when I wasn't building everything in THUMB. Now though, without
> callee-super, and 4.5 I get this a lot:
>
> tests.c: In function ‘print_packet’:
> tests.c:66:1: error: insn does not satisfy its constraints:
> (insn 221 23 24 3 tests.c:53 (set (reg/f:SI 6 r6 [171])
>        (reg/f:SI 13 sp)) 168 {*thumb1_movsi_insn_osize} (nil))
> tests.c:66:1: internal compiler error: in
> reload_cse_simplify_operands, at postreload.c:396
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <file:///usr/share/doc/gcc-4.5/README.Bugs> for instructions.
> make: *** [obj_redbee-econotag_board/tests.o] Error 1
>
> I'll try 4.4.
>
> -Mar.
>
>



> Cheers
> ---Dave
>



-- 
Jon Smirl
jonsm...@gmail.com

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to