From mboxrd@z Thu Jan 1 00:00:00 1970 From: "cris" To: help-gcc@gnu.org Subject: R: ALIGNMENT / going crazy with gcc-2.7.2-sparc-sun-sunos-4.1.3 Date: Sat, 18 Dec 1999 07:23:00 -0000 Message-id: <83g5km$5q8$1@nslave2.tin.it> References: <199912172346.PAA00844@java.agames.com> X-SW-Source: 1999-12/msg00262.html mike, thanks for your reply. the reason for wanting this system to work is simple: i've a project written in ansi c that must run on a lot of machines, and i don't want to change a line of code, except for some "#ifdef" to add. the programs run on dec unix, hpux, aix, winnt, macos, irix and linux, and i've not that kind of problem. when i had it, i solved with compiler switches: for example, on hpux i used "cc +u1", and the problem disappeared. on sunos, i could use "cc -misalign", but unfortunately i can't use sunos cc because it's not fully ansi-compliant, and the only alternative compiler allowed to use is gcc (because it's free). i work for a firm that deals with satellite images, and there are a lot of computations to do on a lot of data, so the first target is: "make the fastest code, or lose the challenge". i've an array of data composed by an odd number (17, obviously!) of header bytes, and then the radiometry values. i need to access the radiometry as an array to pass to math library routines, and sincerely the last thing i would do is copying them in a separate array: this would solve the problems, but performance would suddenly tumble down. moreover, that machine is already slow... this loss of speed would make it unusable. finally, if i change the code this way, i would make modifications about everywhere in the project files, and then i would have to test the whole project on ALL the platforms that i wrote above. i think that there's a way to do it with gcc: native cc compiler does it, the same gcc has a "-m" switch for IBM platforms, there MUST be a way to do it on sunos 4! please help me, and reply in mailbox too. have a wonderful week-end. --- work like you don't need money love like you've never been hurt and dance like no one's watching original question was: > : how can i tell gcc to compile my programs using strict-alignment for data > : types? > : if i write smth like this: > : void *full_array = malloc(50); > : short *short_p = &(( (char*) full_array)[ N ]); > : printf("%hd\n",*short_p); > : if N is odd, i get a core dump! > : i'm using gcc 2.7.2 on an old sparc2 with SunOs 4.1.3, no way to upgrade the > : os or to get a newer build of gcc. > : i've searched in the doc., i've found -m switches regarding alignment for > : ibm machines, but none for sparc ones! > : i've also seen a SHORT_ALIGNMENT macro to be defined (gcc-info, "You can > : control compilation driver"), but i don't know WHERE to define it! From mboxrd@z Thu Jan 1 00:00:00 1970 From: "cris" To: help-gcc@gnu.org Subject: R: ALIGNMENT / going crazy with gcc-2.7.2-sparc-sun-sunos-4.1.3 Date: Fri, 31 Dec 1999 22:24:00 -0000 Message-ID: <83g5km$5q8$1@nslave2.tin.it> References: <199912172346.PAA00844@java.agames.com> X-SW-Source: 1999-12n/msg00262.html Message-ID: <19991231222400.NEWKRcH_esVscXTm10O6nb6X-LFwLSYjRBq6_oXp3BE@z> mike, thanks for your reply. the reason for wanting this system to work is simple: i've a project written in ansi c that must run on a lot of machines, and i don't want to change a line of code, except for some "#ifdef" to add. the programs run on dec unix, hpux, aix, winnt, macos, irix and linux, and i've not that kind of problem. when i had it, i solved with compiler switches: for example, on hpux i used "cc +u1", and the problem disappeared. on sunos, i could use "cc -misalign", but unfortunately i can't use sunos cc because it's not fully ansi-compliant, and the only alternative compiler allowed to use is gcc (because it's free). i work for a firm that deals with satellite images, and there are a lot of computations to do on a lot of data, so the first target is: "make the fastest code, or lose the challenge". i've an array of data composed by an odd number (17, obviously!) of header bytes, and then the radiometry values. i need to access the radiometry as an array to pass to math library routines, and sincerely the last thing i would do is copying them in a separate array: this would solve the problems, but performance would suddenly tumble down. moreover, that machine is already slow... this loss of speed would make it unusable. finally, if i change the code this way, i would make modifications about everywhere in the project files, and then i would have to test the whole project on ALL the platforms that i wrote above. i think that there's a way to do it with gcc: native cc compiler does it, the same gcc has a "-m" switch for IBM platforms, there MUST be a way to do it on sunos 4! please help me, and reply in mailbox too. have a wonderful week-end. --- work like you don't need money love like you've never been hurt and dance like no one's watching original question was: > : how can i tell gcc to compile my programs using strict-alignment for data > : types? > : if i write smth like this: > : void *full_array = malloc(50); > : short *short_p = &(( (char*) full_array)[ N ]); > : printf("%hd\n",*short_p); > : if N is odd, i get a core dump! > : i'm using gcc 2.7.2 on an old sparc2 with SunOs 4.1.3, no way to upgrade the > : os or to get a newer build of gcc. > : i've searched in the doc., i've found -m switches regarding alignment for > : ibm machines, but none for sparc ones! > : i've also seen a SHORT_ALIGNMENT macro to be defined (gcc-info, "You can > : control compilation driver"), but i don't know WHERE to define it!