This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Miller, Carl wrote: >Dimitry Andric wrote: >> >> Caputo, Tim wrote: >> >> >I am having a problem with structures using the arm cross complier >> >I've built. Initially I noticed that my structures were not being >> >packed in memory. I realize now that this is meant to be efficient, >> >however, I need to share these structures with legacy code on >> >another processor and with specialty hardware that both expect/need >> >them to be packed. I tried the pragma route, the attribute route >> >and finally was successful packing my structures with the directive -fpack_struct. >> >> Don't do that. Read the gcc manual, and use __attribute__((packed)) >> instead. When I mentioned that I tried using __attribute__((packed)) I failed to say that I get a warning from gcc (version 3.4.5) that the 'packed' attribute is ignored. > > Another alternative is -mstructure-size-boundary={8,32}, depending on > the types of alignment issues you're having. Tagging all your struct > definitions with __attribute__((__packed__)) may solve a larger set of issues. > >> >Unfortunately this resulted the compiler being extremely >> >conservative in how it accessed elements of the struct. It now >> >reads one byte at a time from memory and reconstructs longwords in >> >registers (I assume it is worried about the whole structure being >> >unaligned in memory.) >> >> It is not "worried", arm processors just *require* you to do this >> dance. It depends on the specific cpu model how complicated the >> dance is. :) > > To get the minimum size dance required by your particular CPU, tell > GCC which architecture or which particular core it is with -march= or > -mcpu=. > > -----Carl I am have been using -mcpu-arm926ejs (straight out of the gcc manual). I understand that if the structures were actually unaligned that there were have to be multiple accesses from memory to retrieve the data. However, they are not and I am at a loss as to how to the compiler to understand that that is the case. As I mentioned earlier I have tried to explicitly align instances of the structure and the struct itself through attributes (per the manual) and have seen no difference. Lastly, I tried -mstructure-size-boundary and it is an "invalid option" in both 3.4.5 and 3.2 (I moved from 2.9.3 due to it inability to handle a long_call attribute for functions). Thanks, Tim -- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |