diff options
| author | Paul Eggert | 2018-03-20 09:54:20 -0700 |
|---|---|---|
| committer | Paul Eggert | 2018-03-20 14:39:12 -0700 |
| commit | d09c488cb5f4cdf8d47b1e69f5fc7ac0750d7cbe (patch) | |
| tree | f6c1d7d96cfd4d1dfb927100668104155ac8f031 /src/alloc.c | |
| parent | 23527013c79607ba19536ccce85725a91b0033a5 (diff) | |
| download | emacs-d09c488cb5f4cdf8d47b1e69f5fc7ac0750d7cbe.tar.gz emacs-d09c488cb5f4cdf8d47b1e69f5fc7ac0750d7cbe.zip | |
Port to 32-bit sparc64
Backport from master.
Problem reported by Ulrich Mueller; fix suggested by Eli Zaretskii
and Andreas Schwab (Bug#30855).
* src/alloc.c (mark_memory): Call mark_maybe_object only on
pointers that are properly aligned for Lisp_Object.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/alloc.c b/src/alloc.c index 9d0e2d37e3c..c3f7920ed87 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -4983,7 +4983,11 @@ mark_memory (void *start, void *end) | |||
| 4983 | for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT) | 4983 | for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT) |
| 4984 | { | 4984 | { |
| 4985 | mark_maybe_pointer (*(void **) pp); | 4985 | mark_maybe_pointer (*(void **) pp); |
| 4986 | mark_maybe_object (*(Lisp_Object *) pp); | 4986 | |
| 4987 | verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0); | ||
| 4988 | if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT | ||
| 4989 | || (uintptr_t) pp % alignof (Lisp_Object) == 0) | ||
| 4990 | mark_maybe_object (*(Lisp_Object *) pp); | ||
| 4987 | } | 4991 | } |
| 4988 | } | 4992 | } |
| 4989 | 4993 | ||