compiler.h: add __weak macro

Instead of writing out '__attribute__((weak))' use a shorter form.

Change-Id: If418a1d55052780077febd2d8f2089021f414b91
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/25767
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Justin TerAvest <teravest@chromium.org>
diff --git a/src/arch/arm/stages.c b/src/arch/arm/stages.c
index 2beaacd..1fae886 100644
--- a/src/arch/arm/stages.c
+++ b/src/arch/arm/stages.c
@@ -26,11 +26,12 @@
 
 #include <arch/stages.h>
 #include <arch/cache.h>
+#include <compiler.h>
 
 /**
  * generic stage entry point. override this if board specific code is needed.
  */
-__attribute__((weak)) void stage_entry(void)
+__weak void stage_entry(void)
 {
 	main();
 }
diff --git a/src/arch/arm64/arm_tf.c b/src/arch/arm64/arm_tf.c
index 69e83c1..a172d42 100644
--- a/src/arch/arm64/arm_tf.c
+++ b/src/arch/arm64/arm_tf.c
@@ -21,6 +21,7 @@
 #include <assert.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <program_loading.h>
 
 /*
@@ -36,7 +37,7 @@
 static entry_point_info_t bl33_ep_info;
 static bl31_params_t bl31_params;
 
-void __attribute__((weak)) *soc_get_bl31_plat_params(bl31_params_t *params)
+void __weak *soc_get_bl31_plat_params(bl31_params_t *params)
 {
 	/* Default weak implementation. */
 	return NULL;
diff --git a/src/arch/arm64/boot.c b/src/arch/arm64/boot.c
index d498cd9..3804515 100644
--- a/src/arch/arm64/boot.c
+++ b/src/arch/arm64/boot.c
@@ -19,6 +19,7 @@
 #include <arch/transition.h>
 #include <arm_tf.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <program_loading.h>
 #include <rules.h>
@@ -78,7 +79,7 @@
 }
 
 /* Generic stage entry point. Can be overridden by board/SoC if needed. */
-__attribute__((weak)) void stage_entry(void)
+__weak void stage_entry(void)
 {
 	main();
 }
diff --git a/src/arch/arm64/transition.c b/src/arch/arm64/transition.c
index 9edc011..8c5beb0 100644
--- a/src/arch/arm64/transition.c
+++ b/src/arch/arm64/transition.c
@@ -17,6 +17,7 @@
 #include <arch/lib_helpers.h>
 #include <arch/transition.h>
 #include <assert.h>
+#include <compiler.h>
 #include <console/console.h>
 
 /* Litte-endian, No XN-forced, Instr cache disabled,
@@ -27,7 +28,7 @@
 		     SCTLR_CACHE_DISABLE | SCTLR_SAE_DISABLE | SCTLR_RES1 | \
 		     SCTLR_ICE_DISABLE | SCTLR_WXN_DISABLE | SCTLR_LITTLE_END)
 
-void __attribute__((weak)) exc_dispatch(struct exc_state *exc_state, uint64_t id)
+void __weak exc_dispatch(struct exc_state *exc_state, uint64_t id)
 {
 	/* Default weak implementation does nothing. */
 }
diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
index 601b6f0..3b4896b 100644
--- a/src/arch/x86/acpi.c
+++ b/src/arch/x86/acpi.c
@@ -44,6 +44,7 @@
 #include <arch/acpigen.h>
 #include <device/pci.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <cpu/x86/lapic_def.h>
 #include <cpu/cpu.h>
 #include <cbfs.h>
@@ -971,7 +972,7 @@
 }
 #endif
 
-unsigned long __attribute__((weak)) fw_cfg_acpi_tables(unsigned long start)
+unsigned long __weak fw_cfg_acpi_tables(unsigned long start)
 {
 	return 0;
 }
@@ -1238,7 +1239,7 @@
 		*gnvs = gnvs_address;
 }
 
-__attribute__((weak)) int acpi_get_gpe(int gpe)
+__weak int acpi_get_gpe(int gpe)
 {
 	return -1; /* implemented by SOC */
 }
diff --git a/src/arch/x86/acpi_s3.c b/src/arch/x86/acpi_s3.c
index bb8c3c5..f6ed108 100644
--- a/src/arch/x86/acpi_s3.c
+++ b/src/arch/x86/acpi_s3.c
@@ -17,6 +17,7 @@
 #include <string.h>
 #include <arch/acpi.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <cpu/cpu.h>
 #include <fallback.h>
 #include <timestamp.h>
@@ -218,7 +219,7 @@
 	acpi_do_wakeup((uintptr_t)vector, source, target, size);
 }
 
-void __attribute__((weak)) mainboard_suspend_resume(void)
+void __weak mainboard_suspend_resume(void)
 {
 }
 
diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c
index fc6cc66..10a4e1e 100644
--- a/src/arch/x86/acpigen.c
+++ b/src/arch/x86/acpigen.c
@@ -28,6 +28,7 @@
 #include <lib.h>
 #include <string.h>
 #include <arch/acpigen.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 
@@ -1504,28 +1505,28 @@
 
 
 /* Soc-implemented functions -- weak definitions. */
-int __attribute__((weak)) acpigen_soc_read_rx_gpio(unsigned int gpio_num)
+int __weak acpigen_soc_read_rx_gpio(unsigned int gpio_num)
 {
 	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
 	acpigen_write_debug_string("read_rx_gpio not available");
 	return -1;
 }
 
-int __attribute__((weak)) acpigen_soc_get_tx_gpio(unsigned int gpio_num)
+int __weak acpigen_soc_get_tx_gpio(unsigned int gpio_num)
 {
 	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
 	acpigen_write_debug_string("get_tx_gpio not available");
 	return -1;
 }
 
-int __attribute__((weak)) acpigen_soc_set_tx_gpio(unsigned int gpio_num)
+int __weak acpigen_soc_set_tx_gpio(unsigned int gpio_num)
 {
 	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
 	acpigen_write_debug_string("set_tx_gpio not available");
 	return -1;
 }
 
-int __attribute__((weak)) acpigen_soc_clear_tx_gpio(unsigned int gpio_num)
+int __weak acpigen_soc_clear_tx_gpio(unsigned int gpio_num)
 {
 	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
 	acpigen_write_debug_string("clear_tx_gpio not available");
diff --git a/src/arch/x86/cbmem.c b/src/arch/x86/cbmem.c
index 6a353bd..ef53553 100644
--- a/src/arch/x86/cbmem.c
+++ b/src/arch/x86/cbmem.c
@@ -14,17 +14,18 @@
 #include <stdlib.h>
 #include <console/console.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <arch/acpi.h>
 
 #if IS_ENABLED(CONFIG_LATE_CBMEM_INIT)
 
-void __attribute__((weak)) backup_top_of_low_cacheable(uintptr_t ramtop)
+void __weak backup_top_of_low_cacheable(uintptr_t ramtop)
 {
 	/* Do nothing. Chipset may have implementation to save ramtop in NVRAM.
 	 */
 }
 
-uintptr_t __attribute__((weak)) restore_top_of_low_cacheable(void)
+uintptr_t __weak restore_top_of_low_cacheable(void)
 {
 	return 0;
 }
@@ -43,7 +44,7 @@
 }
 
 /* Top of CBMEM is at highest usable DRAM address below 4GiB. */
-uintptr_t __attribute__((weak)) restore_cbmem_top(void)
+uintptr_t __weak restore_cbmem_top(void)
 {
 	if (IS_ENABLED(CONFIG_LATE_CBMEM_INIT) && ENV_ROMSTAGE)
 		if (!acpi_is_wakeup_s3())
diff --git a/src/arch/x86/mpspec.c b/src/arch/x86/mpspec.c
index d41abaf..05605ad 100644
--- a/src/arch/x86/mpspec.c
+++ b/src/arch/x86/mpspec.c
@@ -17,6 +17,7 @@
 #include <device/path.h>
 #include <device/pci_ids.h>
 #include <cpu/cpu.h>
+#include <compiler.h>
 #include <arch/smp/mpspec.h>
 #include <string.h>
 #include <arch/cpu.h>
@@ -523,7 +524,7 @@
 	return smp_next_mpe_entry(mc);
 }
 
-unsigned long __attribute__((weak)) write_smp_table(unsigned long addr)
+unsigned long __weak write_smp_table(unsigned long addr)
 {
 	struct drivers_generic_ioapic_config *ioapic_config;
 	struct mp_config_table *mc;
diff --git a/src/arch/x86/pirq_routing.c b/src/arch/x86/pirq_routing.c
index 892201e..96117fc 100644
--- a/src/arch/x86/pirq_routing.c
+++ b/src/arch/x86/pirq_routing.c
@@ -15,12 +15,13 @@
  * GNU General Public License for more details.
  */
 #include <console/console.h>
+#include <compiler.h>
 #include <arch/pirq_routing.h>
 #include <string.h>
 #include <device/pci.h>
 #include <arch/pirq_routing.h>
 
-void __attribute__((weak)) pirq_assign_irqs(const unsigned char pirq[CONFIG_MAX_PIRQ_LINKS])
+void __weak pirq_assign_irqs(const unsigned char pirq[CONFIG_MAX_PIRQ_LINKS])
 {
 }
 
diff --git a/src/arch/x86/postcar.c b/src/arch/x86/postcar.c
index 7b5be6e..6497b73 100644
--- a/src/arch/x86/postcar.c
+++ b/src/arch/x86/postcar.c
@@ -15,6 +15,7 @@
 
 #include <arch/cpu.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <main_decl.h>
 #include <program_loading.h>
@@ -24,7 +25,7 @@
  * Systems without a native coreboot cache-as-ram teardown may implement
  * this to use an alternate method.
  */
-__attribute__((weak)) void late_car_teardown(void) { /* do nothing */ }
+__weak void late_car_teardown(void) { /* do nothing */ }
 
 void main(void)
 {
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index bb4bc1a..25a41b5 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -19,6 +19,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <smbios.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <version.h>
 #include <device/device.h>
@@ -330,7 +331,7 @@
 	return t->length + smbios_string_table_len(t->eos);
 }
 
-const char *__attribute__((weak)) smbios_mainboard_bios_version(void)
+const char *__weak smbios_mainboard_bios_version(void)
 {
 	if (strlen(CONFIG_LOCALVERSION))
 		return CONFIG_LOCALVERSION;
@@ -397,53 +398,53 @@
 
 #if !IS_ENABLED(CONFIG_SMBIOS_PROVIDED_BY_MOBO)
 
-const char *__attribute__((weak)) smbios_mainboard_serial_number(void)
+const char *__weak smbios_mainboard_serial_number(void)
 {
 	return CONFIG_MAINBOARD_SERIAL_NUMBER;
 }
 
-const char *__attribute__((weak)) smbios_mainboard_version(void)
+const char *__weak smbios_mainboard_version(void)
 {
 	return CONFIG_MAINBOARD_VERSION;
 }
 
-const char *__attribute__((weak)) smbios_mainboard_manufacturer(void)
+const char *__weak smbios_mainboard_manufacturer(void)
 {
 	return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
 }
 
-const char *__attribute__((weak)) smbios_mainboard_product_name(void)
+const char *__weak smbios_mainboard_product_name(void)
 {
 	return CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME;
 }
 
-void __attribute__((weak)) smbios_mainboard_set_uuid(u8 *uuid)
+void __weak smbios_mainboard_set_uuid(u8 *uuid)
 {
 	/* leave all zero */
 }
 #endif
 
-const char *__attribute__((weak)) smbios_mainboard_asset_tag(void)
+const char *__weak smbios_mainboard_asset_tag(void)
 {
 	return "";
 }
 
-u8 __attribute__((weak)) smbios_mainboard_feature_flags(void)
+u8 __weak smbios_mainboard_feature_flags(void)
 {
 	return 0;
 }
 
-const char *__attribute__((weak)) smbios_mainboard_location_in_chassis(void)
+const char *__weak smbios_mainboard_location_in_chassis(void)
 {
 	return "";
 }
 
-smbios_board_type __attribute__((weak)) smbios_mainboard_board_type(void)
+smbios_board_type __weak smbios_mainboard_board_type(void)
 {
 	return SMBIOS_BOARD_TYPE_UNKNOWN;
 }
 
-const char *__attribute__((weak)) smbios_mainboard_sku(void)
+const char *__weak smbios_mainboard_sku(void)
 {
 	return "";
 }
diff --git a/src/arch/x86/timestamp.c b/src/arch/x86/timestamp.c
index 711c38e..b0aac9c 100644
--- a/src/arch/x86/timestamp.c
+++ b/src/arch/x86/timestamp.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <cpu/x86/tsc.h>
 #include <timestamp.h>
 
@@ -21,7 +22,7 @@
 	return rdtscll();
 }
 
-unsigned long __attribute__((weak)) tsc_freq_mhz(void)
+unsigned long __weak tsc_freq_mhz(void)
 {
 	/* Default to not knowing TSC frequency. cbmem will have to fallback
 	 * on trying to determine it in userspace. */
diff --git a/src/commonlib/storage/sdhci.c b/src/commonlib/storage/sdhci.c
index bac510e..a5508ee 100644
--- a/src/commonlib/storage/sdhci.c
+++ b/src/commonlib/storage/sdhci.c
@@ -23,6 +23,7 @@
 #include <commonlib/sd_mmc_ctrlr.h>
 #include <commonlib/sdhci.h>
 #include <commonlib/storage.h>
+#include <compiler.h>
 #include <delay.h>
 #include <endian.h>
 #include <halt.h>
@@ -38,7 +39,7 @@
 			|| (CONFIG_SDHCI_ADMA_IN_ROMSTAGE && ENV_ROMSTAGE) \
 			|| ENV_POSTCAR || ENV_RAMSTAGE)
 
-__attribute__((weak)) void *dma_malloc(size_t length_in_bytes)
+__weak void *dma_malloc(size_t length_in_bytes)
 {
 	return malloc(length_in_bytes);
 }
@@ -278,20 +279,20 @@
 	return CARD_COMM_ERR;
 }
 
-__attribute__((weak)) void sdhc_log_command(struct mmc_command *cmd)
+__weak void sdhc_log_command(struct mmc_command *cmd)
 {
 }
 
-__attribute__((weak)) void sdhc_log_command_issued(void)
+__weak void sdhc_log_command_issued(void)
 {
 }
 
-__attribute__((weak)) void sdhc_log_response(uint32_t entries,
+__weak void sdhc_log_response(uint32_t entries,
 	uint32_t *response)
 {
 }
 
-__attribute__((weak)) void sdhc_log_ret(int ret)
+__weak void sdhc_log_ret(int ret)
 {
 }
 
@@ -715,7 +716,7 @@
 	return 0;
 }
 
-__attribute__((weak)) void soc_sd_mmc_controller_quirks(struct sd_mmc_ctrlr
+__weak void soc_sd_mmc_controller_quirks(struct sd_mmc_ctrlr
 	*ctrlr)
 {
 }
diff --git a/src/console/die.c b/src/console/die.c
index 79babec..3f5ca45 100644
--- a/src/console/die.c
+++ b/src/console/die.c
@@ -15,6 +15,7 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <halt.h>
 
@@ -27,7 +28,7 @@
  * EC is capable of controlling LEDs or a buzzer the method can be overwritten
  * in EC directory instead.
  */
-__attribute__ ((weak)) void die_notify(void)
+__weak void die_notify(void)
 {
 }
 
diff --git a/src/console/post.c b/src/console/post.c
index e7e9147..1caa4b5 100644
--- a/src/console/post.c
+++ b/src/console/post.c
@@ -16,6 +16,7 @@
 
 #include <arch/io.h>
 #include <elog.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <pc80/mc146818rtc.h>
@@ -29,7 +30,7 @@
 /* Some mainboards have very nice features beyond just a simple display.
  * They can override this function.
  */
-void __attribute__((weak)) mainboard_post(uint8_t value)
+void __weak mainboard_post(uint8_t value)
 {
 }
 
diff --git a/src/cpu/intel/microcode/microcode.c b/src/cpu/intel/microcode/microcode.c
index 59c3b8a..272edb5 100644
--- a/src/cpu/intel/microcode/microcode.c
+++ b/src/cpu/intel/microcode/microcode.c
@@ -24,6 +24,7 @@
 #else
 #include <arch/cbfs.h>
 #endif
+#include <compiler.h>
 #include <cpu/cpu.h>
 #include <cpu/x86/msr.h>
 #include <cpu/intel/microcode.h>
@@ -209,7 +210,7 @@
 }
 
 #if ENV_RAMSTAGE
-__attribute__((weak)) int soc_skip_ucode_update(u32 currrent_patch_id,
+__weak int soc_skip_ucode_update(u32 currrent_patch_id,
 	u32 new_patch_id)
 {
 	return 0;
diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c
index fa5658e..d888e44 100644
--- a/src/cpu/x86/smm/smihandler.c
+++ b/src/cpu/x86/smm/smihandler.c
@@ -15,6 +15,7 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/cache.h>
 #include <cpu/x86/smm.h>
@@ -208,13 +209,13 @@
  * entries in the modules make sense. Without default implementations the
  * weak relocations w/o a symbol have a 0 address which is where the modules
  * are linked at. */
-int __attribute__((weak)) mainboard_io_trap_handler(int smif) { return 0; }
-void __attribute__((weak)) cpu_smi_handler(unsigned int node,
+int __weak mainboard_io_trap_handler(int smif) { return 0; }
+void __weak cpu_smi_handler(unsigned int node,
 	smm_state_save_area_t *state_save) {}
-void __attribute__((weak)) northbridge_smi_handler(unsigned int node,
+void __weak northbridge_smi_handler(unsigned int node,
 	smm_state_save_area_t *state_save) {}
-void __attribute__((weak)) southbridge_smi_handler(unsigned int node,
+void __weak southbridge_smi_handler(unsigned int node,
 	smm_state_save_area_t *state_save) {}
-void __attribute__((weak)) mainboard_smi_gpi(u32 gpi_sts) {}
-int __attribute__((weak)) mainboard_smi_apmc(u8 data) { return 0; }
-void __attribute__((weak)) mainboard_smi_sleep(u8 slp_typ) {}
+void __weak mainboard_smi_gpi(u32 gpi_sts) {}
+int __weak mainboard_smi_apmc(u8 data) { return 0; }
+void __weak mainboard_smi_sleep(u8 slp_typ) {}
diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c
index c622e45..c2001ec 100644
--- a/src/cpu/x86/smm/smm_module_handler.c
+++ b/src/cpu/x86/smm/smm_module_handler.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
 #include <rmodule.h>
@@ -182,10 +183,10 @@
  * entries in the modules make sense. Without default implementations the
  * weak relocations w/o a symbol have a 0 address which is where the modules
  * are linked at. */
-int __attribute__((weak)) mainboard_io_trap_handler(int smif) { return 0; }
-void __attribute__((weak)) cpu_smi_handler(void) {}
-void __attribute__((weak)) northbridge_smi_handler() {}
-void __attribute__((weak)) southbridge_smi_handler() {}
-void __attribute__((weak)) mainboard_smi_gpi(u32 gpi_sts) {}
-int __attribute__((weak)) mainboard_smi_apmc(u8 data) { return 0; }
-void __attribute__((weak)) mainboard_smi_sleep(u8 slp_typ) {}
+int __weak mainboard_io_trap_handler(int smif) { return 0; }
+void __weak cpu_smi_handler(void) {}
+void __weak northbridge_smi_handler() {}
+void __weak southbridge_smi_handler() {}
+void __weak mainboard_smi_gpi(u32 gpi_sts) {}
+int __weak mainboard_smi_apmc(u8 data) { return 0; }
+void __weak mainboard_smi_sleep(u8 slp_typ) {}
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c
index 15b0c4c..299f7c8 100644
--- a/src/device/pci_rom.c
+++ b/src/device/pci_rom.c
@@ -19,6 +19,7 @@
 
 #include <console/console.h>
 #include <commonlib/endian.h>
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -29,7 +30,7 @@
 #include <arch/acpigen.h>
 
 /* Rmodules don't like weak symbols. */
-u32 __attribute__((weak)) map_oprom_vendev(u32 vendev) { return vendev; }
+u32 __weak map_oprom_vendev(u32 vendev) { return vendev; }
 
 struct rom_header *pci_rom_probe(struct device *dev)
 {
diff --git a/src/drivers/amd/agesa/romstage.c b/src/drivers/amd/agesa/romstage.c
index bd502b6..197a007 100644
--- a/src/drivers/amd/agesa/romstage.c
+++ b/src/drivers/amd/agesa/romstage.c
@@ -18,6 +18,7 @@
 #include <cbmem.h>
 #include <cpu/amd/car.h>
 #include <cpu/x86/bist.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <halt.h>
 #include <program_loading.h>
@@ -43,7 +44,7 @@
 	amd_initmmio();
 }
 
-void __attribute__((weak)) platform_once(struct sysinfo *cb)
+void __weak platform_once(struct sysinfo *cb)
 {
 	board_BeforeAgesa(cb);
 }
diff --git a/src/drivers/amd/agesa/state_machine.c b/src/drivers/amd/agesa/state_machine.c
index fdd2e6e..b73c124 100644
--- a/src/drivers/amd/agesa/state_machine.c
+++ b/src/drivers/amd/agesa/state_machine.c
@@ -21,6 +21,7 @@
 #include <bootstate.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 
 #include <northbridge/amd/agesa/state_machine.h>
 #include <northbridge/amd/agesa/agesa_helper.h>
@@ -374,24 +375,24 @@
 #endif /* ENV_RAMSTAGE */
 
 /* Empty stubs for cases board does not need to override anything. */
-void __attribute__((weak))
+void __weak
 board_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset) { }
-void __attribute__((weak))
+void __weak
 board_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early) { }
-void __attribute__((weak))
+void __weak
 board_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post) { }
-void __attribute__((weak))
+void __weak
 board_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env) { }
-void __attribute__((weak))
+void __weak
 board_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid) { }
 
-AGESA_STATUS __attribute__((weak))
+AGESA_STATUS __weak
 fchs3earlyrestore(AMD_CONFIG_PARAMS *StdHeader)
 {
 	return AGESA_SUCCESS;
 }
 
-AGESA_STATUS __attribute__((weak))
+AGESA_STATUS __weak
 fchs3laterestore(AMD_CONFIG_PARAMS *StdHeader)
 {
 	return AGESA_SUCCESS;
diff --git a/src/drivers/elog/gsmi.c b/src/drivers/elog/gsmi.c
index 42bfd0f..cced4a1 100644
--- a/src/drivers/elog/gsmi.c
+++ b/src/drivers/elog/gsmi.c
@@ -15,6 +15,7 @@
 
 #include <compiler.h>
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
 #include <elog.h>
@@ -48,12 +49,12 @@
 	u32 data_type;
 } __packed;
 
-void __attribute__((weak)) elog_gsmi_cb_platform_log_wake_source(void)
+void __weak elog_gsmi_cb_platform_log_wake_source(void)
 {
 	/* Default weak implementation, does nothing. */
 }
 
-void __attribute__((weak)) elog_gsmi_cb_mainboard_log_wake_source(void)
+void __weak elog_gsmi_cb_mainboard_log_wake_source(void)
 {
 	/* Default weak implementation, does nothing. */
 }
diff --git a/src/drivers/i2c/tpm/cr50.c b/src/drivers/i2c/tpm/cr50.c
index 96e0037..3c2f5bd 100644
--- a/src/drivers/i2c/tpm/cr50.c
+++ b/src/drivers/i2c/tpm/cr50.c
@@ -31,6 +31,7 @@
 
 #include <arch/early_variables.h>
 #include <commonlib/endian.h>
+#include <compiler.h>
 #include <stdint.h>
 #include <string.h>
 #include <types.h>
@@ -58,7 +59,7 @@
 
 static struct tpm_inf_dev g_tpm_dev CAR_GLOBAL;
 
-__attribute__((weak)) int tis_plat_irq_status(void)
+__weak int tis_plat_irq_status(void)
 {
 	static int warning_displayed CAR_GLOBAL;
 
diff --git a/src/drivers/intel/fsp1_1/car.c b/src/drivers/intel/fsp1_1/car.c
index e1a9b9d..686a4c8 100644
--- a/src/drivers/intel/fsp1_1/car.c
+++ b/src/drivers/intel/fsp1_1/car.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/early_variables.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/car.h>
 #include <fsp/util.h>
@@ -100,18 +101,18 @@
 	after_cache_as_ram_stage();
 }
 
-void __attribute__((weak)) car_mainboard_pre_console_init(void)
+void __weak car_mainboard_pre_console_init(void)
 {
 }
 
-void __attribute__((weak)) car_soc_pre_console_init(void)
+void __weak car_soc_pre_console_init(void)
 {
 }
 
-void __attribute__((weak)) car_mainboard_post_console_init(void)
+void __weak car_mainboard_post_console_init(void)
 {
 }
 
-void __attribute__((weak)) car_soc_post_console_init(void)
+void __weak car_soc_post_console_init(void)
 {
 }
diff --git a/src/drivers/intel/fsp1_1/raminit.c b/src/drivers/intel/fsp1_1/raminit.c
index 2bdac0a..e5714ae 100644
--- a/src/drivers/intel/fsp1_1/raminit.c
+++ b/src/drivers/intel/fsp1_1/raminit.c
@@ -15,6 +15,7 @@
 
 #include <arch/acpi.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/memmap.h>
 #include <fsp/romstage.h>
@@ -296,7 +297,7 @@
 }
 
 /* Initialize the UPD parameters for MemoryInit */
-__attribute__((weak)) void mainboard_memory_init_params(
+__weak void mainboard_memory_init_params(
 	struct romstage_params *params,
 	MEMORY_INIT_UPD *upd_ptr)
 {
@@ -304,7 +305,7 @@
 }
 
 /* Display the UPD parameters for MemoryInit */
-__attribute__((weak)) void soc_display_memory_init_params(
+__weak void soc_display_memory_init_params(
 	const MEMORY_INIT_UPD *old, MEMORY_INIT_UPD *new)
 {
 	printk(BIOS_SPEW, "UPD values for MemoryInit:\n");
@@ -312,7 +313,7 @@
 }
 
 /* Initialize the UPD parameters for MemoryInit */
-__attribute__((weak)) void soc_memory_init_params(
+__weak void soc_memory_init_params(
 	struct romstage_params *params,
 	MEMORY_INIT_UPD *upd)
 {
diff --git a/src/drivers/intel/fsp1_1/ramstage.c b/src/drivers/intel/fsp1_1/ramstage.c
index 563a030..a4609df 100644
--- a/src/drivers/intel/fsp1_1/ramstage.c
+++ b/src/drivers/intel/fsp1_1/ramstage.c
@@ -18,6 +18,7 @@
 #include <arch/acpi.h>
 #include <cbmem.h>
 #include <cbfs.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/memmap.h>
 #include <fsp/ramstage.h>
@@ -28,7 +29,7 @@
 #include <timestamp.h>
 
 /* SOC initialization after FSP silicon init */
-__attribute__((weak)) void soc_after_silicon_init(void)
+__weak void soc_after_silicon_init(void)
 {
 }
 
@@ -215,13 +216,13 @@
 }
 
 /* Initialize the UPD parameters for SiliconInit */
-__attribute__((weak)) void mainboard_silicon_init_params(
+__weak void mainboard_silicon_init_params(
 	SILICON_INIT_UPD *params)
 {
 };
 
 /* Display the UPD parameters for SiliconInit */
-__attribute__((weak)) void soc_display_silicon_init_params(
+__weak void soc_display_silicon_init_params(
 	const SILICON_INIT_UPD *old, SILICON_INIT_UPD *new)
 {
 	printk(BIOS_SPEW, "UPD values for SiliconInit:\n");
@@ -229,6 +230,6 @@
 }
 
 /* Initialize the UPD parameters for SiliconInit */
-__attribute__((weak)) void soc_silicon_init_params(SILICON_INIT_UPD *params)
+__weak void soc_silicon_init_params(SILICON_INIT_UPD *params)
 {
 }
diff --git a/src/drivers/intel/fsp1_1/romstage.c b/src/drivers/intel/fsp1_1/romstage.c
index 88401f0..ba08cdc 100644
--- a/src/drivers/intel/fsp1_1/romstage.c
+++ b/src/drivers/intel/fsp1_1/romstage.c
@@ -20,6 +20,7 @@
 #include <arch/cbfs.h>
 #include <arch/early_variables.h>
 #include <assert.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cbmem.h>
 #include <cpu/intel/microcode.h>
@@ -185,13 +186,13 @@
 }
 
 /* Initialize the power state */
-__attribute__((weak)) struct chipset_power_state *fill_power_state(void)
+__weak struct chipset_power_state *fill_power_state(void)
 {
 	return NULL;
 }
 
 /* Board initialization before and after RAM is enabled */
-__attribute__((weak)) void mainboard_romstage_entry(
+__weak void mainboard_romstage_entry(
 	struct romstage_params *params)
 {
 	post_code(0x31);
@@ -201,7 +202,7 @@
 }
 
 /* Save the DIMM information for SMBIOS table 17 */
-__attribute__((weak)) void mainboard_save_dimm_info(
+__weak void mainboard_save_dimm_info(
 	struct romstage_params *params)
 {
 	int channel;
@@ -330,7 +331,7 @@
 }
 
 /* Add any mainboard specific information */
-__attribute__((weak)) void mainboard_add_dimm_info(
+__weak void mainboard_add_dimm_info(
 	struct romstage_params *params,
 	struct memory_info *mem_info,
 	int channel, int dimm, int index)
@@ -338,44 +339,44 @@
 }
 
 /* Get the memory configuration data */
-__attribute__((weak)) int mrc_cache_get_current(int type, uint32_t version,
+__weak int mrc_cache_get_current(int type, uint32_t version,
 				struct region_device *rdev)
 {
 	return -1;
 }
 
 /* Save the memory configuration data */
-__attribute__((weak)) int mrc_cache_stash_data(int type, uint32_t version,
+__weak int mrc_cache_stash_data(int type, uint32_t version,
 					const void *data, size_t size)
 {
 	return -1;
 }
 
 /* Transition RAM from off or self-refresh to active */
-__attribute__((weak)) void raminit(struct romstage_params *params)
+__weak void raminit(struct romstage_params *params)
 {
 	post_code(0x34);
 	die("ERROR - No RAM initialization specified!\n");
 }
 
 /* Display the memory configuration */
-__attribute__((weak)) void report_memory_config(void)
+__weak void report_memory_config(void)
 {
 }
 
 /* Choose top of stack and setup MTRRs */
-__attribute__((weak)) void *setup_stack_and_mtrrs(void)
+__weak void *setup_stack_and_mtrrs(void)
 {
 	die("ERROR - Must specify top of stack!\n");
 	return NULL;
 }
 
 /* SOC initialization after RAM is enabled */
-__attribute__((weak)) void soc_after_ram_init(struct romstage_params *params)
+__weak void soc_after_ram_init(struct romstage_params *params)
 {
 }
 
 /* SOC initialization before RAM is enabled */
-__attribute__((weak)) void soc_pre_ram_init(struct romstage_params *params)
+__weak void soc_pre_ram_init(struct romstage_params *params)
 {
 }
diff --git a/src/drivers/intel/fsp2_0/graphics.c b/src/drivers/intel/fsp2_0/graphics.c
index f1219ea..ae1442e 100644
--- a/src/drivers/intel/fsp2_0/graphics.c
+++ b/src/drivers/intel/fsp2_0/graphics.c
@@ -124,7 +124,7 @@
 	return 0;
 }
 
-__attribute__((weak)) uintptr_t fsp_soc_get_igd_bar(void)
+__weak uintptr_t fsp_soc_get_igd_bar(void)
 {
 	return 0;
 }
diff --git a/src/drivers/intel/fsp2_0/hob_display.c b/src/drivers/intel/fsp2_0/hob_display.c
index d9838e9..977facb 100644
--- a/src/drivers/intel/fsp2_0/hob_display.c
+++ b/src/drivers/intel/fsp2_0/hob_display.c
@@ -157,7 +157,7 @@
 	return "Unknown GUID";
 }
 
-__attribute__((weak)) const char *soc_get_hob_type_name(
+__weak const char *soc_get_hob_type_name(
 	const struct hob_header *hob)
 {
 	return NULL;
@@ -173,7 +173,7 @@
 	printk(BIOS_SPEW, ": %s\n", fsp_get_guid_name(res->owner_guid));
 }
 
-__attribute__((weak)) const char *soc_get_guid_name(const uint8_t *guid)
+__weak const char *soc_get_guid_name(const uint8_t *guid)
 {
 	return NULL;
 }
@@ -212,6 +212,6 @@
 	}
 }
 
-__attribute__((weak)) void soc_display_hob(const struct hob_header *hob)
+__weak void soc_display_hob(const struct hob_header *hob)
 {
 }
diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c
index 0abe121..30987ce 100644
--- a/src/drivers/intel/fsp2_0/memory_init.c
+++ b/src/drivers/intel/fsp2_0/memory_init.c
@@ -307,13 +307,13 @@
 	return CB_SUCCESS;
 }
 
-__attribute__((weak))
+__weak
 uint8_t fsp_memory_mainboard_version(void)
 {
 	return 0;
 }
 
-__attribute__((weak))
+__weak
 uint8_t fsp_memory_soc_version(void)
 {
 	return 0;
diff --git a/src/drivers/intel/fsp2_0/notify.c b/src/drivers/intel/fsp2_0/notify.c
index 34a4262..6d6d623 100644
--- a/src/drivers/intel/fsp2_0/notify.c
+++ b/src/drivers/intel/fsp2_0/notify.c
@@ -12,6 +12,7 @@
 
 #include <arch/cpu.h>
 #include <bootstate.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/util.h>
 #include <soc/intel/common/util.h>
@@ -87,7 +88,7 @@
 BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, fsp_notify_dummy,
 						(void *) READY_TO_BOOT);
 
-__attribute__((weak)) void platform_fsp_notify_status(
+__weak void platform_fsp_notify_status(
 	enum fsp_notify_phase phase)
 {
 }
diff --git a/src/drivers/intel/fsp2_0/upd_display.c b/src/drivers/intel/fsp2_0/upd_display.c
index 8df4865..415505e 100644
--- a/src/drivers/intel/fsp2_0/upd_display.c
+++ b/src/drivers/intel/fsp2_0/upd_display.c
@@ -10,6 +10,7 @@
  */
 
 #include <arch/cpu.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/util.h>
 #include <lib.h>
@@ -50,7 +51,7 @@
 }
 
 /* Display the UPD parameters for MemoryInit */
-__attribute__((weak)) void soc_display_fspm_upd_params(
+__weak void soc_display_fspm_upd_params(
 	const FSPM_UPD *fspm_old_upd,
 	const FSPM_UPD *fspm_new_upd)
 {
@@ -67,7 +68,7 @@
 }
 
 /* Display the UPD parameters for SiliconInit */
-__attribute__((weak)) void soc_display_fsps_upd_params(
+__weak void soc_display_fsps_upd_params(
 	const FSPS_UPD *fsps_old_upd,
 	const FSPS_UPD *fsps_new_upd)
 {
diff --git a/src/drivers/intel/wifi/wifi.c b/src/drivers/intel/wifi/wifi.c
index 57bd9b0..1cf89cf 100644
--- a/src/drivers/intel/wifi/wifi.c
+++ b/src/drivers/intel/wifi/wifi.c
@@ -64,7 +64,7 @@
 }
 #endif
 
-__attribute__((weak))
+__weak
 int get_wifi_sar_limits(struct wifi_sar_limits *sar_limits)
 {
 	return -1;
diff --git a/src/drivers/spi/spi-generic.c b/src/drivers/spi/spi-generic.c
index 6d7fcdc..f1b11ae 100644
--- a/src/drivers/spi/spi-generic.c
+++ b/src/drivers/spi/spi-generic.c
@@ -15,6 +15,7 @@
  */
 
 #include <assert.h>
+#include <compiler.h>
 #include <spi-generic.h>
 #include <string.h>
 
@@ -116,7 +117,7 @@
 	return min(ctrlr_max, buf_len);
 }
 
-void __attribute__((weak)) spi_init(void)
+void __weak spi_init(void)
 {
 	/* Default weak implementation - do nothing. */
 }
diff --git a/src/drivers/spi/tpm/tpm.c b/src/drivers/spi/tpm/tpm.c
index c0fee46..3206ba1 100644
--- a/src/drivers/spi/tpm/tpm.c
+++ b/src/drivers/spi/tpm/tpm.c
@@ -17,6 +17,7 @@
 
 #include <arch/early_variables.h>
 #include <assert.h>
+#include <compiler.h>
 #include <commonlib/endian.h>
 #include <console/console.h>
 #include <delay.h>
@@ -64,7 +65,7 @@
 	*info = car_get_var(g_tpm_info);
 }
 
-__attribute__((weak)) int tis_plat_irq_status(void)
+__weak int tis_plat_irq_status(void)
 {
 	static int warning_displayed CAR_GLOBAL;
 
diff --git a/src/ec/google/chromeec/crosec_proto.c b/src/ec/google/chromeec/crosec_proto.c
index a63cfad..1a8ffb9 100644
--- a/src/ec/google/chromeec/crosec_proto.c
+++ b/src/ec/google/chromeec/crosec_proto.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <stdint.h>
@@ -23,7 +24,7 @@
 #include "ec_message.h"
 
 /* Common utilities */
-void * __attribute__((weak)) crosec_get_buffer(size_t size, int req)
+void * __weak crosec_get_buffer(size_t size, int req)
 {
 	printk(BIOS_DEBUG, "crosec_get_buffer() implementation required.\n");
 	return NULL;
diff --git a/src/include/compiler.h b/src/include/compiler.h
index a830239..e088eb1 100644
--- a/src/include/compiler.h
+++ b/src/include/compiler.h
@@ -25,5 +25,6 @@
 #define __aligned(x) __attribute__((aligned(x)))
 #define __always_unused __attribute__((unused))
 #define __must_check __attribute__((warn_unused_result))
+#define __weak __attribute__((weak))
 
 #endif
diff --git a/src/lib/boot_device.c b/src/lib/boot_device.c
index e7968f4..c5afce7 100644
--- a/src/lib/boot_device.c
+++ b/src/lib/boot_device.c
@@ -14,8 +14,9 @@
  */
 
 #include <boot_device.h>
+#include <compiler.h>
 
-void __attribute__((weak)) boot_device_init(void)
+void __weak boot_device_init(void)
 {
 	/* Provide weak do-nothing init. */
 }
diff --git a/src/lib/bootblock.c b/src/lib/bootblock.c
index 2e228c6..bee2845 100644
--- a/src/lib/bootblock.c
+++ b/src/lib/bootblock.c
@@ -16,6 +16,7 @@
 
 #include <arch/exception.h>
 #include <bootblock_common.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <pc80/mc146818rtc.h>
@@ -25,10 +26,10 @@
 
 DECLARE_OPTIONAL_REGION(timestamp);
 
-__attribute__((weak)) void bootblock_mainboard_early_init(void) { /* no-op */ }
-__attribute__((weak)) void bootblock_soc_early_init(void) { /* do nothing */ }
-__attribute__((weak)) void bootblock_soc_init(void) { /* do nothing */ }
-__attribute__((weak)) void bootblock_mainboard_init(void) { /* do nothing */ }
+__weak void bootblock_mainboard_early_init(void) { /* no-op */ }
+__weak void bootblock_soc_early_init(void) { /* do nothing */ }
+__weak void bootblock_soc_init(void) { /* do nothing */ }
+__weak void bootblock_mainboard_init(void) { /* do nothing */ }
 
 asmlinkage void bootblock_main_with_timestamp(uint64_t base_timestamp)
 {
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index 9e81bd3..2dcd429 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -20,6 +20,7 @@
 #include <boot_device.h>
 #include <cbfs.h>
 #include <commonlib/compression.h>
+#include <compiler.h>
 #include <endian.h>
 #include <lib.h>
 #include <symbols.h>
@@ -308,7 +309,7 @@
 /* This struct is marked as weak to allow a particular platform to
  * override the master header logic. This implementation should work for most
  * devices. */
-const struct cbfs_locator __attribute__((weak)) cbfs_master_header_locator = {
+const struct cbfs_locator __weak cbfs_master_header_locator = {
 	.name = "Master Header Locator",
 	.locate = cbfs_master_header_props,
 };
diff --git a/src/lib/cbmem_common.c b/src/lib/cbmem_common.c
index 166ec87..2451fca 100644
--- a/src/lib/cbmem_common.c
+++ b/src/lib/cbmem_common.c
@@ -14,6 +14,7 @@
  */
 #include <console/console.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <bootstate.h>
 #include <rules.h>
 #include <symbols.h>
@@ -37,7 +38,7 @@
 	}
 }
 
-void __attribute__((weak)) cbmem_fail_resume(void)
+void __weak cbmem_fail_resume(void)
 {
 }
 
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index e786443..2970215 100644
--- a/src/lib/coreboot_table.c
+++ b/src/lib/coreboot_table.c
@@ -16,6 +16,7 @@
  */
 
 #include <arch/cbconfig.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <console/uart.h>
 #include <ip_checksum.h>
@@ -244,9 +245,9 @@
 #endif /* CONFIG_VBOOT */
 #endif /* CONFIG_CHROMEOS */
 
-__attribute__((weak)) uint32_t board_id(void) { return UNDEFINED_STRAPPING_ID; }
-__attribute__((weak)) uint32_t ram_code(void) { return UNDEFINED_STRAPPING_ID; }
-__attribute__((weak)) uint32_t sku_id(void) { return UNDEFINED_STRAPPING_ID; }
+__weak uint32_t board_id(void) { return UNDEFINED_STRAPPING_ID; }
+__weak uint32_t ram_code(void) { return UNDEFINED_STRAPPING_ID; }
+__weak uint32_t sku_id(void) { return UNDEFINED_STRAPPING_ID; }
 
 static void lb_board_id(struct lb_header *header)
 {
@@ -441,7 +442,7 @@
 	rec->timestamp = coreboot_version_timestamp;
 }
 
-void __attribute__((weak)) lb_board(struct lb_header *header) { /* NOOP */ }
+void __weak lb_board(struct lb_header *header) { /* NOOP */ }
 
 /*
  * It's possible that the system is using a SPI flash as the boot device,
@@ -449,7 +450,7 @@
  * case don't provide any information as the correct information is
  * not known.
  */
-void __attribute__((weak)) lb_spi_flash(struct lb_header *header) { /* NOOP */ }
+void __weak lb_spi_flash(struct lb_header *header) { /* NOOP */ }
 
 static struct lb_forward *lb_forward(struct lb_header *header,
 	struct lb_header *next_header)
diff --git a/src/lib/fallback_boot.c b/src/lib/fallback_boot.c
index 443f209..a079910 100644
--- a/src/lib/fallback_boot.c
+++ b/src/lib/fallback_boot.c
@@ -1,8 +1,9 @@
 #include <fallback.h>
+#include <compiler.h>
 #include <watchdog.h>
 
 /* Implement platform specific override. */
-void __attribute__((weak)) set_boot_successful(void) { }
+void __weak set_boot_successful(void) { }
 
 void boot_successful(void)
 {
diff --git a/src/lib/gpio.c b/src/lib/gpio.c
index 48db262..b52d7b0 100644
--- a/src/lib/gpio.c
+++ b/src/lib/gpio.c
@@ -15,6 +15,7 @@
 
 #include <assert.h>
 #include <base3.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <gpio.h>
@@ -168,13 +169,13 @@
 }
 
 /* Default handler for ACPI path is to return NULL */
-__attribute__((weak)) const char *gpio_acpi_path(gpio_t gpio)
+__weak const char *gpio_acpi_path(gpio_t gpio)
 {
 	return NULL;
 }
 
 /* Default handler returns 0 because type of gpio_t is unknown */
-__attribute__((weak)) uint16_t gpio_acpi_pin(gpio_t gpio)
+__weak uint16_t gpio_acpi_pin(gpio_t gpio)
 {
 	return 0;
 }
diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c
index 0deab4b..6fd55d7 100644
--- a/src/lib/hardwaremain.c
+++ b/src/lib/hardwaremain.c
@@ -21,6 +21,7 @@
 #include <adainit.h>
 #include <arch/exception.h>
 #include <bootstate.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <console/post_codes.h>
 #include <cbmem.h>
@@ -115,7 +116,7 @@
 	BS_INIT_ENTRY(BS_PAYLOAD_BOOT, bs_payload_boot),
 };
 
-void __attribute__((weak)) arch_bootstate_coreboot_exit(void) { }
+void __weak arch_bootstate_coreboot_exit(void) { }
 
 static boot_state_t bs_pre_device(void *arg)
 {
diff --git a/src/lib/imd_cbmem.c b/src/lib/imd_cbmem.c
index 5713c2c..cc1294f 100644
--- a/src/lib/imd_cbmem.c
+++ b/src/lib/imd_cbmem.c
@@ -15,6 +15,7 @@
 
 #include <bootstate.h>
 #include <bootmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cbmem.h>
 #include <imd.h>
@@ -109,7 +110,7 @@
 	cbmem_initialize_empty_id_size(0, 0);
 }
 
-void __attribute__((weak)) cbmem_top_init(void)
+void __weak cbmem_top_init(void)
 {
 }
 
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c
index 128869b..8a6d6af 100644
--- a/src/lib/prog_loaders.c
+++ b/src/lib/prog_loaders.c
@@ -17,6 +17,7 @@
 #include <stdlib.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fallback.h>
 #include <halt.h>
@@ -71,9 +72,9 @@
 	halt();
 }
 
-void __attribute__((weak)) stage_cache_add(int stage_id,
+void __weak stage_cache_add(int stage_id,
 						const struct prog *stage) {}
-void __attribute__((weak)) stage_cache_load_stage(int stage_id,
+void __weak stage_cache_load_stage(int stage_id,
 							struct prog *stage) {}
 
 static void ramstage_cache_invalid(void)
@@ -164,7 +165,7 @@
 static struct prog global_payload =
 	PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/payload");
 
-void __attribute__((weak)) mirror_payload(struct prog *payload)
+void __weak mirror_payload(struct prog *payload)
 {
 }
 
diff --git a/src/lib/prog_ops.c b/src/lib/prog_ops.c
index 44a32d1..5e670d3 100644
--- a/src/lib/prog_ops.c
+++ b/src/lib/prog_ops.c
@@ -14,6 +14,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <program_loading.h>
 
 /* For each segment of a program loaded this function is called*/
@@ -23,13 +24,13 @@
 	arch_segment_loaded(start, size, flags);
 }
 
-void __attribute__((weak)) platform_segment_loaded(uintptr_t start,
+void __weak platform_segment_loaded(uintptr_t start,
 							size_t size, int flags)
 {
 	/* do nothing */
 }
 
-void __attribute__((weak)) arch_segment_loaded(uintptr_t start, size_t size,
+void __weak arch_segment_loaded(uintptr_t start, size_t size,
 						int flags)
 {
 	/* do nothing */
@@ -41,7 +42,7 @@
 	arch_prog_run(prog);
 }
 
-void __attribute__((weak)) platform_prog_run(struct prog *prog)
+void __weak platform_prog_run(struct prog *prog)
 {
 	/* do nothing */
 }
diff --git a/src/lib/reset.c b/src/lib/reset.c
index 703118a..2c95292 100644
--- a/src/lib/reset.c
+++ b/src/lib/reset.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/cache.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <halt.h>
 #include <reset.h>
@@ -27,10 +28,10 @@
 }
 
 /* Not all platforms implement all reset types. Fall back to hard_reset. */
-__attribute__((weak)) void do_global_reset(void) { __hard_reset(); }
-__attribute__((weak)) void do_soft_reset(void) { __hard_reset(); }
+__weak void do_global_reset(void) { __hard_reset(); }
+__weak void do_soft_reset(void) { __hard_reset(); }
 
-__attribute__((weak)) void soc_reset_prepare(enum reset_type rt) { /* no-op */ }
+__weak void soc_reset_prepare(enum reset_type rt) { /* no-op */ }
 
 void global_reset(void)
 {
diff --git a/src/lib/timer.c b/src/lib/timer.c
index adc0d07..625bfc0 100644
--- a/src/lib/timer.c
+++ b/src/lib/timer.c
@@ -13,12 +13,13 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <timer.h>
 #include <delay.h>
 #include <thread.h>
 
-__attribute__((weak)) void init_timer(void) { /* do nothing */ }
+__weak void init_timer(void) { /* do nothing */ }
 
 void udelay(unsigned int usec)
 {
diff --git a/src/lib/timestamp.c b/src/lib/timestamp.c
index 2ab7253..bf49365 100644
--- a/src/lib/timestamp.c
+++ b/src/lib/timestamp.c
@@ -361,7 +361,7 @@
 RAMSTAGE_CBMEM_INIT_HOOK(timestamp_sync_cache_to_cbmem)
 
 /* Provide default timestamp implementation using monotonic timer. */
-uint64_t  __attribute__((weak)) timestamp_get(void)
+uint64_t  __weak timestamp_get(void)
 {
 	struct mono_time t1, t2;
 
@@ -375,7 +375,7 @@
 }
 
 /* Like timestamp_get() above this matches up with microsecond granularity. */
-int __attribute__((weak)) timestamp_tick_freq_mhz(void)
+int __weak timestamp_tick_freq_mhz(void)
 {
 	return 1;
 }
diff --git a/src/lib/wrdd.c b/src/lib/wrdd.c
index da082f8..a8390cf 100644
--- a/src/lib/wrdd.c
+++ b/src/lib/wrdd.c
@@ -14,9 +14,10 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <wrdd.h>
 
-uint16_t __attribute__((weak)) wifi_regulatory_domain(void)
+uint16_t __weak wifi_regulatory_domain(void)
 {
 	return WRDD_DEFAULT_REGULATORY_DOMAIN;
 }
diff --git a/src/mainboard/google/cyan/romstage.c b/src/mainboard/google/cyan/romstage.c
index 5b4bcc0..e56e3d2 100644
--- a/src/mainboard/google/cyan/romstage.c
+++ b/src/mainboard/google/cyan/romstage.c
@@ -14,6 +14,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <soc/romstage.h>
 #include <baseboard/variants.h>
 #include <chip.h>
@@ -47,7 +48,7 @@
 	variant_memory_init_params(memory_params);
 }
 
-__attribute__ ((weak))
+__weak
 void variant_memory_init_params(MEMORY_INIT_UPD *memory_params)
 {
 }
diff --git a/src/mainboard/google/cyan/spd/spd.c b/src/mainboard/google/cyan/spd/spd.c
index a3db2ed6..97e14eb 100644
--- a/src/mainboard/google/cyan/spd/spd.c
+++ b/src/mainboard/google/cyan/spd/spd.c
@@ -16,6 +16,7 @@
 
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <gpio.h>
 #include <lib.h>
@@ -28,7 +29,7 @@
 #include <spd_bin.h>
 #include "spd_util.h"
 
-__attribute__ ((weak)) uint8_t get_ramid(void)
+__weak uint8_t get_ramid(void)
 {
 	gpio_t spd_gpios[] = {
 		GP_SW_80,	/* SATA_GP3, RAMID0 */
diff --git a/src/mainboard/google/kahlee/mainboard.c b/src/mainboard/google/kahlee/mainboard.c
index cd37c90..f1df881 100644
--- a/src/mainboard/google/kahlee/mainboard.c
+++ b/src/mainboard/google/kahlee/mainboard.c
@@ -14,6 +14,7 @@
  */
 
 #include <string.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <arch/acpi.h>
@@ -225,7 +226,7 @@
 };
 
 /* Variants may override this function so see definitions in variants/ */
-uint8_t __attribute__((weak)) variant_board_sku(void)
+uint8_t __weak variant_board_sku(void)
 {
 	return 0;
 }
diff --git a/src/mainboard/google/kahlee/romstage.c b/src/mainboard/google/kahlee/romstage.c
index 4cd2d40..50e9931 100644
--- a/src/mainboard/google/kahlee/romstage.c
+++ b/src/mainboard/google/kahlee/romstage.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <amdblocks/dimm_spd.h>
 #include <baseboard/variants.h>
 #include <soc/romstage.h>
@@ -22,7 +23,7 @@
 	return variant_mainboard_read_spd(spdAddress, buf, len);
 }
 
-void __attribute__((weak)) variant_romstage_entry(int s3_resume)
+void __weak variant_romstage_entry(int s3_resume)
 {
 	/* By default, don't do anything */
 }
diff --git a/src/mainboard/google/kahlee/variants/baseboard/OemCustomize.c b/src/mainboard/google/kahlee/variants/baseboard/OemCustomize.c
index c9ce900..6ed516f 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/OemCustomize.c
+++ b/src/mainboard/google/kahlee/variants/baseboard/OemCustomize.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <amdblocks/agesawrapper.h>
 #include <variant/gpio.h>
 #include <boardid.h>
@@ -236,7 +237,7 @@
  *
  **/
 /*---------------------------------------------------------------------------*/
-VOID __attribute__((weak)) OemCustomizeInitEarly(IN OUT AMD_EARLY_PARAMS *InitEarly)
+VOID __weak OemCustomizeInitEarly(IN OUT AMD_EARLY_PARAMS *InitEarly)
 {
 	InitEarly->GnbConfig.PcieComplexList = (void *)&PcieComplex;
 	InitEarly->PlatformConfig.GnbAzI2sBusSelect = GnbAcpI2sBus;
diff --git a/src/mainboard/google/kahlee/variants/baseboard/gpio.c b/src/mainboard/google/kahlee/variants/baseboard/gpio.c
index 8f4ba5c..cc75f29 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/gpio.c
+++ b/src/mainboard/google/kahlee/variants/baseboard/gpio.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <baseboard/variants.h>
 #include <soc/gpio.h>
 #include <soc/smi.h>
@@ -485,7 +486,7 @@
 	PAD_GPI(GPIO_135, PULL_UP),
 };
 
-const __attribute__((weak))
+const __weak
 struct soc_amd_gpio *variant_early_gpio_table(size_t *size)
 {
 	if (board_id() < 2) {
@@ -497,7 +498,7 @@
 	}
 }
 
-const __attribute__((weak))
+const __weak
 struct soc_amd_gpio *variant_gpio_table(size_t *size)
 {
 	if (board_id() < 2) {
@@ -565,13 +566,13 @@
 	},
 };
 
-const __attribute__((weak)) struct sci_source *get_gpe_table(size_t *num)
+const __weak struct sci_source *get_gpe_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpe_table);
 	return gpe_table;
 }
 
-int __attribute__((weak)) variant_get_xhci_oc_map(uint16_t *map)
+int __weak variant_get_xhci_oc_map(uint16_t *map)
 {
 	*map =  USB_OC0 << OC_PORT0_SHIFT; /* USB-C Port0/4 = OC0 */
 	*map |= USB_OC1 << OC_PORT1_SHIFT; /* USB-C Port1/5 = OC1 */
@@ -580,7 +581,7 @@
 	return 0;
 }
 
-int __attribute__((weak)) variant_get_ehci_oc_map(uint16_t *map)
+int __weak variant_get_ehci_oc_map(uint16_t *map)
 {
 	*map = USB_OC_DISABLE_ALL;
 	return 0;
diff --git a/src/mainboard/google/kahlee/variants/baseboard/memory.c b/src/mainboard/google/kahlee/variants/baseboard/memory.c
index b8ec917..280140b 100644
--- a/src/mainboard/google/kahlee/variants/baseboard/memory.c
+++ b/src/mainboard/google/kahlee/variants/baseboard/memory.c
@@ -14,13 +14,14 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <gpio.h> /* src/include/gpio.h */
 #include <spd_bin.h>
 #include <variant/gpio.h>
 #include <amdblocks/dimm_spd.h>
 
-uint8_t __attribute__((weak)) variant_memory_sku(void)
+uint8_t __weak variant_memory_sku(void)
 {
 	gpio_t pads[] = {
 		[3] = MEM_CONFIG3,
@@ -32,7 +33,7 @@
 	return gpio_base2_value(pads, ARRAY_SIZE(pads));
 }
 
-int __attribute__((weak)) variant_mainboard_read_spd(uint8_t spdAddress,
+int __weak variant_mainboard_read_spd(uint8_t spdAddress,
 							char *buf, size_t len)
 {
 	struct region_device spd_rdev;
diff --git a/src/mainboard/google/octopus/variants/baseboard/boardid.c b/src/mainboard/google/octopus/variants/baseboard/boardid.c
index 67b753e..198baaa 100644
--- a/src/mainboard/google/octopus/variants/baseboard/boardid.c
+++ b/src/mainboard/google/octopus/variants/baseboard/boardid.c
@@ -13,10 +13,11 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <baseboard/variants.h>
 #include <ec/google/chromeec/ec.h>
 
-uint8_t __attribute__((weak)) variant_board_id(void)
+uint8_t __weak variant_board_id(void)
 {
 	return google_chromeec_get_board_version();
 }
diff --git a/src/mainboard/google/octopus/variants/baseboard/gpio.c b/src/mainboard/google/octopus/variants/baseboard/gpio.c
index 6c01c49..8863bbb 100644
--- a/src/mainboard/google/octopus/variants/baseboard/gpio.c
+++ b/src/mainboard/google/octopus/variants/baseboard/gpio.c
@@ -16,6 +16,7 @@
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 
 /*
  * Pad configuration in ramstage. The order largely follows the 'GPIO Muxing'
@@ -254,7 +255,7 @@
 	PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_210, 0, DEEP, NONE, HIZCRx0, DISPUPD),
 };
 
-const struct pad_config *__attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config *__weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
@@ -280,7 +281,7 @@
 	PAD_CFG_GPO(GPIO_164, 0, DEEP), /* WLAN_PE_RST */
 };
 
-const struct pad_config *__attribute__((weak))
+const struct pad_config *__weak
 variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -291,7 +292,7 @@
 static const struct pad_config sleep_gpio_table[] = {
 };
 
-const struct pad_config *__attribute__((weak))
+const struct pad_config *__weak
 variant_sleep_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(sleep_gpio_table);
@@ -302,7 +303,7 @@
 	CROS_GPIO_WP_AH(PAD_SCC(GPIO_PCH_WP), GPIO_COMM_SCC_NAME),
 };
 
-const struct cros_gpio *__attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio *__weak variant_cros_gpios(size_t *num)
 {
 	*num = ARRAY_SIZE(cros_gpios);
 	return cros_gpios;
diff --git a/src/mainboard/google/octopus/variants/baseboard/memory.c b/src/mainboard/google/octopus/variants/baseboard/memory.c
index 303241f..4c1d359 100644
--- a/src/mainboard/google/octopus/variants/baseboard/memory.c
+++ b/src/mainboard/google/octopus/variants/baseboard/memory.c
@@ -14,6 +14,7 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <gpio.h>
 #include <soc/meminit.h>
 #include <variant/gpio.h>
@@ -133,12 +134,12 @@
 	.swizzle_config = &baseboard_lpddr4_swizzle,
 };
 
-const struct lpddr4_cfg *__attribute__((weak)) variant_lpddr4_config(void)
+const struct lpddr4_cfg *__weak variant_lpddr4_config(void)
 {
 	return &lp4cfg;
 }
 
-size_t __attribute__((weak)) variant_memory_sku(void)
+size_t __weak variant_memory_sku(void)
 {
 	gpio_t pads[] = {
 		[3] = MEM_CONFIG3, [2] = MEM_CONFIG2,
diff --git a/src/mainboard/google/octopus/variants/baseboard/nhlt.c b/src/mainboard/google/octopus/variants/baseboard/nhlt.c
index 4fc216e..94403a8 100644
--- a/src/mainboard/google/octopus/variants/baseboard/nhlt.c
+++ b/src/mainboard/google/octopus/variants/baseboard/nhlt.c
@@ -14,11 +14,12 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 2 Channel DMIC array. */
 	if (!nhlt_soc_add_dmic_array(nhlt, 2))
diff --git a/src/mainboard/google/poppy/ramstage.c b/src/mainboard/google/poppy/ramstage.c
index c038b41..ea15aea 100644
--- a/src/mainboard/google/poppy/ramstage.c
+++ b/src/mainboard/google/poppy/ramstage.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <baseboard/variants.h>
 #include <soc/ramstage.h>
 
@@ -29,7 +30,7 @@
 	gpio_configure_pads(pads, num);
 }
 
-void __attribute__((weak)) variant_devtree_update(void)
+void __weak variant_devtree_update(void)
 {
 	/* Override dev tree settings per board */
 }
diff --git a/src/mainboard/google/poppy/variants/baseboard/gpio.c b/src/mainboard/google/poppy/variants/baseboard/gpio.c
index 2fea253..25202e6 100644
--- a/src/mainboard/google/poppy/variants/baseboard/gpio.c
+++ b/src/mainboard/google/poppy/variants/baseboard/gpio.c
@@ -16,6 +16,7 @@
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 
 /* Pad configuration in ramstage */
 /* Leave eSPI pins untouched from default settings */
@@ -371,13 +372,13 @@
 	PAD_CFG_GPI_APIC_INVERT(GPP_E0, NONE, PLTRST),
 };
 
-const struct pad_config * __attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config * __weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
 }
 
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 	variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -385,7 +386,7 @@
 }
 
 /* override specific gpio by sku id */
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 	variant_sku_gpio_table(size_t *num)
 {
 	*num = 0;
@@ -397,7 +398,7 @@
 	CROS_GPIO_WP_AH(GPIO_PCH_WP, CROS_GPIO_DEVICE_NAME),
 };
 
-const struct cros_gpio * __attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio * __weak variant_cros_gpios(size_t *num)
 {
 	*num = ARRAY_SIZE(cros_gpios);
 	return cros_gpios;
diff --git a/src/mainboard/google/poppy/variants/baseboard/memory.c b/src/mainboard/google/poppy/variants/baseboard/memory.c
index 8134f1a..95f2b95 100644
--- a/src/mainboard/google/poppy/variants/baseboard/memory.c
+++ b/src/mainboard/google/poppy/variants/baseboard/memory.c
@@ -14,6 +14,7 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <gpio.h>
 #include <variant/gpio.h>
 
@@ -37,7 +38,7 @@
 /* Rcomp target */
 static const u16 rcomp_target[] = { 100, 40, 40, 23, 40 };
 
-void __attribute__((weak)) variant_memory_params(struct memory_params *p)
+void __weak variant_memory_params(struct memory_params *p)
 {
 	p->type = MEMORY_LPDDR3;
 	p->dq_map = dq_map;
@@ -50,7 +51,7 @@
 	p->rcomp_target_size = sizeof(rcomp_target);
 }
 
-int __attribute__((weak)) variant_memory_sku(void)
+int __weak variant_memory_sku(void)
 {
 	gpio_t spd_gpios[] = {
 		GPIO_MEM_CONFIG_0,
diff --git a/src/mainboard/google/poppy/variants/baseboard/nhlt.c b/src/mainboard/google/poppy/variants/baseboard/nhlt.c
index 81557e4..927cb24 100644
--- a/src/mainboard/google/poppy/variants/baseboard/nhlt.c
+++ b/src/mainboard/google/poppy/variants/baseboard/nhlt.c
@@ -14,11 +14,12 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 2 Channel DMIC array. */
 	if (nhlt_soc_add_dmic_array(nhlt, 2))
@@ -37,7 +38,7 @@
 		printk(BIOS_ERR, "Couldn't add Realtek RT5663.\n");
 }
 
-void __attribute__((weak)) variant_nhlt_oem_overrides(const char **oem_id,
+void __weak variant_nhlt_oem_overrides(const char **oem_id,
 						const char **oem_table_id,
 						uint32_t *oem_revision)
 {
diff --git a/src/mainboard/google/reef/mainboard.c b/src/mainboard/google/reef/mainboard.c
index 7f5a1b3..6831d57 100644
--- a/src/mainboard/google/reef/mainboard.c
+++ b/src/mainboard/google/reef/mainboard.c
@@ -16,6 +16,7 @@
 #include <arch/acpi.h>
 #include <baseboard/variants.h>
 #include <boardid.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <ec/ec.h>
@@ -30,7 +31,7 @@
 #include <variant/gpio.h>
 
 /* override specific gpio by sku id */
-const struct pad_config __attribute__((weak))
+const struct pad_config __weak
 *variant_sku_gpio_table(size_t *num)
 {
 	*num = 0;
@@ -73,7 +74,7 @@
 	return gpio_base3_value(board_sku_gpios, num);
 }
 
-uint8_t __attribute__((weak)) variant_board_sku(void)
+uint8_t __weak variant_board_sku(void)
 {
 	static int board_sku_num = -1;
 
@@ -84,7 +85,7 @@
 }
 
 /* Set variant board sku to ec by sku id */
-void __attribute__((weak)) variant_board_ec_set_skuid(void)
+void __weak variant_board_ec_set_skuid(void)
 {
 }
 
@@ -97,7 +98,7 @@
 	return sku_str;
 }
 
-void __attribute__((weak)) variant_nhlt_oem_overrides(const char **oem_id,
+void __weak variant_nhlt_oem_overrides(const char **oem_id,
 						const char **oem_table_id,
 						uint32_t *oem_revision)
 {
diff --git a/src/mainboard/google/reef/variants/baseboard/gpio.c b/src/mainboard/google/reef/variants/baseboard/gpio.c
index 7440cf8..3cd765b 100644
--- a/src/mainboard/google/reef/variants/baseboard/gpio.c
+++ b/src/mainboard/google/reef/variants/baseboard/gpio.c
@@ -16,6 +16,7 @@
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 
 /*
  * Pad configuration in ramstage. The order largely follows the 'GPIO Muxing'
@@ -345,7 +346,7 @@
 	PAD_CFG_GPI(GPIO_73, UP_20K, DEEP),	 /* GP_CAMERASB11 */
 };
 
-const struct pad_config * __attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config * __weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
@@ -362,7 +363,7 @@
 	PAD_CFG_GPO(GPIO_122, 0, DEEP),		 /* SIO_SPI_2_RXD */
 };
 
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -375,7 +376,7 @@
 	PAD_CFG_GPI_APIC_LOW(GPIO_20, NONE, DEEP),	/* NFC_INT_L */
 };
 
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 variant_sleep_gpio_table(u8 slp_typ, size_t *num)
 {
 	*num = ARRAY_SIZE(sleep_gpio_table);
@@ -388,7 +389,7 @@
 	CROS_GPIO_PE_AH(PAD_N(GPIO_SHIP_MODE), GPIO_COMM_N_NAME),
 };
 
-const struct cros_gpio * __attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio * __weak variant_cros_gpios(size_t *num)
 {
 	*num = ARRAY_SIZE(cros_gpios);
 	return cros_gpios;
diff --git a/src/mainboard/google/reef/variants/baseboard/memory.c b/src/mainboard/google/reef/variants/baseboard/memory.c
index 50e93c7..364c0ee 100644
--- a/src/mainboard/google/reef/variants/baseboard/memory.c
+++ b/src/mainboard/google/reef/variants/baseboard/memory.c
@@ -14,6 +14,7 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <gpio.h>
 #include <soc/meminit.h>
 #include <variant/gpio.h>
@@ -137,12 +138,12 @@
 	.swizzle_config = &baseboard_lpddr4_swizzle,
 };
 
-const struct lpddr4_cfg * __attribute__((weak)) variant_lpddr4_config(void)
+const struct lpddr4_cfg * __weak variant_lpddr4_config(void)
 {
 	return &lp4cfg;
 }
 
-size_t __attribute__((weak)) variant_memory_sku(void)
+size_t __weak variant_memory_sku(void)
 {
 	gpio_t pads[] = {
 		[3] = MEM_CONFIG3, [2] = MEM_CONFIG2,
diff --git a/src/mainboard/google/reef/variants/baseboard/nhlt.c b/src/mainboard/google/reef/variants/baseboard/nhlt.c
index b935796..1887669 100644
--- a/src/mainboard/google/reef/variants/baseboard/nhlt.c
+++ b/src/mainboard/google/reef/variants/baseboard/nhlt.c
@@ -14,13 +14,14 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 #include <gpio.h>
 #include <baseboard/gpio.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 1-dmic configuration */
 	if (IS_ENABLED(CONFIG_NHLT_DMIC_1CH_16B) &&
diff --git a/src/mainboard/google/zoombini/memory.c b/src/mainboard/google/zoombini/memory.c
index 115886e..e1f5255 100644
--- a/src/mainboard/google/zoombini/memory.c
+++ b/src/mainboard/google/zoombini/memory.c
@@ -15,6 +15,7 @@
 
 #include <baseboard/variants.h>
 #include <baseboard/gpio.h>
+#include <compiler.h>
 #include <gpio.h>
 #include <soc/cnl_lpddr4_init.h>
 
@@ -81,12 +82,12 @@
 	.ect = 0,
 };
 
-const struct lpddr4_cfg *__attribute__((weak)) variant_lpddr4_config(void)
+const struct lpddr4_cfg *__weak variant_lpddr4_config(void)
 {
 	return &baseboard_lpddr4_cfg;
 }
 
-size_t __attribute__((weak)) variant_memory_sku(void)
+size_t __weak variant_memory_sku(void)
 {
 	const gpio_t pads[] = {
 		[3] = GPIO_MEM_CONFIG_3, [2] = GPIO_MEM_CONFIG_2,
diff --git a/src/mainboard/google/zoombini/variants/baseboard/boardid.c b/src/mainboard/google/zoombini/variants/baseboard/boardid.c
index 1cb084a..c8a5cf1 100644
--- a/src/mainboard/google/zoombini/variants/baseboard/boardid.c
+++ b/src/mainboard/google/zoombini/variants/baseboard/boardid.c
@@ -14,9 +14,10 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <ec/google/chromeec/ec.h>
 
-uint8_t __attribute__((weak)) variant_board_id(void)
+uint8_t __weak variant_board_id(void)
 {
 	return google_chromeec_get_board_version();
 }
diff --git a/src/mainboard/google/zoombini/variants/baseboard/gpio.c b/src/mainboard/google/zoombini/variants/baseboard/gpio.c
index 47894d0..f8c84b4 100644
--- a/src/mainboard/google/zoombini/variants/baseboard/gpio.c
+++ b/src/mainboard/google/zoombini/variants/baseboard/gpio.c
@@ -15,6 +15,7 @@
 
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
+#include <compiler.h>
 
 /* Pad configuration in ramstage */
 static const struct pad_config gpio_table[] = {
@@ -255,13 +256,13 @@
 					 INVERT), /* H1_PCH_INT_ODL */
 };
 
-const struct pad_config *__attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config *__weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
 }
 
-const struct pad_config *__attribute__((weak))
+const struct pad_config *__weak
 	variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -272,7 +273,7 @@
 	CROS_GPIO_REC_AL(CROS_GPIO_VIRTUAL, CROS_GPIO_DEVICE_NAME),
 };
 
-const struct cros_gpio *__attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio *__weak variant_cros_gpios(size_t *num)
 {
 	*num = ARRAY_SIZE(cros_gpios);
 	return cros_gpios;
diff --git a/src/mainboard/google/zoombini/variants/baseboard/nhlt.c b/src/mainboard/google/zoombini/variants/baseboard/nhlt.c
index 0741b0d..ffaa6e5 100644
--- a/src/mainboard/google/zoombini/variants/baseboard/nhlt.c
+++ b/src/mainboard/google/zoombini/variants/baseboard/nhlt.c
@@ -14,11 +14,12 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 1-dmic configuration */
 	if (IS_ENABLED(CONFIG_NHLT_DMIC_1CH_16B) &&
diff --git a/src/mainboard/intel/cannonlake_rvp/variants/baseboard/gpio.c b/src/mainboard/intel/cannonlake_rvp/variants/baseboard/gpio.c
index 44632e9..fa9d0e9 100644
--- a/src/mainboard/intel/cannonlake_rvp/variants/baseboard/gpio.c
+++ b/src/mainboard/intel/cannonlake_rvp/variants/baseboard/gpio.c
@@ -16,6 +16,7 @@
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 
 /* Pad configuration in ramstage*/
 static const struct pad_config gpio_table[] = {
@@ -297,13 +298,13 @@
 
 };
 
-const struct pad_config *__attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config *__weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
 }
 
-const struct pad_config *__attribute__((weak))
+const struct pad_config *__weak
 	variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -314,7 +315,7 @@
         CROS_GPIO_REC_AL(CROS_GPIO_VIRTUAL, CROS_GPIO_DEVICE_NAME),
 };
 
-const struct cros_gpio * __attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio * __weak variant_cros_gpios(size_t *num)
 {
         *num = ARRAY_SIZE(cros_gpios);
         return cros_gpios;
diff --git a/src/mainboard/intel/cannonlake_rvp/variants/baseboard/nhlt.c b/src/mainboard/intel/cannonlake_rvp/variants/baseboard/nhlt.c
index 9fb9be5..6f3629e 100644
--- a/src/mainboard/intel/cannonlake_rvp/variants/baseboard/nhlt.c
+++ b/src/mainboard/intel/cannonlake_rvp/variants/baseboard/nhlt.c
@@ -14,11 +14,12 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 1-dmic configuration */
 	if (IS_ENABLED(CONFIG_NHLT_DMIC_1CH_16B) &&
diff --git a/src/mainboard/intel/galileo/vboot.c b/src/mainboard/intel/galileo/vboot.c
index 469ec4e..8242754 100644
--- a/src/mainboard/intel/galileo/vboot.c
+++ b/src/mainboard/intel/galileo/vboot.c
@@ -14,6 +14,7 @@
 
 #include <assert.h>
 #include <bootmode.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <device/i2c_simple.h>
@@ -74,7 +75,7 @@
 	reg_script_run(script);
 }
 
-void __attribute__((weak)) vboot_platform_prepare_reboot(void)
+void __weak vboot_platform_prepare_reboot(void)
 {
 	const struct reg_script *script;
 
diff --git a/src/mainboard/intel/glkrvp/chromeos.c b/src/mainboard/intel/glkrvp/chromeos.c
index 05e8c60..76c83e1 100644
--- a/src/mainboard/intel/glkrvp/chromeos.c
+++ b/src/mainboard/intel/glkrvp/chromeos.c
@@ -15,6 +15,7 @@
 
 #include <baseboard/variants.h>
 #include <boot/coreboot_tables.h>
+#include <compiler.h>
 #include <ec/google/chromeec/ec.h>
 #include <gpio.h>
 #include <vendorcode/google/chromeos/chromeos.h>
@@ -55,7 +56,7 @@
 	chromeos_acpi_gpio_generate(gpios, num);
 }
 
-int __attribute__((weak)) get_lid_switch(void)
+int __weak get_lid_switch(void)
 {
 	return -1;
 }
diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c b/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c
index 1f30f4e..530c06a 100644
--- a/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c
+++ b/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c
@@ -14,9 +14,10 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <ec/google/chromeec/ec.h>
 
-uint8_t __attribute__((weak)) variant_board_id(void)
+uint8_t __weak variant_board_id(void)
 {
 	if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))
 		return google_chromeec_get_board_version();
diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/gpio.c b/src/mainboard/intel/glkrvp/variants/baseboard/gpio.c
index 96821d6..7ff68a4 100644
--- a/src/mainboard/intel/glkrvp/variants/baseboard/gpio.c
+++ b/src/mainboard/intel/glkrvp/variants/baseboard/gpio.c
@@ -16,6 +16,7 @@
 #include <baseboard/gpio.h>
 #include <baseboard/variants.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 
 /*
  * Pad configuration in ramstage. The order largely follows the 'GPIO Muxing'
@@ -250,7 +251,7 @@
 	PAD_CFG_NF_IOSSTATE(GPIO_209, DN_20K, DEEP, NF1, HIZCRx0),/*EMMC0_STROBE*/
 };
 
-const struct pad_config * __attribute__((weak)) variant_gpio_table(size_t *num)
+const struct pad_config * __weak variant_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
@@ -262,7 +263,7 @@
 	PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_178, UP_20K, DEEP, NF1), /* SMB_DATA */
 };
 
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 variant_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
@@ -277,7 +278,7 @@
 #endif
 };
 
-const struct pad_config * __attribute__((weak))
+const struct pad_config * __weak
 variant_sleep_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(sleep_gpio_table);
@@ -291,7 +292,7 @@
 #endif
 };
 
-const struct cros_gpio * __attribute__((weak)) variant_cros_gpios(size_t *num)
+const struct cros_gpio * __weak variant_cros_gpios(size_t *num)
 {
 	*num = ARRAY_SIZE(cros_gpios);
 	return cros_gpios;
diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/memory.c b/src/mainboard/intel/glkrvp/variants/baseboard/memory.c
index be00ecd..56fac2a 100644
--- a/src/mainboard/intel/glkrvp/variants/baseboard/memory.c
+++ b/src/mainboard/intel/glkrvp/variants/baseboard/memory.c
@@ -14,6 +14,7 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <gpio.h>
 #include <soc/meminit.h>
 #include <variant/gpio.h>
@@ -133,12 +134,12 @@
 	.swizzle_config = &baseboard_lpddr4_swizzle,
 };
 
-const struct lpddr4_cfg * __attribute__((weak)) variant_lpddr4_config(void)
+const struct lpddr4_cfg * __weak variant_lpddr4_config(void)
 {
 	return &lp4cfg;
 }
 
-size_t __attribute__((weak)) variant_memory_sku(void)
+size_t __weak variant_memory_sku(void)
 {
 	return 0;
 }
diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/nhlt.c b/src/mainboard/intel/glkrvp/variants/baseboard/nhlt.c
index 45cbc8f..51da3ad 100644
--- a/src/mainboard/intel/glkrvp/variants/baseboard/nhlt.c
+++ b/src/mainboard/intel/glkrvp/variants/baseboard/nhlt.c
@@ -14,11 +14,12 @@
  */
 
 #include <baseboard/variants.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <nhlt.h>
 #include <soc/nhlt.h>
 
-void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
+void __weak variant_nhlt_init(struct nhlt *nhlt)
 {
 	/* 1-dmic configuration */
 	if (IS_ENABLED(CONFIG_NHLT_DMIC_1CH_16B) &&
diff --git a/src/mainboard/siemens/mc_apl1/gpio.c b/src/mainboard/siemens/mc_apl1/gpio.c
index b872b8d..636d356 100644
--- a/src/mainboard/siemens/mc_apl1/gpio.c
+++ b/src/mainboard/siemens/mc_apl1/gpio.c
@@ -16,6 +16,7 @@
 
 #include <soc/gpio.h>
 #include <commonlib/helpers.h>
+#include <compiler.h>
 #include "brd_gpio.h"
 
 /*
@@ -363,7 +364,7 @@
 	PAD_CFG_NF(SVID0_CLK, UP_20K, DEEP, NF1),	/* SVID0_CLK */
 };
 
-const struct pad_config *__attribute__((weak)) brd_gpio_table(size_t *num)
+const struct pad_config *__weak brd_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(gpio_table);
 	return gpio_table;
@@ -406,7 +407,7 @@
 	PAD_CFG_NF(LPC_FRAMEB, UP_20K, DEEP, NF1),	/* LPC_FRAME_N */
 };
 
-const struct pad_config *__attribute__((weak))
+const struct pad_config *__weak
 brd_early_gpio_table(size_t *num)
 {
 	*num = ARRAY_SIZE(early_gpio_table);
diff --git a/src/northbridge/amd/pi/agesawrapper.c b/src/northbridge/amd/pi/agesawrapper.c
index d912317..a66917b 100644
--- a/src/northbridge/amd/pi/agesawrapper.c
+++ b/src/northbridge/amd/pi/agesawrapper.c
@@ -16,6 +16,7 @@
 #include <AGESA.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <delay.h>
 #include <cpu/x86/mtrr.h>
 #include <FchPlatform.h>
@@ -25,7 +26,7 @@
 #include <northbridge/amd/pi/agesawrapper.h>
 #include <northbridge/amd/agesa/BiosCallOuts.h>
 
-void __attribute__((weak)) OemPostParams(AMD_POST_PARAMS *PostParams) {}
+void __weak OemPostParams(AMD_POST_PARAMS *PostParams) {}
 
 #define FILECODE UNASSIGNED_FILE_FILECODE
 
diff --git a/src/security/vboot/bootmode.c b/src/security/vboot/bootmode.c
index 05098b4..70d3118 100644
--- a/src/security/vboot/bootmode.c
+++ b/src/security/vboot/bootmode.c
@@ -17,6 +17,7 @@
 #include <bootmode.h>
 #include <bootstate.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <rules.h>
 #include <string.h>
 #include <vb2_api.h>
@@ -141,18 +142,18 @@
 	return !!vboot_check_recovery_request();
 }
 
-int __attribute__((weak)) clear_recovery_mode_switch(void)
+int __weak clear_recovery_mode_switch(void)
 {
 	// Weak implementation. Nothing to do.
 	return 0;
 }
 
-void __attribute__((weak)) log_recovery_mode_switch(void)
+void __weak log_recovery_mode_switch(void)
 {
 	// Weak implementation. Nothing to do.
 }
 
-int __attribute__((weak)) get_recovery_mode_retrain_switch(void)
+int __weak get_recovery_mode_retrain_switch(void)
 {
 	return 0;
 }
@@ -175,12 +176,12 @@
  * TODO: Create flash protection interface which implements get_write_protect_state.
  * get_recovery_mode_switch should be implemented as default function.
  */
-int __attribute__((weak)) get_write_protect_state(void)
+int __weak get_write_protect_state(void)
 {
 	return 0;
 }
 
-int __attribute__((weak)) get_recovery_mode_switch(void)
+int __weak get_recovery_mode_switch(void)
 {
 	return 0;
 }
diff --git a/src/security/vboot/vboot_common.c b/src/security/vboot/vboot_common.c
index 3ef9070..11320d2 100644
--- a/src/security/vboot/vboot_common.c
+++ b/src/security/vboot/vboot_common.c
@@ -16,6 +16,7 @@
 #include <boot/coreboot_tables.h>
 #include <boot_device.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/cbmem_console.h>
 #include <console/console.h>
 #include <fmap.h>
@@ -101,7 +102,7 @@
 }
 
 /* ============================ VBOOT REBOOT ============================== */
-void __attribute__((weak)) vboot_platform_prepare_reboot(void)
+void __weak vboot_platform_prepare_reboot(void)
 {
 }
 
diff --git a/src/security/vboot/vboot_logic.c b/src/security/vboot/vboot_logic.c
index c76739a..9221a12 100644
--- a/src/security/vboot/vboot_logic.c
+++ b/src/security/vboot/vboot_logic.c
@@ -17,6 +17,7 @@
 #include <arch/exception.h>
 #include <assert.h>
 #include <bootmode.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <console/vtxprintf.h>
 #include <delay.h>
@@ -95,21 +96,21 @@
 }
 
 /* No-op stubs that can be overridden by SoCs with hardware crypto support. */
-__attribute__((weak))
+__weak
 int vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg,
 			       uint32_t data_size)
 {
 	return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED;
 }
 
-__attribute__((weak))
+__weak
 int vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size)
 {
 	BUG();	/* Should never get called if init() returned an error. */
 	return VB2_ERROR_UNKNOWN;
 }
 
-__attribute__((weak))
+__weak
 int vb2ex_hwcrypto_digest_finalize(uint8_t *digest, uint32_t digest_size)
 {
 	BUG();	/* Should never get called if init() returned an error. */
diff --git a/src/security/vboot/verstage.c b/src/security/vboot/verstage.c
index c244184..fd75250 100644
--- a/src/security/vboot/verstage.c
+++ b/src/security/vboot/verstage.c
@@ -15,11 +15,12 @@
 
 #include <arch/exception.h>
 #include <arch/hlt.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <program_loading.h>
 #include <security/vboot/vboot_common.h>
 
-void __attribute__((weak)) verstage_mainboard_init(void)
+void __weak verstage_mainboard_init(void)
 {
 	/* Default empty implementation. */
 }
diff --git a/src/soc/amd/common/block/pi/agesawrapper.c b/src/soc/amd/common/block/pi/agesawrapper.c
index 36b669b..f72810f 100644
--- a/src/soc/amd/common/block/pi/agesawrapper.c
+++ b/src/soc/amd/common/block/pi/agesawrapper.c
@@ -18,6 +18,7 @@
 #include <cpu/x86/mtrr.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <delay.h>
 #include <rules.h>
 #include <rmodule.h>
@@ -28,8 +29,8 @@
 #include <amdblocks/BiosCallOuts.h>
 #include <soc/southbridge.h>
 
-void __attribute__((weak)) SetMemParams(AMD_POST_PARAMS *PostParams) {}
-void __attribute__((weak)) OemPostParams(AMD_POST_PARAMS *PostParams) {}
+void __weak SetMemParams(AMD_POST_PARAMS *PostParams) {}
+void __weak OemPostParams(AMD_POST_PARAMS *PostParams) {}
 
 /* ACPI table pointers returned by AmdInitLate */
 static void *DmiTable;
diff --git a/src/soc/amd/common/block/pi/def_callouts.c b/src/soc/amd/common/block/pi/def_callouts.c
index fec1776..d419fcf 100644
--- a/src/soc/amd/common/block/pi/def_callouts.c
+++ b/src/soc/amd/common/block/pi/def_callouts.c
@@ -15,6 +15,7 @@
  */
 
 #include <cbfs.h>
+#include <compiler.h>
 #include <cpu/x86/lapic.h>
 #include <cpu/x86/mp.h>
 #include <timer.h>
@@ -155,7 +156,7 @@
 	return pVbiosImageInfo->ImagePtr ? AGESA_SUCCESS : AGESA_WARNING;
 }
 
-AGESA_STATUS __attribute__((weak)) platform_PcieSlotResetControl(UINT32 Func,
+AGESA_STATUS __weak platform_PcieSlotResetControl(UINT32 Func,
 	UINTN Data, VOID *ConfigPtr)
 {
 	printk(BIOS_WARNING, "Warning - AGESA callout: %s not supported\n",
diff --git a/src/soc/amd/stoneyridge/BiosCallOuts.c b/src/soc/amd/stoneyridge/BiosCallOuts.c
index f30ed3c..c6eef1a 100644
--- a/src/soc/amd/stoneyridge/BiosCallOuts.c
+++ b/src/soc/amd/stoneyridge/BiosCallOuts.c
@@ -15,6 +15,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci_def.h>
 #include <amdblocks/BiosCallOuts.h>
@@ -28,7 +29,7 @@
 #include "chip.h"
 #include <amdblocks/car.h>
 
-void __attribute__((weak)) platform_FchParams_reset(
+void __weak platform_FchParams_reset(
 				FCH_RESET_DATA_BLOCK *FchParams_reset) {}
 
 AGESA_STATUS agesa_fch_initreset(UINT32 Func, UINTN FchData, VOID *ConfigPtr)
@@ -159,7 +160,7 @@
 }
 
 /* Allow mainboards to fill the SPD buffer */
-__attribute__((weak)) int mainboard_read_spd(uint8_t spdAddress, char *buf,
+__weak int mainboard_read_spd(uint8_t spdAddress, char *buf,
 						size_t len)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
diff --git a/src/soc/amd/stoneyridge/romstage.c b/src/soc/amd/stoneyridge/romstage.c
index 6c9726a..0e019f7 100644
--- a/src/soc/amd/stoneyridge/romstage.c
+++ b/src/soc/amd/stoneyridge/romstage.c
@@ -17,6 +17,7 @@
 #include <arch/io.h>
 #include <arch/cpu.h>
 #include <arch/acpi.h>
+#include <compiler.h>
 #include <cpu/x86/msr.h>
 #include <cpu/x86/mtrr.h>
 #include <cpu/amd/mtrr.h>
@@ -34,7 +35,7 @@
 #include <soc/southbridge.h>
 #include <amdblocks/psp.h>
 
-void __attribute__((weak)) mainboard_romstage_entry(int s3_resume)
+void __weak mainboard_romstage_entry(int s3_resume)
 {
 	/* By default, don't do anything */
 }
diff --git a/src/soc/amd/stoneyridge/usb.c b/src/soc/amd/stoneyridge/usb.c
index 0665976..e6d608e 100644
--- a/src/soc/amd/stoneyridge/usb.c
+++ b/src/soc/amd/stoneyridge/usb.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
@@ -42,13 +43,13 @@
 	}
 }
 
-int __attribute__((weak)) mainboard_get_xhci_oc_map(uint16_t *map)
+int __weak mainboard_get_xhci_oc_map(uint16_t *map)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
 	return -1;
 }
 
-int __attribute__((weak)) mainboard_get_ehci_oc_map(uint16_t *map)
+int __weak mainboard_get_ehci_oc_map(uint16_t *map)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
 	return -1;
diff --git a/src/soc/intel/apollolake/chip.c b/src/soc/intel/apollolake/chip.c
index c563f54..e4084fe 100644
--- a/src/soc/intel/apollolake/chip.c
+++ b/src/soc/intel/apollolake/chip.c
@@ -20,6 +20,7 @@
 #include <arch/acpi.h>
 #include <bootstate.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/cpu.h>
 #include <cpu/x86/mp.h>
@@ -518,7 +519,7 @@
 		sizeof(silconfig->PcieRpSelectableDeemphasis));
 }
 
-void __attribute__((weak)) mainboard_devtree_update(struct device *dev)
+void __weak mainboard_devtree_update(struct device *dev)
 {
        /* Override dev tree settings per board */
 }
diff --git a/src/soc/intel/apollolake/romstage.c b/src/soc/intel/apollolake/romstage.c
index a8a0dd1..3d695ea 100644
--- a/src/soc/intel/apollolake/romstage.c
+++ b/src/soc/intel/apollolake/romstage.c
@@ -24,6 +24,7 @@
 #include <bootmode.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/mtrr.h>
 #include <device/pci_def.h>
@@ -370,13 +371,13 @@
 	car_set_var(fsp_version, version);
 }
 
-__attribute__((weak))
+__weak
 void mainboard_memory_init_params(FSPM_UPD *mupd)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
 }
 
-__attribute__((weak))
+__weak
 void mainboard_save_dimm_info(void)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
diff --git a/src/soc/intel/baytrail/gpio.c b/src/soc/intel/baytrail/gpio.c
index 57ad0a7..5da5104 100644
--- a/src/soc/intel/baytrail/gpio.c
+++ b/src/soc/intel/baytrail/gpio.c
@@ -14,6 +14,7 @@
  */
 
 #include <device/pci.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <soc/gpio.h>
 #include <soc/pmc.h>
@@ -234,7 +235,7 @@
 	}
 }
 
-struct soc_gpio_config* __attribute__((weak)) mainboard_get_gpios(void)
+struct soc_gpio_config* __weak mainboard_get_gpios(void)
 {
 	printk(BIOS_DEBUG, "Default/empty GPIO config\n");
 	return NULL;
diff --git a/src/soc/intel/baytrail/southcluster.c b/src/soc/intel/baytrail/southcluster.c
index d16c4ff..84ae0ee 100644
--- a/src/soc/intel/baytrail/southcluster.c
+++ b/src/soc/intel/baytrail/southcluster.c
@@ -19,6 +19,7 @@
 #include <arch/acpi.h>
 #include <bootstate.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
 #include <device/device.h>
@@ -536,7 +537,7 @@
 	.device		= LPC_DEVID,
 };
 
-int __attribute__((weak)) mainboard_get_spi_config(struct spi_config *cfg)
+int __weak mainboard_get_spi_config(struct spi_config *cfg)
 {
 	return -1;
 }
diff --git a/src/soc/intel/braswell/acpi.c b/src/soc/intel/braswell/acpi.c
index 9ac5574c..a672f7f 100644
--- a/src/soc/intel/braswell/acpi.c
+++ b/src/soc/intel/braswell/acpi.c
@@ -22,6 +22,7 @@
 #include <arch/smp/mpspec.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/cpu.h>
 #include <cpu/intel/turbo.h>
@@ -552,6 +553,6 @@
 	}
 }
 
-__attribute__((weak)) void acpi_create_serialio_ssdt(acpi_header_t *ssdt)
+__weak void acpi_create_serialio_ssdt(acpi_header_t *ssdt)
 {
 }
diff --git a/src/soc/intel/braswell/chip.c b/src/soc/intel/braswell/chip.c
index 1f68e84..3da5763 100644
--- a/src/soc/intel/braswell/chip.c
+++ b/src/soc/intel/braswell/chip.c
@@ -15,6 +15,7 @@
  */
 
 #include <chip.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
@@ -81,7 +82,7 @@
 	}
 }
 
-__attribute__((weak)) void board_silicon_USB2_override(SILICON_INIT_UPD *params)
+__weak void board_silicon_USB2_override(SILICON_INIT_UPD *params)
 {
 }
 
diff --git a/src/soc/intel/braswell/gpio.c b/src/soc/intel/braswell/gpio.c
index a742f73..23be45a 100644
--- a/src/soc/intel/braswell/gpio.c
+++ b/src/soc/intel/braswell/gpio.c
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  */
 
-
+#include <compiler.h>
 #include <console/console.h>
 #include <device/pci.h>
 #include <soc/gpio.h>
@@ -305,7 +305,7 @@
 		printk(BIOS_DEBUG, "Tri-state TDO and TMS\n");
 }
 
-__attribute__((weak)) struct soc_gpio_config *mainboard_get_gpios(void)
+__weak struct soc_gpio_config *mainboard_get_gpios(void)
 {
 	printk(BIOS_DEBUG, "Default/empty GPIO config\n");
 	return NULL;
diff --git a/src/soc/intel/braswell/southcluster.c b/src/soc/intel/braswell/southcluster.c
index 6eb61c7..05fa855 100644
--- a/src/soc/intel/braswell/southcluster.c
+++ b/src/soc/intel/braswell/southcluster.c
@@ -21,6 +21,7 @@
 #include <bootstate.h>
 #include <cbmem.h>
 #include "chip.h"
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
 #include <device/device.h>
@@ -457,7 +458,7 @@
 	.device		= LPC_DEVID,
 };
 
-int __attribute__((weak)) mainboard_get_spi_config(struct spi_config *cfg)
+int __weak mainboard_get_spi_config(struct spi_config *cfg)
 {
 	printk(BIOS_SPEW, "%s/%s ( 0x%p )\n",
 			__FILE__, __func__, (void *)cfg);
diff --git a/src/soc/intel/broadwell/romstage/romstage.c b/src/soc/intel/broadwell/romstage/romstage.c
index 4a1e67d..025855b 100644
--- a/src/soc/intel/broadwell/romstage/romstage.c
+++ b/src/soc/intel/broadwell/romstage/romstage.c
@@ -20,6 +20,7 @@
 #include <arch/cbfs.h>
 #include <arch/early_variables.h>
 #include <bootmode.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cbfs.h>
 #include <cbmem.h>
@@ -123,4 +124,4 @@
 		;
 }
 
-void __attribute__((weak)) mainboard_pre_console_init(void) {}
+void __weak mainboard_pre_console_init(void) {}
diff --git a/src/soc/intel/cannonlake/chip.c b/src/soc/intel/cannonlake/chip.c
index 5fc3a55..49b98ee 100644
--- a/src/soc/intel/cannonlake/chip.c
+++ b/src/soc/intel/cannonlake/chip.c
@@ -14,6 +14,7 @@
  */
 
 #include <chip.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <device/pci.h>
@@ -307,7 +308,7 @@
 }
 
 /* Mainboard GPIO Configuration */
-__attribute__((weak)) void mainboard_silicon_init_params(FSP_S_CONFIG *params)
+__weak void mainboard_silicon_init_params(FSP_S_CONFIG *params)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
 }
diff --git a/src/soc/intel/cannonlake/romstage/romstage.c b/src/soc/intel/cannonlake/romstage/romstage.c
index c8cb927..0459095 100644
--- a/src/soc/intel/cannonlake/romstage/romstage.c
+++ b/src/soc/intel/cannonlake/romstage/romstage.c
@@ -19,6 +19,7 @@
 #include <chip.h>
 #include <cpu/x86/mtrr.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <fsp/util.h>
 #include <intelblocks/cse.h>
@@ -194,7 +195,7 @@
 	mainboard_memory_init_params(mupd);
 }
 
-__attribute__((weak)) void mainboard_memory_init_params(FSPM_UPD *mupd)
+__weak void mainboard_memory_init_params(FSPM_UPD *mupd)
 {
 	/* Do nothing */
 }
diff --git a/src/soc/intel/common/acpi_wake_source.c b/src/soc/intel/common/acpi_wake_source.c
index 4166801..e0d8bfb 100644
--- a/src/soc/intel/common/acpi_wake_source.c
+++ b/src/soc/intel/common/acpi_wake_source.c
@@ -16,13 +16,14 @@
 #include <arch/acpi.h>
 #include <bootstate.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <soc/nvs.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include "acpi.h"
 
-__attribute__((weak)) int soc_fill_acpi_wake(uint32_t *pm1, uint32_t **gpe0)
+__weak int soc_fill_acpi_wake(uint32_t *pm1, uint32_t **gpe0)
 {
 	return -1;
 }
diff --git a/src/soc/intel/common/block/acpi/acpi.c b/src/soc/intel/common/block/acpi/acpi.c
index bf4003d..02ab886 100644
--- a/src/soc/intel/common/block/acpi/acpi.c
+++ b/src/soc/intel/common/block/acpi/acpi.c
@@ -18,6 +18,7 @@
 #include <arch/smp/mpspec.h>
 #include <bootstate.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <cpu/intel/reset.h>
 #include <cpu/intel/turbo.h>
 #include <cpu/x86/msr.h>
@@ -100,7 +101,7 @@
 	return acpi_madt_irq_overrides(current);
 }
 
-__attribute__ ((weak)) void soc_fill_fadt(acpi_fadt_t *fadt)
+__weak void soc_fill_fadt(acpi_fadt_t *fadt)
 {
 }
 
@@ -173,7 +174,7 @@
 	return acpi_write_hpet(device, current, rsdp);
 }
 
-__attribute__ ((weak))
+__weak
 uint32_t acpi_fill_soc_wake(uint32_t generic_pm1_en,
 			    const struct chipset_power_state *ps)
 {
@@ -219,7 +220,7 @@
 	return GPE0_REG_MAX;
 }
 
-__attribute__ ((weak)) void acpi_create_gnvs(struct global_nvs_t *gnvs)
+__weak void acpi_create_gnvs(struct global_nvs_t *gnvs)
 {
 }
 
@@ -401,7 +402,7 @@
 	acpigen_write_TSS_package(entries, soc_tss_table);
 }
 
-__attribute__ ((weak)) void soc_power_states_generation(int core_id,
+__weak void soc_power_states_generation(int core_id,
 						int cores_per_package)
 {
 }
diff --git a/src/soc/intel/common/block/cpu/mp_init.c b/src/soc/intel/common/block/cpu/mp_init.c
index 085a340..23f2fb0 100644
--- a/src/soc/intel/common/block/cpu/mp_init.c
+++ b/src/soc/intel/common/block/cpu/mp_init.c
@@ -16,6 +16,7 @@
 #include <arch/io.h>
 #include <assert.h>
 #include <bootstate.h>
+#include <compiler.h>
 #include <cpu/cpu.h>
 #include <cpu/x86/mtrr.h>
 #include <cpu/x86/msr.h>
@@ -30,12 +31,12 @@
 static const void *microcode_patch;
 
 /* SoC override function */
-__attribute__((weak)) void soc_core_init(device_t dev)
+__weak void soc_core_init(device_t dev)
 {
 	/* no-op */
 }
 
-__attribute__((weak)) void soc_init_cpus(struct bus *cpu_bus)
+__weak void soc_init_cpus(struct bus *cpu_bus)
 {
 	/* no-op */
 }
diff --git a/src/soc/intel/common/block/ebda/ebda.c b/src/soc/intel/common/block/ebda/ebda.c
index d16ad6e..41c77a8 100644
--- a/src/soc/intel/common/block/ebda/ebda.c
+++ b/src/soc/intel/common/block/ebda/ebda.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/ebda.h>
+#include <compiler.h>
 #include <intelblocks/ebda.h>
 #include <string.h>
 
@@ -24,7 +25,7 @@
  */
 
 /* Fill up EBDA structure inside Mainboard directory */
-__attribute__((weak)) void create_mainboard_ebda(struct ebda_config *cfg)
+__weak void create_mainboard_ebda(struct ebda_config *cfg)
 {
 	/* no-op */
 }
diff --git a/src/soc/intel/common/block/graphics/graphics.c b/src/soc/intel/common/block/graphics/graphics.c
index dcf8200..ddea99f 100644
--- a/src/soc/intel/common/block/graphics/graphics.c
+++ b/src/soc/intel/common/block/graphics/graphics.c
@@ -14,6 +14,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -21,7 +22,7 @@
 #include <soc/pci_devs.h>
 
 /* SoC Overrides */
-__attribute__((weak)) void graphics_soc_init(struct device *dev)
+__weak void graphics_soc_init(struct device *dev)
 {
 	/*
 	 * User needs to implement SoC override in case wishes
diff --git a/src/soc/intel/common/block/gspi/gspi.c b/src/soc/intel/common/block/gspi/gspi.c
index 175fad8..c7e1c6a 100644
--- a/src/soc/intel/common/block/gspi/gspi.c
+++ b/src/soc/intel/common/block/gspi/gspi.c
@@ -17,6 +17,7 @@
 #include <arch/early_variables.h>
 #include <arch/io.h>
 #include <assert.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <device/device.h>
@@ -357,7 +358,7 @@
 	return 0;
 }
 
-int __attribute__((weak)) gspi_get_soc_spi_cfg(unsigned int gspi_bus,
+int __weak gspi_get_soc_spi_cfg(unsigned int gspi_bus,
 						struct spi_cfg *cfg)
 {
 	cfg->clk_phase = SPI_CLOCK_PHASE_FIRST;
diff --git a/src/soc/intel/common/block/lpc/lpc.c b/src/soc/intel/common/block/lpc/lpc.c
index 079ecde..c462d9d 100644
--- a/src/soc/intel/common/block/lpc/lpc.c
+++ b/src/soc/intel/common/block/lpc/lpc.c
@@ -14,6 +14,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -24,13 +25,13 @@
 /* SoC overrides */
 
 /* Common weak definition, needs to be implemented in each soc LPC driver. */
-__attribute__((weak)) void lpc_soc_init(struct device *dev)
+__weak void lpc_soc_init(struct device *dev)
 {
 	/* no-op */
 }
 
 /* Fill up LPC IO resource structure inside SoC directory */
-__attribute__((weak)) void pch_lpc_soc_fill_io_resources(struct device *dev)
+__weak void pch_lpc_soc_fill_io_resources(struct device *dev)
 {
 	/* no-op */
 }
diff --git a/src/soc/intel/common/block/pmc/pmc.c b/src/soc/intel/common/block/pmc/pmc.c
index d3fef55..c8e8026 100644
--- a/src/soc/intel/common/block/pmc/pmc.c
+++ b/src/soc/intel/common/block/pmc/pmc.c
@@ -15,6 +15,7 @@
 
 #include <arch/acpi.h>
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
 #include <device/pci.h>
@@ -25,7 +26,7 @@
 /* SoC overrides */
 
 /* Fill up PMC resource structure inside SoC directory */
-__attribute__((weak)) int pmc_soc_get_resources(
+__weak int pmc_soc_get_resources(
 		struct pmc_resource_config *cfg)
 {
 	/* no-op */
@@ -33,7 +34,7 @@
 }
 
 /* SoC override PMC initialization */
-__attribute__((weak)) void pmc_soc_init(struct device *dev)
+__weak void pmc_soc_init(struct device *dev)
 {
 	/* no-op */
 }
diff --git a/src/soc/intel/common/block/pmc/pmclib.c b/src/soc/intel/common/block/pmc/pmclib.c
index cf87d05..38d4196 100644
--- a/src/soc/intel/common/block/pmc/pmclib.c
+++ b/src/soc/intel/common/block/pmc/pmclib.c
@@ -16,6 +16,7 @@
 #include <arch/early_variables.h>
 #include <arch/io.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <halt.h>
 #include <intelblocks/pmclib.h>
@@ -75,7 +76,7 @@
 	}
 }
 
-__attribute__ ((weak)) uint32_t soc_get_smi_status(uint32_t generic_sts)
+__weak uint32_t soc_get_smi_status(uint32_t generic_sts)
 {
 	return generic_sts;
 }
@@ -84,7 +85,7 @@
  * Set PMC register to know which state system should be after
  * power reapplied
  */
-__attribute__ ((weak)) void pmc_soc_restore_power_failure(void)
+__weak void pmc_soc_restore_power_failure(void)
 {
 	/*
 	 * SoC code should set PMC config register in order to set
@@ -332,7 +333,7 @@
 	pmc_clear_gpi_gpe_status();
 }
 
-__attribute__ ((weak))
+__weak
 void soc_clear_pm_registers(uintptr_t pmc_bar)
 {
 }
@@ -351,7 +352,7 @@
 	soc_clear_pm_registers(pmc_bar);
 }
 
-__attribute__ ((weak))
+__weak
 int soc_prev_sleep_state(const struct chipset_power_state *ps,
 			      int prev_sleep_state)
 {
diff --git a/src/soc/intel/common/block/rtc/rtc.c b/src/soc/intel/common/block/rtc/rtc.c
index 9e76768..cb97953 100644
--- a/src/soc/intel/common/block/rtc/rtc.c
+++ b/src/soc/intel/common/block/rtc/rtc.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <intelblocks/pcr.h>
 #include <intelblocks/rtc.h>
 #include <soc/pcr_ids.h>
@@ -31,7 +32,7 @@
 	pcr_or32(PID_RTC, PCR_RTC_CONF, PCR_RTC_CONF_UCMOS_EN);
 }
 
-__attribute__((weak)) int soc_get_rtc_failed(void)
+__weak int soc_get_rtc_failed(void)
 {
 	return 0;
 }
diff --git a/src/soc/intel/common/block/smm/smihandler.c b/src/soc/intel/common/block/smm/smihandler.c
index d492459..d8ac2f3 100644
--- a/src/soc/intel/common/block/smm/smihandler.c
+++ b/src/soc/intel/common/block/smm/smihandler.c
@@ -16,6 +16,7 @@
 
 #include <arch/hlt.h>
 #include <arch/io.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/cache.h>
 #include <cpu/x86/smm.h>
@@ -40,18 +41,18 @@
 /* SoC overrides. */
 
 /* Specific SOC SMI handler during ramstage finalize phase */
-__attribute__((weak)) void smihandler_soc_at_finalize(void)
+__weak void smihandler_soc_at_finalize(void)
 {
 	return;
 }
 
-__attribute__((weak)) int smihandler_soc_disable_busmaster(device_t dev)
+__weak int smihandler_soc_disable_busmaster(device_t dev)
 {
 	return 1;
 }
 
 /* SMI handlers that should be serviced in SCI mode too. */
-__attribute__((weak)) uint32_t smihandler_soc_get_sci_mask(void)
+__weak uint32_t smihandler_soc_get_sci_mask(void)
 {
 	return 0; /* No valid SCI mask for SMI handler */
 }
@@ -60,7 +61,7 @@
  * Needs to implement the mechanism to know if an illegal attempt
  * has been made to write to the BIOS area.
  */
-__attribute__((weak)) void smihandler_soc_check_illegal_access(
+__weak void smihandler_soc_check_illegal_access(
 	uint32_t tco_sts)
 {
 	return;
@@ -68,13 +69,13 @@
 
 /* Mainboard overrides. */
 
-__attribute__((weak)) void mainboard_smi_gpi_handler(
+__weak void mainboard_smi_gpi_handler(
 	const struct gpi_status *sts)
 {
 	return;
 }
 
-__attribute__((weak)) void mainboard_smi_espi_handler(void)
+__weak void mainboard_smi_espi_handler(void)
 {
 	return;
 }
diff --git a/src/soc/intel/common/block/sram/sram.c b/src/soc/intel/common/block/sram/sram.c
index 49367e1..9028952 100644
--- a/src/soc/intel/common/block/sram/sram.c
+++ b/src/soc/intel/common/block/sram/sram.c
@@ -14,13 +14,14 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <intelblocks/sram.h>
 #include <soc/iomap.h>
 
-__attribute__((weak)) void soc_sram_init(struct device *dev) { /* no-op */ }
+__weak void soc_sram_init(struct device *dev) { /* no-op */ }
 
 static void sram_read_resources(struct device *dev)
 {
diff --git a/src/soc/intel/common/block/systemagent/systemagent.c b/src/soc/intel/common/block/systemagent/systemagent.c
index 25b4773..54646c9 100644
--- a/src/soc/intel/common/block/systemagent/systemagent.c
+++ b/src/soc/intel/common/block/systemagent/systemagent.c
@@ -15,6 +15,7 @@
 
 #include <arch/io.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -25,25 +26,25 @@
 #include "systemagent_def.h"
 
 /* SoC override function */
-__attribute__((weak)) void soc_systemagent_init(struct device *dev)
+__weak void soc_systemagent_init(struct device *dev)
 {
 	/* no-op */
 }
 
-__attribute__((weak)) void soc_add_fixed_mmio_resources(struct device *dev,
+__weak void soc_add_fixed_mmio_resources(struct device *dev,
 		int *resource_cnt)
 {
 	/* no-op */
 }
 
-__attribute__((weak)) int soc_get_uncore_prmmr_base_and_mask(uint64_t *base,
+__weak int soc_get_uncore_prmmr_base_and_mask(uint64_t *base,
 		uint64_t *mask)
 {
 	/* return failure for this dummy API */
 	return -1;
 }
 
-__attribute__((weak)) size_t soc_reserved_mmio_size(void)
+__weak size_t soc_reserved_mmio_size(void)
 {
 	return 0;
 }
diff --git a/src/soc/intel/common/block/uart/uart.c b/src/soc/intel/common/block/uart/uart.c
index 9f26ef1..cdbe56b 100644
--- a/src/soc/intel/common/block/uart/uart.c
+++ b/src/soc/intel/common/block/uart/uart.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/acpi.h>
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_def.h>
@@ -45,7 +46,7 @@
 	uart_lpss_init(baseaddr);
 }
 
-__attribute__((weak)) device_t pch_uart_get_debug_controller(void)
+__weak device_t pch_uart_get_debug_controller(void)
 {
 	/*
 	 * device_t can either be a pointer to struct device (e.g. ramstage) or
@@ -78,12 +79,12 @@
 
 #if ENV_RAMSTAGE
 
-__attribute__((weak)) void pch_uart_read_resources(struct device *dev)
+__weak void pch_uart_read_resources(struct device *dev)
 {
 	pci_dev_read_resources(dev);
 }
 
-__attribute__((weak)) bool pch_uart_init_debug_controller_on_resume(void)
+__weak bool pch_uart_init_debug_controller_on_resume(void)
 {
 	/* By default, do not initialize controller. */
 	return false;
diff --git a/src/soc/intel/common/block/xdci/xdci.c b/src/soc/intel/common/block/xdci/xdci.c
index 07093df..cc42f2c 100644
--- a/src/soc/intel/common/block/xdci/xdci.c
+++ b/src/soc/intel/common/block/xdci/xdci.c
@@ -15,13 +15,14 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <intelblocks/xdci.h>
 #include <security/vboot/vboot_common.h>
 
-__attribute__((weak)) void soc_xdci_init(struct device *dev) { /* no-op */ }
+__weak void soc_xdci_init(struct device *dev) { /* no-op */ }
 
 /* Only allow xDCI controller in developer mode if VBOOT is enabled */
 int xdci_can_enable(void)
diff --git a/src/soc/intel/common/block/xhci/xhci.c b/src/soc/intel/common/block/xhci/xhci.c
index e5a4f9b..737c8cf 100644
--- a/src/soc/intel/common/block/xhci/xhci.c
+++ b/src/soc/intel/common/block/xhci/xhci.c
@@ -14,13 +14,14 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <arch/io.h>
 #include <intelblocks/xhci.h>
 
-__attribute__((weak)) void soc_xhci_init(struct device *dev) { /* no-op */ }
+__weak void soc_xhci_init(struct device *dev) { /* no-op */ }
 
 static struct device_operations usb_xhci_ops = {
 	.read_resources		= &pci_dev_read_resources,
diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c
index eba7d40..3d8f2bf 100644
--- a/src/soc/intel/common/vbt.c
+++ b/src/soc/intel/common/vbt.c
@@ -14,6 +14,7 @@
  */
 
 #include <cbfs.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <arch/acpi.h>
 #include <bootmode.h>
@@ -23,7 +24,7 @@
 
 #define VBT_SIGNATURE 0x54425624
 
-__attribute__((weak))
+__weak
 const char *mainboard_vbt_filename(void)
 {
 	return "vbt.bin";
diff --git a/src/soc/intel/denverton_ns/acpi.c b/src/soc/intel/denverton_ns/acpi.c
index 7386db3..1071ab5 100644
--- a/src/soc/intel/denverton_ns/acpi.c
+++ b/src/soc/intel/denverton_ns/acpi.c
@@ -19,6 +19,7 @@
 #include <arch/acpi.h>
 #include <arch/acpigen.h>
 #include <arch/smp/mpspec.h>
+#include <compiler.h>
 #include <cpu/x86/smm.h>
 #include <string.h>
 #include <device/pci.h>
@@ -329,4 +330,4 @@
 	}
 }
 
-__attribute__((weak)) void acpi_create_serialio_ssdt(acpi_header_t *ssdt) {}
+__weak void acpi_create_serialio_ssdt(acpi_header_t *ssdt) {}
diff --git a/src/soc/intel/denverton_ns/fiamux.c b/src/soc/intel/denverton_ns/fiamux.c
index 36b8223..418ccfa 100644
--- a/src/soc/intel/denverton_ns/fiamux.c
+++ b/src/soc/intel/denverton_ns/fiamux.c
@@ -15,6 +15,7 @@
  *
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <soc/fiamux.h>
 
@@ -140,7 +141,7 @@
 	return fiamux_hob_data;
 }
 
-__attribute__((weak)) size_t mainboard_get_hsio_config(BL_HSIO_INFORMATION **p_hsio_config)
+__weak size_t mainboard_get_hsio_config(BL_HSIO_INFORMATION **p_hsio_config)
 {
 	*p_hsio_config = NULL;
 	return 0;
diff --git a/src/soc/intel/denverton_ns/romstage.c b/src/soc/intel/denverton_ns/romstage.c
index f675933..b57ffc4 100644
--- a/src/soc/intel/denverton_ns/romstage.c
+++ b/src/soc/intel/denverton_ns/romstage.c
@@ -15,6 +15,7 @@
  */
 
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/mtrr.h>
 #include <reset.h>
@@ -28,7 +29,7 @@
 #include <soc/smm.h>
 #include <soc/soc_util.h>
 
-void __attribute__((weak)) mainboard_config_gpios(void) {}
+void __weak mainboard_config_gpios(void) {}
 
 #define FSP_SMBIOS_MEMORY_INFO_GUID	\
 {	\
@@ -279,7 +280,7 @@
 	}
 }
 
-__attribute__((weak)) void mainboard_memory_init_params(FSPM_UPD *mupd)
+__weak void mainboard_memory_init_params(FSPM_UPD *mupd)
 {
 	/* Do nothing */
 }
diff --git a/src/soc/intel/fsp_baytrail/gpio.c b/src/soc/intel/fsp_baytrail/gpio.c
index 862e42b..72cf158 100644
--- a/src/soc/intel/fsp_baytrail/gpio.c
+++ b/src/soc/intel/fsp_baytrail/gpio.c
@@ -14,6 +14,7 @@
  */
 
 #include <device/pci.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <soc/gpio.h>
 #include <soc/pmc.h>
@@ -245,7 +246,7 @@
 
 }
 
-struct soc_gpio_config* __attribute__((weak)) mainboard_get_gpios(void)
+struct soc_gpio_config* __weak mainboard_get_gpios(void)
 {
 	printk(BIOS_DEBUG, "Default/empty GPIO config\n");
 	return NULL;
diff --git a/src/soc/intel/quark/gpio_i2c.c b/src/soc/intel/quark/gpio_i2c.c
index d5543b8..1a9c5ae 100644
--- a/src/soc/intel/quark/gpio_i2c.c
+++ b/src/soc/intel/quark/gpio_i2c.c
@@ -13,6 +13,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <device/device.h>
@@ -23,7 +24,7 @@
 #include <soc/ramstage.h>
 #include <soc/reg_access.h>
 
-__attribute__((weak)) void mainboard_gpio_i2c_init(device_t dev)
+__weak void mainboard_gpio_i2c_init(device_t dev)
 {
 	/* Initialize any of the GPIOs or I2C devices */
 	printk(BIOS_SPEW, "WEAK; mainboard_gpio_i2c_init\n");
diff --git a/src/soc/intel/skylake/acpi.c b/src/soc/intel/skylake/acpi.c
index 3d133f9..914b9d5 100644
--- a/src/soc/intel/skylake/acpi.c
+++ b/src/soc/intel/skylake/acpi.c
@@ -23,6 +23,7 @@
 #include <arch/smp/mpspec.h>
 #include <cbmem.h>
 #include <chip.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/cpu.h>
 #include <cpu/x86/smm.h>
@@ -707,7 +708,7 @@
 	return GPE0_REG_MAX;
 }
 
-__attribute__((weak)) void acpi_mainboard_gnvs(global_nvs_t *gnvs)
+__weak void acpi_mainboard_gnvs(global_nvs_t *gnvs)
 {
 }
 
diff --git a/src/soc/intel/skylake/chip_fsp20.c b/src/soc/intel/skylake/chip_fsp20.c
index 054ed08..6e91816 100644
--- a/src/soc/intel/skylake/chip_fsp20.c
+++ b/src/soc/intel/skylake/chip_fsp20.c
@@ -20,6 +20,7 @@
 #include <fsp/api.h>
 #include <arch/acpi.h>
 #include <chip.h>
+#include <compiler.h>
 #include <bootstate.h>
 #include <console/console.h>
 #include <device/device.h>
@@ -346,7 +347,7 @@
 }
 
 /* Mainboard GPIO Configuration */
-__attribute__((weak)) void mainboard_silicon_init_params(FSP_S_CONFIG *params)
+__weak void mainboard_silicon_init_params(FSP_S_CONFIG *params)
 {
 	printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
 }
diff --git a/src/soc/intel/skylake/romstage/romstage_fsp20.c b/src/soc/intel/skylake/romstage/romstage_fsp20.c
index 0b2d276..760dcc1e 100644
--- a/src/soc/intel/skylake/romstage/romstage_fsp20.c
+++ b/src/soc/intel/skylake/romstage/romstage_fsp20.c
@@ -18,6 +18,7 @@
 #include <arch/io.h>
 #include <arch/symbols.h>
 #include <assert.h>
+#include <compiler.h>
 #include <cpu/x86/mtrr.h>
 #include <cpu/x86/msr.h>
 #include <cbmem.h>
@@ -295,7 +296,7 @@
 	memory_cfg->SaGv = 0x02;
 }
 
-__attribute__((weak)) void mainboard_memory_init_params(FSPM_UPD *mupd)
+__weak void mainboard_memory_init_params(FSPM_UPD *mupd)
 {
 	/* Do nothing */
 }
diff --git a/src/soc/nvidia/tegra210/bootblock.c b/src/soc/nvidia/tegra210/bootblock.c
index 3d4e881..4d1ddf5 100644
--- a/src/soc/nvidia/tegra210/bootblock.c
+++ b/src/soc/nvidia/tegra210/bootblock.c
@@ -17,6 +17,7 @@
 #include <arch/hlt.h>
 #include <arch/stages.h>
 #include <bootblock_common.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <delay.h>
 #include <program_loading.h>
@@ -50,7 +51,7 @@
 	}
 }
 
-void __attribute__((weak)) bootblock_mainboard_early_init(void)
+void __weak bootblock_mainboard_early_init(void)
 {
 	/* Empty default implementation. */
 }
diff --git a/src/soc/nvidia/tegra210/funitcfg.c b/src/soc/nvidia/tegra210/funitcfg.c
index a26da86..e8d0c97 100644
--- a/src/soc/nvidia/tegra210/funitcfg.c
+++ b/src/soc/nvidia/tegra210/funitcfg.c
@@ -14,6 +14,7 @@
  */
 
 #include <arch/io.h>
+#include <compiler.h>
 #include <soc/addressmap.h>
 #include <soc/clock.h>
 #include <soc/funitcfg.h>
@@ -175,7 +176,7 @@
 	}
 }
 
-void __attribute__((weak)) usb_setup_utmip(void *usb_base)
+void __weak usb_setup_utmip(void *usb_base)
 {
 	/* default empty implementation required if usb.c is not included */
 	printk(BIOS_ERR, "USB setup is not supported in current stage\n");
diff --git a/src/soc/nvidia/tegra210/romstage.c b/src/soc/nvidia/tegra210/romstage.c
index 8fb839d..8958a6b 100644
--- a/src/soc/nvidia/tegra210/romstage.c
+++ b/src/soc/nvidia/tegra210/romstage.c
@@ -17,6 +17,7 @@
 #include <arch/stages.h>
 #include <cbfs.h>
 #include <cbmem.h>
+#include <compiler.h>
 #include <console/cbmem_console.h>
 #include <console/console.h>
 #include <lib.h>
@@ -33,7 +34,7 @@
 #include <timestamp.h>
 #include <vendorcode/google/chromeos/chromeos.h>
 
-void __attribute__((weak)) romstage_mainboard_init(void)
+void __weak romstage_mainboard_init(void)
 {
 	/* Default empty implementation. */
 }
diff --git a/src/southbridge/amd/sb700/sata.c b/src/southbridge/amd/sb700/sata.c
index 537c2c0..2045d52 100644
--- a/src/southbridge/amd/sb700/sata.c
+++ b/src/southbridge/amd/sb700/sata.c
@@ -14,6 +14,7 @@
  * GNU General Public License for more details.
  */
 
+#include <compiler.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <delay.h>
@@ -66,7 +67,7 @@
 }
 
 /* This function can be overloaded in mainboard.c */
-void __attribute__((weak)) sb7xx_51xx_setup_sata_phys(struct device *dev)
+void __weak sb7xx_51xx_setup_sata_phys(struct device *dev)
 {
 	/* RPR7.6.1 Program the PHY Global Control to 0x2C00 */
 	pci_write_config16(dev, 0x86, 0x2c00);
@@ -89,7 +90,7 @@
 }
 
 /* This function can be overloaded in mainboard.c */
-void __attribute__((weak)) sb7xx_51xx_setup_sata_port_indication(void *sata_bar5)
+void __weak sb7xx_51xx_setup_sata_port_indication(void *sata_bar5)
 {
 	uint32_t dword;
 
diff --git a/src/southbridge/intel/common/smihandler.c b/src/southbridge/intel/common/smihandler.c
index 0e372d6..17fae11 100644
--- a/src/southbridge/intel/common/smihandler.c
+++ b/src/southbridge/intel/common/smihandler.c
@@ -17,6 +17,7 @@
 #include <types.h>
 #include <arch/io.h>
 #include <arch/acpi.h>
+#include <compiler.h>
 #include <console/console.h>
 #include <cpu/x86/cache.h>
 #include <device/pci_def.h>
@@ -108,11 +109,11 @@
 	}
 }
 
-__attribute__((weak)) void southbridge_gate_memory_reset(void)
+__weak void southbridge_gate_memory_reset(void)
 {
 }
 
-__attribute__((weak)) void southbridge_smm_xhci_sleep(u8 slp_type)
+__weak void southbridge_smm_xhci_sleep(u8 slp_type)
 {
 }
 
diff --git a/src/southbridge/via/vt8237r/ide.c b/src/southbridge/via/vt8237r/ide.c
index 4579171..e500c2c 100644
--- a/src/southbridge/via/vt8237r/ide.c
+++ b/src/southbridge/via/vt8237r/ide.c
@@ -15,6 +15,7 @@
 
 /* Based on other VIA SB code. */
 
+#include <compiler.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -25,7 +26,7 @@
 /**
  * Cable type detect function, weak so it can be overloaded in mainboard.c
  */
-u32 __attribute__((weak)) vt8237_ide_80pin_detect(struct device *dev)
+u32 __weak vt8237_ide_80pin_detect(struct device *dev)
 {
 	struct southbridge_via_vt8237r_config *sb =
 	    (struct southbridge_via_vt8237r_config *)dev->chip_info;