All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] "raise" not defined, when compiler uses its own div0
@ 2009-08-11  6:20 Ulf Samuelsson
  2009-08-11  8:14 ` Gaye Abdoulaye Walsimou
  2009-08-11  8:47 ` Wolfgang Denk
  0 siblings, 2 replies; 9+ messages in thread
From: Ulf Samuelsson @ 2009-08-11  6:20 UTC (permalink / raw)
  To: u-boot

When trying to build U-Boot under Buildroot and OpenEmbedded,
I run into a problem:

When linking u-boot the linker seems to use the div0 from
the C compiler libgcc instead of the u-boot div0.

gcc div0 for ARM contains a call to "raise" which is not defined
in libgcc.a (someone said it was part of glibc),
so the linking process fails due to no "raise" symbol

gcc/config/arm/lib1funcs.asm contains:


FUNC_START div0

	tmfd sp!, {r1, lr}
	mov r0, #SIGFPE
	bl SYM(raise) __PLT__
	...

The problem can be fixed by patching the C compiler:

+	bl SYM(raise) __PLT__
+	bl SYM(_div0) __PLT__

------
What I'd like to know: Is there a way to fix this in u-boot?

Tried creating a "raise" function in libarm/board.c
void raise(void)
{
	hang();
}

which did not work.

I later saw that raise needs a parameter,
but it complained that raise is not found,
and not that the parameters is wrong.

Is board.c not included in the link?

Anyone else got this problem?

BR
Ulf Samuelsson

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11  6:20 [U-Boot] "raise" not defined, when compiler uses its own div0 Ulf Samuelsson
@ 2009-08-11  8:14 ` Gaye Abdoulaye Walsimou
  2009-08-11  8:48   ` Wolfgang Denk
  2009-08-11  8:47 ` Wolfgang Denk
  1 sibling, 1 reply; 9+ messages in thread
From: Gaye Abdoulaye Walsimou @ 2009-08-11  8:14 UTC (permalink / raw)
  To: u-boot

Ulf Samuelsson wrote:
> When trying to build U-Boot under Buildroot and OpenEmbedded,
> I run into a problem:
>
> When linking u-boot the linker seems to use the div0 from
> the C compiler libgcc instead of the u-boot div0.
>   

Yes i had the same problem with a home made toolchain (eglibc-2.10,
gcc-4.4.1| gcc-4.3.4 | gcc-4.3.3 | gcc-4.3.2) with smdk2410 board.
It seems to be same with this thread
http://lists.denx.de/pipermail/u-boot/2009-August/058349.html with
codesourcery's toolchain.
However, I have tested u-boot-arm repository which includes a
controversial :-) "ARM: Don't include libgcc anymore"
(70163a381f1a5c93fcc181365cdb092566d8c5c5) without compile errors.

Regards

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11  6:20 [U-Boot] "raise" not defined, when compiler uses its own div0 Ulf Samuelsson
  2009-08-11  8:14 ` Gaye Abdoulaye Walsimou
@ 2009-08-11  8:47 ` Wolfgang Denk
  2009-08-11 21:48   ` Ulf Samuelsson
  1 sibling, 1 reply; 9+ messages in thread
From: Wolfgang Denk @ 2009-08-11  8:47 UTC (permalink / raw)
  To: u-boot

Dear Ulf Samuelsson,

In message <4A810DBC.50805@atmel.com> you wrote:
> When trying to build U-Boot under Buildroot and OpenEmbedded,

These probably count to the tool chains with "broken" ARM cross
compilers.

> When linking u-boot the linker seems to use the div0 from
> the C compiler libgcc instead of the u-boot div0.

Try setting USE_PRIVATE_LIBGCC=yes in your envrionment, like

	USE_PRIVATE_LIBGCC=yes make ...

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Quote from the Boss... "I didn't say it was your fault.  I said I was
going to blame it on you."

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11  8:14 ` Gaye Abdoulaye Walsimou
@ 2009-08-11  8:48   ` Wolfgang Denk
  0 siblings, 0 replies; 9+ messages in thread
From: Wolfgang Denk @ 2009-08-11  8:48 UTC (permalink / raw)
  To: u-boot

Dear Gaye Abdoulaye Walsimou,

In message <4A81285B.8010908@walsimou.com> you wrote:
>
> However, I have tested u-boot-arm repository which includes a
> controversial :-) "ARM: Don't include libgcc anymore"
> (70163a381f1a5c93fcc181365cdb092566d8c5c5) without compile errors.

It's not controversial. It has been formally NAKed and rejected. It is
not needed as working fixes are already available in mainline.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
You said you  didn't  want  to  use  CGI.pm,  but  methinks  you  are
needlessly reinventing the wheel, one spoke at a time. Either you are
masochistic,  or  you  just haven't seen enough of what CGI.pm can do
for you. -- Randal L. Schwartz in <8cyb81rg81.fsf@gadget.cscaper.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11  8:47 ` Wolfgang Denk
@ 2009-08-11 21:48   ` Ulf Samuelsson
  2009-08-11 21:58     ` Wolfgang Denk
  0 siblings, 1 reply; 9+ messages in thread
From: Ulf Samuelsson @ 2009-08-11 21:48 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk skrev:
> Dear Ulf Samuelsson,
> 
> In message <4A810DBC.50805@atmel.com> you wrote:
>> When trying to build U-Boot under Buildroot and OpenEmbedded,
> 
> These probably count to the tool chains with "broken" ARM cross
> compilers.

Maybe,
Buildroot is even more broken, if you try to use an external toolchain
and I would be surprised if openembedded is better.
In the end, noone wants to mess around with one compiler per application
so it is better if a small fix to u-boot can be applied.

> 
>> When linking u-boot the linker seems to use the div0 from
>> the C compiler libgcc instead of the u-boot div0.
> 
> Try setting USE_PRIVATE_LIBGCC=yes in your envrionment, like
> 
> 	USE_PRIVATE_LIBGCC=yes make ...

I have done two fixes to make it build with openembedded.
1) Define "raise" in libarm/board.c which calls hang.
2) Changes mapi to "-mapi=aapcs-linux" in cpu/arm926ej-s/config.mk
   Some toolchains want to keep apcs-gnu I guess.

> 
> Best regards,
> 
> Wolfgang Denk
> 

BR
Ulf Samuelsson

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11 21:48   ` Ulf Samuelsson
@ 2009-08-11 21:58     ` Wolfgang Denk
  2009-08-12  6:22       ` Ulf Samuelsson
  0 siblings, 1 reply; 9+ messages in thread
From: Wolfgang Denk @ 2009-08-11 21:58 UTC (permalink / raw)
  To: u-boot

Dear Ulf Samuelsson,

In message <4A81E724.3070205@atmel.com> you wrote:
>
> > Try setting USE_PRIVATE_LIBGCC=yes in your envrionment, like
> > 
> > 	USE_PRIVATE_LIBGCC=yes make ...
> 
> I have done two fixes to make it build with openembedded.
> 1) Define "raise" in libarm/board.c which calls hang.

Did you use "USE_PRIVATE_LIBGCC=yes", and it still needed raise(),
or did you implement that workaround instead of using
"USE_PRIVATE_LIBGCC=yes".

Normally no raise() should be needed when using USE_PRIVATE_LIBGCC=yes

> 2) Changes mapi to "-mapi=aapcs-linux" in cpu/arm926ej-s/config.mk
>    Some toolchains want to keep apcs-gnu I guess.

I wonder why we enforce a specific API at all - would it not be better
to use the toolchain provided default settings?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Single tasking: Just Say No.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-11 21:58     ` Wolfgang Denk
@ 2009-08-12  6:22       ` Ulf Samuelsson
  2009-08-12 12:04         ` Wolfgang Denk
  0 siblings, 1 reply; 9+ messages in thread
From: Ulf Samuelsson @ 2009-08-12  6:22 UTC (permalink / raw)
  To: u-boot


Sent: Tuesday, August 11, 2009 11:58 PM
Subject: Re: [U-Boot] "raise" not defined, when compiler uses its own div0


> Dear Ulf Samuelsson,
>
> In message <4A81E724.3070205@atmel.com> you wrote:
>>
>> > Try setting USE_PRIVATE_LIBGCC=yes in your envrionment, like
>> >
>> > USE_PRIVATE_LIBGCC=yes make ...
>>
>> I have done two fixes to make it build with openembedded.
>> 1) Define "raise" in libarm/board.c which calls hang.
>
> Did you use "USE_PRIVATE_LIBGCC=yes", and it still needed raise(),
> or did you implement that workaround instead of using
> "USE_PRIVATE_LIBGCC=yes".
>
> Normally no raise() should be needed when using USE_PRIVATE_LIBGCC=yes

Instead, since I think it is ugly.
If I build u-boot from the u-boot dir outside the buildsystem,
it also means a lot of typing - If I remember to do it...

Why not make it a default mode?
Then there is no problem anywhere and the patch is not needed.

>> 2) Changes mapi to "-mapi=aapcs-linux" in cpu/arm926ej-s/config.mk
>>    Some toolchains want to keep apcs-gnu I guess.
>
> I wonder why we enforce a specific API at all - would it not be better
> to use the toolchain provided default settings?

I tried that, but that did not work with openembedded. '
I suspect that the openembedded  libraries are built with -mapi-aapcs-linux.
-mapi=apcs-gnu is not a problem with buildroot.

A similar thing:
For ARM,  "-msoftfloat"  is enforced, and I think that should be removed.
AFAIK there are no floating point stuff in u-boot, and why then
enforce something which might or might not work for an
arbitrary toolchain.

Is there any toolchain that will not work, if -msoftfloat is removed?
>
> Best regards,
>
> Wolfgang Denk
>
> -- 
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> Single tasking: Just Say No.
>


Best Regards
Ulf Samuelsson                ulf at atmel.com
Atmel Nordic AB
Mail:  Box 2033, 174 02 Sundbyberg, Sweden
Visit:  Kavalleriv?gen 24, 174 58 Sundbyberg, Sweden
Phone +46 (8) 441 54 22     Fax +46 (8) 441 54 29
GSM    +46 (706) 22 44 57

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-12  6:22       ` Ulf Samuelsson
@ 2009-08-12 12:04         ` Wolfgang Denk
  2009-08-13  4:55           ` Mike Frysinger
  0 siblings, 1 reply; 9+ messages in thread
From: Wolfgang Denk @ 2009-08-12 12:04 UTC (permalink / raw)
  To: u-boot

Dear "Ulf Samuelsson",

In message <E26FF1FBF0834320AC6F19CE783C7E69@aeglos> you wrote:
> 
> If I build u-boot from the u-boot dir outside the buildsystem,
> it also means a lot of typing - If I remember to do it...
> 
> Why not make it a default mode?

Because the default mode is to assume you are using a "good" tool
chain.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
He had quite a powerful intellect, but it  was  as  powerful  like  a
locomotive,  and  ran on rails and was therefore almost impossible to
steer.                          - Terry Pratchett, _Lords and Ladies_

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] "raise" not defined, when compiler uses its own div0
  2009-08-12 12:04         ` Wolfgang Denk
@ 2009-08-13  4:55           ` Mike Frysinger
  0 siblings, 0 replies; 9+ messages in thread
From: Mike Frysinger @ 2009-08-13  4:55 UTC (permalink / raw)
  To: u-boot

On Wednesday 12 August 2009 08:04:40 Wolfgang Denk wrote:
> Ulf Samuelsson wrote:
> > If I build u-boot from the u-boot dir outside the buildsystem,
> > it also means a lot of typing - If I remember to do it...
> >
> > Why not make it a default mode?
>
> Because the default mode is to assume you are using a "good" tool
> chain.

considering these "broken" toolchains are merely following upstream gcc 
behavior, the definition of "good" will quickly become synonymous with "old" 
if it hasnt already.  while the situation does blow, might as well accept 
reality and make the local one the default.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20090813/cef3ed45/attachment.pgp 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-08-13  4:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-11  6:20 [U-Boot] "raise" not defined, when compiler uses its own div0 Ulf Samuelsson
2009-08-11  8:14 ` Gaye Abdoulaye Walsimou
2009-08-11  8:48   ` Wolfgang Denk
2009-08-11  8:47 ` Wolfgang Denk
2009-08-11 21:48   ` Ulf Samuelsson
2009-08-11 21:58     ` Wolfgang Denk
2009-08-12  6:22       ` Ulf Samuelsson
2009-08-12 12:04         ` Wolfgang Denk
2009-08-13  4:55           ` Mike Frysinger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.