This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Sunday 06 May 2012 18:28:37 Carlos O'Donell wrote: > The ABI is comprised of two things: > > * The layout. > > * The size. the size matters to the ABI, if the ABI utilizes those structs. glibc doesn't use it anywhere, so i don't think it's accurate to describe this struct as being part of glibc's ABI. > Example 1: > ~~~ > ... > int tftp_send_ack(struct tftphdr *tftp_hdr, int block) i don't think this code is userspace code. especially considering they use sk_buffs. going by google, that's BIOS code. > Example 2: > ~~~ > ... > char data_out[SEGSIZE+sizeof(struct tftphdr)]; > char data_in[SEGSIZE+sizeof(struct tftphdr)]; > ... > static void > tftpd_write_file(struct tftphdr *hdr, > struct sockaddr_in *from_addr, int from_len) > { and this is from FreeRTOS/LWIP. examples that actually use the header would be tftp-hpa or netkit-tftp or atftp, and from grepping those source trees, their usage is as i described -- no one uses sizeof(). there is only one place where the struct is declared on the stack and that too is as i described -- it only uses it for the header structure and manually writes out 4 bytes (per the spec) to the network. > * Application allocates N-1 bytes because it's using the new struct > tfpthdr. * Library copies N bytes because it's using the old struct > tftphdr. * Library crashes because the Nth byte is not a valid location. yes, but i don't think that's a realistic use case as it doesn't make sense. the tftphdr struct is used to access the first 4 bytes only. everything after that is arbitrary. > You need to add padding to make the sizeof come out the same. i don't think we do. > >> > -#define th_block th_u.tu_block > >> > -#define th_code th_u.tu_code > >> > -#define th_stuff th_u.tu_stuff > >> > #define th_msg th_data > >> > >> Why do you remove the defines for th_block, th_code and th_stuff? > >> Isn't it possible that defines are used by userspace code? > > > > look at the struct -- i moved the names there > > You used anonymous structures and unions which are not valid ISO C90 > or C99 (though I *think* they are valid ISO C11). yes ... that's a trivial matter to address if it's something we care about. GCC says they're valid in ISO C11: http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html and certainly gcc itself has supported this for over a decade. not that we want to make our headers parsable only by gcc. -mike
Attachment:
signature.asc
Description: This is a digitally signed message part.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |