English 中文(简体)
What alternatives to __attribute__ exist on 64-bit kernels?
原标题:
  • 时间:2010-04-02 13:35:20
  •  标签:
  • c
  • gcc
  • iso

Is there any alternative to non-ISO gcc specific extension __attribute__ on 64-bit kernels ?

Three types that i ve noticed are: function attributes, type attributes and variable attributes.

eg. i d like to avoid using __attribute__((__packed__)) for structures passed over the network, even though some gcc based code do use it.

Any suggestions or pointers on how to entirely avoid __attribute__ usage in C systems/kernel code ?

thanks Saifi.

问题回答

Any suggestions or pointers on how to entirely avoid attribute usage in C systems/kernel code?

You can build your network packets piece by piece, copying each data element into the correct place in a char* buffer.

Pros: you don t have any alignment issues and it s generally portable, especially if you use the exact-width integer types from <stdint.h>

Cons: it s tedious and potentially error-prone

I m assuming based on your comments that its your code you want to change, not the whole Linux kernel (etc).

Not sure about function attributes etc but specifically for attribute packed, I have done the following with no issues so far.

Basically instead of relying on the compiler to pack, you could use manual pad fields coupled with compile-time asserts.

struct foo {
   u32 field1;
   u16 field2;
   u16 pad; // manual padding
   // continue for other fields that the compiler would automatically pad for you with attribute packed
   u32 field3;
};

To check your structure you can use a compile time assert, something like this:

#define CASSERT(cond, name) typedef cassert__##name[cond ? 1 : -1]

CASSERT(offsetof(foo, field1) == 0, field1_wrong);
CASSERT(offsetof(foo, field2) == 4, field2_wrong);

When your assertions are wrong, the build will fail with a helpful error and line number





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签