diff mbox

[RFC,4/4] add support for LLP64 arch

Message ID 20170207200425.34189-5-luc.vanoostenryck@gmail.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Luc Van Oostenryck Feb. 7, 2017, 8:04 p.m. UTC
There was recently on the mailing list some questions
and a need to support LLP64 model.

This patch add is by adjusting a few size-related variables
under the control of a new flag: -msize-llp64 (ugly name
but we already have we have '-msize-long').

CC: Dibyendu Majumdar <mobile@majumdar.org.uk>
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 lib.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

Comments

Christopher Li Feb. 8, 2017, 9:24 p.m. UTC | #1
The patch as already apply in sparse-next.

On Wed, Feb 8, 2017 at 4:04 AM, Luc Van Oostenryck
<luc.vanoostenryck@gmail.com> wrote:
> There was recently on the mailing list some questions
> and a need to support LLP64 model.
>
> This patch add is by adjusting a few size-related variables
> under the control of a new flag: -msize-llp64 (ugly name
> but we already have we have '-msize-long').

I am wondering how does gcc windows handle such situation.

Should we some flag some arch thing like "mingw64" which
turn on the LLP64 mode. If gcc has such a flag for cross compile
mingw, we should borrow that instead.

]> +               if (arch_m64 == ARCH_LP64) {
> +                       bits_in_long = 64;
> +                       max_int_alignment = 8;
> +                       size_t_ctype = &ulong_ctype;
> +                       ssize_t_ctype = &long_ctype;
> +                       add_pre_buffer("#weak_define __LP64__ 1\n");
> +                       add_pre_buffer("#weak_define _LP64 1\n");
> +               } else {

It works as it is. But we might want to test against arch_m64==ARCH_LLP64
just to make the code section clear what it was for.

Again, ff there is a new version of patch. I will replace this one in
sparse-next.

Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Luc Van Oostenryck Feb. 8, 2017, 10:01 p.m. UTC | #2
On Thu, Feb 09, 2017 at 05:24:01AM +0800, Christopher Li wrote:
> The patch as already apply in sparse-next.
> 
> On Wed, Feb 8, 2017 at 4:04 AM, Luc Van Oostenryck
> <luc.vanoostenryck@gmail.com> wrote:
> > There was recently on the mailing list some questions
> > and a need to support LLP64 model.
> >
> > This patch add is by adjusting a few size-related variables
> > under the control of a new flag: -msize-llp64 (ugly name
> > but we already have we have '-msize-long').
> 
> I am wondering how does gcc windows handle such situation.
> 
> Should we some flag some arch thing like "mingw64" which
> turn on the LLP64 mode. If gcc has such a flag for cross compile
> mingw, we should borrow that instead.

Well, I suppose GCC is configured for MinGW at build time (and
I understood that cygwin on x86-64 is LP64).
Anyway, I don't any kind of option in GCC that would correspond
to this.

I propose to leave it as such or to simply drop this patch as
I'm planning to change somewhat this part anyway (essentially
because 99% of the time I'm doing cross-compile development
and the current situation doesn't suit me at all. And when
hacking on sparse, I'm much much more interested in the output
of test-linearize than sparse in itself, so cgcc is useless
for me. This serie is just the minimal to make my live easier and
this LLP64 is just something closely related someone had a need for).

> ]> +               if (arch_m64 == ARCH_LP64) {
> > +                       bits_in_long = 64;
> > +                       max_int_alignment = 8;
> > +                       size_t_ctype = &ulong_ctype;
> > +                       ssize_t_ctype = &long_ctype;
> > +                       add_pre_buffer("#weak_define __LP64__ 1\n");
> > +                       add_pre_buffer("#weak_define _LP64 1\n");
> > +               } else {
> 
> It works as it is. But we might want to test against arch_m64==ARCH_LLP64
> just to make the code section clear what it was for.
> 
> Again, ff there is a new version of patch. I will replace this one in
> sparse-next.
> 
> Chris

Yes, it was what I wanted to do first but then I realised it will hardly
be a third choice and so I did it this way.
A new version is coming.

Luc
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/lib.c b/lib.c
index 2a1bbac87..6e740839c 100644
--- a/lib.c
+++ b/lib.c
@@ -257,10 +257,14 @@  static enum { STANDARD_C89,
               STANDARD_GNU89,
               STANDARD_GNU99, } standard = STANDARD_GNU89;
 
+#define ARCH_LP32  0
+#define ARCH_LP64  1
+#define ARCH_LLP64 2
+
 #ifdef __x86_64__
-#define ARCH_M64_DEFAULT 1
+#define ARCH_M64_DEFAULT ARCH_LP64
 #else
-#define ARCH_M64_DEFAULT 0
+#define ARCH_M64_DEFAULT ARCH_LP32
 #endif
 
 int arch_m64 = ARCH_M64_DEFAULT;
@@ -387,9 +391,11 @@  static char **handle_multiarch_dir(char *arg, char **next)
 static char **handle_switch_m(char *arg, char **next)
 {
 	if (!strcmp(arg, "m64")) {
-		arch_m64 = 1;
+		arch_m64 = ARCH_LP64;
 	} else if (!strcmp(arg, "m32")) {
-		arch_m64 = 0;
+		arch_m64 = ARCH_LP32;
+	} else if (!strcmp(arg, "msize-llp64")) {
+		arch_m64 = ARCH_LLP64;
 	} else if (!strcmp(arg, "msize-long")) {
 		arch_msize_long = 1;
 	} else if (!strcmp(arg, "multiarch-dir"))
@@ -400,14 +406,22 @@  static char **handle_switch_m(char *arg, char **next)
 static void handle_arch_m64_finalize(void)
 {
 	if (arch_m64) {
-		bits_in_long = 64;
-		max_int_alignment = 8;
 		bits_in_pointer = 64;
 		pointer_alignment = 8;
-		size_t_ctype = &ulong_ctype;
-		ssize_t_ctype = &long_ctype;
-		add_pre_buffer("#weak_define __LP64__ 1\n");
-		add_pre_buffer("#weak_define _LP64 1\n");
+		if (arch_m64 == ARCH_LP64) {
+			bits_in_long = 64;
+			max_int_alignment = 8;
+			size_t_ctype = &ulong_ctype;
+			ssize_t_ctype = &long_ctype;
+			add_pre_buffer("#weak_define __LP64__ 1\n");
+			add_pre_buffer("#weak_define _LP64 1\n");
+		} else {
+			bits_in_long = 32;
+			max_int_alignment = 4;
+			size_t_ctype = &ullong_ctype;
+			ssize_t_ctype = &llong_ctype;
+			add_pre_buffer("#weak_define __LLP64__ 1\n");
+		}
 #ifdef __x86_64__
 		add_pre_buffer("#weak_define __x86_64__ 1\n");
 #endif