Solaris - BUS error with optimize mode


 
Thread Tools Search this Thread
Top Forums Programming Solaris - BUS error with optimize mode
# 1  
Old 05-08-2015
Solaris - BUS error with optimize mode

Hi,

I'm facing BUS (invalid address alignment) issue.

Application works correctly with binaries compiled without optimization.
When "-O3" (or -O2, O1) is in use, application abort with - BUS (invalid address alignment).

The problem appears in following situation:

Code:
struct _a
{
	int _a1;
	uint64_t _a2;
}

int f2(uint64_t *obj)
{
	printf("%llu", *obj); <--- BUS ERROR
	
	return 0;
}

void f1()
{
	...
	_a* obj_a = malloc();
	
	printf("%llu", obj_a->_a2); <--- OK
	f2(&obj_a->_a2);
}

Solaris Sparc
GCC 4.2.1

Thanks
# 2  
Old 05-08-2015
Is that really the entire code? Does it still cause that crash when minimized like that?
# 3  
Old 05-08-2015
Thanks form the reply.
No, it's just an example. It's a big system so it's hard to present problem detailed.

For some reason, when object from struct is passed by reference to function and we want to manipulate by pointer on this object it cause BUS error.

With test function with param "struct _a *obj" (so pointer to struct is passed) works correctly.

Code:
int f3(struct _a *obj)
{	
printf("%llu", obj->_a2); <--- OK	
return 0;
}

Like I wrote, without optimization works correctly.
# 4  
Old 05-08-2015
Optimization often causes subtle bugs from anything which uses undefined values -- things like pointing to a stack variable which went out of scope, overrunning the end of an array, etc. The crash can happen quite a distance from whatever caused it -- the corruption could've happened long ago. Code which happens to "just work" unoptimized may run far differently when the compiler starts removing in-between steps and squeezes out the empty spaces, letting things start bumping into each other.

So I'd start by logging the values fed into that function. They're probably getting corrupted somewhere. Then follow it backwards from there until you find out where the corruption is happening.
# 5  
Old 05-08-2015
Change

Code:
struct _a
{
    int _a1;
    uint64_t _a2;
}

to
Code:
struct _a
{
    uint64_t _a2;
    int _a1;
}

Note that I swapped the order of the fields in the structure.

By defining the structure with the smaller elements first, if the structure is packed tightly, as it likely is under optimization, you're likely violating an address restriction on the value when you pass it like that.
# 6  
Old 05-12-2015
It's unlikely that the compiler would build itself a data structure it cannot use...
# 7  
Old 05-12-2015
Quote:
Originally Posted by Corona688
It's unlikely that the compiler would build itself a data structure it cannot use...
GCC on SPARC?

Given that Sun's own compilers did it with an OS base utility - Solaris 10 mkfs - you'd better believe it's quite likely that GCC on SPARC will do it, too.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Solaris

Howto solve this disk error in Solaris in single user mode

Hi all, OS is Solaros 10 Sparc While doing Netbackup upgradation to 7.5 , the server was asked to reboot. But then it came up in single user mode, and after I typed format command it showed some disk error. bash-3.00# format Searching for disks...WARNING:... (2 Replies)
Discussion started by: manalisharmabe
2 Replies

2. Programming

Bus Error: 10...Help please!

Hi all, I am writing a phonebook program to store names and number using a list. Here is the code for the function which allows the user to enter the name and number (where the error occurs). //THIS FUNCTION ADDS A NEW ENTRY TO THE phonebook_list void insert(void){ //variables int... (5 Replies)
Discussion started by: kdejan
5 Replies

3. Programming

Bus error

Hi everyone, I have a GUI project and when I run it and left in idle state for a long time(there is nothing done, just opened GUI, no more actions),I get bus error after trying to do anything with it. I've tried to build it in debug mode and use gdb, but I don't get any error in debug mode.It... (3 Replies)
Discussion started by: sisi
3 Replies

4. HP-UX

Bus Error

I am getting bus error when i include "#!/bin/ksh". If i remove interpreter then script is working. Can anyone explain this and how can i avoid this error? Operating System is HP-UX B.11.23 U 9000/800 1091834454 (2 Replies)
Discussion started by: anbu23
2 Replies

5. UNIX for Dummies Questions & Answers

bus error (coredump)

Hi all, I am getting bus error problem in SunOS. Can you please help me out in this regard. Actually, my entire code till the last line has been executed. But after tht i am getting a bus error. Please help me. Thanks in advance. Charu. (4 Replies)
Discussion started by: charu
4 Replies

6. Solaris

split bus mode

Hi there, I have two SunBlade 2000s that I want to connect to a single D1000. I am told that I need to do a split bus mode. I don't really understand what that means. Does that mean that half of the storage disks will be assigned to one host and the others to the other host? How do I get... (18 Replies)
Discussion started by: Arkayev
18 Replies

7. Programming

BUS error

Hi! I've got a program which runs fine under Linux, but I have compiled it to run under SunOS 5.8 in a Sparc computer, and now it sometimes fails with "bus error". Ussing gdb I surfed to the error line, which is *pointer = some_vector; where some_vector is a 16 byte struct (4 integers)... (1 Reply)
Discussion started by: shesatmine
1 Replies

8. UNIX for Dummies Questions & Answers

bus error on solaris

Hi there I am running soalris 9 on a sun fire 480r and all of a sudden (today) whenever the users run the command `top` we get the following message `bus error` does anybody have any information on what this is all about and whether there is a routine i can perform to gather more... (3 Replies)
Discussion started by: hcclnoodles
3 Replies

9. UNIX for Dummies Questions & Answers

Bus Error

This may belong in the C Programming forum, but here goes anyway... What would cause a bus error? I searched google for a cause, but came up with some conflicting reports... Could it be caused by disk space? A lot of the pages I found mentioned linking with the incorrect versions of the... (4 Replies)
Discussion started by: LivinFree
4 Replies
Login or Register to Ask a Question