Subject: Modular X11 (or GCC or something else) bug
To: None <current-users@netbsd.org, tech-pkg@netbsd.org>
From: Vincent <10.50@free.fr>
List: current-users
Date: 02/26/2007 22:13:47
Hi there,

on my old Celeron box, that I updated today to 4.99.12 with a fresh 
userland and kernel, I stumbling once more on a old "chap" error, while 
upgrading to modular_xorg 1.2.0:

../../os-support/.libs/libxorgos.a(i386_video.o)(.text.__i686.get_pc_thunk.bx+0x0): 
In function `__i686.get_pc_thunk.bx':
: multiple definition of `__i686.get_pc_thunk.bx'
/usr/lib/crt0.o(.gnu.linkonce.t.__i686.get_pc_thunk.bx+0x0): first 
defined here

It appears that compiling that i386_video.c (or any .c file) with the 
-fPIC flag attaches that __i686.get_pc_thunk.bx which ends up as a 
normal 'T' symbol as nm reveals, whereas it should (maybe?) be local or 
at least 'weak' or be part of a 'gnu.linkonce.t' section like in crt0.o.

For reference, this is the assembler code inserted by -fPIC:

.section 
.text.__i686.get_pc_thunk.bx,"axG",@progbits,__i686.get_pc_thunk.bx,comdat

.globl __i686.get_pc_thunk.bx
         .hidden __i686.get_pc_thunk.bx
         .type   __i686.get_pc_thunk.bx, @function
__i686.get_pc_thunk.bx:
         movl    (%esp), %ebx
         ret

What should I do?

Vincent