Date: Mon, 28 May 2007 00:05:02 -0700 From: Julian Elischer <julian@elischer.org> To: Hans Petter Selasky <hselasky@c2i.net> Cc: freebsd-current@freebsd.org, current@freebsd.org Subject: Re: vrp bitfield miscompilation (WAS: [Regression] snd_emu10k1 doesn't work after GCC 4.2 upgrade) Message-ID: <465A7F1E.5000109@elischer.org> In-Reply-To: <200705280857.12035.hselasky@c2i.net> References: <009501c79fdf$19e25880$1e00000a@hhp.local> <78664C02FF341B4FAC63E561846E3BCC0A1103@ex.hhp.local> <200705280857.12035.hselasky@c2i.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Hans Petter Selasky wrote: > On Monday 28 May 2007 08:22, Yuriy Tsibizov wrote: >>> -----Original Message----- >>> From: Yuriy Tsibizov >>> Sent: Sunday, May 27, 2007 1:42 AM >>> To: Yuriy Tsibizov; kabaev@gmail.com >>> Cc: current@freebsd.org >>> Subject: Re: [Regression] snd_emu10k1 doesn't work after GCC >>> 4.2 upgrade >>> >>> See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32100 >> Use of following variables _can_ be affected by above miscompilation >> (these are signed single-bit variables): >> >> amd64/amd64/mp_machdep.c: int cpu_present:1; >> amd64/amd64/mp_machdep.c: int cpu_bsp:1; >> amd64/amd64/mp_machdep.c: int cpu_disabled:1; >> dev/acpica/acpi_pci_link.c: int l_routed:1; >> dev/acpica/acpi_pci_link.c: int l_isa_irq:1; >> dev/sound/isa/ess.c: int type, duplex:1, newspeed:1; >> dev/sound/pci/emu10k1.c: int b16:1, stereo:1, busy:1, running:1, >> ismaster:1; >> dev/sound/pci/solo.c: int simplex_dir, type, duplex:1, >> newspeed:1, dmasz[2]; >> dev/puc/puc.c: int p_hasintr:1; >> dev/puc/puc_bfe.h: int sc_fastintr:1; >> dev/puc/puc_bfe.h: int sc_leaving:1; >> dev/puc/puc_bfe.h: int sc_polled:1; >> dev/rp/rpvar.h: int rp_rts_iflow:1; >> dev/rp/rpvar.h: int rp_disable_writes:1; >> dev/rp/rpvar.h: int rp_cts:1; >> dev/rp/rpvar.h: int rp_waiting:1; >> dev/rp/rpvar.h: int rp_xmit_stopped:1; >> dev/scc/scc_bfe.h: int m_attached:1; >> dev/scc/scc_bfe.h: int m_fastintr:1; >> dev/scc/scc_bfe.h: int m_hasintr:1; >> dev/scc/scc_bfe.h: int m_probed:1; >> dev/scc/scc_bfe.h: int m_sysdev:1; >> dev/scc/scc_bfe.h: int ch_enabled:1; >> dev/scc/scc_bfe.h: int ch_sysdev:1; >> dev/scc/scc_bfe.h: int sc_fastintr:1; >> dev/scc/scc_bfe.h: int sc_leaving:1; >> dev/scc/scc_bfe.h: int sc_polled:1; >> dev/uart/uart_bus.h: int sc_callout:1; /* This UART is >> opened for callout. */ >> dev/uart/uart_bus.h: int sc_fastintr:1; /* This UART >> uses fast interrupts. */ >> dev/uart/uart_bus.h: int sc_hwiflow:1; /* This UART has >> HW input flow ctl. */ >> dev/uart/uart_bus.h: int sc_hwoflow:1; /* This UART has >> HW output flow ctl. */ >> dev/uart/uart_bus.h: int sc_leaving:1; /* This UART is >> going away. */ >> dev/uart/uart_bus.h: int sc_opened:1; /* This UART is >> open for business. */ >> dev/uart/uart_bus.h: int sc_polled:1; /* This UART has >> no interrupts. */ >> dev/uart/uart_bus.h: int sc_txbusy:1; /* This UART is >> transmitting. */ >> fs/pseudofs/pseudofs_internal.h: int pvd_dead:1; >> geom/part/g_part.h: int gpe_created:1; /* Entry is >> newly created. */ >> geom/part/g_part.h: int gpe_deleted:1; /* Entry has >> been deleted. */ >> geom/part/g_part.h: int gpe_modified:1; /* Entry has >> been modified. */ >> geom/part/g_part.h: int gpt_isleaf:1; /* Cannot be >> sub-partitioned. */ >> geom/part/g_part.h: int gpt_created:1; /* Newly >> created. */ >> geom/part/g_part.h: int gpt_modified:1; /* Table changes >> have been made. */ >> geom/part/g_part.h: int gpt_opened:1; /* Permissions >> obtained. */ >> i386/i386/mp_machdep.c: int cpu_present:1; >> i386/i386/mp_machdep.c: int cpu_bsp:1; >> i386/i386/mp_machdep.c: int cpu_disabled:1; >> i386/include/npx.h: int fp_sgn:1; /* mantissa sign */ >> sparc64/pci/psycho.c: int apb:1; >> sparc64/pci/psycho.c: int ppb:1; >> >> I can't say that there _is_ a miscompilation related to all variables in >> this list. >> >> Should most of them (I'm not shure for fp_sign) be changed to unsigned >> int? With (signed) int these flags have values of (-1;0), with unsigned >> int they will use more obvious (0;1) values. >> >> >> Yuriy. > > Interesting find. Another issue: > > I've seen that the compile will round the memory size of a bit-fields down to > the nearest byte, if you turn on optimization. I think you should > use "uint8_t". My memory is that bitfields are only defined as parts of an 'int' in the standard and that using anything else is a gcc 'feature'. This is a 14 year old memory (from my SCSI days) so it may not be true now. > > --HPS > _______________________________________________ > freebsd-current@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?465A7F1E.5000109>