aboutsummaryrefslogtreecommitdiff
path: root/gdb/defs.h
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2003-09-19 16:22:39 +0000
committerAndrew Cagney <cagney@redhat.com>2003-09-19 16:22:39 +0000
commit5b03f2662bf6d0e139ee4fbd089723a2e1b3deee (patch)
tree63386ca80e67a51370f3a6dc04673d74b8e27e13 /gdb/defs.h
parent9f6c1c4b8b74fd670fc2af651dd5df989e109779 (diff)
downloadgdb-5b03f2662bf6d0e139ee4fbd089723a2e1b3deee.zip
gdb-5b03f2662bf6d0e139ee4fbd089723a2e1b3deee.tar.gz
gdb-5b03f2662bf6d0e139ee4fbd089723a2e1b3deee.tar.bz2
2003-09-19 Andrew Cagney <cagney@redhat.com>
* utils.c (align_up, align_down): New functions. * defs.h (align_up, align_down): Declare. * ppc-sysv-tdep.c (align_up, align_down): Delete functions. * s390-tdep.c: Replace "round_up" and "round_down" with "align_up" and "align_down". (round_up, round_down): Delete functions. * mips-tdep.c: Replace ROUND_UP and ROUND_DOWN with "align_up" and "align_down". (ROUND_DOWN, ROUND_UP): Delete macros. (mips_dump_tdep): Do not print "ROUND_UP" or "ROUND_DOWN". * h8300-tdep.c: Replace "round_up" and "round_down" with "align_up" and "align_down". (round_up, round_down): Delete macros. * frv-tdep.c: Replace ROUND_UP and ROUND_DOWN with "align_up" and "align_down". (ROUND_UP, ROUND_DOWN): Delete macros.
Diffstat (limited to 'gdb/defs.h')
-rw-r--r--gdb/defs.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/gdb/defs.h b/gdb/defs.h
index 842f4d8..696ee5b 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -1264,4 +1264,36 @@ extern int use_windows;
#define ISATTY(FP) (isatty (fileno (FP)))
#endif
+/* Ensure that V is aligned to an N byte boundary (B's assumed to be a
+ power of 2). Round up/down when necessary. Examples of correct
+ use include:
+
+ addr = align_up (addr, 8); -- VALUE needs 8 byte alignment
+ write_memory (addr, value, len);
+ addr += len;
+
+ and:
+
+ sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned
+ write_memory (sp, value, len);
+
+ Note that uses such as:
+
+ write_memory (addr, value, len);
+ addr += align_up (len, 8);
+
+ and:
+
+ sp -= align_up (len, 8);
+ write_memory (sp, value, len);
+
+ are typically not correct as they don't ensure that the address (SP
+ or ADDR) is correctly aligned (relying on previous alignment to
+ keep things right). This is also why the methods are called
+ "align_..." instead of "round_..." as the latter reads better with
+ this incorrect coding style. */
+
+extern ULONGEST align_up (ULONGEST v, int n);
+extern ULONGEST align_down (ULONGEST v, int n);
+
#endif /* #ifndef DEFS_H */