Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: xsrc mesalib build problem



On Sat, Apr 13, 2024 at 01:19:05PM +0100, Patrick Welche wrote:
> Building xsrc on -current/amd64 with 
> 
> HAVE_MESA_VER=21
> HAVE_GCC=12
> 
> fails for me with
> 
> /usr/xsrc/external/mit/MesaLib/dist/src/amd/common/ac_rtld.c:658:20: error: 'STN_UNDEF' undeclared (first use in this function); did you mean 'SHN_UNDEF'?
>         658 |       if (r_sym == STN_UNDEF) {
>             |                    ^~~~~~~~~
>             |                    SHN_UNDEF
> /usr/xsrc/external/mit/MesaLib/dist/src/amd/common/ac_rtld.c:658:20: note: each undeclared identifier is reported only once for each function it appears in 
> 
> Non standard build options I know, but it had worked, and I had a complete
> build on 27 March...
> 
> STN_UNDEF / SHN_UNDEF appear to be from LLVM? (and this bit of build I think
> is gallium == llvmpipe?)

Really confused:

STN_UNDEF should be found via libelf.h -> sys/exec_elf.h

cd /usr/src/external/mit
make -j24 dependall
make -j24 install

works without complaint, and then

cd /usr/src
sh build.sh -u -x -j24 -E build

fails with the above
*** Failed target: ac_rtld.pico

If I run the lengthy output of

*** Failed commands:
        ${_MKTARGET_COMPILE}
        => @echo '#  ' "compile " gallium/ac_rtld.pico
        ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET}

I can reproduce the problem.

If I use "gcc -E", I see

----------
typedef struct {
 uint32_t gh_nbuckets;
 uint32_t gh_symndx;
 uint32_t gh_maskwords;
 uint32_t gh_shift2;
} Elf_GNU_Hash_Header;
# 35 "/usr/include/elfdefinitions.h" 2 3 4
# 41 "/usr/include/libelf.h" 2 3 4


typedef struct _Elf Elf;
typedef struct _Elf_Scn Elf_Scn;
---------
c.f. libelf.h
---------
#ifdef BUILTIN_ELF_HEADERS
# include <sys/types.h>
# include <stdint.h>
# include "elfdefinitions.h"
#elif HAVE_NBTOOL_CONFIG_H
# include <nbinclude/sys/exec_elf.h>
#elif defined(__NetBSD__)
# include <sys/types.h>
# include <sys/exec_elf.h>
#elif defined(__FreeBSD__)
# include <sys/types.h>
# include <sys/elf32.h>
# include <sys/elf64.h>
#else
  #error "No valid elf headers"
#endif

/* Library private data structures */
typedef struct _Elf Elf;
typedef struct _Elf_Scn Elf_Scn;
---------


My current suspicion is that "elfdefinitions.h" is being used rather
than sys/exec_elf.h, the latter is the one which defines STN_UNDEF:

$ grep _UNDEF elfdefinitions.h exec_elf.h 
elfdefinitions.h:#define        SHN_UNDEF       0
exec_elf.h:#define ELF_SYM_UNDEFINED    0
exec_elf.h:#define STN_UNDEF            0       /* undefined index */
exec_elf.h:#define SHN_UNDEF    0               /* Undefined section */


but I don't see "BUILTIN_ELF_HEADERS" in the failing command line,
and why would "make dependall" behave differently?

My guess is that adding STN_UNDEF to elfdefintions.h will patch over
this, but I don't see why build.sh would behave differently.

Possibly related to

Author: riastradh <riastradh%NetBSD.org@localhost>
Date:   Mon Apr 1 18:33:22 2024 +0000

    elftoolchain: Be consistent about which ELF header files we use.

which would match my notion of it working on 27 March?


Cheers,

Patrick



Home | Main Index | Thread Index | Old Index