From bc85368cdd311fe68ffcf251e7e8e90c14f8a9dc Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 21 Mar 2018 16:47:33 +0200 Subject: [librm] Ensure that inline code symbols are unique Commit 6149e0a ("[librm] Provide symbols for inline code placed into other sections") may cause build failures due to duplicate label names if the compiler chooses to duplicate inline assembly code. Fix by using the "%=" special format string to include a guaranteed-unique number within the label name. The "%=" will be expanded only if constraints exist for the inline assembly. This fix therefore requires that all REAL_CODE() fragments use a (possibly empty) constraint list. Signed-off-by: Michael Brown --- src/arch/x86/interface/pcbios/bios_console.c | 4 ++-- src/arch/x86/interface/pcbios/bios_reboot.c | 2 +- src/arch/x86/interface/syslinux/comboot_call.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/arch/x86/interface') diff --git a/src/arch/x86/interface/pcbios/bios_console.c b/src/arch/x86/interface/pcbios/bios_console.c index 81e3a7d7e..08fa6d036 100644 --- a/src/arch/x86/interface/pcbios/bios_console.c +++ b/src/arch/x86/interface/pcbios/bios_console.c @@ -521,12 +521,12 @@ static void bios_inject_startup ( void ) { __asm__ __volatile__ ( TEXT16_CODE ( "\nint16_wrapper:\n\t" "pushfw\n\t" - "cmpb $0, %cs:bios_inject_lock\n\t" + "cmpb $0, %%cs:bios_inject_lock\n\t" "jnz 1f\n\t" VIRT_CALL ( bios_inject ) "\n1:\n\t" "popfw\n\t" - "ljmp *%cs:int16_vector\n\t" ) ); + "ljmp *%%cs:int16_vector\n\t" ) : ); /* Hook INT 16 */ hook_bios_interrupt ( 0x16, ( ( intptr_t ) int16_wrapper ), diff --git a/src/arch/x86/interface/pcbios/bios_reboot.c b/src/arch/x86/interface/pcbios/bios_reboot.c index c6c5a5a91..071173f19 100644 --- a/src/arch/x86/interface/pcbios/bios_reboot.c +++ b/src/arch/x86/interface/pcbios/bios_reboot.c @@ -48,7 +48,7 @@ static void bios_reboot ( int warm ) { put_real ( flag, BDA_SEG, BDA_REBOOT ); /* Jump to system reset vector */ - __asm__ __volatile__ ( REAL_CODE ( "ljmp $0xf000, $0xfff0" ) ); + __asm__ __volatile__ ( REAL_CODE ( "ljmp $0xf000, $0xfff0" ) : ); } /** diff --git a/src/arch/x86/interface/syslinux/comboot_call.c b/src/arch/x86/interface/syslinux/comboot_call.c index 2f5c252c1..e70f200e3 100644 --- a/src/arch/x86/interface/syslinux/comboot_call.c +++ b/src/arch/x86/interface/syslinux/comboot_call.c @@ -663,7 +663,7 @@ void hook_comboot_interrupts ( ) { VIRT_CALL ( int20 ) "clc\n\t" "call patch_cf\n\t" - "iret\n\t" ) ); + "iret\n\t" ) : ); hook_bios_interrupt ( 0x20, ( intptr_t ) int20_wrapper, &int20_vector ); @@ -672,7 +672,7 @@ void hook_comboot_interrupts ( ) { VIRT_CALL ( int21 ) "clc\n\t" "call patch_cf\n\t" - "iret\n\t" ) ); + "iret\n\t" ) : ); hook_bios_interrupt ( 0x21, ( intptr_t ) int21_wrapper, &int21_vector ); @@ -681,7 +681,7 @@ void hook_comboot_interrupts ( ) { VIRT_CALL ( int22 ) "clc\n\t" "call patch_cf\n\t" - "iret\n\t" ) ); + "iret\n\t" ) : ); hook_bios_interrupt ( 0x22, ( intptr_t ) int22_wrapper, &int22_vector ); } -- cgit v1.2.3-55-g7522