mirror of
https://git.freebsd.org/ports.git
synced 2025-07-04 02:49:14 -04:00
47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
From 08caa8be3a143d6f33782f398b7937efb39ff283 Mon Sep 17 00:00:00 2001
|
|
From: Justin Cano <5184128+jstncno@users.noreply.github.com>
|
|
Date: Thu, 3 Aug 2023 09:58:11 -0700
|
|
Subject: [PATCH] Use the right sized register for the push operand based on
|
|
the size of the value being pushed
|
|
|
|
Fixes https://github.com/ipxe/ipxe/issues/997
|
|
---
|
|
src/arch/x86/include/librm.h | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git src/arch/x86/include/librm.h src/arch/x86/include/librm.h
|
|
index 5196d390..d9e748ad 100644
|
|
--- arch/x86/include/librm.h
|
|
+++ arch/x86/include/librm.h
|
|
@@ -250,8 +250,10 @@ extern void remove_user_from_rm_stack ( userptr_t data, size_t size );
|
|
/* CODE_DEFAULT: restore default .code32/.code64 directive */
|
|
#ifdef __x86_64__
|
|
#define CODE_DEFAULT ".code64"
|
|
+#define PUSH "pushq"
|
|
#else
|
|
#define CODE_DEFAULT ".code32"
|
|
+#define PUSH "pushl"
|
|
#endif
|
|
|
|
/* LINE_SYMBOL: declare a symbol for the current source code line */
|
|
@@ -268,7 +270,7 @@ extern void remove_user_from_rm_stack ( userptr_t data, size_t size );
|
|
|
|
/* REAL_CODE: declare a fragment of code that executes in real mode */
|
|
#define REAL_CODE( asm_code_str ) \
|
|
- "push $1f\n\t" \
|
|
+ PUSH " $1f\n\t" \
|
|
"call real_call\n\t" \
|
|
TEXT16_CODE ( "\n1:\n\t" \
|
|
asm_code_str \
|
|
@@ -277,7 +279,7 @@ extern void remove_user_from_rm_stack ( userptr_t data, size_t size );
|
|
|
|
/* PHYS_CODE: declare a fragment of code that executes in flat physical mode */
|
|
#define PHYS_CODE( asm_code_str ) \
|
|
- "push $1f\n\t" \
|
|
+ PUSH " $1f\n\t" \
|
|
"call phys_call\n\t" \
|
|
".section \".text.phys\", \"ax\", @progbits\n\t"\
|
|
"\n" LINE_SYMBOL "\n\t" \
|
|
--
|
|
2.41.0
|
|
|