git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_2.6.x@6172 35acf78f-673a-0410-8e92-d51de3d6d3f4


git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_2.6.x@6179 35acf78f-673a-0410-8e92-d51de3d6d3f4
GCC/ARMCMx: Fix assembler routines

This adds required symbol attributes to _port_exit_from_isr,
fixes an unresolved reference to chThdExit, and prevents factual
problems related to incorrect usage of the naked function attribute.

NOTE: I've only fixed the v7m part, and only the STM32F4xx port.mk
GCC/ARMCMx: Fix startup code

Prevents ResetHandler from overwriting its own stack frame, and
fixes incorrect code generation due to invalid use of the naked
function attribute.
GCC/ARMCMx: Remove remaining instances of 'nekkid'

All those naked functions need to put some clothes on:

"The only statements that can be safely included in naked functions
are asm statements that do not have operands. All other statements,
including declarations of local variables, if statements, and so
forth, should be avoided. Naked functions should be used to
implement the body of an assembly function, while allowing the
compiler to construct the requisite function declaration for the
assembler."

See GCC docs.
I've seen that they're not joking about it being unsafe.

Also, displays of public nudity are illegal in most places.
STM32F4: Add STM32_USE_FLASH_PREFETCH option

Enabling flash prefetch results in increased ADC noise. See AN4073.
Lower ADC noise may be useful for some applications.

It's also not supported (causes problems) on STM32F4 rev. A.
See the errata (they actually mean the instruction prefetch queue,
not the prefetch queue instruction, which doesn't exist).

ST Standard Peripheral Library (yes, ick) does not enable prefetch.
GCC/ARMCMx: Add OPT to linker flags

The linker has to know the optimization settings for LTO.
See GCC docs for details.
GCC/ARMCMx: Add the used attribute to the interrupt vector table

Without the attribute, the linker may remove the vector table,
because it has no references.

This is the cause of the remaining LTO issues.
STM32 OTG: Disable OTG VBUS sensing
STM32 OTG: fix multipacket OUT transfers
STM32 OTG: fix multipacket EP0 IN transfers
STM32F4 clock init: don't assume regs have reset values
STM32 CAN: don't interrupt on every error
STM32: fix OTGv1 usb_lld_start