diff mbox

[U-Boot,02/10] Add some standard headers external code might need

Message ID 1413369519-11677-3-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Simon Glass Oct. 15, 2014, 10:38 a.m. UTC
From: Gabe Black <gabeblack@chromium.org>

inttypes.h defines format specifiers for printf which work with data types of
particular sizes. stdlib.h is currently just a passthrough to malloc.h which
has declarations of the various *alloc functions.

Add the required #define to common.h so that these printf format specifiers
will be made available.

Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
Reviewed-by: Bill Richardson <wfrichar@google.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
(Replaced with a GPL version from glibc)

---

 include/common.h   |   3 +
 include/inttypes.h | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 include/stdlib.h   |  12 +++
 3 files changed, 302 insertions(+)
 create mode 100644 include/inttypes.h
 create mode 100644 include/stdlib.h

Comments

Tom Rini Oct. 27, 2014, 10:20 p.m. UTC | #1
On Wed, Oct 15, 2014 at 04:38:31AM -0600, Simon Glass wrote:

> From: Gabe Black <gabeblack@chromium.org>
> 
> inttypes.h defines format specifiers for printf which work with data types of
> particular sizes. stdlib.h is currently just a passthrough to malloc.h which
> has declarations of the various *alloc functions.
> 
> Add the required #define to common.h so that these printf format specifiers
> will be made available.
> 
> Signed-off-by: Gabe Black <gabeblack@google.com>
> Reviewed-by: Gabe Black <gabeblack@chromium.org>
> Tested-by: Gabe Black <gabeblack@chromium.org>
> Reviewed-by: Bill Richardson <wfrichar@google.com>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> (Replaced with a GPL version from glibc)

Applied to u-boot/master, thanks!
Masahiro Yamada Oct. 28, 2014, 4:25 p.m. UTC | #2
Hi Gabe, Simon,


2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
> From: Gabe Black <gabeblack@chromium.org>
>
> inttypes.h defines format specifiers for printf which work with data types of
> particular sizes. stdlib.h is currently just a passthrough to malloc.h which
> has declarations of the various *alloc functions.
>
> Add the required #define to common.h so that these printf format specifiers
> will be made available.
>
> Signed-off-by: Gabe Black <gabeblack@google.com>
> Reviewed-by: Gabe Black <gabeblack@chromium.org>
> Tested-by: Gabe Black <gabeblack@chromium.org>
> Reviewed-by: Bill Richardson <wfrichar@google.com>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> (Replaced with a GPL version from glibc)
>
[snip]
> diff --git a/include/stdlib.h b/include/stdlib.h
> new file mode 100644
> index 0000000..6bc7fbb
> --- /dev/null
> +++ b/include/stdlib.h
> @@ -0,0 +1,12 @@
> +/*
> + *  Copyright (C) 2013 Google Inc.
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#ifndef __STDLIB_H_
> +#define __STDLIB_H_
> +
> +#include <malloc.h>
> +
> +#endif /* __STDLIB_H_ */
> --
> 2.1.0.rc2.206.gedb03e5


This patch is not clear to me.

Why do we need include/stdlib.h ?
Simon Glass Oct. 28, 2014, 4:29 p.m. UTC | #3
Hi Masahiro,

On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>
> Hi Gabe, Simon,
>
>
> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
> > From: Gabe Black <gabeblack@chromium.org>
> >
> > inttypes.h defines format specifiers for printf which work with data types of
> > particular sizes. stdlib.h is currently just a passthrough to malloc.h which
> > has declarations of the various *alloc functions.
> >
> > Add the required #define to common.h so that these printf format specifiers
> > will be made available.
> >
> > Signed-off-by: Gabe Black <gabeblack@google.com>
> > Reviewed-by: Gabe Black <gabeblack@chromium.org>
> > Tested-by: Gabe Black <gabeblack@chromium.org>
> > Reviewed-by: Bill Richardson <wfrichar@google.com>
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > (Replaced with a GPL version from glibc)
> >
> [snip]
> > diff --git a/include/stdlib.h b/include/stdlib.h
> > new file mode 100644
> > index 0000000..6bc7fbb
> > --- /dev/null
> > +++ b/include/stdlib.h
> > @@ -0,0 +1,12 @@
> > +/*
> > + *  Copyright (C) 2013 Google Inc.
> > + *
> > + * SPDX-License-Identifier:    GPL-2.0+
> > + */
> > +
> > +#ifndef __STDLIB_H_
> > +#define __STDLIB_H_
> > +
> > +#include <malloc.h>
> > +
> > +#endif /* __STDLIB_H_ */
> > --
> > 2.1.0.rc2.206.gedb03e5
>
>
> This patch is not clear to me.
>
> Why do we need include/stdlib.h ?

This makes the U-Boot environment more similar to that used by other
software, so we can more easily build it without lots of glue files.
Normally stdlib.h defines malloc() and friends.

Regards,
Simon
Masahiro Yamada Oct. 28, 2014, 4:38 p.m. UTC | #4
Hi Simon,


2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
> Hi Masahiro,
>
> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>>
>> Hi Gabe, Simon,
>>
>>
>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> > From: Gabe Black <gabeblack@chromium.org>
>> >
>> > inttypes.h defines format specifiers for printf which work with data types of
>> > particular sizes. stdlib.h is currently just a passthrough to malloc.h which
>> > has declarations of the various *alloc functions.
>> >
>> > Add the required #define to common.h so that these printf format specifiers
>> > will be made available.
>> >
>> > Signed-off-by: Gabe Black <gabeblack@google.com>
>> > Reviewed-by: Gabe Black <gabeblack@chromium.org>
>> > Tested-by: Gabe Black <gabeblack@chromium.org>
>> > Reviewed-by: Bill Richardson <wfrichar@google.com>
>> > Signed-off-by: Simon Glass <sjg@chromium.org>
>> > (Replaced with a GPL version from glibc)
>> >
>> [snip]
>> > diff --git a/include/stdlib.h b/include/stdlib.h
>> > new file mode 100644
>> > index 0000000..6bc7fbb
>> > --- /dev/null
>> > +++ b/include/stdlib.h
>> > @@ -0,0 +1,12 @@
>> > +/*
>> > + *  Copyright (C) 2013 Google Inc.
>> > + *
>> > + * SPDX-License-Identifier:    GPL-2.0+
>> > + */
>> > +
>> > +#ifndef __STDLIB_H_
>> > +#define __STDLIB_H_
>> > +
>> > +#include <malloc.h>
>> > +
>> > +#endif /* __STDLIB_H_ */
>> > --
>> > 2.1.0.rc2.206.gedb03e5
>>
>>
>> This patch is not clear to me.
>>
>> Why do we need include/stdlib.h ?
>
> This makes the U-Boot environment more similar to that used by other
> software, so we can more easily build it without lots of glue files.
> Normally stdlib.h defines malloc() and friends.

I am not happy about this.

Our right direction is to make U-Boot environment more similar to the
Kernel, I think.

stdlib.h shouldn't appear in bare metal code.
Simon Glass Oct. 28, 2014, 5:33 p.m. UTC | #5
Hi Masahiro,

On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
> Hi Simon,
>
>
> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> Hi Masahiro,
>>
>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>>>
>>> Hi Gabe, Simon,
>>>
>>>
>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>> > From: Gabe Black <gabeblack@chromium.org>
>>> >
>>> > inttypes.h defines format specifiers for printf which work with data types of
>>> > particular sizes. stdlib.h is currently just a passthrough to malloc.h which
>>> > has declarations of the various *alloc functions.
>>> >
>>> > Add the required #define to common.h so that these printf format specifiers
>>> > will be made available.
>>> >
>>> > Signed-off-by: Gabe Black <gabeblack@google.com>
>>> > Reviewed-by: Gabe Black <gabeblack@chromium.org>
>>> > Tested-by: Gabe Black <gabeblack@chromium.org>
>>> > Reviewed-by: Bill Richardson <wfrichar@google.com>
>>> > Signed-off-by: Simon Glass <sjg@chromium.org>
>>> > (Replaced with a GPL version from glibc)
>>> >
>>> [snip]
>>> > diff --git a/include/stdlib.h b/include/stdlib.h
>>> > new file mode 100644
>>> > index 0000000..6bc7fbb
>>> > --- /dev/null
>>> > +++ b/include/stdlib.h
>>> > @@ -0,0 +1,12 @@
>>> > +/*
>>> > + *  Copyright (C) 2013 Google Inc.
>>> > + *
>>> > + * SPDX-License-Identifier:    GPL-2.0+
>>> > + */
>>> > +
>>> > +#ifndef __STDLIB_H_
>>> > +#define __STDLIB_H_
>>> > +
>>> > +#include <malloc.h>
>>> > +
>>> > +#endif /* __STDLIB_H_ */
>>> > --
>>> > 2.1.0.rc2.206.gedb03e5
>>>
>>>
>>> This patch is not clear to me.
>>>
>>> Why do we need include/stdlib.h ?
>>
>> This makes the U-Boot environment more similar to that used by other
>> software, so we can more easily build it without lots of glue files.
>> Normally stdlib.h defines malloc() and friends.
>
> I am not happy about this.
>
> Our right direction is to make U-Boot environment more similar to the
> Kernel, I think.
>
> stdlib.h shouldn't appear in bare metal code.

That's right, we don't want to include this in U-Boot itself. But if
you look at things in tools/ they include stdlib.h. With this header
available, we can more easily compile external code into U-Boot.

Regards,
Simon
Jeroen Hofstee Oct. 28, 2014, 5:46 p.m. UTC | #6
Hello Simon,

On 28-10-14 18:33, Simon Glass wrote:
> Hi Masahiro,
>
> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>> Hi Simon,
>>
>>
>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>> Hi Masahiro,
>>>
>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>>>> Hi Gabe, Simon,
>>>>
>>>>
>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>> From: Gabe Black <gabeblack@chromium.org>
>>>>>
>>>>> inttypes.h defines format specifiers for printf which work with data types of
>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h which
>>>>> has declarations of the various *alloc functions.
>>>>>
>>>>> Add the required #define to common.h so that these printf format specifiers
>>>>> will be made available.
>>>>>
>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>> (Replaced with a GPL version from glibc)
>>>>>
>>>> [snip]
>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
>>>>> new file mode 100644
>>>>> index 0000000..6bc7fbb
>>>>> --- /dev/null
>>>>> +++ b/include/stdlib.h
>>>>> @@ -0,0 +1,12 @@
>>>>> +/*
>>>>> + *  Copyright (C) 2013 Google Inc.
>>>>> + *
>>>>> + * SPDX-License-Identifier:    GPL-2.0+
>>>>> + */
>>>>> +
>>>>> +#ifndef __STDLIB_H_
>>>>> +#define __STDLIB_H_
>>>>> +
>>>>> +#include <malloc.h>
>>>>> +
>>>>> +#endif /* __STDLIB_H_ */
>>>>> --
>>>>> 2.1.0.rc2.206.gedb03e5
>>>>
>>>> This patch is not clear to me.
>>>>
>>>> Why do we need include/stdlib.h ?
>>> This makes the U-Boot environment more similar to that used by other
>>> software, so we can more easily build it without lots of glue files.
>>> Normally stdlib.h defines malloc() and friends.
>> I am not happy about this.
>>
>> Our right direction is to make U-Boot environment more similar to the
>> Kernel, I think.
>>
>> stdlib.h shouldn't appear in bare metal code.
> That's right, we don't want to include this in U-Boot itself. But if
> you look at things in tools/ they include stdlib.h. With this header
> available, we can more easily compile external code into U-Boot.

So is it intended as fallback if the host doesn't have a stdlib.h?

Regards,
Jeroen
Simon Glass Oct. 28, 2014, 6:24 p.m. UTC | #7
Hi,

On 28 October 2014 11:46, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> Hello Simon,
>
>
> On 28-10-14 18:33, Simon Glass wrote:
>>
>> Hi Masahiro,
>>
>> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>> wrote:
>>>
>>> Hi Simon,
>>>
>>>
>>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>
>>>> Hi Masahiro,
>>>>
>>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>>>> wrote:
>>>>>
>>>>> Hi Gabe, Simon,
>>>>>
>>>>>
>>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>>>
>>>>>> From: Gabe Black <gabeblack@chromium.org>
>>>>>>
>>>>>> inttypes.h defines format specifiers for printf which work with data
>>>>>> types of
>>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h
>>>>>> which
>>>>>> has declarations of the various *alloc functions.
>>>>>>
>>>>>> Add the required #define to common.h so that these printf format
>>>>>> specifiers
>>>>>> will be made available.
>>>>>>
>>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
>>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
>>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
>>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>> (Replaced with a GPL version from glibc)
>>>>>>
>>>>> [snip]
>>>>>>
>>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
>>>>>> new file mode 100644
>>>>>> index 0000000..6bc7fbb
>>>>>> --- /dev/null
>>>>>> +++ b/include/stdlib.h
>>>>>> @@ -0,0 +1,12 @@
>>>>>> +/*
>>>>>> + *  Copyright (C) 2013 Google Inc.
>>>>>> + *
>>>>>> + * SPDX-License-Identifier:    GPL-2.0+
>>>>>> + */
>>>>>> +
>>>>>> +#ifndef __STDLIB_H_
>>>>>> +#define __STDLIB_H_
>>>>>> +
>>>>>> +#include <malloc.h>
>>>>>> +
>>>>>> +#endif /* __STDLIB_H_ */
>>>>>> --
>>>>>> 2.1.0.rc2.206.gedb03e5
>>>>>
>>>>>
>>>>> This patch is not clear to me.
>>>>>
>>>>> Why do we need include/stdlib.h ?
>>>>
>>>> This makes the U-Boot environment more similar to that used by other
>>>> software, so we can more easily build it without lots of glue files.
>>>> Normally stdlib.h defines malloc() and friends.
>>>
>>> I am not happy about this.
>>>
>>> Our right direction is to make U-Boot environment more similar to the
>>> Kernel, I think.
>>>
>>> stdlib.h shouldn't appear in bare metal code.
>>
>> That's right, we don't want to include this in U-Boot itself. But if
>> you look at things in tools/ they include stdlib.h. With this header
>> available, we can more easily compile external code into U-Boot.
>
>
> So is it intended as fallback if the host doesn't have a stdlib.h?

Not really, more that for things that expect that header (and
inttypes.h which was also added) they can get it without needing
special #ifdefs for U-Boot.

Regards,
Simon
Masahiro Yamada Oct. 29, 2014, 2:06 p.m. UTC | #8
Hi Simon,

2014-10-29 3:24 GMT+09:00 Simon Glass <sjg@chromium.org>:
> Hi,
>
> On 28 October 2014 11:46, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
>> Hello Simon,
>>
>>
>> On 28-10-14 18:33, Simon Glass wrote:
>>>
>>> Hi Masahiro,
>>>
>>> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>>> wrote:
>>>>
>>>> Hi Simon,
>>>>
>>>>
>>>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>>
>>>>> Hi Masahiro,
>>>>>
>>>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi Gabe, Simon,
>>>>>>
>>>>>>
>>>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>>>>
>>>>>>> From: Gabe Black <gabeblack@chromium.org>
>>>>>>>
>>>>>>> inttypes.h defines format specifiers for printf which work with data
>>>>>>> types of
>>>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h
>>>>>>> which
>>>>>>> has declarations of the various *alloc functions.
>>>>>>>
>>>>>>> Add the required #define to common.h so that these printf format
>>>>>>> specifiers
>>>>>>> will be made available.
>>>>>>>
>>>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
>>>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
>>>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
>>>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>>> (Replaced with a GPL version from glibc)
>>>>>>>
>>>>>> [snip]
>>>>>>>
>>>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
>>>>>>> new file mode 100644
>>>>>>> index 0000000..6bc7fbb
>>>>>>> --- /dev/null
>>>>>>> +++ b/include/stdlib.h
>>>>>>> @@ -0,0 +1,12 @@
>>>>>>> +/*
>>>>>>> + *  Copyright (C) 2013 Google Inc.
>>>>>>> + *
>>>>>>> + * SPDX-License-Identifier:    GPL-2.0+
>>>>>>> + */
>>>>>>> +
>>>>>>> +#ifndef __STDLIB_H_
>>>>>>> +#define __STDLIB_H_
>>>>>>> +
>>>>>>> +#include <malloc.h>
>>>>>>> +
>>>>>>> +#endif /* __STDLIB_H_ */
>>>>>>> --
>>>>>>> 2.1.0.rc2.206.gedb03e5
>>>>>>
>>>>>>
>>>>>> This patch is not clear to me.
>>>>>>
>>>>>> Why do we need include/stdlib.h ?
>>>>>
>>>>> This makes the U-Boot environment more similar to that used by other
>>>>> software, so we can more easily build it without lots of glue files.
>>>>> Normally stdlib.h defines malloc() and friends.
>>>>
>>>> I am not happy about this.
>>>>
>>>> Our right direction is to make U-Boot environment more similar to the
>>>> Kernel, I think.
>>>>
>>>> stdlib.h shouldn't appear in bare metal code.
>>>
>>> That's right, we don't want to include this in U-Boot itself. But if
>>> you look at things in tools/ they include stdlib.h. With this header
>>> available, we can more easily compile external code into U-Boot.
>>
>>
>> So is it intended as fallback if the host doesn't have a stdlib.h?
>
> Not really, more that for things that expect that header (and
> inttypes.h which was also added) they can get it without needing
> special #ifdefs for U-Boot.
>


Sorry, I still don't get it.
Could you explain user cases?
Simon Glass Oct. 30, 2014, 1:43 a.m. UTC | #9
Hi Masahiro,

On 29 October 2014 08:06, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
> Hi Simon,
>
> 2014-10-29 3:24 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> Hi,
>>
>> On 28 October 2014 11:46, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
>>> Hello Simon,
>>>
>>>
>>> On 28-10-14 18:33, Simon Glass wrote:
>>>>
>>>> Hi Masahiro,
>>>>
>>>> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>>>> wrote:
>>>>>
>>>>> Hi Simon,
>>>>>
>>>>>
>>>>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>>>
>>>>>> Hi Masahiro,
>>>>>>
>>>>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hi Gabe, Simon,
>>>>>>>
>>>>>>>
>>>>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>>>>>>>>
>>>>>>>> From: Gabe Black <gabeblack@chromium.org>
>>>>>>>>
>>>>>>>> inttypes.h defines format specifiers for printf which work with data
>>>>>>>> types of
>>>>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h
>>>>>>>> which
>>>>>>>> has declarations of the various *alloc functions.
>>>>>>>>
>>>>>>>> Add the required #define to common.h so that these printf format
>>>>>>>> specifiers
>>>>>>>> will be made available.
>>>>>>>>
>>>>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
>>>>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
>>>>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
>>>>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
>>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>>>> (Replaced with a GPL version from glibc)
>>>>>>>>
>>>>>>> [snip]
>>>>>>>>
>>>>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
>>>>>>>> new file mode 100644
>>>>>>>> index 0000000..6bc7fbb
>>>>>>>> --- /dev/null
>>>>>>>> +++ b/include/stdlib.h
>>>>>>>> @@ -0,0 +1,12 @@
>>>>>>>> +/*
>>>>>>>> + *  Copyright (C) 2013 Google Inc.
>>>>>>>> + *
>>>>>>>> + * SPDX-License-Identifier:    GPL-2.0+
>>>>>>>> + */
>>>>>>>> +
>>>>>>>> +#ifndef __STDLIB_H_
>>>>>>>> +#define __STDLIB_H_
>>>>>>>> +
>>>>>>>> +#include <malloc.h>
>>>>>>>> +
>>>>>>>> +#endif /* __STDLIB_H_ */
>>>>>>>> --
>>>>>>>> 2.1.0.rc2.206.gedb03e5
>>>>>>>
>>>>>>>
>>>>>>> This patch is not clear to me.
>>>>>>>
>>>>>>> Why do we need include/stdlib.h ?
>>>>>>
>>>>>> This makes the U-Boot environment more similar to that used by other
>>>>>> software, so we can more easily build it without lots of glue files.
>>>>>> Normally stdlib.h defines malloc() and friends.
>>>>>
>>>>> I am not happy about this.
>>>>>
>>>>> Our right direction is to make U-Boot environment more similar to the
>>>>> Kernel, I think.
>>>>>
>>>>> stdlib.h shouldn't appear in bare metal code.
>>>>
>>>> That's right, we don't want to include this in U-Boot itself. But if
>>>> you look at things in tools/ they include stdlib.h. With this header
>>>> available, we can more easily compile external code into U-Boot.
>>>
>>>
>>> So is it intended as fallback if the host doesn't have a stdlib.h?
>>
>> Not really, more that for things that expect that header (and
>> inttypes.h which was also added) they can get it without needing
>> special #ifdefs for U-Boot.
>>
>
>
> Sorry, I still don't get it.
> Could you explain user cases?

If you have a C file which has '#include <stdlib.h> in it, because it
builds in another project as well as U-Boot, and needs mallloc(), then
you want to build it with U-Boot and include <common.h>, etc. then you
need U-Boot to have stdlib.h, or add a dummy stdlib.h in that project.
I am trying to make is easier for this case. This is a minor point,
but little fish-hooks can be frustrating.

Regards,
Simon
Masahiro Yamada Oct. 30, 2014, 7:53 a.m. UTC | #10
Hi Simon,



On Wed, 29 Oct 2014 19:43:26 -0600
Simon Glass <sjg@chromium.org> wrote:

> Hi Masahiro,
> 
> On 29 October 2014 08:06, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
> > Hi Simon,
> >
> > 2014-10-29 3:24 GMT+09:00 Simon Glass <sjg@chromium.org>:
> >> Hi,
> >>
> >> On 28 October 2014 11:46, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> >>> Hello Simon,
> >>>
> >>>
> >>> On 28-10-14 18:33, Simon Glass wrote:
> >>>>
> >>>> Hi Masahiro,
> >>>>
> >>>> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com>
> >>>> wrote:
> >>>>>
> >>>>> Hi Simon,
> >>>>>
> >>>>>
> >>>>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
> >>>>>>
> >>>>>> Hi Masahiro,
> >>>>>>
> >>>>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Hi Gabe, Simon,
> >>>>>>>
> >>>>>>>
> >>>>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
> >>>>>>>>
> >>>>>>>> From: Gabe Black <gabeblack@chromium.org>
> >>>>>>>>
> >>>>>>>> inttypes.h defines format specifiers for printf which work with data
> >>>>>>>> types of
> >>>>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h
> >>>>>>>> which
> >>>>>>>> has declarations of the various *alloc functions.
> >>>>>>>>
> >>>>>>>> Add the required #define to common.h so that these printf format
> >>>>>>>> specifiers
> >>>>>>>> will be made available.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
> >>>>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
> >>>>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
> >>>>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
> >>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
> >>>>>>>> (Replaced with a GPL version from glibc)
> >>>>>>>>
> >>>>>>> [snip]
> >>>>>>>>
> >>>>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
> >>>>>>>> new file mode 100644
> >>>>>>>> index 0000000..6bc7fbb
> >>>>>>>> --- /dev/null
> >>>>>>>> +++ b/include/stdlib.h
> >>>>>>>> @@ -0,0 +1,12 @@
> >>>>>>>> +/*
> >>>>>>>> + *  Copyright (C) 2013 Google Inc.
> >>>>>>>> + *
> >>>>>>>> + * SPDX-License-Identifier:    GPL-2.0+
> >>>>>>>> + */
> >>>>>>>> +
> >>>>>>>> +#ifndef __STDLIB_H_
> >>>>>>>> +#define __STDLIB_H_
> >>>>>>>> +
> >>>>>>>> +#include <malloc.h>
> >>>>>>>> +
> >>>>>>>> +#endif /* __STDLIB_H_ */
> >>>>>>>> --
> >>>>>>>> 2.1.0.rc2.206.gedb03e5
> >>>>>>>
> >>>>>>>
> >>>>>>> This patch is not clear to me.
> >>>>>>>
> >>>>>>> Why do we need include/stdlib.h ?
> >>>>>>
> >>>>>> This makes the U-Boot environment more similar to that used by other
> >>>>>> software, so we can more easily build it without lots of glue files.
> >>>>>> Normally stdlib.h defines malloc() and friends.
> >>>>>
> >>>>> I am not happy about this.
> >>>>>
> >>>>> Our right direction is to make U-Boot environment more similar to the
> >>>>> Kernel, I think.
> >>>>>
> >>>>> stdlib.h shouldn't appear in bare metal code.
> >>>>
> >>>> That's right, we don't want to include this in U-Boot itself. But if
> >>>> you look at things in tools/ they include stdlib.h. With this header
> >>>> available, we can more easily compile external code into U-Boot.
> >>>
> >>>
> >>> So is it intended as fallback if the host doesn't have a stdlib.h?
> >>
> >> Not really, more that for things that expect that header (and
> >> inttypes.h which was also added) they can get it without needing
> >> special #ifdefs for U-Boot.
> >>
> >
> >
> > Sorry, I still don't get it.
> > Could you explain user cases?
> 
> If you have a C file which has '#include <stdlib.h> in it, because it
> builds in another project as well as U-Boot, and needs mallloc(), then
> you want to build it with U-Boot and include <common.h>, etc. then you
> need U-Boot to have stdlib.h, or add a dummy stdlib.h in that project.
> I am trying to make is easier for this case. This is a minor point,
> but little fish-hooks can be frustrating.
> 

I understand what you want to do,
but I am not sure if this is a right decision.

Mixing the same header name sometimes causes a mess.



Best Regards
Masahiro Yamada
Simon Glass Oct. 31, 2014, 2:43 a.m. UTC | #11
Hi Masahiro,

On 30 October 2014 01:53, Masahiro Yamada <yamada.m@jp.panasonic.com> wrote:
> Hi Simon,
>
>
>
> On Wed, 29 Oct 2014 19:43:26 -0600
> Simon Glass <sjg@chromium.org> wrote:
>
>> Hi Masahiro,
>>
>> On 29 October 2014 08:06, Masahiro YAMADA <yamada.m@jp.panasonic.com> wrote:
>> > Hi Simon,
>> >
>> > 2014-10-29 3:24 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> >> Hi,
>> >>
>> >> On 28 October 2014 11:46, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
>> >>> Hello Simon,
>> >>>
>> >>>
>> >>> On 28-10-14 18:33, Simon Glass wrote:
>> >>>>
>> >>>> Hi Masahiro,
>> >>>>
>> >>>> On 28 October 2014 10:38, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>> >>>> wrote:
>> >>>>>
>> >>>>> Hi Simon,
>> >>>>>
>> >>>>>
>> >>>>> 2014-10-29 1:29 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> >>>>>>
>> >>>>>> Hi Masahiro,
>> >>>>>>
>> >>>>>> On 28 October 2014 10:25, Masahiro YAMADA <yamada.m@jp.panasonic.com>
>> >>>>>> wrote:
>> >>>>>>>
>> >>>>>>> Hi Gabe, Simon,
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> 2014-10-15 19:38 GMT+09:00 Simon Glass <sjg@chromium.org>:
>> >>>>>>>>
>> >>>>>>>> From: Gabe Black <gabeblack@chromium.org>
>> >>>>>>>>
>> >>>>>>>> inttypes.h defines format specifiers for printf which work with data
>> >>>>>>>> types of
>> >>>>>>>> particular sizes. stdlib.h is currently just a passthrough to malloc.h
>> >>>>>>>> which
>> >>>>>>>> has declarations of the various *alloc functions.
>> >>>>>>>>
>> >>>>>>>> Add the required #define to common.h so that these printf format
>> >>>>>>>> specifiers
>> >>>>>>>> will be made available.
>> >>>>>>>>
>> >>>>>>>> Signed-off-by: Gabe Black <gabeblack@google.com>
>> >>>>>>>> Reviewed-by: Gabe Black <gabeblack@chromium.org>
>> >>>>>>>> Tested-by: Gabe Black <gabeblack@chromium.org>
>> >>>>>>>> Reviewed-by: Bill Richardson <wfrichar@google.com>
>> >>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> >>>>>>>> (Replaced with a GPL version from glibc)
>> >>>>>>>>
>> >>>>>>> [snip]
>> >>>>>>>>
>> >>>>>>>> diff --git a/include/stdlib.h b/include/stdlib.h
>> >>>>>>>> new file mode 100644
>> >>>>>>>> index 0000000..6bc7fbb
>> >>>>>>>> --- /dev/null
>> >>>>>>>> +++ b/include/stdlib.h
>> >>>>>>>> @@ -0,0 +1,12 @@
>> >>>>>>>> +/*
>> >>>>>>>> + *  Copyright (C) 2013 Google Inc.
>> >>>>>>>> + *
>> >>>>>>>> + * SPDX-License-Identifier:    GPL-2.0+
>> >>>>>>>> + */
>> >>>>>>>> +
>> >>>>>>>> +#ifndef __STDLIB_H_
>> >>>>>>>> +#define __STDLIB_H_
>> >>>>>>>> +
>> >>>>>>>> +#include <malloc.h>
>> >>>>>>>> +
>> >>>>>>>> +#endif /* __STDLIB_H_ */
>> >>>>>>>> --
>> >>>>>>>> 2.1.0.rc2.206.gedb03e5
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> This patch is not clear to me.
>> >>>>>>>
>> >>>>>>> Why do we need include/stdlib.h ?
>> >>>>>>
>> >>>>>> This makes the U-Boot environment more similar to that used by other
>> >>>>>> software, so we can more easily build it without lots of glue files.
>> >>>>>> Normally stdlib.h defines malloc() and friends.
>> >>>>>
>> >>>>> I am not happy about this.
>> >>>>>
>> >>>>> Our right direction is to make U-Boot environment more similar to the
>> >>>>> Kernel, I think.
>> >>>>>
>> >>>>> stdlib.h shouldn't appear in bare metal code.
>> >>>>
>> >>>> That's right, we don't want to include this in U-Boot itself. But if
>> >>>> you look at things in tools/ they include stdlib.h. With this header
>> >>>> available, we can more easily compile external code into U-Boot.
>> >>>
>> >>>
>> >>> So is it intended as fallback if the host doesn't have a stdlib.h?
>> >>
>> >> Not really, more that for things that expect that header (and
>> >> inttypes.h which was also added) they can get it without needing
>> >> special #ifdefs for U-Boot.
>> >>
>> >
>> >
>> > Sorry, I still don't get it.
>> > Could you explain user cases?
>>
>> If you have a C file which has '#include <stdlib.h> in it, because it
>> builds in another project as well as U-Boot, and needs mallloc(), then
>> you want to build it with U-Boot and include <common.h>, etc. then you
>> need U-Boot to have stdlib.h, or add a dummy stdlib.h in that project.
>> I am trying to make is easier for this case. This is a minor point,
>> but little fish-hooks can be frustrating.
>>
>
> I understand what you want to do,
> but I am not sure if this is a right decision.
>
> Mixing the same header name sometimes causes a mess.

That's true although I don't really see a big issue here.

IMO image.c and the like suffer from having two sets of headers - one
for building in U-Boot and one for building outside. I thought maybe
the solution was do have a section in common.h to deal with the
differences, but then when I looked more I wasn't sure it was an
improvement...

Regards,
Simon
diff mbox

Patch

diff --git a/include/common.h b/include/common.h
index d5020c8..d8584dd 100644
--- a/include/common.h
+++ b/include/common.h
@@ -86,6 +86,9 @@  typedef volatile unsigned char	vu_char;
 #include <flash.h>
 #include <image.h>
 
+/* Bring in printf format macros if inttypes.h is included */
+#define __STDC_FORMAT_MACROS
+
 #ifdef __LP64__
 #define CONFIG_SYS_SUPPORT_64BIT_DATA
 #endif
diff --git a/include/inttypes.h b/include/inttypes.h
new file mode 100644
index 0000000..e2e569d
--- /dev/null
+++ b/include/inttypes.h
@@ -0,0 +1,287 @@ 
+/*
+ * Copyright (C) 1997-2001, 2004, 2007 Free Software Foundation, Inc.
+ *
+ * This file is taken from the GNU C Library v2.15, with the unimplemented
+ * functions removed and a few style fixes.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+/*
+ *	ISO C99: 7.8 Format conversion of integer types	<inttypes.h>
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H	1
+
+#include <linux/compiler.h>
+
+/* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
+#ifndef ____gwchar_t_defined
+# ifdef __cplusplus
+#  define __gwchar_t wchar_t
+# elif defined __WCHAR_TYPE__
+typedef __WCHAR_TYPE__ __gwchar_t;
+# else
+#  define __need_wchar_t
+#  include <stddef.h>
+typedef wchar_t __gwchar_t;
+# endif
+# define ____gwchar_t_defined	1
+#endif
+
+
+/* The ISO C99 standard specifies that these macros must only be
+   defined if explicitly requested.  */
+#if !defined __cplusplus || defined __STDC_FORMAT_MACROS
+
+#ifdef CONFIG_USE_STDINT
+# if __WORDSIZE == 64
+#  define __PRI64_PREFIX	"l"
+#  define __PRIPTR_PREFIX	"l"
+# else
+#  define __PRI64_PREFIX	"ll"
+#  define __PRIPTR_PREFIX
+# endif
+#else
+/* linux/types.h always uses long long for 64-bit and long for uintptr_t */
+# define __PRI64_PREFIX	"ll"
+# define __PRIPTR_PREFIX	"l"
+#endif
+
+/* Macros for printing format specifiers.  */
+
+/* Decimal notation.  */
+# define PRId8		"d"
+# define PRId16		"d"
+# define PRId32		"d"
+# define PRId64		__PRI64_PREFIX "d"
+
+# define PRIdLEAST8	"d"
+# define PRIdLEAST16	"d"
+# define PRIdLEAST32	"d"
+# define PRIdLEAST64	__PRI64_PREFIX "d"
+
+# define PRIdFAST8	"d"
+# define PRIdFAST16	__PRIPTR_PREFIX "d"
+# define PRIdFAST32	__PRIPTR_PREFIX "d"
+# define PRIdFAST64	__PRI64_PREFIX "d"
+
+
+# define PRIi8		"i"
+# define PRIi16		"i"
+# define PRIi32		"i"
+# define PRIi64		__PRI64_PREFIX "i"
+
+# define PRIiLEAST8	"i"
+# define PRIiLEAST16	"i"
+# define PRIiLEAST32	"i"
+# define PRIiLEAST64	__PRI64_PREFIX "i"
+
+# define PRIiFAST8	"i"
+# define PRIiFAST16	__PRIPTR_PREFIX "i"
+# define PRIiFAST32	__PRIPTR_PREFIX "i"
+# define PRIiFAST64	__PRI64_PREFIX "i"
+
+/* Octal notation.  */
+# define PRIo8		"o"
+# define PRIo16		"o"
+# define PRIo32		"o"
+# define PRIo64		__PRI64_PREFIX "o"
+
+# define PRIoLEAST8	"o"
+# define PRIoLEAST16	"o"
+# define PRIoLEAST32	"o"
+# define PRIoLEAST64	__PRI64_PREFIX "o"
+
+# define PRIoFAST8	"o"
+# define PRIoFAST16	__PRIPTR_PREFIX "o"
+# define PRIoFAST32	__PRIPTR_PREFIX "o"
+# define PRIoFAST64	__PRI64_PREFIX "o"
+
+/* Unsigned integers.  */
+# define PRIu8		"u"
+# define PRIu16		"u"
+# define PRIu32		"u"
+# define PRIu64		__PRI64_PREFIX "u"
+
+# define PRIuLEAST8	"u"
+# define PRIuLEAST16	"u"
+# define PRIuLEAST32	"u"
+# define PRIuLEAST64	__PRI64_PREFIX "u"
+
+# define PRIuFAST8	"u"
+# define PRIuFAST16	__PRIPTR_PREFIX "u"
+# define PRIuFAST32	__PRIPTR_PREFIX "u"
+# define PRIuFAST64	__PRI64_PREFIX "u"
+
+/* lowercase hexadecimal notation.  */
+# define PRIx8		"x"
+# define PRIx16		"x"
+# define PRIx32		"x"
+# define PRIx64		__PRI64_PREFIX "x"
+
+# define PRIxLEAST8	"x"
+# define PRIxLEAST16	"x"
+# define PRIxLEAST32	"x"
+# define PRIxLEAST64	__PRI64_PREFIX "x"
+
+# define PRIxFAST8	"x"
+# define PRIxFAST16	__PRIPTR_PREFIX "x"
+# define PRIxFAST32	__PRIPTR_PREFIX "x"
+# define PRIxFAST64	__PRI64_PREFIX "x"
+
+/* UPPERCASE hexadecimal notation.  */
+# define PRIX8		"X"
+# define PRIX16		"X"
+# define PRIX32		"X"
+# define PRIX64		__PRI64_PREFIX "X"
+
+# define PRIXLEAST8	"X"
+# define PRIXLEAST16	"X"
+# define PRIXLEAST32	"X"
+# define PRIXLEAST64	__PRI64_PREFIX "X"
+
+# define PRIXFAST8	"X"
+# define PRIXFAST16	__PRIPTR_PREFIX "X"
+# define PRIXFAST32	__PRIPTR_PREFIX "X"
+# define PRIXFAST64	__PRI64_PREFIX "X"
+
+
+/* Macros for printing `intmax_t' and `uintmax_t'.  */
+# define PRIdMAX	__PRI64_PREFIX "d"
+# define PRIiMAX	__PRI64_PREFIX "i"
+# define PRIoMAX	__PRI64_PREFIX "o"
+# define PRIuMAX	__PRI64_PREFIX "u"
+# define PRIxMAX	__PRI64_PREFIX "x"
+# define PRIXMAX	__PRI64_PREFIX "X"
+
+
+/* Macros for printing `intptr_t' and `uintptr_t'.  */
+# define PRIdPTR	__PRIPTR_PREFIX "d"
+# define PRIiPTR	__PRIPTR_PREFIX "i"
+# define PRIoPTR	__PRIPTR_PREFIX "o"
+# define PRIuPTR	__PRIPTR_PREFIX "u"
+# define PRIxPTR	__PRIPTR_PREFIX "x"
+# define PRIXPTR	__PRIPTR_PREFIX "X"
+
+
+/* Macros for scanning format specifiers.  */
+
+/* Signed decimal notation.  */
+# define SCNd8		"hhd"
+# define SCNd16		"hd"
+# define SCNd32		"d"
+# define SCNd64		__PRI64_PREFIX "d"
+
+# define SCNdLEAST8	"hhd"
+# define SCNdLEAST16	"hd"
+# define SCNdLEAST32	"d"
+# define SCNdLEAST64	__PRI64_PREFIX "d"
+
+# define SCNdFAST8	"hhd"
+# define SCNdFAST16	__PRIPTR_PREFIX "d"
+# define SCNdFAST32	__PRIPTR_PREFIX "d"
+# define SCNdFAST64	__PRI64_PREFIX "d"
+
+/* Signed decimal notation.  */
+# define SCNi8		"hhi"
+# define SCNi16		"hi"
+# define SCNi32		"i"
+# define SCNi64		__PRI64_PREFIX "i"
+
+# define SCNiLEAST8	"hhi"
+# define SCNiLEAST16	"hi"
+# define SCNiLEAST32	"i"
+# define SCNiLEAST64	__PRI64_PREFIX "i"
+
+# define SCNiFAST8	"hhi"
+# define SCNiFAST16	__PRIPTR_PREFIX "i"
+# define SCNiFAST32	__PRIPTR_PREFIX "i"
+# define SCNiFAST64	__PRI64_PREFIX "i"
+
+/* Unsigned decimal notation.  */
+# define SCNu8		"hhu"
+# define SCNu16		"hu"
+# define SCNu32		"u"
+# define SCNu64		__PRI64_PREFIX "u"
+
+# define SCNuLEAST8	"hhu"
+# define SCNuLEAST16	"hu"
+# define SCNuLEAST32	"u"
+# define SCNuLEAST64	__PRI64_PREFIX "u"
+
+# define SCNuFAST8	"hhu"
+# define SCNuFAST16	__PRIPTR_PREFIX "u"
+# define SCNuFAST32	__PRIPTR_PREFIX "u"
+# define SCNuFAST64	__PRI64_PREFIX "u"
+
+/* Octal notation.  */
+# define SCNo8		"hho"
+# define SCNo16		"ho"
+# define SCNo32		"o"
+# define SCNo64		__PRI64_PREFIX "o"
+
+# define SCNoLEAST8	"hho"
+# define SCNoLEAST16	"ho"
+# define SCNoLEAST32	"o"
+# define SCNoLEAST64	__PRI64_PREFIX "o"
+
+# define SCNoFAST8	"hho"
+# define SCNoFAST16	__PRIPTR_PREFIX "o"
+# define SCNoFAST32	__PRIPTR_PREFIX "o"
+# define SCNoFAST64	__PRI64_PREFIX "o"
+
+/* Hexadecimal notation.  */
+# define SCNx8		"hhx"
+# define SCNx16		"hx"
+# define SCNx32		"x"
+# define SCNx64		__PRI64_PREFIX "x"
+
+# define SCNxLEAST8	"hhx"
+# define SCNxLEAST16	"hx"
+# define SCNxLEAST32	"x"
+# define SCNxLEAST64	__PRI64_PREFIX "x"
+
+# define SCNxFAST8	"hhx"
+# define SCNxFAST16	__PRIPTR_PREFIX "x"
+# define SCNxFAST32	__PRIPTR_PREFIX "x"
+# define SCNxFAST64	__PRI64_PREFIX "x"
+
+
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX	__PRI64_PREFIX "d"
+# define SCNiMAX	__PRI64_PREFIX "i"
+# define SCNoMAX	__PRI64_PREFIX "o"
+# define SCNuMAX	__PRI64_PREFIX "u"
+# define SCNxMAX	__PRI64_PREFIX "x"
+
+/* Macros for scaning `intptr_t' and `uintptr_t'.  */
+# define SCNdPTR	__PRIPTR_PREFIX "d"
+# define SCNiPTR	__PRIPTR_PREFIX "i"
+# define SCNoPTR	__PRIPTR_PREFIX "o"
+# define SCNuPTR	__PRIPTR_PREFIX "u"
+# define SCNxPTR	__PRIPTR_PREFIX "x"
+
+#endif	/* C++ && format macros */
+
+
+#if __WORDSIZE == 64
+
+/* We have to define the `uintmax_t' type using `ldiv_t'.  */
+typedef struct {
+	long int quot;		/* Quotient.  */
+	long int rem;		/* Remainder.  */
+} imaxdiv_t;
+
+#else
+
+/* We have to define the `uintmax_t' type using `lldiv_t'.  */
+typedef struct {
+	long long int quot;		/* Quotient.  */
+	long long int rem;		/* Remainder.  */
+} imaxdiv_t;
+
+#endif
+
+#endif /* inttypes.h */
diff --git a/include/stdlib.h b/include/stdlib.h
new file mode 100644
index 0000000..6bc7fbb
--- /dev/null
+++ b/include/stdlib.h
@@ -0,0 +1,12 @@ 
+/*
+ *  Copyright (C) 2013 Google Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __STDLIB_H_
+#define __STDLIB_H_
+
+#include <malloc.h>
+
+#endif /* __STDLIB_H_ */