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(5)						      BSD File Formats Manual							  TYPES(5)

NAME
types -- system data types SYNOPSIS
#include <sys/types.h> DESCRIPTION
The file sys/types.h contains the defined data types used in the kernel (most are used through out the system). #ifndef _TYPES_H_ #define _TYPES_H_ typedef short dev_t; #ifndef _POSIX_SOURCE /* major part of a device */ #define major(x) ((int)(((unsigned)(x)>>8)&0377)) /* minor part of a device */ #define minor(x) ((int)((x)&0377)) /* make a device number */ #define makedev(x,y) ((dev_t)(((x)<<8) | (y))) #endif typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; typedef unsigned short ushort; /* Sys V compatibility */ #include <machine/ansi.h> #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) #include <machine/types.h> #endif #ifdef _CLOCK_T_ typedef _CLOCK_T_ clock_t; #undef _CLOCK_T_ #endif #ifdef _SIZE_T_ typedef _SIZE_T_ size_t; #undef _SIZE_T_ #endif #ifdef _TIME_T_ typedef _TIME_T_ time_t; #undef _TIME_T_ #endif #ifndef _POSIX_SOURCE typedef struct _uquad { unsigned long val[2]; } u_quad; typedef struct _quad { long val[2]; } quad; #endif typedef long * qaddr_t; /* should be typedef quad * qaddr_t; */ typedef long daddr_t; typedef char * caddr_t; typedef u_long ino_t; typedef long swblk_t; typedef long segsz_t; typedef long off_t; typedef u_short uid_t; typedef u_short gid_t; typedef short pid_t; typedef u_short nlink_t; typedef u_short mode_t; typedef u_long fixpt_t; #ifndef _POSIX_SOURCE #define NBBY 8 /* number of bits in a byte */ /* * Select uses bit masks of file descriptors in longs. These macros * manipulate such bit fields (the filesystem macros use chars). * FD_SETSIZE may be defined by the user, but the default here should * be >= NOFILE (param.h). */ #ifndef FD_SETSIZE #define FD_SETSIZE 1024 #endif typedef long fd_mask; #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x)+((y)-1))/(y)) #endif typedef struct fd_set { fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; } fd_set; #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p))) #endif /* !_POSIX_SOURCE */ #endif /* !_TYPES_H_ */ SEE ALSO
fs(5), time(3), lseek(2), adb(1) HISTORY
A types file appeared in Version 7 AT&T UNIX. Darwin AUGUST 2, 2001 Darwin
All times are GMT -4. The time now is 02:24 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy