From patchwork Tue Jul 2 18:53:04 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yufeng Zhang X-Patchwork-Id: 256475 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id B9C442C00A4 for ; Wed, 3 Jul 2013 04:53:27 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; q=dns; s=default; b=lw+wx7TqPF3OcC8m0 zlzDEZoSgB8rwu6DlFzMi8bA9yJqWTi6Hbas9ySOFNmoUyuQAqpXqqQn51TQDeDK +1YzqnWRAW/oUoxg87lq4SKQZW/pYB1By6pYzXF5OyDwuQJWzUNJFybhpovRT3ay Is/qezdmzDXixmfq2U71GHtFAI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; s=default; bh=x29M7YkltEYmxYeA/Aka/nf mseA=; b=ckHSy1Uhu2thOsgzs+ZBafmy5elalo5t28NDbaZZdm8xj6FZhUkX29U GZLc1o80dWlDjI/tXMWsVd+8pSJJxNHpWTuuXeM3YELtlYfnUUaTq+Eck8RM+onH Mspg0CLw1G3UwbapiMQ31/3omNzkds9notwrzhHvxg8JpJHKzPzU= Received: (qmail 13782 invoked by alias); 2 Jul 2013 18:53:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13769 invoked by uid 89); 2 Jul 2013 18:53:19 -0000 X-Spam-SWARE-Status: No, score=-3.4 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.1 Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Tue, 02 Jul 2013 18:53:17 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Tue, 02 Jul 2013 19:53:14 +0100 Received: from [10.1.201.52] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.0); Tue, 2 Jul 2013 19:53:13 +0100 Message-ID: <51D32190.4060908@arm.com> Date: Tue, 02 Jul 2013 19:53:04 +0100 From: Yufeng Zhang User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Andrew Pinski CC: GCC Patches , Marcus Shawcroft Subject: Re: [Patch, AArch64, ILP32] 1/5 Initial support - configury changes References: <51CB6AAE.8030101@arm.com> <51CB6C3A.3010102@arm.com> In-Reply-To: X-MC-Unique: 113070219531400301 X-Virus-Found: No Hi Andrew, Please find the updated patch in the attachment that addresses your comments. It now builds both ilp32 and lp64 multilibs by default, with the --with-multilib-list support remaining to provide options to turn off one of them. -mabi=ilp32 and -mabi=lp64 are now the command line options to use. The SPECs have been updated as well. Thanks, Yufeng gcc/ * config.gcc (aarch64*-*-*): Support --with-abi. (aarch64*-*-elf): Support --with-multilib-list. (aarch64*-*-linux*): Likewise. (supported_defaults): Add abi to aarch64*-*-*. * configure.ac: Mention AArch64 for --with-multilib-list. * configure: Re-generated. * config/aarch64/biarchilp32.h: New file. * config/aarch64/biarchlp64.h: New file. * config/aarch64/aarch64-elf.h (ENDIAN_SPEC): New define. (ABI_SPEC): Ditto. (MULTILIB_DEFAULTS): Ditto. (DRIVER_SELF_SPECS): Ditto. (ASM_SPEC): Update to also substitute -mabi. * config/aarch64/aarch64-elf-raw.h (LINK_SPEC): Add linker script file whose name depends on -mabi= and -mbig-endian. * config/aarch64/aarch64.h (LONG_TYPE_SIZE): Change to depend on TARGET_ILP32. (POINTER_SIZE): New define. (POINTERS_EXTEND_UNSIGNED): Ditto. (enum aarch64_abi_type): New enumeration tag. (AARCH64_ABI_LP64, AARCH64_ABI_ILP32): New enumerators. (AARCH64_ABI_DEFAULT): Define to AARCH64_ABI_LP64 if undefined. (TARGET_ILP32): New define. * config/aarch64/aarch64.opt (mabi): New. (aarch64_abi): New. (ilp32, lp64): New values for -mabi. * config/aarch64/t-aarch64 (comma): New define. (MULTILIB_OPTIONS): Ditto. (MULTILIB_DIRNAMES): Ditto. * config/aarch64/t-aarch64-linux (MULTIARCH_DIRNAME): New define. * doc/invoke.texi: Document -mabi for AArch64. On 06/26/13 23:59, Andrew Pinski wrote: > On Wed, Jun 26, 2013 at 3:33 PM, Yufeng Zhang wrote: >> This patch adds the configuration changes to the AArch64 GCC to support: >> >> * -milp32 and -mlp64 options in the compiler and the driver >> * multilib of ilp32 and/or lp64 libraries >> * differentiation of basic types in the compiler backend >> >> The patch enables --with-multilib-list configuration option for specifying >> the list of library flavors to enable; the default value is "mlp64" and can >> be overridden by --with-abi to "milp32". >> >> It also enables --with-abi for setting the default model in the compiler. >> Its default value is "mlp64" unless --with-multilib-list is explicitly >> specified with "milp32", in which case it defaults to "milp32". >> >> In the backend, two target flags are introduced: TARGET_ILP32 and >> TARGET_LP64. They are set by -milp32 and -mlp64 respectively, exclusive to >> each other. The default setting is via the option variable >> aarch64_pmodel_flags, which defaults to TARGET_DEFAULT_PMODEL, which is >> further defined in biarchlp64.h or biarchilp32.h depending which header file >> is included. >> >> biarchlp64.h biarchilp32.h >> TARGET_DEFAULT_PMODEL OPTION_MASK_LP64 OPTION_MASK_ILP32 >> TARGET_PMODEL 1 2 >> >> TARGET_ILP32 and TARGET_LP64 are implicitly defined as: >> >> #define TARGET_ILP32 ((aarch64_pmodel_flags& OPTION_MASK_ILP32) != 0) >> #define TARGET_LP64 ((aarch64_pmodel_flags& OPTION_MASK_LP64) != 0) >> >> Note that the multilib support in the Linux toolchain is suppressed >> deliberately. >> >> OK for the trunk? > > > I think you should not support --with-multilib-list at all. It should > just include ilp32 multilib no matter what. Note the linux multilib > has to wait until the glibc/kernel side is done. > > Also: > +#if TARGET_BIG_ENDIAN_DEFAULT == 1 > +#define EMUL_SUFFIX "b" > +#else > +#define EMUL_SUFFIX "" > +#endif > > is broken when you supply the opposite endian option. > > Also you really should just use -mabi=ilp32 and -mabi=lp64 which > reduces the number of changes needed to be done to config.gcc. > > You should use DRIVER_SELF_SPECS to simplify your LINKS_SPECS. > Something like: > #ifdef TARGET_BIG_ENDIAN_DEFAULT > #define ENDIAN_SPEC "-mbig-endian" > #else > #define ENDIAN_SPEC "-mlittle-endian" > #endif > /* Force the default endianness and ABI flags onto the command line > in order to make the other specs easier to write. */ > #undef DRIVER_SELF_SPECS > #define DRIVER_SELF_SPECS \ > " %{!mbig-endian:%{!mlittle-endian:" ENDIAN_SPEC "}}" \ > " %{!milp32:%{!mlp64:-mlp64}}" > > or rather: > " %{!mabi=*: -mabi=lp64}" > > > > And then in aarch64-elf-raw.h: > #ifndef LINK_SPEC > #define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X \ > -maarch64elf%{milp32:32}%{mbig-endian:b}" > #endif > > Or using the -mabi=* way: > #ifndef LINK_SPEC > #define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X \ > -maarch64elf%{mabi=ilp32:32}%{mbig-endian:b}" > #endif > > > > Thanks, > Andrew Pinski diff --git a/gcc/config.gcc b/gcc/config.gcc index 0ad7217..50dd045 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -497,6 +497,26 @@ then fi case ${target} in +aarch64*-*-*) + case ${with_abi} in + "") + if test "x$with_multilib_list" = xilp32; then + tm_file="aarch64/biarchilp32.h ${tm_file}" + else + tm_file="aarch64/biarchlp64.h ${tm_file}" + fi + ;; + ilp32) + tm_file="aarch64/biarchilp32.h ${tm_file}" + ;; + lp64) + tm_file="aarch64/biarchlp64.h ${tm_file}" + ;; + *) + echo "Unknown ABI used in --with-abi=$with_abi" + exit 1 + esac + ;; i[34567]86-*-*) if test "x$with_abi" != x; then echo "This target does not support --with-abi." @@ -827,6 +847,22 @@ aarch64*-*-elf) tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" ;; esac + aarch64_multilibs="${with_multilib_list}" + if test "$aarch64_multilibs" = "default"; then + aarch64_multilibs="lp64,ilp32" + fi + aarch64_multilibs=`echo $aarch64_multilibs | sed -e 's/,/ /g'` + for aarch64_multilib in ${aarch64_multilibs}; do + case ${aarch64_multilib} in + ilp32 | lp64 ) + TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${aarch64_multilib}" + ;; + *) + echo "--with-multilib-list=${aarch64_multilib} not supported." + exit 1 + esac + done + TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'` ;; aarch64*-*-linux*) tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h" @@ -837,6 +873,24 @@ aarch64*-*-linux*) tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" ;; esac + aarch64_multilibs="${with_multilib_list}" + if test "$aarch64_multilibs" = "default"; then + # TODO: turn on ILP32 multilib build after its support is mature. + # aarch64_multilibs="lp64,ilp32" + aarch64_multilibs="lp64" + fi + aarch64_multilibs=`echo $aarch64_multilibs | sed -e 's/,/ /g'` + for aarch64_multilib in ${aarch64_multilibs}; do + case ${aarch64_multilib} in + ilp32 | lp64 ) + TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${aarch64_multilib}" + ;; + *) + echo "--with-multilib-list=${aarch64_multilib} not supported." + exit 1 + esac + done + TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'` ;; alpha*-*-linux*) tm_file="elfos.h ${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h" @@ -3147,7 +3201,7 @@ fi supported_defaults= case "${target}" in aarch64*-*-*) - supported_defaults="cpu arch" + supported_defaults="abi cpu arch" for which in cpu arch; do eval "val=\$with_$which" diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h index 1cd0155..dfaa9f4 100644 --- a/gcc/config/aarch64/aarch64-elf-raw.h +++ b/gcc/config/aarch64/aarch64-elf-raw.h @@ -26,7 +26,8 @@ #define ENDFILE_SPEC " crtend%O%s crtn%O%s" #ifndef LINK_SPEC -#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X" +#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X \ + -maarch64elf%{mabi=ilp32*:32}%{mbig-endian:b}" #endif #endif /* GCC_AARCH64_ELF_RAW_H */ diff --git a/gcc/config/aarch64/aarch64-elf.h b/gcc/config/aarch64/aarch64-elf.h index 3f3ae52..315a510 100644 --- a/gcc/config/aarch64/aarch64-elf.h +++ b/gcc/config/aarch64/aarch64-elf.h @@ -111,12 +111,37 @@ #define GLOBAL_ASM_OP "\t.global\t" +#ifdef TARGET_BIG_ENDIAN_DEFAULT +#define ENDIAN_SPEC "-mbig-endian" +#else +#define ENDIAN_SPEC "-mlittle-endian" +#endif + +#if TARGET_DATA_MODEL == 1 +#define ABI_SPEC "-mabi=lp64" +#define MULTILIB_DEFAULTS { "mabi=lp64" } +#elif TARGET_DATA_MODEL == 2 +#define ABI_SPEC "-mabi=ilp32" +#define MULTILIB_DEFAULTS { "mabi=ilp32" } +#else +#error "Unknown or undefined TARGET_DATA_MODEL!" +#endif + +/* Force the default endianness and ABI flags onto the command line + in order to make the other specs easier to write. */ +#undef DRIVER_SELF_SPECS +#define DRIVER_SELF_SPECS \ + " %{!mbig-endian:%{!mlittle-endian:" ENDIAN_SPEC "}}" \ + " %{!mabi=*:" ABI_SPEC "}" + #ifndef ASM_SPEC #define ASM_SPEC "\ %{mbig-endian:-EB} \ %{mlittle-endian:-EL} \ %{mcpu=*:-mcpu=%*} \ -%{march=*:-march=%*}" +%{march=*:-march=%*} \ +%{mabi=ilp32*:-milp32} \ +%{mabi=lp64*:-mlp64}" #endif #undef TYPE_OPERAND_FMT diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 7bdb1e2..6011ab8 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -95,7 +95,9 @@ #define INT_TYPE_SIZE 32 -#define LONG_TYPE_SIZE 64 /* XXX This should be an option */ +#define LONG_TYPE_SIZE (TARGET_ILP32 ? 32 : 64) + +#define POINTER_SIZE (TARGET_ILP32 ? 32 : 64) #define LONG_LONG_TYPE_SIZE 64 @@ -520,6 +522,18 @@ typedef struct GTY (()) machine_function } machine_function; #endif +/* Which ABI to use. */ +enum aarch64_abi_type +{ + AARCH64_ABI_LP64 = 0, + AARCH64_ABI_ILP32 = 1 +}; + +#ifndef AARCH64_ABI_DEFAULT +#define AARCH64_ABI_DEFAULT AARCH64_ABI_LP64 +#endif + +#define TARGET_ILP32 (aarch64_abi & AARCH64_ABI_ILP32) enum arm_pcs { @@ -694,7 +708,18 @@ do { \ #define NO_FUNCTION_CSE 1 +/* Specify the machine mode that the hardware addresses have. + After generation of rtl, the compiler makes no further distinction + between pointers and any other objects of this machine mode. */ #define Pmode DImode + +/* A C expression whose value is zero if pointers that need to be extended + from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and + greater then zero if they are zero-extended and less then zero if the + ptr_extend instruction should be used. */ +#define POINTERS_EXTEND_UNSIGNED 1 + +/* Mode of a function address in a call instruction (for indexing purposes). */ #define FUNCTION_MODE Pmode #define SELECT_CC_MODE(OP, X, Y) aarch64_select_cc_mode (OP, X, Y) diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index 3518248..8ff6ca1 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -98,3 +98,17 @@ Target RejectNegative Joined Var(aarch64_cpu_string) mtune= Target RejectNegative Joined Var(aarch64_tune_string) -mtune=CPU Optimize for CPU + +mabi= +Target RejectNegative Joined Enum(aarch64_abi) Var(aarch64_abi) Init(AARCH64_ABI_DEFAULT) +-mabi=ABI Generate code that conforms to the specified ABI + +Enum +Name(aarch64_abi) Type(int) +Known AArch64 ABIs (for use with the -mabi= option): + +EnumValue +Enum(aarch64_abi) String(ilp32) Value(AARCH64_ABI_ILP32) + +EnumValue +Enum(aarch64_abi) String(lp64) Value(AARCH64_ABI_LP64) diff --git a/gcc/config/aarch64/biarchilp32.h b/gcc/config/aarch64/biarchilp32.h new file mode 100644 index 0000000..fe13837 --- /dev/null +++ b/gcc/config/aarch64/biarchilp32.h @@ -0,0 +1,29 @@ +/* Make configure files to produce biarch compiler defaulting to ilp32 ABI. + This file must be included very first, while the OS specific file later + to overwrite otherwise wrong defaults. + Copyright (C) 2013 Free Software Foundation, Inc. + Contributed by ARM Ltd. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#define AARCH64_ABI_DEFAULT AARCH64_ABI_ILP32 +#define TARGET_DATA_MODEL 2 diff --git a/gcc/config/aarch64/biarchlp64.h b/gcc/config/aarch64/biarchlp64.h new file mode 100644 index 0000000..86803af --- /dev/null +++ b/gcc/config/aarch64/biarchlp64.h @@ -0,0 +1,29 @@ +/* Make configure files to produce biarch compiler defaulting to ilp64 ABI. + This file must be included very first, while the OS specific file later + to overwrite otherwise wrong defaults. + Copyright (C) 2013 Free Software Foundation, Inc. + Contributed by ARM Ltd. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#define AARCH64_ABI_DEFAULT AARCH64_ABI_LP64 +#define TARGET_DATA_MODEL 1 diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64 index 4c265eb..2975850 100644 --- a/gcc/config/aarch64/t-aarch64 +++ b/gcc/config/aarch64/t-aarch64 @@ -34,3 +34,7 @@ aarch64-builtins.o: $(srcdir)/config/aarch64/aarch64-builtins.c $(CONFIG_H) \ $(srcdir)/config/aarch64/aarch64-simd-builtins.def $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(srcdir)/config/aarch64/aarch64-builtins.c + +comma=, +MULTILIB_OPTIONS = $(patsubst %, mabi=%, $(subst $(comma), ,$(TM_MULTILIB_CONFIG))) +MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG)) diff --git a/gcc/config/aarch64/t-aarch64-linux b/gcc/config/aarch64/t-aarch64-linux index a7a0a88..ca1525e 100644 --- a/gcc/config/aarch64/t-aarch64-linux +++ b/gcc/config/aarch64/t-aarch64-linux @@ -23,3 +23,9 @@ LIB1ASMFUNCS = _aarch64_sync_cache_range AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) MULTILIB_OSDIRNAMES = .=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) +MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) + +# Disable the multilib for linux-gnu targets for the time being; focus +# on the baremetal targets. +MULTILIB_OPTIONS = +MULTILIB_DIRNAMES = diff --git a/gcc/configure.ac b/gcc/configure.ac index eff48d6..6bad7d5 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -839,7 +839,7 @@ esac], [enable_languages=c]) AC_ARG_WITH(multilib-list, -[AS_HELP_STRING([--with-multilib-list], [select multilibs (SH and x86-64 only)])], +[AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, SH and x86-64 only)])], :, with_multilib_list=default) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index dd82880..c3eff15 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -470,7 +470,7 @@ Objective-C and Objective-C++ Dialects}. @c so users have a clue at guessing where the ones they want will be. @emph{AArch64 Options} -@gccoptlist{-mbig-endian -mlittle-endian @gol +@gccoptlist{-mabi=@var{name} -mbig-endian -mlittle-endian @gol -mgeneral-regs-only @gol -mcmodel=tiny -mcmodel=small -mcmodel=large @gol -mstrict-align @gol @@ -10967,6 +10967,17 @@ These options are defined for AArch64 implementations: @table @gcctabopt +@item -mabi=@var{name} +@opindex mabi +Generate code for the specified data model. Permissible values +are @samp{ilp32} for SysV-like data model where int, long int and pointer +are 32-bit, and @samp{lp64} for SysV-like data model where int is 32-bit, +but long int and pointer are 64-bit. + +The default depends on the specific target configuration. Note that +the LP64 and ILP32 ABIs are not link-compatible; you must compile your +entire program with the same ABI, and link with a compatible set of libraries. + @item -mbig-endian @opindex mbig-endian Generate big-endian code. This is the default when GCC is configured for an