On Thu, Dec 30, 2010 at 1:45 AM, Antoine Jacoutot <[email protected]> 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
>
>