libgomp: Implementing CRITICAL construct

1 
1 9.2 Implementing CRITICAL construct
1 ===================================
1 
1 Without a specified name,
1 
1        void GOMP_critical_start (void);
1        void GOMP_critical_end (void);
1 
1    so that we don't get COPY relocations from libgomp to the main
1 application.
1 
1    With a specified name, use omp_set_lock and omp_unset_lock with name
1 being transformed into a variable declared like
1 
1        omp_lock_t gomp_critical_user_<name> __attribute__((common))
1 
1    Ideally the ABI would specify that all zero is a valid unlocked
1 state, and so we wouldn't need to initialize this at startup.
1