On Thu, Dec 30, 2010 at 1:45 AM, Antoine Jacoutot <ajacou...@bsdfrog.org> wrote:
> Hi.
>
> If anyone cares to help, the 3 following ports are broken on powerpc:
> (logs below)
>
> * misc/hfsplus - lvalue required as increment operand

Looks messy. It would require a bit of a rewrite of code to replace
bswabU{8,16,32,64}_inc and bstoreU{8,16,32,64}_inc macros with new
ones and the usage of the former in source files.

This would touch these sources:

swab.h
$ grep -c bswab *.c | grep -v ':0$'
btree.c:16
btreecheck.c:1
fscheck.c:26
partitions.c:15
record.c:66
volume.c:31


a diff for swab.h and btree.c may look like this:

--- swab.h-orig Tue Mar  5 11:50:29 2002
+++ swab.h      Thu Dec 30 08:28:17 2010
@@ -46,18 +46,42 @@

 #else // BYTE_ORDER == BIG_ENDIAN

-#define bswabU16(val) val
+#define bswabU16(d, p) do {            \
+       memcpy(&(d), p, 2);             \
+} while (0)

-#define bswabU16_inc(ptr) (*((UInt16*) (ptr))++)
-#define bswabU32_inc(ptr) (*((UInt32*) (ptr))++)
-#define bswabU64_inc(ptr) (*((UInt64*) (ptr))++)
+#define bswabU8_inc(d, p)      do {    \
+       memcpy(&(d), p, 1);             \
+       p = (char const*)p + 1;         \
+} while (0)
+#define bswabU16_inc(d, p)     do {    \
+       memcpy(&(d), p, 2);             \
+       p = (char const*)p + 2;         \
+} while (0)
+#define bswabU32_inc(d, p)     do {    \
+       memcpy(&(d), p, 4);             \
+       p = (char const*)p + 4;         \
+} while (0)
+#define bswabU64_inc(d, p)     do {    \
+       memcpy(&(d), p, 8);             \
+       p = (char const*)p + 8;         \
+} while (0)

-#define bstoreU16_inc(ptr, val) (*((UInt16*) (ptr))++) = val
-#define bstoreU32_inc(ptr, val) (*((UInt32*) (ptr))++) = val
-#define bstoreU64_inc(ptr, val) (*((UInt64*) (ptr))++) = val
+#define bstoreU8_inc(p, s)     do {    \
+       memcpy(p, &(s), 1);             \
+       p = (char*)p + 1;               \
+} while (0)
+#define bstoreU16_inc(p, s)    do {    \
+       memcpy(p, &(s), 2);             \
+       p = (char*)p + 2;               \
+} while (0)
+#define bstoreU32_inc(p, s)    do {    \
+       memcpy(p, &(s), 4);             \
+       p = (char*)p + 4;               \
+} while (0)
+#define bstoreU64_inc(p, s)    do {    \
+       memcpy(p, &(s), 8);             \
+       p = (char*)p + 8;               \
+} while (0)

 #endif
-
-/* for the sake of compleetness and readability */
-#define bswabU8_inc(ptr)       (*((UInt8*) (ptr))++)
-#define bstoreU8_inc(ptr,val)  (*((UInt8*) (ptr))++) = val
--- btree.c-orig        Tue Mar  5 11:50:28 2002
+++ btree.c     Thu Dec 30 08:32:13 2010
@@ -49,12 +49,12 @@
  */
 void* btree_readnode(btree_node_desc* node, void *p)
 {
-    node->next     = bswabU32_inc(p);
-    node->prev     = bswabU32_inc(p);
-    node->kind     = bswabU8_inc(p);
-    node->height    = bswabU8_inc(p);
-    node->num_rec   = bswabU16_inc(p);
-    node->reserved  = bswabU16_inc(p);
+    bswabU32_inc(node->next, p);
+    bswabU32_inc(node->prev, p);
+    bswabU8_inc(node->kind, p);
+    bswabU8_inc(node->height, p);
+    bswabU16_inc(node->num_rec, p);
+    bswabU16_inc(node->reserved, p);
     return p;
 }

@@ -81,22 +81,22 @@ void* btree_writenode(btree_node_desc* node, void *p)
 void* btree_readhead(btree_head* head, void *p)
 {
     int i;
-    head->depth                = bswabU16_inc(p);
-    head->root         = bswabU32_inc(p);
-    head->leaf_count    = bswabU32_inc(p);
-    head->leaf_head    = bswabU32_inc(p);
-    head->leaf_tail    = bswabU32_inc(p);
-    head->node_size    = bswabU16_inc(p);
-    head->max_key_len   = bswabU16_inc(p);
-    head->node_count    = bswabU32_inc(p);
-    head->free_nodes    = bswabU32_inc(p);
-    head->reserved1    = bswabU16_inc(p);
-    head->clump_size    = bswabU32_inc(p);
-    head->btree_type    = bswabU8_inc(p);
-    head->reserved2    = bswabU8_inc(p);
-    head->attributes    = bswabU32_inc(p);
+    bswabU16_inc(head->depth, p);
+    bswabU32_inc(head->root, p);
+    bswabU32_inc(head->leaf_count, p);
+    bswabU32_inc(head->leaf_head, p);
+    bswabU32_inc(head->leaf_tail, p);
+    bswabU16_inc(head->node_size, p);
+    bswabU16_inc(head->max_key_len, p);
+    bswabU32_inc(head->node_count, p);
+    bswabU32_inc(head->free_nodes, p);
+    bswabU16_inc(head->reserved1, p);
+    bswabU32_inc(head->clump_size, p);
+    bswabU8_inc(head->btree_type, p);
+    bswabU8_inc(head->reserved2, p);
+    bswabU32_inc(head->attributes, p);
     for (i=0; i < 16; i++)
-       head->reserved3[i] = bswabU32_inc(p);
+       bswabU32_inc(head->reserved3[i], p);
     return p;
 }

@@ -494,7 +494,7 @@ void* btree_key_by_index(btree* bt, node_buf* buf, UIn
        hfsp_error = "btree_key_by_index: off_pos out of range";
        return NULL;
     }
-    offset = bswabU16(*((btree_record_offset*) (buf->node + off_pos)));
+    bswabU16(offset, (btree_record_offset*) (buf->node + off_pos));
     if (offset >= node_size)   // oops out of range
     {
        hfsp_error = "btree_key_by_index: offset out of range";


Untested of course.

Is this sort of intrusive change acceptable/desired?
--patrick




> * lang/pfe - lvalue required as increment operand
> * graphics/darktable - impossible constraint in 'asm'
>
>
>
>
> ------------------------------------------------------------------------
> misc/hfsplus
> ------------------------------------------------------------------------
>
> /usr/ports/infrastructure/bin/libtool  --mode=compile cc -DHAVE_CONFIG_H -I. 
> -I. -I../..   -I/usr/local/include  -O2 -pipe -c btree.c
> cc -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/local/include -O2 -pipe 
> -Wp,-MD,.deps/btree.pp -c btree.c -fPIC -DPIC -o .libs/btree.o
> btree.c: In function 'btree_readnode':
> btree.c:52: error: lvalue required as increment operand
> btree.c:53: error: lvalue required as increment operand
> btree.c:54: error: lvalue required as increment operand
> btree.c:55: error: lvalue required as increment operand
> btree.c:56: error: lvalue required as increment operand
> btree.c:57: error: lvalue required as increment operand
> btree.c: In function 'btree_writenode':
> btree.c:67: error: lvalue required as increment operand
> btree.c:68: error: lvalue required as increment operand
> btree.c:69: error: lvalue required as increment operand
> btree.c:70: error: lvalue required as increment operand
> btree.c:71: error: lvalue required as increment operand
> btree.c:72: error: lvalue required as increment operand
> btree.c: In function 'btree_readhead':
> btree.c:84: error: lvalue required as increment operand
> btree.c:85: error: lvalue required as increment operand
> btree.c:86: error: lvalue required as increment operand
> btree.c:87: error: lvalue required as increment operand
> btree.c:88: error: lvalue required as increment operand
> btree.c:89: error: lvalue required as increment operand
> btree.c:90: error: lvalue required as increment operand
> btree.c:91: error: lvalue required as increment operand
> btree.c:92: error: lvalue required as increment operand
> btree.c:93: error: lvalue required as increment operand
> btree.c:94: error: lvalue required as increment operand
> btree.c:95: error: lvalue required as increment operand
> btree.c:96: error: lvalue required as increment operand
> btree.c:97: error: lvalue required as increment operand
> btree.c:99: error: lvalue required as increment operand
> btree.c: In function 'btree_writehead':
> btree.c:110: error: lvalue required as increment operand
> btree.c:111: error: lvalue required as increment operand
> btree.c:112: error: lvalue required as increment operand
> btree.c:113: error: lvalue required as increment operand
> btree.c:114: error: lvalue required as increment operand
> btree.c:115: error: lvalue required as increment operand
> btree.c:116: error: lvalue required as increment operand
> btree.c:117: error: lvalue required as increment operand
> btree.c:118: error: lvalue required as increment operand
> btree.c:119: error: lvalue required as increment operand
> btree.c:120: error: lvalue required as increment operand
> btree.c:121: error: lvalue required as increment operand
> btree.c:122: error: lvalue required as increment operand
> btree.c:123: error: lvalue required as increment operand
> btree.c:125: error: lvalue required as increment operand
> btree.c: In function 'btree_init':
> btree.c:396: error: lvalue required as left operand of assignment
> Error while executing cc -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/local/include 
> -O2 -pipe -Wp,-MD,.deps/btree.pp -c btree.c -fPIC -DPIC -o .libs/btree.o
> gmake[3]: *** [btree.lo] Error 1
> gmake[3]: Leaving directory 
> `/usr/ports/pobj/hfsplus-1.0.4/hfsplus-1.0.4/libhfsp/src'
> gmake[2]: *** [all-recursive] Error 1
> gmake[2]: Leaving directory 
> `/usr/ports/pobj/hfsplus-1.0.4/hfsplus-1.0.4/libhfsp'
> gmake[1]: *** [all-recursive] Error 1
> gmake[1]: Leaving directory `/usr/ports/pobj/hfsplus-1.0.4/hfsplus-1.0.4'
> gmake: *** [all-recursive-am] Error 2
> *** Error code 2
>
>
> ------------------------------------------------------------------------
> lang/pfe
> ------------------------------------------------------------------------
>
> cc -DHAVE_CONFIG_H -I. -I.. -I../../pfe/.. -I. -I../../pfe -O2 -pipe 
> -Wstrict-prototypes -MT debug-ext.lo -MD -MP -MF .deps/debug-ext.Tpo -c 
> ../../pfe/debug-ext.c  -fPIC -DPIC -o .libs/debug-ext.o
> ../../pfe/debug-ext.c: In function 'p4_code_RT_SEE':
> ../../pfe/debug-ext.c:351: warning: return from incompatible pointer type
> ../../pfe/debug-ext.c: In function 'is_sbr_compile_call_to':
> ../../pfe/debug-ext.c:448: error: lvalue required as increment operand
> ../../pfe/debug-ext.c:456: error: lvalue required as increment operand
> *** Error code 1
>
> Stop in /usr/ports/pobj/pfe-0.33.69/pfe-0.33.69/OpenBSD_4.8_macppc.d/pfe 
> (line 999 of Makefile).
> *** Error code 1
>
> Stop in /usr/ports/pobj/pfe-0.33.69/pfe-0.33.69/OpenBSD_4.8_macppc.d/pfe 
> (line 663 of Makefile).
> *** Error code 1
>
> Stop in /usr/ports/pobj/pfe-0.33.69/pfe-0.33.69/OpenBSD_4.8_macppc.d (line 
> 259 of Makefile).
> *** Error code 1
>
> Stop in /usr/ports/pobj/pfe-0.33.69/pfe-0.33.69 (line 181 of Makefile).
> *** Error code 1
>
>
> ------------------------------------------------------------------------
> graphics/darktable
> ------------------------------------------------------------------------
>
> cc -DHAVE_CONFIG_H -I. -I/usr/ports/pobj/darktable-0.6/darktable-0.6/src -I.. 
> -pthread -I/usr/local/include/OpenEXR 
> -I/usr/ports/pobj/darktable-0.6/darktable-0.6/src/LibRaw 
> -I/usr/local/include/gnome-keyring-1 -I/usr/local/include/glib-2.0 
> -I/usr/local/lib/glib-2.0/include -I/usr/local/include/gphoto2 
> -I/usr/local/include -I/usr/local/include/libexif 
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/local/include -I/usr/local/include/cairo -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/pixman-1 -I/usr/X11R6/include 
> -I/usr/X11R6/include/freetype2 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/libpng -I/usr/local/include/libglade-2.0 
> -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include 
> -I/usr/local/include/pango-1.0 -I/usr/local/include/gio-unix-2.0/ 
> -I/usr/X11R6/include -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 
> -I!
>  /usr/X11R6/include/pixman-1 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/libpng -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/freetype2 -I/usr/local/include/libxml2 
> -I/usr/local/include -I/usr/local/include/gtk-2.0 
> -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/pango-1.0 
> -I/usr/local/include/gio-unix-2.0/ -I/usr/X11R6/include 
> -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 
> -I/usr/X11R6/include/pixman-1 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/libpng -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/freetype2 -pthread -I/usr/local/include/glib-2.0 
> -I/usr/local/lib/glib-2.0/include -I/usr/local/include 
> -I/usr/local/include/gconf/2 -I/usr/local/include/orbit-2.0 -DORBIT2=1 
> -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -fno-strict-aliasing -Wall -std=c99 -fPIC -DDAT!
>  ADIR="/usr/local/share/darktable" -DLIBDIR="/usr/local/lib" -W!
>  error -rdynamic -Wno-deprecated-declarations -O2 -pipe -MT develop.lo -MD 
> -MP -MF .deps/develop.Tpo -c 
> /usr/ports/pobj/darktable-0.6/darktable-0.6/src/develop/develop.c -fPIC -DPIC 
> -o .libs/develop.o
> /usr/ports/pobj/darktable-0.6/darktable-0.6/src/develop/develop.c: In 
> function 'dt_dev_process_preview_job':
> /usr/ports/pobj/darktable-0.6/darktable-0.6/src/common/darktable.h:147: 
> error: impossible constraint in 'asm'
> /usr/ports/pobj/darktable-0.6/darktable-0.6/src/common/darktable.h:147: 
> error: impossible constraint in 'asm'
> Error while executing cc -DHAVE_CONFIG_H -I. 
> -I/usr/ports/pobj/darktable-0.6/darktable-0.6/src -I.. -pthread 
> -I/usr/local/include/OpenEXR 
> -I/usr/ports/pobj/darktable-0.6/darktable-0.6/src/LibRaw 
> -I/usr/local/include/gnome-keyring-1 -I/usr/local/include/glib-2.0 
> -I/usr/local/lib/glib-2.0/include -I/usr/local/include/gphoto2 
> -I/usr/local/include -I/usr/local/include/libexif 
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/local/include -I/usr/local/include/cairo -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/pixman-1 -I/usr/X11R6/include 
> -I/usr/X11R6/include/freetype2 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/libpng -I/usr/local/include/libglade-2.0 
> -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include 
> -I/usr/local/include/pango-1.0 -I/usr/local/include/gio-unix-2.0/ 
> -I/usr/X11R6/include -I/usr/local/include/cairo -I/usr/lo!
>  cal/include/atk-1.0 -I/usr/X11R6/include/pixman-1 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/libpng -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/freetype2 -I/usr/local/include/libxml2 
> -I/usr/local/include -I/usr/local/include/gtk-2.0 
> -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/pango-1.0 
> -I/usr/local/include/gio-unix-2.0/ -I/usr/X11R6/include 
> -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 
> -I/usr/X11R6/include/pixman-1 -I/usr/include/dev/pci/drm 
> -I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/libpng -pthread 
> -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -I/usr/X11R6/include/freetype2 -pthread -I/usr/local/include/glib-2.0 
> -I/usr/local/lib/glib-2.0/include -I/usr/local/include 
> -I/usr/local/include/gconf/2 -I/usr/local/include/orbit-2.0 -DORBIT2=1 
> -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 
> -fno-strict-aliasing -Wal!
>  l -std=c99 -fPIC -DDATADIR="/usr/local/share/darktable" -DLIBD!
>  IR="/usr/local/lib" -Werror -rdynamic -Wno-deprecated-declarations -O2 -pipe 
> -MT develop.lo -MD -MP -MF .deps/develop.Tpo -c 
> /usr/ports/pobj/darktable-0.6/darktable-0.6/src/develop/develop.c -fPIC -DPIC 
> -o .libs/develop.o
> gmake[3]: *** [develop.lo] Error 1
> gmake[3]: Leaving directory `/usr/ports/pobj/darktable-0.6/build-powerpc/src'
> gmake[2]: *** [all-recursive] Error 1
> gmake[2]: Leaving directory `/usr/ports/pobj/darktable-0.6/build-powerpc/src'
> gmake[1]: *** [all-recursive] Error 1
> gmake[1]: Leaving directory `/usr/ports/pobj/darktable-0.6/build-powerpc'
> gmake: *** [all] Error 2
> *** Error code 2
>
>
> --
> Antoine
>
>

Reply via email to