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 > >