Re: another gcc-4.2 compile problem on alpha: gameport

From: Sam Ravnborg
Date: Sun Sep 30 2007 - 05:53:17 EST


On Sun, Sep 30, 2007 at 11:42:20AM +0300, Meelis Roos wrote:
> After I applied the psmouse-base section fix (thanks!), I wuickly ran
> into another compile problem with gcc-4.2 on alpha:
>
> CC [M] drivers/input/gameport/gameport.o
> drivers/input/gameport/gameport.c:42: error: __ksymtab_gameport_set_name causes a section type conflict
> drivers/input/gameport/gameport.c:41: error: __ksymtab_gameport_cooked_read causes a section type conflict
>

Maybe it's the same as:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31490

I have narrowed it down to the following code snippet. But now the complain are for a different parameter.
But do not have time to persuade it further.
Do you have time to simplify the code snippet and persuade the gcc people?
PS. cc: rth as he are in both camps.

Sam

The following code result in:
alpha.c:45: error: __param_resolution causes a section type conflict

With gcc:
alpha-unknown-linux-gnu-gcc (GCC) 4.2.1

It was build using Dan Kegel's crosstool so I dunno about the exact configure options used.


gcc (GCC) 4.1.2 20070502 (Red Hat 4.1.2-12) on x86_64 does not issue this error on the same code snippet.
sam-gcc (GCC) 4.2.1 on x86_64 does neither issue same error.
sam-gcc I did built myself with:
configure --prefix=/home/sam/usr/local --program-prefix=sam- --target=alpha-linux





struct kernel_param;


typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);

typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);

struct kernel_param {
const char *name;
unsigned int perm;
param_set_fn set;
param_get_fn get;
void *arg;
};


extern int param_set_uint(const char *val, struct kernel_param *kp);
extern int param_get_uint(char *buffer, struct kernel_param *kp);



static const char __mod_author35[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "author" "=" "Vojtech Pavlik <vojtech@xxxxxxx>";
static const char __mod_description36[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "description" "=" "PS/2 mouse driver";
static const char __mod_license37[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "license" "=" "GPL";

static unsigned int psmouse_max_proto = 1;
static int psmouse_set_maxproto(const char *val, struct kernel_param *kp) {};
static int psmouse_get_maxproto(char *buffer, struct kernel_param *kp) {};



static inline unsigned int *__check_proto(void) { return(&(psmouse_max_proto)); };
static int __param_perm_check_proto __attribute__((unused)) = (sizeof(char[1 - 2 * !!((0644) < 0 || (0644) > 0777 || ((0644) & 2))]) - 1);
static char __param_str_proto[] = "proto";
static struct kernel_param const __param_proto __attribute__((__used__)) __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) =
{ __param_str_proto, 0644, psmouse_set_maxproto, psmouse_get_maxproto, &psmouse_max_proto };
static const char __mod_prototype45[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "parmtype" "=" "proto" ":" "proto_abbrev";
static const char __mod_proto46[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "parm" "=" "proto" ":" "Highest protocol extension to probe (bare, imps, exps, any). Useful for KVM switches.";

static unsigned int psmouse_resolution = 200;
static inline unsigned int *__check_resolution(void) { return(&(psmouse_resolution)); };
static int __param_perm_check_resolution __attribute__((unused)) = (sizeof(char[1 - 2 * !!((0644) < 0 || (0644) > 0777 || ((0644) & 2))]) - 1);
static char __param_str_resolution[] = "resolution";
static struct kernel_param const __param_resolution __attribute__((__used__)) __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) =
{ __param_str_resolution, 0644, param_set_uint, param_get_uint, &psmouse_resolution };
static const char __mod_resolutiontype49[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "parmtype" "=" "resolution" ":" "uint";
static const char __mod_resolution50[] __attribute__((__used__)) __attribute__((section(".modinfo"),unused)) = "parm" "=" "resolution" ":" "Resolution, in dpi.";
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/