mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-03 12:31:32 -08:00
Default to stack objects on DOS_NT platforms as well.
src/w32term.h (ALIGN_STACK) [__GNUC__]: Define to __attribute__((force_align_arg_pointer)) for GCC 4.2 and later. src/lisp.h (USE_STACK_LISP_OBJECTS): Remove the !DOS_NT condition. src/w32proc.c (enum_locale_fn, enum_codepage_fn): Add the ALIGN_STACK attribute. src/w32fns.c (w32_monitor_enum): Add the ALIGN_STACK attribute. src/w32uniscribe.c (add_opentype_font_name_to_list): Add the ALIGN_STACK attribute. src/w32font.c (add_font_name_to_list, add_font_entity_to_list) (add_one_font_entity_to_list): Add the ALIGN_STACK attribute.
This commit is contained in:
parent
340e4cce7a
commit
db61bdb139
7 changed files with 57 additions and 24 deletions
|
|
@ -1,3 +1,22 @@
|
|||
2014-09-25 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
Default to stack objects on DOS_NT platforms as well.
|
||||
* w32term.h (ALIGN_STACK) [__GNUC__]: Define to
|
||||
__attribute__((force_align_arg_pointer)) for GCC 4.2 and later.
|
||||
|
||||
* lisp.h (USE_STACK_LISP_OBJECTS): Remove the !DOS_NT condition.
|
||||
|
||||
* w32proc.c (enum_locale_fn, enum_codepage_fn): Add the
|
||||
ALIGN_STACK attribute.
|
||||
|
||||
* w32fns.c (w32_monitor_enum): Add the ALIGN_STACK attribute.
|
||||
|
||||
* w32uniscribe.c (add_opentype_font_name_to_list): Add the
|
||||
ALIGN_STACK attribute.
|
||||
|
||||
* w32font.c (add_font_name_to_list, add_font_entity_to_list)
|
||||
(add_one_font_entity_to_list): Add the ALIGN_STACK attribute.
|
||||
|
||||
2014-09-25 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frame.c (frame_inhibit_resize):
|
||||
|
|
|
|||
|
|
@ -282,12 +282,10 @@ error !;
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* This should work with GCC on non-DOS_NT. Clang has known problems; see
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00506.html.
|
||||
Also http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00422.html
|
||||
describes an issue with 32-bit MS-Windows. */
|
||||
/* This should work with GCC. Clang has known problems; see
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00506.html. */
|
||||
#ifndef USE_STACK_LISP_OBJECTS
|
||||
# if defined __GNUC__ && !defined __clang__ && !defined DOS_NT
|
||||
# if defined __GNUC__ && !defined __clang__
|
||||
# define USE_STACK_LISP_OBJECTS true
|
||||
# else
|
||||
# define USE_STACK_LISP_OBJECTS false
|
||||
|
|
|
|||
|
|
@ -5012,7 +5012,7 @@ If omitted or nil, that stands for the selected frame's display. */)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
static BOOL CALLBACK
|
||||
static BOOL CALLBACK ALIGN_STACK
|
||||
w32_monitor_enum (HMONITOR monitor, HDC hdc, RECT *rcMonitor, LPARAM dwData)
|
||||
{
|
||||
Lisp_Object *monitor_list = (Lisp_Object *) dwData;
|
||||
|
|
|
|||
|
|
@ -115,15 +115,15 @@ static void compute_metrics (HDC, struct w32font_info *, unsigned int,
|
|||
static Lisp_Object w32_registry (LONG, DWORD);
|
||||
|
||||
/* EnumFontFamiliesEx callbacks. */
|
||||
static int CALLBACK add_font_entity_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK add_one_font_entity_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK add_font_name_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK ALIGN_STACK add_font_entity_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK ALIGN_STACK add_one_font_entity_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK ALIGN_STACK add_font_name_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
|
||||
/* struct passed in as LPARAM arg to EnumFontFamiliesEx, for keeping track
|
||||
of what we really want. */
|
||||
|
|
@ -1000,7 +1000,7 @@ w32font_open_internal (struct frame *f, Lisp_Object font_entity,
|
|||
|
||||
/* Callback function for EnumFontFamiliesEx.
|
||||
* Adds the name of a font to a Lisp list (passed in as the lParam arg). */
|
||||
static int CALLBACK
|
||||
static int CALLBACK ALIGN_STACK
|
||||
add_font_name_to_list (ENUMLOGFONTEX *logical_font,
|
||||
NEWTEXTMETRICEX *physical_font,
|
||||
DWORD font_type, LPARAM list_object)
|
||||
|
|
@ -1446,7 +1446,7 @@ check_face_name (LOGFONT *font, char *full_name)
|
|||
* and if so, adds it to a list. Both the data we are checking against
|
||||
* and the list to which the fonts are added are passed in via the
|
||||
* lparam argument, in the form of a font_callback_data struct. */
|
||||
static int CALLBACK
|
||||
static int CALLBACK ALIGN_STACK
|
||||
add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
|
||||
NEWTEXTMETRICEX *physical_font,
|
||||
DWORD font_type, LPARAM lParam)
|
||||
|
|
@ -1565,7 +1565,7 @@ add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
|
|||
|
||||
/* Callback function for EnumFontFamiliesEx.
|
||||
* Terminates the search once we have a match. */
|
||||
static int CALLBACK
|
||||
static int CALLBACK ALIGN_STACK
|
||||
add_one_font_entity_to_list (ENUMLOGFONTEX *logical_font,
|
||||
NEWTEXTMETRICEX *physical_font,
|
||||
DWORD font_type, LPARAM lParam)
|
||||
|
|
|
|||
|
|
@ -2909,7 +2909,7 @@ int_from_hex (char * s)
|
|||
function isn't given a context pointer. */
|
||||
Lisp_Object Vw32_valid_locale_ids;
|
||||
|
||||
static BOOL CALLBACK
|
||||
static BOOL CALLBACK ALIGN_STACK
|
||||
enum_locale_fn (LPTSTR localeNum)
|
||||
{
|
||||
DWORD id = int_from_hex (localeNum);
|
||||
|
|
@ -2973,7 +2973,7 @@ If successful, the new locale id is returned, otherwise nil. */)
|
|||
function isn't given a context pointer. */
|
||||
Lisp_Object Vw32_valid_codepages;
|
||||
|
||||
static BOOL CALLBACK
|
||||
static BOOL CALLBACK ALIGN_STACK
|
||||
enum_codepage_fn (LPTSTR codepageNum)
|
||||
{
|
||||
DWORD id = atoi (codepageNum);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,22 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#include "frame.h"
|
||||
#include "atimer.h"
|
||||
|
||||
/* Stack alignment stuff. Every CALLBACK function should have the
|
||||
ALIGN_STACK attribute if it manipulates Lisp objects, because
|
||||
Windows x86 32-bit ABI only guarantees 4-byte stack alignment, and
|
||||
that is what we will get when a Windows function calls us. The
|
||||
ALIGN_STACK attribute forces GCC to emit a preamble code to
|
||||
re-align the stack at function entry. Further details about this
|
||||
can be found in http://www.peterstock.co.uk/games/mingw_sse/. */
|
||||
#ifdef __GNUC__
|
||||
# if defined USE_STACK_LISP_OBJECTS && defined _W64 \
|
||||
&& __GNUC__ + (__GNUC_MINOR__ > 1) >= 5
|
||||
# define ALIGN_STACK __attribute__((force_align_arg_pointer))
|
||||
# else
|
||||
# define ALIGN_STACK
|
||||
# endif /* USE_STACK_LISP_OBJECTS */
|
||||
#endif
|
||||
|
||||
|
||||
#define BLACK_PIX_DEFAULT(f) PALETTERGB(0,0,0)
|
||||
#define WHITE_PIX_DEFAULT(f) PALETTERGB(255,255,255)
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@ extern Lisp_Object Quniscribe;
|
|||
extern Lisp_Object Qopentype;
|
||||
|
||||
/* EnumFontFamiliesEx callback. */
|
||||
static int CALLBACK add_opentype_font_name_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
static int CALLBACK ALIGN_STACK add_opentype_font_name_to_list (ENUMLOGFONTEX *,
|
||||
NEWTEXTMETRICEX *,
|
||||
DWORD, LPARAM);
|
||||
/* Used by uniscribe_otf_capability. */
|
||||
static Lisp_Object otf_features (HDC context, char *table);
|
||||
|
||||
|
|
@ -613,7 +613,7 @@ uniscribe_encode_char (struct font *font, int c)
|
|||
/* Callback function for EnumFontFamiliesEx.
|
||||
Adds the name of opentype fonts to a Lisp list (passed in as the
|
||||
lParam arg). */
|
||||
static int CALLBACK
|
||||
static int CALLBACK ALIGN_STACK
|
||||
add_opentype_font_name_to_list (ENUMLOGFONTEX *logical_font,
|
||||
NEWTEXTMETRICEX *physical_font,
|
||||
DWORD font_type, LPARAM list_object)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue