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

Henrik Johansson henrikj at henkis.net
Mon Aug 26 20:50:34 UTC 2013


It's a bit weird:

/usr/include/sys/privregs.h includes /usr/include/amd64/sys/privregs.h when __amd64 is defined but while then it suddenly is no longed defined?

First:
#if defined(__amd64)

#include <amd64/sys/privregs.h>

And right after it bails on:
#if !defined(__amd64)
#error  "non-amd64 code depends on amd64 privileged header!"

Oh well, I try to look at it some more if I find time for it, otherwise it was good that an illumos bug have been filed.

Regards
Henrik




On Aug 26, 2013, at 9:55 PM, Eric Sproul <esproul at omniti.com> wrote:

> 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