grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: Andrei Borzenkov <arvidjaar@gmail.com>
Cc: The development of GRUB 2 <grub-devel@gnu.org>,
	Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
Subject: Re: [PATCH 1/2] Add powerpc little-endian (ppc64le) flags
Date: Thu, 16 Jul 2015 21:05:07 +0200	[thread overview]
Message-ID: <55A80063.2000902@gmail.com> (raw)
In-Reply-To: <20150716215515.6a034cbd@opensuse.site>


[-- Attachment #1.1: Type: text/plain, Size: 2477 bytes --]

On 16.07.2015 20:55, Andrei Borzenkov wrote:
> В Wed, 15 Jul 2015 19:42:39 +0200
> Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com> пишет:
> 
>>
>>> It is possible to compile using "--target=powerpc -Wl,-EB" - this works
>>> on all three ppc, ppc64 and ppc64le, but this means hardcoding GNU ld
>>> dependency.
>>>
>> Thanks for this info.
>> See attached patch
> 
> Test has to come before asm tests (so that we are sure to compile
> for the right target).
> 
> But real problem is that -Wl,-EB has to be added to TARGET_LDFLAGS only
> 
Yes, discovered it already and updated the patch
>  [  106s] configure:24950: clang -c -v -Wall -W -Wshadow
>  -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value  -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations -Wcast-align  -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2 -target powerpc -Wl,-EB -m32 -msoft-float -W
error  -Wall -W  -DGRUB_MACHINE_IEEE1275=1 -DGRUB_MACHINE=POWERPC_IEEE1275 conftest.c >&5 [  106s] clang version 3.6.1 (tags/RELEASE_361/final 238133)
> [  106s] Target: powerpc
> [  106s] Thread model: posix
> [  106s] clang-3.6: error: -Wl,-EB: 'linker' input unused
> 
> 
>>> So I'd rather try to produce patch for proper support of
>>> -mbig-endian/-mlittle-endian (including passing it onto gcc linker) and
>>> until then declared clang on ppc64le having limited support (i.e.
>>> support for automatic detection by configure).
>>>
>> I agree that this is a better approach in long term. But if we can get
>> some support for current tools with little work (see patch) and without
>> risks of breaking other tools I see no reason not to go for it in short term
>>>
>>
> 


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: be.diff --]
[-- Type: text/x-diff; name="be.diff", Size: 2237 bytes --]

diff --git a/configure.ac b/configure.ac
index fd8a62e..e54b9df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -116,6 +116,7 @@ if test "x$with_platform" = x; then
     x86_64-*) platform=pc ;;
     powerpc-*) platform=ieee1275 ;;
     powerpc64-*) platform=ieee1275 ;;
+    powerpc64le-*) platform=ieee1275 ;;
     sparc64-*) platform=ieee1275 ;;
     mipsel-*) platform=loongson ;;
     mips-*) platform=arc ;;
@@ -138,6 +139,7 @@ case "$target_cpu"-"$platform" in
   x86_64-none) ;;
   x86_64-*) target_cpu=i386 ;;
   powerpc64-ieee1275) target_cpu=powerpc ;;
+  powerpc64le-ieee1275) target_cpu=powerpc ;;
 esac
 
 # Check if the platform is supported, make final adjustments.
@@ -560,6 +562,41 @@ AC_COMPILE_IFELSE(
 ]])],
 [grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
 
+if test x$target_cpu = xpowerpc; then
+  AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [
+    grub_cv_target_cc_big_endian=no
+    for cand in "-target powerpc -Wl,-EB" "-target powerpc" \
+		"-target powerpc-linux-gnu -Wl,-EB" "-target powerpc-linux-gnu" \
+		"-mbig-endian"; do
+      if test x"$grub_cv_target_cc_big_endian" != xno ; then
+        break
+      fi
+      CFLAGS="$TARGET_CFLAGS $cand -Werror"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
+#error still little endian
+#endif
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);
+]], [[]])],
+		        [grub_cv_target_cc_big_endian="$cand"], [])
+    done
+  ])
+
+  if test x"$grub_cv_target_cc_big_endian" = xno ; then
+    AC_MSG_ERROR([could not force big-endian])
+  fi
+
+  skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')"
+
+  TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
+  TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
+  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
+  TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian"
+fi
+
 AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
 test_program=
 case "x$target_cpu-$platform" in

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

  reply	other threads:[~2015-07-16 19:05 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-30 12:56 [PATCH 0/2] Add remaining parts for ppc64le environment Paulo Flabiano Smorigo
2015-06-30 12:56 ` [PATCH 1/2] Add powerpc little-endian (ppc64le) flags Paulo Flabiano Smorigo
2015-06-30 14:03   ` Vladimir 'phcoder' Serbinenko
2015-06-30 14:29     ` Andrei Borzenkov
2015-06-30 14:33       ` Vladimir 'phcoder' Serbinenko
2015-06-30 18:05         ` Paulo Flabiano Smorigo
2015-06-30 18:28           ` Andrei Borzenkov
2015-06-30 19:34             ` Vladimir 'phcoder' Serbinenko
2015-07-04  6:46               ` Andrei Borzenkov
2015-07-05 17:38                 ` Andrei Borzenkov
2015-07-15 17:42                   ` Vladimir 'φ-coder/phcoder' Serbinenko
2015-07-16 18:55                     ` Andrei Borzenkov
2015-07-16 19:05                       ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
2015-07-16 19:30                         ` Andrei Borzenkov
2015-07-20 13:01                           ` Paulo Flabiano Smorigo
2015-07-22  3:23                     ` Andrei Borzenkov
2015-07-22 17:00                       ` Paulo Flabiano Smorigo
2015-07-15 17:36                 ` Vladimir 'φ-coder/phcoder' Serbinenko
2015-07-15 16:46             ` Vladimir 'φ-coder/phcoder' Serbinenko
2015-06-30 14:33       ` Paulo Flabiano Smorigo
2015-06-30 12:56 ` [PATCH 2/2] Suport for bi-endianess in elf file Paulo Flabiano Smorigo
2015-06-30 15:03   ` Andrei Borzenkov
2015-06-30 18:06     ` 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=55A80063.2000902@gmail.com \
    --to=phcoder@gmail.com \
    --cc=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    --cc=pfsmorigo@linux.vnet.ibm.com \
    /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).