|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Deterministic xorshift32 rand()/srand() override. More...
#include <stdint.h>#include <stdlib.h>Go to the source code of this file.
Enumerations | |
| enum | xorshift32_param_t : uint32_t { k_xorshift_a = 13U , k_xorshift_b = 17U , k_xorshift_c = 5U } |
| Marsaglia xorshift32 shift constants. More... | |
| enum | ra8_rand_const_t : uint32_t { k_ra8_rand_default_seed = 0x9E3779B9UL } |
| Xorshift32 default seed: arbitrary non-zero constant per Marsaglia 2003. More... | |
Functions | |
| void | srand (unsigned int seed) |
| Strong override for newlib srand() – xorshift32 seed. | |
| int | rand (void) |
| Strong override for newlib rand() – xorshift32 step. | |
Variables | |
| static uint32_t | s_state = (uint32_t)k_ra8_rand_default_seed |
Deterministic xorshift32 rand()/srand() override.
Newlib's rand()/srand() heap-allocate per-thread state on first call, which trips the project's ra8_sbrk_trap (NASA Power of 10 Rule 3). NetX Duo and other vendor stacks call rand() for ISN/cookie/jitter generation, so we need a working rand() but cannot tolerate malloc.
This translation unit provides strong overrides for:
The implementation is a single xorshift32 state in BSS. It satisfies RAND_MAX (>= 32767) per ISO C and never returns the same sequence twice in a row from a non-zero seed. It is NOT cryptographically secure – callers needing CSPRNG must go through ra8_rsip TRNG.
Linker note: because newlib's rand/srand live in libc.a, the ld-evaluation order matters. As long as ra8_core/ is on the link line BEFORE -lc, our strong symbols win and newlib's heap path is never reached.
Definition in file ra8_rand_stub.c.
| enum ra8_rand_const_t : uint32_t |
Xorshift32 default seed: arbitrary non-zero constant per Marsaglia 2003.
| Enumerator | |
|---|---|
| k_ra8_rand_default_seed | RA8 rand default seed. |
Definition at line 43 of file ra8_rand_stub.c.
| enum xorshift32_param_t : uint32_t |
Marsaglia xorshift32 shift constants.
| Enumerator | |
|---|---|
| k_xorshift_a | x ^= x << 13. |
| k_xorshift_b | x ^= x >> 17. |
| k_xorshift_c | x ^= x << 5. |
Definition at line 36 of file ra8_rand_stub.c.
| int rand | ( | void | ) |
Strong override for newlib rand() – xorshift32 step.
Replaces newlib's heap-backed rand() with one xorshift32 advance. NOT cryptographically secure – callers needing a CSPRNG must go through ra8_rsip TRNG.
| 0..RAND_MAX | Next xorshift32 output. |
Definition at line 94 of file ra8_rand_stub.c.
References k_xorshift_a, k_xorshift_b, k_xorshift_c, and s_state.
| void srand | ( | unsigned int | seed | ) |
Strong override for newlib srand() – xorshift32 seed.
Replaces newlib's heap-backed srand() with a direct write to the xorshift32 state word. A zero seed is silently mapped to k_ra8_rand_default_seed to avoid xorshift's all-zero lockup state.
| [in] | seed | Initial state. Zero rewritten to default seed. |
Definition at line 68 of file ra8_rand_stub.c.
References k_ra8_rand_default_seed, and s_state.
|
static |
Definition at line 47 of file ra8_rand_stub.c.
Referenced by ble_hci_ra8_ble_deinit(), ble_hci_ra8_ble_init(), ble_transport_ll_init(), board_net_init(), board_net_report(), board_net_tick(), internal_acl_cb(), internal_apply_class_setup(), internal_apply_line_coding(), internal_block_read_finish(), internal_check_collision(), internal_clamp_emit(), internal_class_preflight(), internal_clear_if_owners(), internal_configure_pipes(), internal_configure_pipes(), internal_configure_pipes(), internal_configure_pipes(), internal_dcdc_enable_sequence(), internal_dispatch_acl(), internal_dispatch_class_setup(), internal_dispatch_event(), internal_do_bus_reset(), internal_do_bus_reset(), internal_do_bus_reset(), internal_do_bus_reset(), internal_do_bus_reset(), internal_do_get_cfg_desc(), internal_do_get_cfg_desc(), internal_do_get_cfg_desc(), internal_do_get_cfg_desc(), internal_do_get_cfg_desc(), internal_do_get_dev_desc(), internal_do_get_dev_desc(), internal_do_get_dev_desc(), internal_do_get_dev_desc(), internal_do_get_dev_desc(), internal_do_get_hub_desc(), internal_do_get_report_desc(), internal_do_get_string_mac(), internal_do_idle(), internal_do_idle(), internal_do_idle(), internal_do_idle(), internal_do_idle(), internal_do_set_address(), internal_do_set_address(), internal_do_set_address(), internal_do_set_address(), internal_do_set_address(), internal_do_set_config(), internal_do_set_config(), internal_do_set_config(), internal_do_set_config(), internal_do_set_config(), internal_do_set_filter(), internal_do_set_interface(), internal_do_set_interface(), internal_do_set_interface(), internal_do_set_interface(), internal_do_walk_desc(), internal_do_walk_desc(), internal_do_walk_desc(), internal_do_walk_desc(), internal_eth_event(), internal_event_cb(), internal_fill_slot(), internal_gt911_read(), internal_gt911_write_byte(), internal_handle_standard(), internal_lookup_class_for_if(), internal_mark_ownership(), internal_net_rx_arp(), internal_net_rx_icmp(), internal_net_rx_tcp(), internal_net_tcp_on_estab(), internal_ocp_from_dcdcctl(), internal_populate_device_defaults(), internal_port_ok(), internal_program_advertise(), internal_pull_data_stage(), internal_require_init(), internal_reset_and_wait(), internal_reset_and_wait(), internal_reset_eps(), internal_reset_shadow(), internal_reset_shadow(), internal_reset_shadow(), internal_reset_shadow(), internal_resolve_speed(), internal_ring_reset(), internal_route_class(), internal_rx_byte(), internal_setup_get_descriptor(), internal_setup_get_descriptor(), internal_setup_get_descriptor(), internal_setup_get_descriptor(), internal_setup_get_descriptor(), internal_setup_get_hub_descriptor(), internal_setup_get_report_descriptor(), internal_setup_set_address(), internal_setup_set_address(), internal_setup_set_address(), internal_setup_set_address(), internal_setup_set_address(), internal_setup_set_config(), internal_setup_set_config(), internal_setup_set_config(), internal_setup_set_config(), internal_setup_set_config(), internal_setup_set_interface(), internal_setup_set_interface(), internal_setup_set_interface(), internal_setup_set_interface_data(), internal_setup_set_packet_filter(), internal_stash_state(), internal_step_advance(), internal_step_advance(), internal_step_advance(), internal_step_advance(), internal_step_advance(), internal_thread_entry(), internal_tx_byte(), internal_usb_event(), internal_walk_config_descriptor(), internal_walk_config_descriptor(), internal_walk_config_descriptor(), internal_walk_config_descriptor(), ra8_ble_attach_acl_handler(), ra8_ble_attach_event_handler(), ra8_ble_close(), ra8_ble_dispatch(), ra8_ble_hci_send_acl_data(), ra8_ble_hci_send_command(), ra8_ble_open(), ra8_ble_scan_start(), ra8_ble_test_inject_rx(), ra8_ble_test_reset_capture(), ra8_ble_test_tx_capture(), ra8_devcfg_get_body(), ra8_devcfg_get_vcom_mv(), ra8_devcfg_is_blank(), ra8_devcfg_load(), ra8_devcfg_reset(), ra8_ether_phy_auto_negotiate_start(), ra8_ether_phy_close(), ra8_ether_phy_link_status_get(), ra8_ether_phy_mdio_read(), ra8_ether_phy_mdio_write(), ra8_ether_phy_open(), ra8_layer3_switch_close(), ra8_layer3_switch_open(), ra8_layer3_switch_route_add(), ra8_layer3_switch_route_delete(), ra8_layer3_switch_status_get(), ra8_net_pal_deinit(), ra8_net_pal_get_mac_addr(), ra8_net_pal_init(), ra8_net_pal_link_status(), ra8_net_pal_recv_frame(), ra8_net_pal_send_frame(), ra8_net_pal_set_event_handler(), ra8_net_pal_set_mac_addr(), ra8_psa_crypto_random(), ra8_reset_clear_cause(), ra8_reset_get_cause(), ra8_reset_get_raw(), ra8_reset_init(), ra8_reset_test_only_reset_state(), ra8_rmac_phy_auto_negotiate_start(), ra8_rmac_phy_close(), ra8_rmac_phy_link_status_get(), ra8_rmac_phy_lsi_get(), ra8_rmac_phy_mdio_read(), ra8_rmac_phy_mdio_write(), ra8_rmac_phy_open(), ra8_smbus_alert_dispatch(), ra8_smbus_alert_register_callback(), ra8_smbus_block_read(), ra8_smbus_block_write(), ra8_smbus_deinit(), ra8_smbus_init(), ra8_smbus_read_byte_data(), ra8_smbus_receive_byte(), ra8_smbus_send_byte(), ra8_smbus_write_byte_data(), ra8_touch_attach_handler(), ra8_touch_close(), ra8_touch_dispatch_irq(), ra8_touch_open(), ra8_touch_read(), ra8_usb_cdc_attach(), ra8_usb_cdc_deinit(), ra8_usb_cdc_get_line_coding(), ra8_usb_cdc_get_line_state(), ra8_usb_cdc_handle_setup(), ra8_usb_cdc_init(), ra8_usb_cdc_recv(), ra8_usb_cdc_send(), ra8_usb_composite_close(), ra8_usb_composite_dispatch_setup(), ra8_usb_composite_get_class_count(), ra8_usb_composite_get_config_descriptor(), ra8_usb_composite_get_device_descriptor(), ra8_usb_composite_init(), ra8_usb_composite_register_class(), ra8_usb_composite_set_descriptors(), ra8_usb_composite_step(), ra8_usb_haud_attach_callback(), ra8_usb_haud_close(), ra8_usb_haud_init(), ra8_usb_haud_recv_samples(), ra8_usb_haud_send_samples(), ra8_usb_haud_set_format(), ra8_usb_haud_set_mute(), ra8_usb_haud_set_volume(), ra8_usb_haud_step(), ra8_usb_hcdc_attach_callback(), ra8_usb_hcdc_close(), ra8_usb_hcdc_ecm_attach_callback(), ra8_usb_hcdc_ecm_close(), ra8_usb_hcdc_ecm_get_link_status(), ra8_usb_hcdc_ecm_init(), ra8_usb_hcdc_ecm_recv_frame(), ra8_usb_hcdc_ecm_send_frame(), ra8_usb_hcdc_ecm_set_packet_filter(), ra8_usb_hcdc_ecm_step(), ra8_usb_hcdc_init(), ra8_usb_hcdc_recv(), ra8_usb_hcdc_send(), ra8_usb_hcdc_set_line_coding(), ra8_usb_hcdc_step(), ra8_usb_hhid_attach_callback(), ra8_usb_hhid_close(), ra8_usb_hhid_get_input_report(), ra8_usb_hhid_get_report(), ra8_usb_hhid_init(), ra8_usb_hhid_set_idle(), ra8_usb_hhid_set_protocol(), ra8_usb_hhid_set_report(), ra8_usb_hhid_step(), ra8_usb_hhub_attach_callback(), ra8_usb_hhub_clear_port_feature(), ra8_usb_hhub_close(), ra8_usb_hhub_get_port_count(), ra8_usb_hhub_get_port_status(), ra8_usb_hhub_init(), ra8_usb_hhub_set_port_feature(), ra8_usb_hhub_step(), ra8_usb_pal_attach(), ra8_usb_pal_deinit(), ra8_usb_pal_ep_open(), ra8_usb_pal_ep_recv(), ra8_usb_pal_ep_send(), ra8_usb_pal_get_state(), ra8_usb_pal_init(), ra8_usb_pal_set_event_handler(), ra8_usb_paud_attach_setup_handler(), ra8_usb_paud_close(), ra8_usb_paud_get_format(), ra8_usb_paud_get_volume(), ra8_usb_paud_handle_setup(), ra8_usb_paud_init(), ra8_usb_paud_recv_frame(), ra8_usb_paud_send_frame(), ra8_usb_paud_set_descriptors(), ra8_usb_paud_set_format(), ra8_usb_paud_set_volume(), ra8_usb_phid_attach_setup_handler(), ra8_usb_phid_close(), ra8_usb_phid_get_idle(), ra8_usb_phid_get_protocol(), ra8_usb_phid_handle_setup(), ra8_usb_phid_init(), ra8_usb_phid_recv_report(), ra8_usb_phid_send_report(), ra8_usb_phid_set_descriptors(), ra8_usb_pprn_attach_setup_handler(), ra8_usb_pprn_close(), ra8_usb_pprn_get_port_status(), ra8_usb_pprn_handle_setup(), ra8_usb_pprn_init(), ra8_usb_pprn_recv(), ra8_usb_pprn_send(), ra8_usb_pprn_set_descriptors(), ra8_usb_pprn_set_port_status(), ra8_usb_pvnd_attach_setup_handler(), ra8_usb_pvnd_close(), ra8_usb_pvnd_handle_setup(), ra8_usb_pvnd_init(), ra8_usb_pvnd_recv(), ra8_usb_pvnd_send(), ra8_usb_pvnd_set_descriptors(), ra8_vreg_clear_status(), ra8_vreg_deinit(), ra8_vreg_enter_standby(), ra8_vreg_exit_standby(), ra8_vreg_init(), ra8_vreg_reset(), ra8_vreg_set_fast_startup(), ra8_vreg_set_ldo_boost(), ra8_vreg_set_lv_profile(), ra8_vreg_set_mode(), ra8_vreg_set_ocp(), ra8_vreg_set_vccsel(), ra8_wdt_supervisor_checkin(), ra8_wdt_supervisor_deinit(), ra8_wdt_supervisor_init(), ra8_wdt_supervisor_register_thread(), ra8_wdt_supervisor_set_now_hook(), ra8_wdt_supervisor_set_refresh_hook(), ra8_wdt_supervisor_start(), ra8_wdt_supervisor_thread_count(), ra8_wdt_supervisor_tick(), rand(), and srand().