This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cygwin/newlib types patchs


Joel Sherrill wrote:
> 
> Joel Sherrill wrote:
> >
> > Just to make sure I understand .. What you intend to do for
> > structure is effectively this:
> >
> > #ifdef __RTEMS_INSIDE__
> > typedef struct {
> >   int is_initialized;
> >   void *stackaddr;
> >   int stacksize;
> >   int contentionscope;
> >   int inheritsched;
> >   int schedpolicy;
> >   struct sched_param schedparam;
> >
> >   /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute.  */
> > #if defined(_POSIX_THREAD_CPUTIME)
> >   int  cputime_clock_allowed;  /* see time.h */
> > #endif
> >   int  detachstate;
> >
> > } pthread_attr_t;
> > #else /* in user land */
> > typedef void * pthread_attr_t;
> > #endif
> >
> > If this is not the case, then I need to be educated further to make
> > an intelligent decision. :)
> >
> > --joel
> 
> Something just bothered me... from opengroup.org
> 
>      #include <pthread.h>
>      int pthread_attr_init(pthread_attr_t *attr);
> 
>      int pthread_attr_destroy(pthread_attr_t *attr);
> 
> Shouldn't I be able to write this code?
> 
> {
>   pthread_attr_t my_attr;
>   pthread_attr_init( &my_attr );
> }
> 
> The RTEMS implementation assumes that the user is providing the memory
> for the structure.  If you change the user view so pthread_attr_t is
> a void *, we break.
> 
> On types like pthread_t, RTEMS is really a unsigned 32 bit integer
> and we again assume that the user is providing that space.
> 
> Not letting the user know the size is broken for us.  I agree that it is
> certainly
> bad form for them to look inside.
> 

After thinking a little further on this, IMO it is best to separate out the pthread types from
sys/types.h since they are extremely system-specific.  This is how glibc handles it.  So, we have a
separate header: sys/pthreadtypes.h which contains the pthread types.  A default header file will
exist in the libc/include/sys directory, however, each system that supports pthreads will have its
own version of sys/pthreadtypes.h in their sys directory which will override the default.

If a system wants to hide the internals they can use anonymous field names or structs simply padded
to the appropriate size which allows the user-scenario above.  FWIW: glibc doesn't seem to worry
about it and exposes the structs.  

-- Jeff J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]