Is libc6 OK on powerpc?
Hello there,
I'm the maintainer for mirrormagic. I've got an x86 system, hope you can
forgive my little inadequacies.
update_excuses.html says mirrormagic has issues getting into testing because
of the following bug on powerpc (well, I gather this excuse has been
overridden, and mirrormagic 2.0.0 isn't in testing because libsdl1.1 isn't,
but anyway...)
According to http://voltaire.debian.org/buildd/buildlogs/mirrormagic/latest,
we have this compile-time error:
gcc main.o init.o events.o tools.o screens.o game.o editor.o files.o
cartoons.o libgame/libgame.a -lSDL_image -lSDL_mixer -L/usr/lib -lSDL
-lpthread -lm -o ../mirrormagic
libgame/libgame.a(gadgets.o): In function HandleGadgetTags':
gadgets.o(.text+0x9f8): undefined reference to __va_arg_type_violation'
gadgets.o(.text+0x9f8): relocation truncated to fit: R_PPC_REL24
__va_arg_type_violation
collect2: ld returned 1 exit status
make[2]: *** [../mirrormagic] Error 1
The code in question is declared as:
static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
and the va_arg argument is used in several places inside, e.g.
gi->custom_id = va_arg(ap, int);
strncpy(gi->info_text, va_arg(ap, char *), max_textsize);
gi->type = va_arg(ap, unsigned long);
gi->deco.width = va_arg(ap, int);
gi->deco.height = va_arg(ap, int);
gi->design[GD_BUTTON_PRESSED].bitmap = va_arg(ap, Bitmap *);
gi->event_mask = va_arg(ap, unsigned long);
gi->callback_info = va_arg(ap, gadget_function);
etc.
gi (GadgetInfo) looks like:
struct GadgetInfo
{
int id; /* internal gadget identifier */
int custom_id; /* custom gadget identifier */
int custom_type_id; /* custom gadget type identifier */
char info_text[MAX_INFO_TEXTSIZE]; /* short popup info text */
int x, y; /* gadget position */
int width, height; /* gadget size */
unsigned long type; /* type (button, text input, ...) */
unsigned long state; /* state (pressed, released, ...) */
boolean checked; /* check/radio button state */
int radio_nr; /* number of radio button series */
boolean mapped; /* gadget is active */
struct GadgetBorder border; /* gadget border design */
struct GadgetDesign design[2]; /* 0: normal; 1: pressed */
struct GadgetDesign alt_design[2]; /* alternative design */
struct GadgetDecoration deco; /* decoration on top of gadget */
unsigned long event_mask; /* possible events for this gadget */
struct GadgetEvent event; /* actual gadget event */
gadget_function callback_info; /* function for pop-up info text */
gadget_function callback_action; /* function for gadget action */
struct GadgetDrawingArea drawing; /* fields for drawing area gadget */
struct GadgetTextInput text; /* fields for text input gadget */
struct GadgetScrollbar scrollbar; /* fields for scrollbar gadget */
struct GadgetInfo *next; /* next list entry */
};
So this "undefined reference to __va_arg_type_violation", is it a known
problem on the powerpc? Have others met it? Or does it mean the code has
been written poorly? There's nothing obviously bad in the code that I can
see, but I've never had to deal with powerpc or endian issues before (though
I can't see any issues here). It works fine on x86.
Thanks for any clues,
Drew Parsons
--
PGP public key available at http://dparsons.webjump.com/drewskey.txt
Fingerprint: A110 EAE1 D7D2 8076 5FE0 EC0A B6CE 7041 6412 4E4A
Reply to: