[OmniOS-discuss] non-amd64 code depends on amd64 privileged header!

Eric Sproul esproul at omniti.com
Mon Aug 26 19:55:47 UTC 2013


I *think* this may be a general illumos issue, insofar as certain apps
may be trying to do something that isn't likely to work properly.

https://www.illumos.org/issues/3803

I looked at the commend from regset.h just above line 420 where
privregs.h is included:

/*
 * The version of privregs.h that is used on implementations that run on
 * processors that support the AMD64 instruction set is deliberately not
 * imported here.
 *
 * The amd64 'struct regs' definition may -not- compatible with either
 * 32-bit or 64-bit core file contents, nor with the ucontext.  As a result,
 * the 'regs' structure cannot be used portably by applications, and should
 * only be used by the kernel implementation.
 *
 * The inclusion of the i386 version of privregs.h allows for some limited
 * source compatibility with 32-bit applications who expect to use
 * 'struct regs' to match the context of a 32-bit core file, or a ucontext_t.
 *
 * Note that the ucontext_t actually describes the general register in terms
 * of the gregset_t data type, as described in this file.  Note also
 * that the core file content is defined by core(4) in terms of data types
 * defined by procfs -- see proc(4).
 */
#if defined(__i386) && \
        (!defined(_KERNEL) && !defined(_XPG4_2) || defined(__EXTENSIONS__))
#include <sys/privregs.h>
#endif  /* __i386 (!_KERNEL && !_XPG4_2 || __EXTENSIONS__) */

It might help if you built netatalk 64-bit (gcc -m64), but I am by no
means a kernel hacker, nor am I familiar enough with netatalk to say
for sure.

Eric

On Mon, Aug 26, 2013 at 3:36 PM, Henrik Johansson <henrikj at henkis.net> wrote:
> Hello,
>
> I am trying OmniOS as a replacement for my OpenIndiana deployment. I  did however get into trouble when compiling netatalk, and based on Google the problem is not limited to netatalk. I am uncertain if this is a generic illumos problem introduced after OpenIndiana stagnated or if it is something unique to OmniOS.
>
> Here it is:
> gmake[3]: Entering directory `/zpool01/build/netatalk/netatalk-3.0.5/etc/uams'
>   CC       uams_guest.lo
> In file included from /usr/include/sys/regset.h:420:0,
>                  from /usr/include/sys/ucontext.h:36,
>                  from /usr/include/sys/signal.h:245,
>                  from /usr/include/sys/procset.h:42,
>                  from /usr/include/sys/wait.h:43,
>                  from /usr/include/stdlib.h:38,
>                  from uams_guest.c:11:
> /usr/include/amd64/sys/privregs.h:42:2: error: #error "non-amd64 code depends on amd64 privileged header!"
>
> This was using GCC 4.7 but I get the same error with 4.4. If i remove the check from the privregs.h header everything seems to compile fine.
>
> Regards
> Henrik
> _______________________________________________
> OmniOS-discuss mailing list
> OmniOS-discuss at lists.omniti.com
> http://lists.omniti.com/mailman/listinfo/omnios-discuss


More information about the OmniOS-discuss mailing list