Package: trafficserver
Version: 4.1.2-1
Tags: sid patch
Severity: important

While trying to build trafficserver on mips architecture,
build fails with errors:

../../lib/ts/ink_queue.h:144:2: error: #error "unsupported processor"
 #error "unsupported processor"
../../lib/ts/ink_queue.h:199:70: error: there are no arguments to
‘FREELIST_POINTER’ that depend on a template parameter, so a declaration of
‘FREELIST_POINTER’ must be available [-fpermissive]
../../lib/ts/List.h:488:59: error: there are no arguments to
‘FREELIST_POINTER’ that depend on a template parameter, so a declaration of
‘FREELIST_POINTER’ must be available [-fpermissive]

It is similar to the bug #743395, whose patch was merged, so I updated this
patch with support of mips64, and tested on mips64el device.

Please consider it. Thanks.

Regards,
Sphinx
From: Dejan Latinovic <[email protected]>
Subject: trafficserver: support for mips
Date: Wed, 2 Apr 2014 10:30:15 +0000

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743395

While trying to build trafficserver on mips architecture,
build fails with an error:

  In file included from ../../lib/ts/libts.h:64:0,
                   from P_EventSystem.h:34,
                   from EventSystem.cc:31:
  ../../lib/ts/ink_queue.h:144:2: error: #error "unsupported processor"
   #error "unsupported processor"

After some extensions,
I was able to build trafficserver successfully.
Also, all tests passed.
Mips related changes are included in add-mips-support.patch.

This patch was submitted upstream:

https://issues.apache.org/jira/browse/TS-2687

And it was merged:

Commit 2f8179056402694ac7df828a264b4aa92ec964ea in trafficserver's
branch refs/heads/master from Dejan Latinovic
[ https://git-wip-us.apache.org/repos/asf?p=trafficserver.git;h=2f81790 ]

--- a/lib/ts/ink_atomic.h
+++ b/lib/ts/ink_atomic.h
@@ -170,7 +170,7 @@
 }
 
 // Special hacks for ARM 32-bit
-#if defined(__arm__) && (SIZEOF_VOIDP == 4)
+#if (defined(__arm__) && defined(__mips__)) && (SIZEOF_VOIDP == 4)
 extern ink_mutex __global_death;
 
 template<>
--- a/lib/ts/ink_queue.h
+++ b/lib/ts/ink_queue.h
@@ -85,7 +85,7 @@
   // lock, use INK_QUEUE_LD to read safely.
   typedef union
   {
-#if (defined(__i386__) || defined(__arm__)) && (SIZEOF_VOIDP == 4)
+#if (defined(__i386__) || defined(__arm__) || defined(__mips__)) && (SIZEOF_VOIDP == 4)
     struct
     {
       void *pointer;
@@ -124,7 +124,7 @@
 #define TO_PTR(_x) ((void*)(_x))
 #endif
 
-#if (defined(__i386__) || defined(__arm__)) && (SIZEOF_VOIDP == 4)
+#if (defined(__i386__) || defined(__arm__) || defined(__mips__)) && (SIZEOF_VOIDP == 4)
 #define FREELIST_POINTER(_x) (_x).s.pointer
 #define FREELIST_VERSION(_x) (_x).s.version
 #define SET_FREELIST_POINTER_VERSION(_x,_p,_v) \
@@ -134,7 +134,7 @@
 #define FREELIST_VERSION(_x) (_x).s.version
 #define SET_FREELIST_POINTER_VERSION(_x,_p,_v) \
 (_x).s.pointer = _p; (_x).s.version = _v
-#elif defined(__x86_64__) || defined(__ia64__)
+#elif defined(__x86_64__) || defined(__ia64__) || defined(__mips64)
 #define FREELIST_POINTER(_x) ((void*)(((((intptr_t)(_x).data)<<16)>>16) | \
  (((~((((intptr_t)(_x).data)<<16>>63)-1))>>48)<<48)))  // sign extend
 #define FREELIST_VERSION(_x) (((intptr_t)(_x).data)>>48)
--- a/lib/ts/ink_queue_utils.cc
+++ b/lib/ts/ink_queue_utils.cc
@@ -68,7 +68,7 @@
 void
 ink_queue_load_64(void *dst, void *src)
 {
-#if (defined(__i386__) || defined(__arm__)) && (SIZEOF_VOIDP == 4)
+#if (defined(__i386__) || defined(__arm__) || defined(__mips__)) && (SIZEOF_VOIDP == 4)
   volatile int32_t src_version = (*(head_p *) src).s.version;
   void *src_pointer = (*(head_p *) src).s.pointer;
 
--- a/plugins/experimental/geoip_acl/lulu.h
+++ b/plugins/experimental/geoip_acl/lulu.h
@@ -42,6 +42,10 @@
 #define mb()  __asm__ __volatile__ ( "dmb" : : : "memory")
 #define rmb() __asm__ __volatile__ ( "dmb" : : : "memory")
 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
+#elif defined(__mips__)
+#define mb()  __asm__ __volatile__ ( "sync" : : : "memory")
+#define rmb() __asm__ __volatile__ ( "sync" : : : "memory")
+#define wmb() __asm__ __volatile__ ( "" : : : "memory")
 #else
 #error "Define barriers"
 #endif
--- a/plugins/header_filter/lulu.h
+++ b/plugins/header_filter/lulu.h
@@ -41,6 +41,10 @@
 #define mb()  __asm__ __volatile__ ( "dmb" : : : "memory")
 #define rmb() __asm__ __volatile__ ( "dmb" : : : "memory")
 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
+#elif defined(__mips__)
+#define mb()  __asm__ __volatile__ ( "sync" : : : "memory")
+#define rmb() __asm__ __volatile__ ( "sync" : : : "memory")
+#define wmb() __asm__ __volatile__ ( "" : : : "memory")
 #elif defined(__arm__)
 #else
 #error "Define barriers"
--- a/plugins/header_rewrite/lulu.h
+++ b/plugins/header_rewrite/lulu.h
@@ -39,6 +39,10 @@
 #define mb()  __asm__ __volatile__ ( "dmb" : : : "memory")
 #define rmb() __asm__ __volatile__ ( "dmb" : : : "memory")
 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
+#elif defined(__mips__)
+#define mb()  __asm__ __volatile__ ( "sync" : : : "memory")
+#define rmb() __asm__ __volatile__ ( "sync" : : : "memory")
+#define wmb() __asm__ __volatile__ ( "" : : : "memory")
 #else
 #error "Define barriers"
 #endif

Reply via email to