Sponsored Content
Full Discussion: Platform type in Unix
Top Forums Programming Platform type in Unix Post 302120676 by porter on Thursday 7th of June 2007 02:03:45 PM
Old 06-07-2007
Quote:
Originally Posted by slash_blog
for IBM AIX powerpc architecture, because I couldn't find a __ppc__ or __powerpc__ defined by gcc on AIX. Is it correct to use _POWER?
Sounds right, sometimes the macros don't have the trailing "__". As always because we don't know why you need the processor architecture we can't advise you more.

As a couple of suggestions you may be trying to find out if you are big or little endian, or perhaps 32 or 64 bit.

In the first case for macros like "_BYTE_ORDER", "_LITTLE_ENDIAN" and "_BIG_ENDIAN".

In the second case look for macros like _LP64 or __LP64__ or even "_WIN64".

This may end up long winded but worth it in the long run, I have a single file I extend as I test more architectures.

Code:
#if (!defined(_PLATFORM_BIG_ENDIAN_)) && (!defined(_PLATFORM_LITTLE_ENDIAN_))
/* 
 *      first try and determine from sys/param.h 
 */
#       include <sys/param.h>
#       if defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
#               if (_BIG_ENDIAN != _LITTLE_ENDIAN)
#                       if (_BYTE_ORDER==_BIG_ENDIAN)
#                               define _PLATFORM_BIG_ENDIAN_
#                       else
#                               if (_BYTE_ORDER==_LITTLE_ENDIAN)
#                                       define _PLATFORM_LITTLE_ENDIAN_
#                               endif
#                       endif
#               endif
#       endif
#endif

#if (!defined(_PLATFORM_BIG_ENDIAN_)) && (!defined(_PLATFORM_LITTLE_ENDIAN_))
/* 
 * second, try a couple of simple agnostic macros
 */
#       if defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
#               define _PLATFORM_BIG_ENDIAN_
#       endif
#       if defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
#               define _PLATFORM_LITTLE_ENDIAN_
#       endif
#endif

#if (!defined(_PLATFORM_BIG_ENDIAN_)) && (!defined(_PLATFORM_LITTLE_ENDIAN_))
/* 
 * thirdly, look for processor specific flags and go from there
 * mips and ia64 could be either endian
 */
#       if  defined(__ppc__) || \
                ((defined(__mips__)||defined(__mips)) && ( defined(__MIPSEB__) || defined(MIPSEB) ) ) || \
                defined(__sparc__) || \
                defined(__sparc) || \
                defined(__hppa) || \
                defined(_sun3_param_h)
#               define _PLATFORM_BIG_ENDIAN_
#       else
#               if  defined(__i386__) || \
                        defined(__alpha) || \
                        defined(__x86_64__) || \
                        ( (defined(__mips__)||defined(__mips)) && ( defined(__MIPSEL__) || defined(MIPSEL) ) )
#                       define _PLATFORM_LITTLE_ENDIAN_
#               endif
#       endif
#endif

#if (!defined(_PLATFORM_BIG_ENDIAN_)) && (!defined(_PLATFORM_LITTLE_ENDIAN_))
#       error could not determine endianness, not enough clues
#endif

#if defined(_PLATFORM_BIG_ENDIAN_) && defined(_PLATFORM_LITTLE_ENDIAN_)
#       error could not determine endianness, result confusing
#endif


Last edited by porter; 06-07-2007 at 07:37 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

C++ on True Unix Platform

Hi all: I would like to get some details about development using C++ on TRUE Unix platform. Can anyone help me ?? Thanks, -Mandar (2 Replies)
Discussion started by: mandar3
2 Replies

2. UNIX for Advanced & Expert Users

Porting of Windows written unix scripts to unix platform

Can anybody help me in finding out a solution for the problem below? When we write .unix or .sh files in windows OS and port them to Unix platforms there is a character ^M inserted at the end of each line of the script file. During ftp porting I set the transfer mode as ASCII for the script... (7 Replies)
Discussion started by: tamilselvi
7 Replies

3. UNIX for Dummies Questions & Answers

Need help in choosing Unix Platform.

I'm a completely noob to Unix. I have previously managed quite well Windows OS's but never Unix. -My question is quite simple: I've been investigating what's the easiest and most complex Unix OS. However, it seems there are quite a couple of OS's from which to choose, like: -Darwin ... (3 Replies)
Discussion started by: justanoob
3 Replies

4. UNIX for Dummies Questions & Answers

i am newer to unix platform

i have to select particular fields from a multiple line record. my record is in dump.txt file and looks like this ******************* tipo = abonado simplex, Idiomas = dic1 - none, Operador = estandar Serv. portadora admitido: modem ind = 0 numero telefonico = 79260960, att = 0... (1 Reply)
Discussion started by: junaid.nehvi
1 Replies

5. UNIX for Dummies Questions & Answers

Most used unix platform as desktop.

Just wonder about this question everytime that how many of us use unix as desktop and prefers which unix platform as desktop. - nilesh (4 Replies)
Discussion started by: ynilesh
4 Replies

6. Programming

about unix platform

Hi can any body post example for socket tcpclient in c++ act like browser with HTTp 1.1 and send message for the server (2 Replies)
Discussion started by: Net Star
2 Replies

7. UNIX for Dummies Questions & Answers

Is unix os or platform?

hellow everyone, iam a new user to linux and i have question about unix os. unix is operating system or platform iam confused. i have read some article about unix but i haven't found the answer what iam searching for. so iam confused in this topic can anyone made it clear. Any types of... (8 Replies)
Discussion started by: paruhang
8 Replies

8. Red Hat

Machine/Hardware platform/Processor type

Hi, I am just confused about these three things which are shown in the output of uname command. I am running RH lINUX 9.0 on hardware having Intel HT CPU. My uname shows uname -p i686 (processor) uname -m i686 (machine) uname -i i386 (hardware) I was about to ... (1 Reply)
Discussion started by: dextergenious
1 Replies

9. UNIX for Advanced & Expert Users

R plots in UNIX platform

How do you see plots produced in R under UNIX platform? Thanks! (2 Replies)
Discussion started by: johnkim0806
2 Replies

10. Red Hat

Double data type C Red Hat platform problem

I'm converting a binary file to ASCII using c code. The folllowing block of code prints correct double value 00000.000000000 on HPUNIX platform. longi double; /* C79 - Price Per Minute */ memcpy(&longi,&rbuff,8); fprintf(wfp,"%015.9f ",longi); prints : 00000.000000000 ... (6 Replies)
Discussion started by: krk
6 Replies
types.h(3HEAD)                                                        Headers                                                       types.h(3HEAD)

NAME
types.h, types - primitive system data types SYNOPSIS
#include <sys/types.h> DESCRIPTION
The data types defined in <sys/types.h> are as follows: 32-bit Solaris The data types listed below are defined in <sys/types.h> for 32-bit Solaris. typedef struct { int r[1]; } *physadr; typedef long clock_t; typedef long daddr_t; typedef char * caddr_t; typedef unsigned char unchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong_t; typedef unsigned long ino_t; typedef long uid_t; typedef long gid_t; typedef ulong_t nlink_t; typedef ulong_t mode_t; typedef short cnt_t; typedef long time_t; typedef int label_t[10]; typedef ulong_t dev_t; typedef long off_t; typedef long pid_t; typedef long paddr_t; typedef int key_t; typedef unsigned char use_t; typedef short sysid_t; typedef short index_t; typedef short lock_t; typedef unsigned int size_t; typedef long clock_t; typedef long pid_t; 64-bit Solaris The data types listed below are defined in <sys/types.h> for 64-bit Solaris. typedef long blkcnt_t typedef long clock_t typedef long daddr_t typedef ulong_t dev_t typedef ulong_t fsblkcnt_t typedef ulong_t fsfilcnt_t typedef int gid_t typedef int id_t typedef long ino_t typedef int key_t typedef uint_t major_t typedef uint_t minor_t typedef uint_t mode_t typedef uint_t nlink_t typedef int pid_t typedef ptrdiff_t intptr_t typedef ulong_t rlim_t typedef ulong_t size_t typedef uint_t speed_t typedef long ssize_t typedef long suseconds_t typedef uint_t tcflag_t typedef long time_t typedef int uid_t typedef int wchar_t Preprocessor Symbols For 32-bit programs, pointers and the C data types int and long are all 32-bit quantities. For 64-bit programs, pointers and the C data type long are defined as 64-bit quantities. The preprocessor symbol _ILP32, made visible by the inclusion of <sys/types.h>, can be used with the preprocessor #ifdef construct to define sections of code that will be compiled only as part of a 32-bit version of a given C program. The preprocessor symbol _LP64 can be used in the same way to define sections of code that will be compiled only as part of a 64-bit version of a given C program. See EXAMPLES. This header incorporates definitions of other preprocessor symbols that can be useful when keeping code portable between different instruc- tion set architectures. _LITTLE_ENDIAN _BIG_ENDIAN The natural byte order of the processor. A pointer to an int points to the least/most significant byte of that int. _STACK_GROWS_UPWARD _STACK_GROWS_DOWNWARD The processor specific direction of stack growth. A push onto the stack increases/decreases the stack pointer, so it stores data at successively higher/lower addresses. _CHAR_IS_UNSIGNED _CHAR_IS_SIGNED The C Compiler implements objects of type char as unsigned or signed respectively. This is really an implementation choice of the com- piler, but it is specified in the ABI and tends to be uniform across compilers for an instruction set architecture. _CHAR_ALIGNMENT _SHORT_ALIGNMENT _INT_ALIGNMENT _LONG_ALIGNMENT _LONG_LONG_ALIGNMENT _DOUBLE_ALIGNMENT _LONG_DOUBLE_ALIGNMENT _POINTER_ALIGNMENT _FLOAT_ALIGNMENT The ABI defines alignment requirements of each of the primitive object types. Some, if not all, might be hardware requirements as well. The values are expressed in bytes. _MAX_ALIGNMENT The most stringent alignment requirement as specified by the ABI. Equal to the maximum of all the above _XXX_ALIGNMENT values. _LONG_LONG_ALIGNMENT_32 The 32-bit ABI supported by a 64-bit kernel may have different alignment requirements for primitive object types. The value of this identifier is expressed in bytes. USAGE
The daddr_t type is used for disk addresses except in an inode on disk. Times are encoded in seconds since 00:00:00 UTC, January 1, 1970. The major and minor parts of a device code specify kind and unit number of a device and are installation-dependent. Offsets are measured in bytes from the beginning of a file. The label_t[] types are used to save the processor state while another process is running. EXAMPLES
Example 1: Use of preprocessor symbol _LP64. In the following example, the preprocessor symbol _LP64 defines sections of code that will be compiled only as part of a 64-bit version of the given C program. #include <sys/types.h> ... #ifdef _LP64 printf("The data model is LP64 in this environment "); #else #ifdef _ILP32 printf("The data model is ILP32 in this environment "); #else #error "Unknown data model!" #endif #endif ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Stable | +-----------------------------+-----------------------------+ SEE ALSO
types32.h(3HEAD), attributes(5), standards(5) SunOS 5.10 6 Oct 2004 types.h(3HEAD)
All times are GMT -4. The time now is 10:56 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy