grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: Colin Watson <cjwatson@ubuntu.com>
To: grub-devel@gnu.org
Subject: Re: [RFC PATCH 2/3] Files reorganization and include some libgcc fuctions
Date: Mon, 8 Sep 2014 03:16:21 +0100	[thread overview]
Message-ID: <20140908021620.GA9140@riva.ucam.org> (raw)
In-Reply-To: <1409255765-3209-3-git-send-email-pfsmorigo@linux.vnet.ibm.com>

On Thu, Aug 28, 2014 at 04:56:04PM -0300, Paulo Flabiano Smorigo wrote:
> diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
> index c5c815d..353a207 100644
> --- a/grub-core/kern/misc.c
> +++ b/grub-core/kern/misc.c
> @@ -1342,3 +1342,110 @@ grub_real_boot_time (const char *file,
>    grub_error_pop ();
>  }
>  #endif
> +
> +#if defined (NO_LIBGCC)

Should this perhaps be restricted to __powerpc__ as well?
Alternatively, the prototypes in include/grub/compiler.h (or
include/grub/misc.h; see below) should be used on other architectures
too.  Either way, the declarations and definitions should match.

> diff --git a/include/grub/compiler.h b/include/grub/compiler.h
> index c9e1d7a..a9a684c 100644
> --- a/include/grub/compiler.h
> +++ b/include/grub/compiler.h
> @@ -48,4 +48,65 @@
>  #  define WARN_UNUSED_RESULT
>  #endif
>  
> +#include "types.h"

Shouldn't this be #include <grub/types.h>, assuming that you need this
for grub_uint*_t?  Also, includes should generally be grouped at the top
of the file.

> +union component64
> +{
> +  grub_uint64_t full;
> +  struct
> +  {
> +#ifdef GRUB_CPU_WORDS_BIGENDIAN
> +    grub_uint32_t high;
> +    grub_uint32_t low;
> +#else
> +    grub_uint32_t low;
> +    grub_uint32_t high;
> +#endif
> +  };
> +};

This is only used by grub-core/kern/misc.c.  Please move it there rather
than putting it somewhere that's included by everything in GRUB.

> +#if defined (__powerpc__)

Should this be #if defined (__powerpc__) && defined (NO_LIBGCC) or
something similar, to match the general way things are set up in
configure.ac?  (Also see comment above about declarations matching
definitions.)

Relatedly, have you tested this patch set with a native build on a
32-bit BE powerpc system, as opposed to 32-bit BE built on a 64-bit LE
system?  This looks like a potential problem there.

> +grub_uint64_t EXPORT_FUNC (__lshrdi3) (grub_uint64_t u, int b);
> +grub_uint64_t EXPORT_FUNC (__ashrdi3) (grub_uint64_t u, int b);
> +grub_uint64_t EXPORT_FUNC (__ashldi3) (grub_uint64_t u, int b);
> +int EXPORT_FUNC(__ucmpdi2) (grub_uint64_t a, grub_uint64_t b);
> +void EXPORT_FUNC (_restgpr_14_x) (void);
[...]

These aren't compiler features, so don't belong in
include/grub/compiler.h.  Other architectures seem to have this kind of
thing in include/grub/misc.h inside a big #ifndef GRUB_UTIL conditional,
so please move all this to there.

> diff --git a/include/grub/libgcc.h b/include/grub/libgcc.h
> index 8e93b67..5bdb8fb 100644
> --- a/include/grub/libgcc.h
> +++ b/include/grub/libgcc.h
> @@ -16,73 +16,6 @@
>   *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
>   */
>  
> -/* We need to include config-util.h.in for HAVE_*.  */
> -#ifndef __STDC_VERSION__
> -#define __STDC_VERSION__ 0
> -#endif
> -#include <config-util.h>
> -
> -/* On x86 these functions aren't really needed. Save some space.  */
> -#if !defined (__i386__) && !defined (__x86_64__)
> -# ifdef HAVE___ASHLDI3
> -void EXPORT_FUNC (__ashldi3) (void);
> -# endif
> -# ifdef HAVE___ASHRDI3
> -void EXPORT_FUNC (__ashrdi3) (void);
> -# endif
> -# ifdef HAVE___LSHRDI3
> -void EXPORT_FUNC (__lshrdi3) (void);
> -# endif
> -# ifdef HAVE___UCMPDI2
> -void EXPORT_FUNC (__ucmpdi2) (void);
> -# endif
> -# ifdef HAVE___BSWAPSI2
> -void EXPORT_FUNC (__bswapsi2) (void);
> -# endif
> -# ifdef HAVE___BSWAPDI2
> -void EXPORT_FUNC (__bswapdi2) (void);
> -# endif
> -#endif
> -
> -#ifdef HAVE__RESTGPR_14_X
> -void EXPORT_FUNC (_restgpr_14_x) (void);
> -void EXPORT_FUNC (_restgpr_15_x) (void);
> -void EXPORT_FUNC (_restgpr_16_x) (void);
> -void EXPORT_FUNC (_restgpr_17_x) (void);
> -void EXPORT_FUNC (_restgpr_18_x) (void);
> -void EXPORT_FUNC (_restgpr_19_x) (void);
> -void EXPORT_FUNC (_restgpr_20_x) (void);
> -void EXPORT_FUNC (_restgpr_21_x) (void);
> -void EXPORT_FUNC (_restgpr_22_x) (void);
> -void EXPORT_FUNC (_restgpr_23_x) (void);
> -void EXPORT_FUNC (_restgpr_24_x) (void);
> -void EXPORT_FUNC (_restgpr_25_x) (void);
> -void EXPORT_FUNC (_restgpr_26_x) (void);
> -void EXPORT_FUNC (_restgpr_27_x) (void);
> -void EXPORT_FUNC (_restgpr_28_x) (void);
> -void EXPORT_FUNC (_restgpr_29_x) (void);
> -void EXPORT_FUNC (_restgpr_30_x) (void);
> -void EXPORT_FUNC (_restgpr_31_x) (void);
> -void EXPORT_FUNC (_savegpr_14) (void);
> -void EXPORT_FUNC (_savegpr_15) (void);
> -void EXPORT_FUNC (_savegpr_16) (void);
> -void EXPORT_FUNC (_savegpr_17) (void);
> -void EXPORT_FUNC (_savegpr_18) (void);
> -void EXPORT_FUNC (_savegpr_19) (void);
> -void EXPORT_FUNC (_savegpr_20) (void);
> -void EXPORT_FUNC (_savegpr_21) (void);
> -void EXPORT_FUNC (_savegpr_22) (void);
> -void EXPORT_FUNC (_savegpr_23) (void);
> -void EXPORT_FUNC (_savegpr_24) (void);
> -void EXPORT_FUNC (_savegpr_25) (void);
> -void EXPORT_FUNC (_savegpr_26) (void);
> -void EXPORT_FUNC (_savegpr_27) (void);
> -void EXPORT_FUNC (_savegpr_28) (void);
> -void EXPORT_FUNC (_savegpr_29) (void);
> -void EXPORT_FUNC (_savegpr_30) (void);
> -void EXPORT_FUNC (_savegpr_31) (void);
> -#endif
> -
>  #if defined (__arm__)
>  void EXPORT_FUNC (__aeabi_lasr) (void);
>  void EXPORT_FUNC (__aeabi_llsl) (void);

I don't think you should touch this file at all.  I don't know precisely
how it's used, but it only seems to be used to generate symbol lists;
furthermore, you're removing some things from it that are not clearly
powerpc-specific and either making them powerpc-specific (__ashldi3,
__ashrdi3, __lshrdi3, __ucmpdi2) or dropping them altogether
(__bswapsi2, __bswapdi2).  This is worrisome and suggests the
possibility that this will break other architectures.  Does your patch
work if you just leave include/grub/libgcc.h unmodified?

Thanks,

-- 
Colin Watson                                       [cjwatson@ubuntu.com]


  reply	other threads:[~2014-09-08  2:16 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-28 19:56 [RFC PATCH 0/3] grub powerpc64 little-endian enablement Paulo Flabiano Smorigo
2014-08-28 19:56 ` [RFC PATCH 1/3] Add powerpc little-endian (ppc64le) flags Paulo Flabiano Smorigo
2014-09-17 22:04   ` Paulo Flabiano Smorigo
2014-09-19 13:48     ` Colin Watson
2014-09-21 16:05     ` Vladimir 'φ-coder/phcoder' Serbinenko
2014-08-28 19:56 ` [RFC PATCH 2/3] Files reorganization and include some libgcc fuctions Paulo Flabiano Smorigo
2014-09-08  2:16   ` Colin Watson [this message]
2014-09-17 21:43     ` Paulo Flabiano Smorigo
2014-09-19 14:03       ` Colin Watson
2014-09-21 16:07       ` Vladimir 'φ-coder/phcoder' Serbinenko
2014-08-28 19:56 ` [RFC PATCH 3/3] Suport for bi-endianess in elf file Paulo Flabiano Smorigo
2015-06-16 16:44   ` Andrei Borzenkov
2014-09-21 13:58 ` [RFC PATCH 0/3] grub powerpc64 little-endian enablement Andrei Borzenkov
2014-09-21 14:24   ` Andrei Borzenkov
2014-09-25 22:48     ` Paulo Flabiano Smorigo
2014-09-26 15:52       ` Andrei Borzenkov
2014-09-26 18:18         ` Paulo Flabiano Smorigo
2015-06-15 17:15 ` Andrei Borzenkov
2015-06-16 12:36   ` Paulo Flabiano Smorigo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140908021620.GA9140@riva.ucam.org \
    --to=cjwatson@ubuntu.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).